mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
Run Coverage pass before other *San passes under new pass manager, round 2
Summary: This was attempted once before in https://reviews.llvm.org/D79698, but was reverted due to the coverage pass running in the wrong part of the pipeline. This commit puts it in the same place as the other sanitizers. This changes PassBuilder.OptimizerLastEPCallbacks to work on a ModulePassManager instead of a FunctionPassManager. That is because SanitizerCoverage cannot (easily) be split into a module pass and a function pass like some of the other sanitizers since in its current implementation it conditionally inserts module constructors based on whether or not it successfully modified functions. This fixes compiler-rt/test/msan/coverage-levels.cpp under the new pass manager (last check-msan test). Currently sanitizers + LTO don't work together under the new pass manager, so I removed tests that checked that this combination works for sancov. Subscribers: hiraditya, cfe-commits, llvm-commits Tags: #clang, #llvm Differential Revision: https://reviews.llvm.org/D80692
This commit is contained in:
parent
996efecab9
commit
ad4217bf4c
@ -600,7 +600,7 @@ public:
|
||||
/// is not triggered at O0. Extensions to the O0 pipeline should append their
|
||||
/// passes to the end of the overall pipeline.
|
||||
void registerOptimizerLastEPCallback(
|
||||
const std::function<void(FunctionPassManager &, OptimizationLevel)> &C) {
|
||||
const std::function<void(ModulePassManager &, OptimizationLevel)> &C) {
|
||||
OptimizerLastEPCallbacks.push_back(C);
|
||||
}
|
||||
|
||||
@ -728,7 +728,7 @@ private:
|
||||
CGSCCOptimizerLateEPCallbacks;
|
||||
SmallVector<std::function<void(FunctionPassManager &, OptimizationLevel)>, 2>
|
||||
VectorizerStartEPCallbacks;
|
||||
SmallVector<std::function<void(FunctionPassManager &, OptimizationLevel)>, 2>
|
||||
SmallVector<std::function<void(ModulePassManager &, OptimizationLevel)>, 2>
|
||||
OptimizerLastEPCallbacks;
|
||||
// Module callbacks
|
||||
SmallVector<std::function<void(ModulePassManager &)>, 2>
|
||||
|
@ -1073,12 +1073,12 @@ ModulePassManager PassBuilder::buildModuleOptimizationPipeline(
|
||||
if (PTO.Coroutines)
|
||||
OptimizePM.addPass(CoroCleanupPass());
|
||||
|
||||
for (auto &C : OptimizerLastEPCallbacks)
|
||||
C(OptimizePM, Level);
|
||||
|
||||
// Add the core optimizing pipeline.
|
||||
MPM.addPass(createModuleToFunctionPassAdaptor(std::move(OptimizePM)));
|
||||
|
||||
for (auto &C : OptimizerLastEPCallbacks)
|
||||
C(MPM, Level);
|
||||
|
||||
if (PTO.CallGraphProfile)
|
||||
MPM.addPass(CGProfilePass());
|
||||
|
||||
|
@ -194,7 +194,7 @@ static void registerEPCallbacks(PassBuilder &PB, bool VerifyEachPass,
|
||||
});
|
||||
if (tryParsePipelineText<FunctionPassManager>(PB, OptimizerLastEPPipeline))
|
||||
PB.registerOptimizerLastEPCallback(
|
||||
[&PB, VerifyEachPass, DebugLogging](FunctionPassManager &PM,
|
||||
[&PB, VerifyEachPass, DebugLogging](ModulePassManager &PM,
|
||||
PassBuilder::OptimizationLevel) {
|
||||
ExitOnError Err("Unable to parse OptimizerLastEP pipeline: ");
|
||||
Err(PB.parsePassPipeline(PM, OptimizerLastEPPipeline, VerifyEachPass,
|
||||
|
Loading…
Reference in New Issue
Block a user