From 6f491350660ee1de0b2fb23481102e82c708cc50 Mon Sep 17 00:00:00 2001 From: Akira Hatanaka Date: Tue, 26 May 2015 20:17:20 +0000 Subject: [PATCH] Remove NoFramePointerElim and NoFramePointerElimOverride from TargetOptions and remove ExecutionEngine's dependence on CodeGen. NFC. This is a follow-up to r238080. Differential Revision: http://reviews.llvm.org/D9830 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238244 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/CommandFlags.h | 29 +++++++++++++++++-- include/llvm/Target/TargetOptions.h | 20 +------------ lib/CodeGen/TargetOptionsImpl.cpp | 27 ----------------- .../ExecutionEngineBindings.cpp | 10 +++++-- lib/ExecutionEngine/LLVMBuild.txt | 2 +- tools/llc/llc.cpp | 8 ++--- tools/opt/opt.cpp | 8 ++--- 7 files changed, 42 insertions(+), 62 deletions(-) diff --git a/include/llvm/CodeGen/CommandFlags.h b/include/llvm/CodeGen/CommandFlags.h index a58c2de0841..a1b9b4e566a 100644 --- a/include/llvm/CodeGen/CommandFlags.h +++ b/include/llvm/CodeGen/CommandFlags.h @@ -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 diff --git a/include/llvm/Target/TargetOptions.h b/include/llvm/Target/TargetOptions.h index 435a0fd6286..07a8f6d3d4c 100644 --- a/include/llvm/Target/TargetOptions.h +++ b/include/llvm/Target/TargetOptions.h @@ -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: diff --git a/lib/CodeGen/TargetOptionsImpl.cpp b/lib/CodeGen/TargetOptionsImpl.cpp index 9d1c27ef51e..f4926cbc624 100644 --- a/lib/CodeGen/TargetOptionsImpl.cpp +++ b/lib/CodeGen/TargetOptionsImpl.cpp @@ -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); - } -} diff --git a/lib/ExecutionEngine/ExecutionEngineBindings.cpp b/lib/ExecutionEngine/ExecutionEngineBindings.cpp index d7d3d19d0af..ce1ab594dfa 100644 --- a/lib/ExecutionEngine/ExecutionEngineBindings.cpp +++ b/lib/ExecutionEngine/ExecutionEngineBindings.cpp @@ -177,15 +177,19 @@ LLVMBool LLVMCreateMCJITCompilerForModule( memcpy(&options, PassedOptions, SizeOfPassedOptions); TargetOptions targetOptions; - targetOptions.NoFramePointerElim = options.NoFramePointerElim; targetOptions.EnableFastISel = options.EnableFastISel; std::unique_ptr 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)); diff --git a/lib/ExecutionEngine/LLVMBuild.txt b/lib/ExecutionEngine/LLVMBuild.txt index 447b96fbfaf..8509852b652 100644 --- a/lib/ExecutionEngine/LLVMBuild.txt +++ b/lib/ExecutionEngine/LLVMBuild.txt @@ -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 diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp index b7756129155..0977418e023 100644 --- a/tools/llc/llc.cpp +++ b/tools/llc/llc.cpp @@ -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) diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp index 6f3d8ca4156..55426e7b274 100644 --- a/tools/opt/opt.cpp +++ b/tools/opt/opt.cpp @@ -396,11 +396,9 @@ int main(int argc, char **argv) { std::unique_ptr 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