Run Coverage pass before other *San passes under new pass manager, round 2
authorArthur Eubanks <aeubanks@google.com>
Thu, 28 May 2020 06:12:36 +0000 (23:12 -0700)
committerArthur Eubanks <aeubanks@google.com>
Thu, 28 May 2020 21:25:23 +0000 (14:25 -0700)
commit922fa2fce38b0bd97921b91ff1cdc57f18d3569c
tree7960adc84fc05f51a72d2de4e8a249057029c7f1
parent434d122e94a74cbfb08e901821590faad9b6dcd9
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).

Subscribers: hiraditya, cfe-commits, llvm-commits

Tags: #clang, #llvm

Differential Revision: https://reviews.llvm.org/D80692
clang/lib/CodeGen/BackendUtil.cpp
llvm/include/llvm/Passes/PassBuilder.h
llvm/lib/Passes/PassBuilder.cpp
llvm/tools/opt/NewPMDriver.cpp