git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150093
91177308-0d34-0410-b5e6-
96231b3b80d8
protected:
TargetMachine *TM;
PassManagerBase ±
protected:
TargetMachine *TM;
PassManagerBase ±
+ bool Initialized; // Flagged after all passes are configured.
// Target Pass Options
//
// Target Pass Options
//
return TM->getTargetLowering();
}
return TM->getTargetLowering();
}
+ void setInitialized() { Initialized = true; }
+
CodeGenOpt::Level getOptLevel() const { return TM->getOptLevel(); }
void setDisableVerify(bool disable) { DisableVerify = disable; }
CodeGenOpt::Level getOptLevel() const { return TM->getOptLevel(); }
void setDisableVerify(bool disable) { DisableVerify = disable; }
/// Fully developed targets will not generally override this.
virtual void addMachinePasses();
protected:
/// 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
/// 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
PassConfig->addMachinePasses();
PassConfig->addMachinePasses();
+ PassConfig->setInitialized();
+
TargetPassConfig::~TargetPassConfig() {}
TargetPassConfig::TargetPassConfig(TargetMachine *tm, PassManagerBase &pm)
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());
// Register all target independent codegen passes to activate their PassIDs,
// including this pass itself.
initializeCodeGen(*PassRegistry::getPassRegistry());
llvm_unreachable("TargetPassConfig should not be constructed on-the-fly");
}
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);
void TargetPassConfig::addPass(char &ID) {
// FIXME: check user overrides
Pass *P = Pass::createPass(ID);
PM.add(createPTXMFInfoExtract(getPTXTargetMachine(), getOptLevel()));
PM.add(createPTXFPRoundingModePass(getPTXTargetMachine(), getOptLevel()));
PM.add(createPTXMFInfoExtract(getPTXTargetMachine(), getOptLevel()));
PM.add(createPTXFPRoundingModePass(getPTXTargetMachine(), getOptLevel()));