Remove NoFramePointerElim and NoFramePointerElimOverride from TargetOptions and
authorAkira Hatanaka <ahatanaka@apple.com>
Tue, 26 May 2015 20:17:20 +0000 (20:17 +0000)
committerAkira Hatanaka <ahatanaka@apple.com>
Tue, 26 May 2015 20:17:20 +0000 (20:17 +0000)
remove ExecutionEngine's dependence on CodeGen. NFC.

This is a follow-up to r238080.

Differential Revision: http://reviews.llvm.org/D9830

llvm-svn: 238244

llvm/include/llvm/CodeGen/CommandFlags.h
llvm/include/llvm/Target/TargetOptions.h
llvm/lib/CodeGen/TargetOptionsImpl.cpp
llvm/lib/ExecutionEngine/ExecutionEngineBindings.cpp
llvm/lib/ExecutionEngine/LLVMBuild.txt
llvm/tools/llc/llc.cpp
llvm/tools/opt/opt.cpp

index a58c2de..a1b9b4e 100644 (file)
@@ -229,8 +229,6 @@ JTableType("jump-table-type",
 static inline TargetOptions InitTargetOptionsFromCodeGenFlags() {
   TargetOptions Options;
   Options.LessPreciseFPMADOption = EnableFPMAD;
-  Options.NoFramePointerElim = DisableFPElim;
-  Options.NoFramePointerElimOverride = DisableFPElim.getNumOccurrences() > 0;
   Options.AllowFPOpFusion = FuseFPOps;
   Options.UnsafeFPMath = EnableUnsafeFPMath;
   Options.NoInfsFPMath = EnableNoInfsFPMath;
@@ -288,4 +286,31 @@ static inline std::string getFeaturesStr() {
   return Features.getString();
 }
 
+/// \brief Set function attributes of functions in Module M based on CPU,
+/// Features, and command line flags.
+static inline void setFunctionAttributes(StringRef CPU, StringRef Features,
+                                         Module &M) {
+  for (auto &F : M) {
+    auto &Ctx = F.getContext();
+    AttributeSet Attrs = F.getAttributes(), NewAttrs;
+
+    if (!CPU.empty())
+      NewAttrs = NewAttrs.addAttribute(Ctx, AttributeSet::FunctionIndex,
+                                       "target-cpu", CPU);
+
+    if (!Features.empty())
+      NewAttrs = NewAttrs.addAttribute(Ctx, AttributeSet::FunctionIndex,
+                                       "target-features", Features);
+
+    if (DisableFPElim.getNumOccurrences() > 0)
+      NewAttrs = NewAttrs.addAttribute(Ctx, AttributeSet::FunctionIndex,
+                                       "no-frame-pointer-elim",
+                                       DisableFPElim ? "true" : "false");
+
+    // Let NewAttrs override Attrs.
+    NewAttrs = Attrs.addAttributes(Ctx, AttributeSet::FunctionIndex, NewAttrs);
+    F.setAttributes(NewAttrs);
+  }
+}
+
 #endif
index 435a0fd..07a8f6d 100644 (file)
@@ -60,8 +60,7 @@ namespace llvm {
   class TargetOptions {
   public:
     TargetOptions()
-        : PrintMachineCode(false), NoFramePointerElim(false),
-          NoFramePointerElimOverride(false),
+        : PrintMachineCode(false),
           LessPreciseFPMADOption(false), UnsafeFPMath(false),
           NoInfsFPMath(false), NoNaNsFPMath(false),
           HonorSignDependentRoundingFPMathOption(false),
@@ -81,14 +80,6 @@ namespace llvm {
     /// output from the code generator.
     unsigned PrintMachineCode : 1;
 
-    /// NoFramePointerElim - This flag is enabled when the -disable-fp-elim is
-    /// specified on the command line.  If the target supports the frame pointer
-    /// elimination optimization, this option should disable it.
-    unsigned NoFramePointerElim : 1;
-
-    /// This flag is true when "disable-fp-elim" appeared on the command line.
-    unsigned NoFramePointerElimOverride : 1;
-
     /// DisableFramePointerElim - This returns true if frame pointer elimination
     /// optimization should be disabled for the given machine function.
     bool DisableFramePointerElim(const MachineFunction &MF) const;
@@ -227,15 +218,6 @@ namespace llvm {
     MCTargetOptions MCOptions;
   };
 
-/// \brief Set function attributes of functions in Module M based on CPU,
-/// Features, and Options.
-/// If AlwaysRecordAttrs is true, it will always record the function attributes
-/// in Options regardless of whether those attributes were specified on the
-/// tool's command line.
-void setFunctionAttributes(StringRef CPU, StringRef Features,
-                           const TargetOptions &Options, Module &M,
-                           bool AlwaysRecordAttrs);
-
 // Comparison operators:
 
 
index 9d1c27e..f4926cb 100644 (file)
@@ -54,30 +54,3 @@ bool TargetOptions::HonorSignDependentRoundingFPMath() const {
 StringRef TargetOptions::getTrapFunctionName() const {
   return TrapFuncName;
 }
-
-
-void llvm::setFunctionAttributes(StringRef CPU, StringRef Features,
-                                 const TargetOptions &Options, Module &M,
-                                 bool AlwaysRecordAttrs) {
-  for (auto &F : M) {
-    auto &Ctx = F.getContext();
-    AttributeSet Attrs = F.getAttributes(), NewAttrs;
-
-    if (!CPU.empty())
-      NewAttrs = NewAttrs.addAttribute(Ctx, AttributeSet::FunctionIndex,
-                                       "target-cpu", CPU);
-
-    if (!Features.empty())
-      NewAttrs = NewAttrs.addAttribute(Ctx, AttributeSet::FunctionIndex,
-                                       "target-features", Features);
-
-    if (Options.NoFramePointerElimOverride || AlwaysRecordAttrs)
-      NewAttrs = NewAttrs.addAttribute(
-          Ctx, AttributeSet::FunctionIndex, "no-frame-pointer-elim",
-          Options.NoFramePointerElim ? "true" : "false");
-
-    // Let NewAttrs override Attrs.
-    NewAttrs = Attrs.addAttributes(Ctx, AttributeSet::FunctionIndex, NewAttrs);
-    F.setAttributes(NewAttrs);
-  }
-}
index d7d3d19..ce1ab59 100644 (file)
@@ -177,15 +177,19 @@ LLVMBool LLVMCreateMCJITCompilerForModule(
   memcpy(&options, PassedOptions, SizeOfPassedOptions);
   
   TargetOptions targetOptions;
-  targetOptions.NoFramePointerElim = options.NoFramePointerElim;
   targetOptions.EnableFastISel = options.EnableFastISel;
   std::unique_ptr<Module> Mod(unwrap(M));
 
   if (Mod)
     // Set function attribute "no-frame-pointer-elim" based on
     // NoFramePointerElim.
-    setFunctionAttributes(/* CPU */ "", /* Features */ "", targetOptions, *Mod,
-                          /* AlwaysRecordAttrs */ true);
+    for (auto &F : *Mod) {
+      auto Attrs = F.getAttributes();
+      auto Value = options.NoFramePointerElim ? "true" : "false";
+      Attrs = Attrs.addAttribute(F.getContext(), AttributeSet::FunctionIndex,
+                                 "no-frame-pointer-elim", Value);
+      F.setAttributes(Attrs);
+    }
 
   std::string Error;
   EngineBuilder builder(std::move(Mod));
index 447b96f..8509852 100644 (file)
@@ -22,4 +22,4 @@ subdirectories = Interpreter MCJIT RuntimeDyld IntelJITEvents OProfileJIT Orc
 type = Library
 name = ExecutionEngine
 parent = Libraries
-required_libraries = CodeGen Core MC Object RuntimeDyld Support
+required_libraries = Core MC Object RuntimeDyld Support
index b775612..0977418 100644 (file)
@@ -304,11 +304,9 @@ static int compileModule(char **argv, LLVMContext &Context) {
   if (const DataLayout *DL = Target->getDataLayout())
     M->setDataLayout(*DL);
 
-  // Override function attributes based on CPUStr, FeaturesStr, and Options.
-  // Pass AlwaysRecordAttrs=false as we want to override an attribute only when
-  // the corresponding cl::opt has been provided on llc's command line.
-  setFunctionAttributes(CPUStr, FeaturesStr, Options, *M,
-                        /* AlwaysRecordAttrs */ false);
+  // Override function attributes based on CPUStr, FeaturesStr, and command line
+  // flags.
+  setFunctionAttributes(CPUStr, FeaturesStr, *M);
 
   if (RelaxAll.getNumOccurrences() > 0 &&
       FileType != TargetMachine::CGFT_ObjectFile)
index 6f3d8ca..55426e7 100644 (file)
@@ -396,11 +396,9 @@ int main(int argc, char **argv) {
 
   std::unique_ptr<TargetMachine> TM(Machine);
 
-  // Override function attributes based on CPUStr, FeaturesStr, and Options.
-  // Pass AlwaysRecordAttrs=false as we want to override an attribute only when
-  // the corresponding cl::opt has been provided on opt's command line.
-  setFunctionAttributes(CPUStr, FeaturesStr, Options, *M,
-                        /* AlwaysRecordAttrs */ false);
+  // Override function attributes based on CPUStr, FeaturesStr, and command line
+  // flags.
+  setFunctionAttributes(CPUStr, FeaturesStr, *M);
 
   // If the output is set to be emitted to standard out, and standard out is a
   // console, print out a warning message and refuse to do it.  We don't