Replace the "NoFramePointerElimNonLeaf" target option with a function attribute.
authorBill Wendling <isanbard@gmail.com>
Thu, 25 Jul 2013 00:32:41 +0000 (00:32 +0000)
committerBill Wendling <isanbard@gmail.com>
Thu, 25 Jul 2013 00:32:41 +0000 (00:32 +0000)
llvm-svn: 187092

clang/lib/CodeGen/BackendUtil.cpp
clang/lib/CodeGen/CGCall.cpp

index 04355e2..1bf4918 100644 (file)
@@ -412,13 +412,10 @@ TargetMachine *EmitAssemblyHelper::CreateTargetMachine(bool MustCreateTM) {
   // Set frame pointer elimination mode.
   if (!CodeGenOpts.DisableFPElim) {
     Options.NoFramePointerElim = false;
-    Options.NoFramePointerElimNonLeaf = false;
   } else if (CodeGenOpts.OmitLeafFramePointer) {
     Options.NoFramePointerElim = false;
-    Options.NoFramePointerElimNonLeaf = true;
   } else {
     Options.NoFramePointerElim = true;
-    Options.NoFramePointerElimNonLeaf = true;
   }
 
   if (CodeGenOpts.UseInitArray)
index 0a202ef..9a38771 100644 (file)
@@ -1072,6 +1072,18 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI,
                            CodeGenOpts.SoftFloat ? "true" : "false");
     FuncAttrs.addAttribute("stack-protector-buffer-size",
                            llvm::utostr(CodeGenOpts.SSPBufferSize));
+
+    bool NoFramePointerElimNonLeaf;
+    if (!CodeGenOpts.DisableFPElim) {
+      NoFramePointerElimNonLeaf = false;
+    } else if (CodeGenOpts.OmitLeafFramePointer) {
+      NoFramePointerElimNonLeaf = true;
+    } else {
+      NoFramePointerElimNonLeaf = true;
+    }
+
+    FuncAttrs.addAttribute("no-frame-pointer-elim-non-leaf",
+                           NoFramePointerElimNonLeaf ? "true" : "false");
   }
 
   QualType RetTy = FI.getReturnType();