Skip to content

Commit 6c244a0

Browse files
committed
[sanitizer][NFCI] Add Options to LowerAllowCheckPass
This is glue code to convert LowerAllowCheckPass from a FUNCTION_PASS to FUNCTION_PASS_WITH_PARAMS. The parameters are currently unused. Future work will plumb `-fsanitize-skip-hot-cutoff` (introduced in #121619) to LowerAllowCheckOptions.
1 parent b39c5cb commit 6c244a0

File tree

4 files changed

+30
-3
lines changed

4 files changed

+30
-3
lines changed

clang/lib/CodeGen/BackendUtil.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -795,11 +795,12 @@ static void addSanitizers(const Triple &TargetTriple,
795795
}
796796

797797
if (LowerAllowCheckPass::IsRequested()) {
798+
LowerAllowCheckOptions Opts;
798799
// We want to call it after inline, which is about OptimizerEarlyEPCallback.
799-
PB.registerOptimizerEarlyEPCallback([](ModulePassManager &MPM,
800+
PB.registerOptimizerEarlyEPCallback([&Opts](ModulePassManager &MPM,
800801
OptimizationLevel Level,
801802
ThinOrFullLTOPhase Phase) {
802-
MPM.addPass(createModuleToFunctionPassAdaptor(LowerAllowCheckPass()));
803+
MPM.addPass(createModuleToFunctionPassAdaptor(LowerAllowCheckPass(Opts)));
803804
});
804805
}
805806
}

llvm/include/llvm/Transforms/Instrumentation/LowerAllowCheckPass.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,22 @@
2020

2121
namespace llvm {
2222

23+
struct LowerAllowCheckOptions {
24+
std::vector<double> placeholder; // TODO: cutoffs
25+
};
26+
2327
// This pass is responsible for removing optional traps, like llvm.ubsantrap
2428
// from the hot code.
2529
class LowerAllowCheckPass : public PassInfoMixin<LowerAllowCheckPass> {
2630
public:
31+
explicit LowerAllowCheckPass(LowerAllowCheckOptions Options)
32+
: Options(Options){};
2733
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
2834

2935
static bool IsRequested();
36+
37+
private:
38+
LowerAllowCheckOptions Options;
3039
};
3140

3241
} // namespace llvm

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,20 @@ Expected<EmbedBitcodeOptions> parseEmbedBitcodePassOptions(StringRef Params) {
821821
return Result;
822822
}
823823

824+
Expected<LowerAllowCheckOptions> parseLowerAllowCheckPassOptions(StringRef Params) {
825+
LowerAllowCheckOptions Result;
826+
while (!Params.empty()) {
827+
StringRef ParamName;
828+
std::tie(ParamName, Params) = Params.split(';');
829+
830+
return make_error<StringError>(
831+
formatv("invalid LowerAllowCheck pass parameter '{0}' ", ParamName)
832+
.str(),
833+
inconvertibleErrorCode());
834+
}
835+
return Result;
836+
}
837+
824838
Expected<MemorySanitizerOptions> parseMSanPassOptions(StringRef Params) {
825839
MemorySanitizerOptions Result;
826840
while (!Params.empty()) {

llvm/lib/Passes/PassRegistry.def

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,6 @@ FUNCTION_PASS("loop-load-elim", LoopLoadEliminationPass())
402402
FUNCTION_PASS("loop-simplify", LoopSimplifyPass())
403403
FUNCTION_PASS("loop-sink", LoopSinkPass())
404404
FUNCTION_PASS("loop-versioning", LoopVersioningPass())
405-
FUNCTION_PASS("lower-allow-check", LowerAllowCheckPass())
406405
FUNCTION_PASS("lower-atomic", LowerAtomicPass())
407406
FUNCTION_PASS("lower-constant-intrinsics", LowerConstantIntrinsicsPass())
408407
FUNCTION_PASS("lower-expect", LowerExpectIntrinsicPass())
@@ -553,6 +552,10 @@ FUNCTION_PASS_WITH_PARAMS(
553552
parseLoopVectorizeOptions,
554553
"no-interleave-forced-only;interleave-forced-only;no-vectorize-forced-only;"
555554
"vectorize-forced-only")
555+
FUNCTION_PASS_WITH_PARAMS(
556+
"lower-allow-check", "LowerAllowCheckPass",
557+
[](LowerAllowCheckOptions Opts) { return LowerAllowCheckPass(Opts); },
558+
parseLowerAllowCheckPassOptions, "")
556559
FUNCTION_PASS_WITH_PARAMS(
557560
"lower-matrix-intrinsics", "LowerMatrixIntrinsicsPass",
558561
[](bool Minimal) { return LowerMatrixIntrinsicsPass(Minimal); },

0 commit comments

Comments
 (0)