Skip to content

Commit 4a65861

Browse files
authored
[rtsan][llvm] Remove function pass, only support module pass (#119739)
Most of the other sanitizers are now only module level passes. This moves all functionality into the module pass, and removes the function pass.
1 parent ce25bd2 commit 4a65861

File tree

6 files changed

+16
-47
lines changed

6 files changed

+16
-47
lines changed

clang/lib/CodeGen/BackendUtil.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,14 +1023,8 @@ void EmitAssemblyHelper::RunOptimizationPipeline(
10231023
FPM.addPass(BoundsCheckingPass());
10241024
});
10251025

1026-
if (LangOpts.Sanitize.has(SanitizerKind::Realtime)) {
1027-
PB.registerScalarOptimizerLateEPCallback(
1028-
[](FunctionPassManager &FPM, OptimizationLevel Level) {
1029-
RealtimeSanitizerOptions Opts;
1030-
FPM.addPass(RealtimeSanitizerPass(Opts));
1031-
});
1032-
MPM.addPass(ModuleRealtimeSanitizerPass());
1033-
}
1026+
if (LangOpts.Sanitize.has(SanitizerKind::Realtime))
1027+
MPM.addPass(RealtimeSanitizerPass());
10341028

10351029
// Don't add sanitizers if we are here from ThinLTO PostLink. That already
10361030
// done on PreLink stage.

llvm/include/llvm/Transforms/Instrumentation/RealtimeSanitizer.h

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,8 @@
2323

2424
namespace llvm {
2525

26-
struct RealtimeSanitizerOptions {};
27-
28-
class RealtimeSanitizerPass : public PassInfoMixin<RealtimeSanitizerPass> {
29-
public:
30-
RealtimeSanitizerPass(const RealtimeSanitizerOptions &Options);
31-
PreservedAnalyses run(Function &F, AnalysisManager<Function> &AM);
32-
33-
static bool isRequired() { return true; }
34-
};
35-
3626
/// Create ctor and init functions.
37-
struct ModuleRealtimeSanitizerPass
38-
: public PassInfoMixin<ModuleRealtimeSanitizerPass> {
27+
struct RealtimeSanitizerPass : public PassInfoMixin<RealtimeSanitizerPass> {
3928
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
4029
static bool isRequired() { return true; }
4130
};

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1281,11 +1281,6 @@ parseRegAllocFastPassOptions(PassBuilder &PB, StringRef Params) {
12811281
return Opts;
12821282
}
12831283

1284-
Expected<RealtimeSanitizerOptions> parseRtSanPassOptions(StringRef Params) {
1285-
RealtimeSanitizerOptions Result;
1286-
return Result;
1287-
}
1288-
12891284
} // namespace
12901285

12911286
/// Tests whether a pass name starts with a valid prefix for a default pipeline

llvm/lib/Passes/PassRegistry.def

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ MODULE_PASS("rel-lookup-table-converter", RelLookupTableConverterPass())
138138
MODULE_PASS("rewrite-statepoints-for-gc", RewriteStatepointsForGC())
139139
MODULE_PASS("rewrite-symbols", RewriteSymbolPass())
140140
MODULE_PASS("rpo-function-attrs", ReversePostOrderFunctionAttrsPass())
141-
MODULE_PASS("rtsan-module", ModuleRealtimeSanitizerPass())
141+
MODULE_PASS("rtsan", RealtimeSanitizerPass())
142142
MODULE_PASS("sample-profile", SampleProfileLoaderPass())
143143
MODULE_PASS("sancov-module", SanitizerCoveragePass())
144144
MODULE_PASS("sanmd-module", SanitizerBinaryMetadataPass())
@@ -620,10 +620,6 @@ FUNCTION_PASS_WITH_PARAMS(
620620
return WinEHPreparePass(DemoteCatchSwitchPHIOnly);
621621
},
622622
parseWinEHPrepareOptions, "demote-catchswitch-only")
623-
FUNCTION_PASS_WITH_PARAMS(
624-
"rtsan", "RealtimeSanitizerPass",
625-
[](RealtimeSanitizerOptions Opts) { return RealtimeSanitizerPass(Opts); },
626-
parseRtSanPassOptions, "")
627623
#undef FUNCTION_PASS_WITH_PARAMS
628624

629625
#ifndef LOOPNEST_PASS

llvm/lib/Transforms/Instrumentation/RealtimeSanitizer.cpp

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -80,27 +80,22 @@ static PreservedAnalyses runSanitizeRealtimeBlocking(Function &Fn) {
8080
return rtsanPreservedCFGAnalyses();
8181
}
8282

83-
RealtimeSanitizerPass::RealtimeSanitizerPass(
84-
const RealtimeSanitizerOptions &Options) {}
85-
86-
PreservedAnalyses RealtimeSanitizerPass::run(Function &Fn,
87-
AnalysisManager<Function> &AM) {
88-
if (Fn.hasFnAttribute(Attribute::SanitizeRealtime))
89-
return runSanitizeRealtime(Fn);
90-
91-
if (Fn.hasFnAttribute(Attribute::SanitizeRealtimeBlocking))
92-
return runSanitizeRealtimeBlocking(Fn);
93-
94-
return PreservedAnalyses::all();
95-
}
96-
97-
PreservedAnalyses ModuleRealtimeSanitizerPass::run(Module &M,
98-
ModuleAnalysisManager &MAM) {
83+
PreservedAnalyses RealtimeSanitizerPass::run(Module &M,
84+
ModuleAnalysisManager &MAM) {
9985
getOrCreateSanitizerCtorAndInitFunctions(
10086
M, kRtsanModuleCtorName, kRtsanInitName, /*InitArgTypes=*/{},
10187
/*InitArgs=*/{},
10288
// This callback is invoked when the functions are created the first
10389
// time. Hook them into the global ctors list in that case:
10490
[&](Function *Ctor, FunctionCallee) { appendToGlobalCtors(M, Ctor, 0); });
91+
92+
for (Function &F : M) {
93+
if (F.hasFnAttribute(Attribute::SanitizeRealtime))
94+
runSanitizeRealtime(F);
95+
96+
if (F.hasFnAttribute(Attribute::SanitizeRealtimeBlocking))
97+
runSanitizeRealtimeBlocking(F);
98+
}
99+
105100
return PreservedAnalyses::none();
106101
}

llvm/test/Instrumentation/RealtimeSanitizer/rtsan.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: opt < %s -passes='function(rtsan),module(rtsan-module)' -S | FileCheck %s
1+
; RUN: opt < %s -passes='rtsan' -S | FileCheck %s
22

33
define void @violation() #0 {
44
%1 = alloca ptr, align 8

0 commit comments

Comments
 (0)