]> granicus.if.org Git - clang/commitdiff
Update Clang for LLVM split stack API changes in r205997
authorReid Kleckner <reid@kleckner.net>
Thu, 10 Apr 2014 22:59:13 +0000 (22:59 +0000)
committerReid Kleckner <reid@kleckner.net>
Thu, 10 Apr 2014 22:59:13 +0000 (22:59 +0000)
Patch by Alex Crichton!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205998 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/BackendUtil.cpp
lib/CodeGen/CGCall.cpp
test/CodeGen/split-stacks.c [new file with mode: 0644]

index 17f5f4d63366324a4ac021a19818b86e2d197b96..f0b3cdc50a4cbcae0f9847887af58697e72c1431 100644 (file)
@@ -491,7 +491,6 @@ TargetMachine *EmitAssemblyHelper::CreateTargetMachine(bool MustCreateTM) {
   Options.DisableTailCalls = CodeGenOpts.DisableTailCalls;
   Options.TrapFuncName = CodeGenOpts.TrapFuncName;
   Options.PositionIndependentExecutable = LangOpts.PIELevel != 0;
-  Options.EnableSegmentedStacks = CodeGenOpts.EnableSegmentedStacks;
 
   TargetMachine *TM = TheTarget->createTargetMachine(Triple, TargetOpts.CPU,
                                                      FeaturesStr, Options,
index ca8b99a3cbdf3eeb45deb573b91f92d756405ef0..e82b6defa6b9ac0e7db16d7109ab6e7d5c648393 100644 (file)
@@ -1090,6 +1090,8 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI,
     FuncAttrs.addAttribute(llvm::Attribute::NoRedZone);
   if (CodeGenOpts.NoImplicitFloat)
     FuncAttrs.addAttribute(llvm::Attribute::NoImplicitFloat);
+  if (CodeGenOpts.EnableSegmentedStacks)
+    FuncAttrs.addAttribute("split-stack");
 
   if (AttrOnCallSite) {
     // Attributes that should go on the call site only.
diff --git a/test/CodeGen/split-stacks.c b/test/CodeGen/split-stacks.c
new file mode 100644 (file)
index 0000000..9811246
--- /dev/null
@@ -0,0 +1,18 @@
+// RUN: %clang -target x86_64-linux-gnu -fsplit-stack -S %s -emit-llvm -o - | FileCheck -check-prefix=CHECK-SEGSTK %s
+// RUN: %clang -target x86_64-linux-gnu -S %s -emit-llvm -o - | FileCheck -check-prefix=CHECK-NOSEGSTK %s
+
+int foo() {
+  return 0;
+}
+
+int main() {
+  return foo();
+}
+
+// CHECK-SEGSTK: define i32 @foo() #0 {
+// CHECK-SEGSTK: define i32 @main() #0 {
+// CHECK-SEGSTK: #0 = { {{.*}} "split-stack" {{.*}} }
+
+// CHECK-NOSEGSTK: define i32 @foo() #0 {
+// CHECK-NOSEGSTK: define i32 @main() #0 {
+// CHECK-NOSEGSTK-NOT: #0 = { {{.*}} "split-stack" {{.*}} }