forked from OSchip/llvm-project
Attach attribute "disable-tail-calls" to the functions in the IR.
This commit adds back the code that seems to have been dropped unintentionally in r176985. rdar://problem/13752163 Differential Revision: http://reviews.llvm.org/D10100 llvm-svn: 239426
This commit is contained in:
parent
7fef2f5206
commit
262a4c4ec0
|
@ -283,7 +283,6 @@ void EmitAssemblyHelper::CreatePasses() {
|
|||
PMBuilder.SLPVectorize = CodeGenOpts.VectorizeSLP;
|
||||
PMBuilder.LoopVectorize = CodeGenOpts.VectorizeLoop;
|
||||
|
||||
PMBuilder.DisableTailCalls = CodeGenOpts.DisableTailCalls;
|
||||
PMBuilder.DisableUnitAtATime = !CodeGenOpts.UnitAtATime;
|
||||
PMBuilder.DisableUnrollLoops = !CodeGenOpts.UnrollLoops;
|
||||
PMBuilder.MergeFunctions = CodeGenOpts.MergeFunctions;
|
||||
|
@ -521,7 +520,6 @@ TargetMachine *EmitAssemblyHelper::CreateTargetMachine(bool MustCreateTM) {
|
|||
Options.NoZerosInBSS = CodeGenOpts.NoZeroInitializedInBSS;
|
||||
Options.UnsafeFPMath = CodeGenOpts.UnsafeFPMath;
|
||||
Options.StackAlignmentOverride = CodeGenOpts.StackAlignment;
|
||||
Options.DisableTailCalls = CodeGenOpts.DisableTailCalls;
|
||||
Options.TrapFuncName = CodeGenOpts.TrapFuncName;
|
||||
Options.PositionIndependentExecutable = LangOpts.PIELevel != 0;
|
||||
Options.FunctionSections = CodeGenOpts.FunctionSections;
|
||||
|
|
|
@ -1465,6 +1465,8 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI,
|
|||
FuncAttrs.addAttribute("no-frame-pointer-elim-non-leaf");
|
||||
}
|
||||
|
||||
FuncAttrs.addAttribute("disable-tail-calls",
|
||||
llvm::toStringRef(CodeGenOpts.DisableTailCalls));
|
||||
FuncAttrs.addAttribute("less-precise-fpmad",
|
||||
llvm::toStringRef(CodeGenOpts.LessPreciseFPMAD));
|
||||
FuncAttrs.addAttribute("no-infs-fp-math",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// RUN: %clang_cc1 -std=c99 %s -emit-llvm -o - | FileCheck %s
|
||||
// CHECK: @Test
|
||||
// CHECK-NOT: call
|
||||
// CHECK-NOT: call{{ }}
|
||||
|
||||
_Bool A, B, C, D, E, F;
|
||||
void TestF(float X, float Y) {
|
||||
|
|
|
@ -28,11 +28,11 @@ __attribute__((interrupt("UNDEF"))) void test_undef_interrupt() {
|
|||
// CHECK: define arm_aapcscc void @test_undef_interrupt() [[UNDEF_ATTR:#[0-9]+]]
|
||||
}
|
||||
|
||||
// CHECK: attributes [[GENERIC_ATTR]] = { nounwind alignstack=8 {{"interrupt"[^=]}}
|
||||
// CHECK: attributes [[IRQ_ATTR]] = { nounwind alignstack=8 "interrupt"="IRQ"
|
||||
// CHECK: attributes [[FIQ_ATTR]] = { nounwind alignstack=8 "interrupt"="FIQ"
|
||||
// CHECK: attributes [[SWI_ATTR]] = { nounwind alignstack=8 "interrupt"="SWI"
|
||||
// CHECK: attributes [[ABORT_ATTR]] = { nounwind alignstack=8 "interrupt"="ABORT"
|
||||
// CHECK: attributes [[UNDEF_ATTR]] = { nounwind alignstack=8 "interrupt"="UNDEF"
|
||||
// CHECK: attributes [[GENERIC_ATTR]] = { {{.*}} {{"interrupt"[^=]}}
|
||||
// CHECK: attributes [[IRQ_ATTR]] = { {{.*}} "interrupt"="IRQ"
|
||||
// CHECK: attributes [[FIQ_ATTR]] = { {{.*}} "interrupt"="FIQ"
|
||||
// CHECK: attributes [[SWI_ATTR]] = { {{.*}} "interrupt"="SWI"
|
||||
// CHECK: attributes [[ABORT_ATTR]] = { {{.*}} "interrupt"="ABORT"
|
||||
// CHECK: attributes [[UNDEF_ATTR]] = { {{.*}} "interrupt"="UNDEF"
|
||||
|
||||
// CHECK-APCS: attributes [[GENERIC_ATTR]] = { nounwind "interrupt"
|
||||
// CHECK-APCS: attributes [[GENERIC_ATTR]] = { {{.*}} "interrupt"
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
// RUN: %clang_cc1 -triple x86_64-apple-macosx10.7.0 %s -emit-llvm -mdisable-tail-calls -o - | FileCheck %s -check-prefix=CHECK -check-prefix=DISABLE
|
||||
// RUN: %clang_cc1 -triple x86_64-apple-macosx10.7.0 %s -emit-llvm -o - | FileCheck %s -check-prefix=CHECK -check-prefix=ENABLE
|
||||
|
||||
// CHECK: define i32 @f1() [[ATTR:#[0-9]+]] {
|
||||
|
||||
int f1() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// DISABLE: attributes [[ATTR]] = { {{.*}} "disable-tail-calls"="true" {{.*}} }
|
||||
// ENABLE: attributes [[ATTR]] = { {{.*}} "disable-tail-calls"="false" {{.*}} }
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
// CHECK-LABEL: define internal void @_GLOBAL__sub_I_ctor_globalopt.cpp()
|
||||
// CHECK: call void @
|
||||
// CHECK-NOT: call
|
||||
// CHECK-NOT: call{{ }}
|
||||
|
||||
// O1: @llvm.global_ctors = appending global [0 x { i32, void ()*, i8* }] zeroinitializer
|
||||
|
||||
|
|
Loading…
Reference in New Issue