Changeset View
Standalone View
include/llvm/LinkAllPasses.h
Show First 20 Lines • Show All 154 Lines • ▼ Show 20 Lines | ForcePassLinking() { | ||||
(void) llvm::createMemCpyOptPass(); | (void) llvm::createMemCpyOptPass(); | ||||
(void) llvm::createLoopDeletionPass(); | (void) llvm::createLoopDeletionPass(); | ||||
(void) llvm::createPostDomTree(); | (void) llvm::createPostDomTree(); | ||||
(void) llvm::createInstructionNamerPass(); | (void) llvm::createInstructionNamerPass(); | ||||
(void) llvm::createMetaRenamerPass(); | (void) llvm::createMetaRenamerPass(); | ||||
(void) llvm::createPostOrderFunctionAttrsPass(); | (void) llvm::createPostOrderFunctionAttrsPass(); | ||||
(void) llvm::createReversePostOrderFunctionAttrsPass(); | (void) llvm::createReversePostOrderFunctionAttrsPass(); | ||||
(void) llvm::createMergeFunctionsPass(); | (void) llvm::createMergeFunctionsPass(); | ||||
(void) llvm::createPrintModulePass(*(llvm::raw_ostream*)nullptr); | std::string buf; | ||||
(void) llvm::createPrintFunctionPass(*(llvm::raw_ostream*)nullptr); | llvm::raw_string_ostream os(buf); | ||||
(void) llvm::createPrintBasicBlockPass(*(llvm::raw_ostream*)nullptr); | (void) llvm::createPrintModulePass(os); | ||||
(void) llvm::createPrintFunctionPass(os); | |||||
(void) llvm::createPrintBasicBlockPass(os); | |||||
(void) llvm::createModuleDebugInfoPrinterPass(); | (void) llvm::createModuleDebugInfoPrinterPass(); | ||||
(void) llvm::createPartialInliningPass(); | (void) llvm::createPartialInliningPass(); | ||||
(void) llvm::createLintPass(); | (void) llvm::createLintPass(); | ||||
(void) llvm::createSinkingPass(); | (void) llvm::createSinkingPass(); | ||||
(void) llvm::createLowerAtomicPass(); | (void) llvm::createLowerAtomicPass(); | ||||
(void) llvm::createCorrelatedValuePropagationPass(); | (void) llvm::createCorrelatedValuePropagationPass(); | ||||
(void) llvm::createMemDepPrinter(); | (void) llvm::createMemDepPrinter(); | ||||
(void) llvm::createInstructionSimplifierPass(); | (void) llvm::createInstructionSimplifierPass(); | ||||
(void) llvm::createLoopVectorizePass(); | (void) llvm::createLoopVectorizePass(); | ||||
(void) llvm::createSLPVectorizerPass(); | (void) llvm::createSLPVectorizerPass(); | ||||
(void) llvm::createBBVectorizePass(); | (void) llvm::createBBVectorizePass(); | ||||
(void) llvm::createPartiallyInlineLibCallsPass(); | (void) llvm::createPartiallyInlineLibCallsPass(); | ||||
(void) llvm::createScalarizerPass(); | (void) llvm::createScalarizerPass(); | ||||
(void) llvm::createSeparateConstOffsetFromGEPPass(); | (void) llvm::createSeparateConstOffsetFromGEPPass(); | ||||
(void) llvm::createSpeculativeExecutionPass(); | (void) llvm::createSpeculativeExecutionPass(); | ||||
(void) llvm::createRewriteSymbolsPass(); | (void) llvm::createRewriteSymbolsPass(); | ||||
(void) llvm::createStraightLineStrengthReducePass(); | (void) llvm::createStraightLineStrengthReducePass(); | ||||
(void) llvm::createMemDerefPrinter(); | (void) llvm::createMemDerefPrinter(); | ||||
(void) llvm::createFloat2IntPass(); | (void) llvm::createFloat2IntPass(); | ||||
(void) llvm::createEliminateAvailableExternallyPass(); | (void) llvm::createEliminateAvailableExternallyPass(); | ||||
(void)new llvm::IntervalPartition(); | (void)new llvm::IntervalPartition(); | ||||
(void)new llvm::ScalarEvolutionWrapperPass(); | (void)new llvm::ScalarEvolutionWrapperPass(); | ||||
((llvm::Function*)nullptr)->viewCFGOnly(); | llvm::Function::Create(nullptr, llvm::GlobalValue::ExternalLinkage)->viewCFGOnly(); | ||||
llvm::RGPassManager RGM; | struct BogusRegionPass : public llvm::RegionPass { | ||||
((llvm::RegionPass*)nullptr)->runOnRegion((llvm::Region*)nullptr, RGM); | explicit BogusRegionPass(char c) : RegionPass(c) {} | ||||
dim: @grosser, you originally added this part in rL117263 ("Reference RegionPass to stop it being… | |||||
bool runOnRegion(llvm::Region *R, llvm::RGPassManager &RGM) override { | |||||
return false; | |||||
} | |||||
} BRP(0); | |||||
(void) BRP.createPrinterPass(os, ""); | |||||
mehdi_aminiUnsubmitted Not Done ReplyInline ActionsIsn't instantiating a RGPassManager enough to force link RegionPass.cpp? mehdi_amini: Isn't instantiating a `RGPassManager` enough to force link `RegionPass.cpp`? | |||||
dimAuthorUnsubmitted Not Done ReplyInline ActionsWell, this was already done in the original code, but then they tried to pass it as an argument to a call to runOnRegion. I am unsure what this gained, and why the RGPassManager appears to be a little different than the other pass managers... That said, I think such a local object cannot be optimized out, certainly because the constructor is not inlined. The assembly shows: leal 72(%esp), %esi movl %esi, (%esp) calll llvm::RGPassManager::RGPassManager()@PLT so it's indeed definitely being called. dim: Well, this was already done in the original code, but then they tried to pass it as an argument… | |||||
grosserUnsubmitted Not Done ReplyInline ActionsI looked at this again and I think instantiation RGPassManager is likely to be enough. runOnRegion should already be transitively preserved through llvm::createStructurizeCFGPass() In the unlikely case we remove too much, the linker error should allow us to understand without too much hassle what else needs to be preserved. grosser: I looked at this again and I think instantiation RGPassManager is likely to be enough. | |||||
llvm::AliasSetTracker X(*(llvm::AliasAnalysis*)nullptr); | llvm::AliasSetTracker X(*(llvm::AliasAnalysis*)nullptr); | ||||
X.add(nullptr, 0, llvm::AAMDNodes()); // for -print-alias-sets | X.add(nullptr, 0, llvm::AAMDNodes()); // for -print-alias-sets | ||||
(void) llvm::AreStatisticsEnabled(); | (void) llvm::AreStatisticsEnabled(); | ||||
(void) llvm::sys::RunningOnValgrind(); | (void) llvm::sys::RunningOnValgrind(); | ||||
} | } | ||||
} ForcePassLinking; // Force link by creating a global definition. | } ForcePassLinking; // Force link by creating a global definition. | ||||
} | } | ||||
#endif | #endif |
@grosser, you originally added this part in rL117263 ("Reference RegionPass to stop it being eliminated"), do you have any suggestions? If the goal is to to unsure RegionPass.cpp is linked in, I think we can call RegionPass::createPrinterPass() instead.