Added TargetPassConfig::setOpt
authorAndrew Trick <atrick@apple.com>
Wed, 8 Feb 2012 21:22:39 +0000 (21:22 +0000)
committerAndrew Trick <atrick@apple.com>
Wed, 8 Feb 2012 21:22:39 +0000 (21:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150093 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/Passes.h
lib/CodeGen/LLVMTargetMachine.cpp
lib/CodeGen/Passes.cpp
lib/Target/PTX/PTXTargetMachine.cpp

index 884957173172af64d6ca22bf7125ef9faa0932b5..7bc93114d6ddd80f3e85bb93ffb487d0de00f8fd 100644 (file)
@@ -39,6 +39,7 @@ class TargetPassConfig : public ImmutablePass {
 protected:
   TargetMachine *TM;
   PassManagerBase &PM;
+  bool Initialized; // Flagged after all passes are configured.
 
   // Target Pass Options
   //
@@ -62,6 +63,8 @@ public:
     return TM->getTargetLowering();
   }
 
+  void setInitialized() { Initialized = true; }
+
   CodeGenOpt::Level getOptLevel() const { return TM->getOptLevel(); }
 
   void setDisableVerify(bool disable) { DisableVerify = disable; }
@@ -84,6 +87,9 @@ public:
   /// Fully developed targets will not generally override this.
   virtual void addMachinePasses();
 protected:
+  // Helper to verify the analysis is really immutable.
+  void setOpt(bool &Opt, bool Val);
+
   /// Methods with trivial inline returns are convenient points in the common
   /// codegen pass pipeline where targets may insert passes. Methods with
   /// out-of-line standard implementations are major CodeGen stages called by
index f07a85f39c27e43557ad6775f2cfeff31a5d8abd..d14fbb2c3370cfbdeca9e94bf908c6ac7fded527 100644 (file)
@@ -147,6 +147,8 @@ static MCContext *addPassesToGenerateCode(LLVMTargetMachine *TM,
 
   PassConfig->addMachinePasses();
 
+  PassConfig->setInitialized();
+
   return Context;
 }
 
index 2877cf165b6bd4e257be3c8bd274abf58647f2d5..6d12dd839c3c6129ee2b934f2d9c56dec30333ca 100644 (file)
@@ -84,7 +84,10 @@ char TargetPassConfig::ID = 0;
 TargetPassConfig::~TargetPassConfig() {}
 
 TargetPassConfig::TargetPassConfig(TargetMachine *tm, PassManagerBase &pm)
-  : ImmutablePass(ID), TM(tm), PM(pm), DisableVerify(false) {
+  : ImmutablePass(ID), TM(tm), PM(pm), Initialized(false),
+    DisableVerify(false),
+    EnableTailMerge(true) {
+
   // Register all target independent codegen passes to activate their PassIDs,
   // including this pass itself.
   initializeCodeGen(*PassRegistry::getPassRegistry());
@@ -103,6 +106,12 @@ TargetPassConfig::TargetPassConfig()
   llvm_unreachable("TargetPassConfig should not be constructed on-the-fly");
 }
 
+// Helper to verify the analysis is really immutable.
+void TargetPassConfig::setOpt(bool &Opt, bool Val) {
+  assert(!Initialized && "PassConfig is immutable");
+  Opt = Val;
+}
+
 void TargetPassConfig::addPass(char &ID) {
   // FIXME: check user overrides
   Pass *P = Pass::createPass(ID);
index 8901fa0b973fbf0d3fe4cf1f461de6914e0e647c..41bcfd564d1c03eb079fd8e43438d43f6e4b99d2 100644 (file)
@@ -385,5 +385,7 @@ bool PTXPassConfig::addCodeGenPasses(MCContext *&OutContext) {
   PM.add(createPTXMFInfoExtract(getPTXTargetMachine(), getOptLevel()));
   PM.add(createPTXFPRoundingModePass(getPTXTargetMachine(), getOptLevel()));
 
+  setInitialized();
+
   return false;
 }