diff options
author | Andrew Trick <atrick@apple.com> | 2012-02-15 03:21:47 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2012-02-15 03:21:47 +0000 |
commit | 5e108eeeef34dd2afa00d1da77bca47188de4244 (patch) | |
tree | 7d563c9ce0de3bdfd6ff3a289d2aa601e9f54909 /include/llvm/CodeGen/Passes.h | |
parent | 5fd84a24e6bfccc31b6daff7b54b2b13fb2906f6 (diff) | |
download | llvm-5e108eeeef34dd2afa00d1da77bca47188de4244.tar.gz llvm-5e108eeeef34dd2afa00d1da77bca47188de4244.tar.bz2 llvm-5e108eeeef34dd2afa00d1da77bca47188de4244.tar.xz |
Added TargetPassConfig::disablePass/substitutePass as a general mechanism to override specific passes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150562 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/CodeGen/Passes.h')
-rw-r--r-- | include/llvm/CodeGen/Passes.h | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/include/llvm/CodeGen/Passes.h b/include/llvm/CodeGen/Passes.h index e9778f66f6..2e4fb99081 100644 --- a/include/llvm/CodeGen/Passes.h +++ b/include/llvm/CodeGen/Passes.h @@ -33,6 +33,8 @@ namespace llvm { extern char &NoPassID; // Allow targets to choose not to run a pass. +class PassConfigImpl; + /// Target-Independent Code Generator Pass Configuration Options. /// /// This is an ImmutablePass solely for the purpose of exposing CodeGen options @@ -41,7 +43,8 @@ class TargetPassConfig : public ImmutablePass { protected: TargetMachine *TM; PassManagerBase &PM; - bool Initialized; // Flagged after all passes are configured. + PassConfigImpl *Impl; // Internal data structures + bool Initialized; // Flagged after all passes are configured. // Target Pass Options // Targets provide a default setting, user flags override. @@ -69,6 +72,7 @@ public: return TM->getTargetLowering(); } + // void setInitialized() { Initialized = true; } CodeGenOpt::Level getOptLevel() const { return TM->getOptLevel(); } @@ -78,6 +82,18 @@ public: bool getEnableTailMerge() const { return EnableTailMerge; } void setEnableTailMerge(bool Enable) { setOpt(EnableTailMerge, Enable); } + /// Allow the target to override a specific pass without overriding the pass + /// pipeline. When passes are added to the standard pipeline at the + /// point where StadardID is expected, add TargetID in its place. + void substitutePass(char &StandardID, char &TargetID); + + /// Allow the target to disable a specific standard pass. + void disablePass(char &ID) { substitutePass(ID, NoPassID); } + + /// Return the pass ssubtituted for StandardID by the target. + /// If no substitution exists, return StandardID. + AnalysisID getPassSubstitution(AnalysisID StandardID) const; + /// Return true if the optimized regalloc pipeline is enabled. bool getOptimizeRegAlloc() const; @@ -187,8 +203,9 @@ protected: /// Utilities for targets to add passes to the pass manager. /// - /// Add a target-independent CodeGen pass at this point in the pipeline. - void addPass(char &ID); + /// Add a CodeGen pass at this point in the pipeline after checking overrides. + /// Return the pass that was added, or NoPassID. + AnalysisID addPass(char &ID); /// addMachinePasses helper to create the target-selected or overriden /// regalloc pass. |