[clang] [llvm] [rtsan][llvm] Remove functional pass, only support module pass (PR #119739)
Chris Apple via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 12 10:33:59 PST 2024
https://github.com/cjappl created https://github.com/llvm/llvm-project/pull/119739
As suggested by @vitalybuka on #118989
Most of the other sanitizers are now only module level passes. This moves all functionality into the module pass, and removes the function pass.
>From c19f2f7da960a81e2c8aab9bd7afa18a8e78108a Mon Sep 17 00:00:00 2001
From: Chris Apple <cja-private at pm.me>
Date: Thu, 12 Dec 2024 10:26:49 -0800
Subject: [PATCH] [rtsan][llvm] Remove functional pass, only support module
pass
---
clang/lib/CodeGen/BackendUtil.cpp | 10 ++-----
.../Instrumentation/RealtimeSanitizer.h | 13 +--------
llvm/lib/Passes/PassBuilder.cpp | 5 ----
llvm/lib/Passes/PassRegistry.def | 6 +----
.../Instrumentation/RealtimeSanitizer.cpp | 27 ++++++++-----------
.../RealtimeSanitizer/rtsan.ll | 2 +-
6 files changed, 16 insertions(+), 47 deletions(-)
diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp
index 8cf44592a17475..b3728c478772d3 100644
--- a/clang/lib/CodeGen/BackendUtil.cpp
+++ b/clang/lib/CodeGen/BackendUtil.cpp
@@ -1023,14 +1023,8 @@ void EmitAssemblyHelper::RunOptimizationPipeline(
FPM.addPass(BoundsCheckingPass());
});
- if (LangOpts.Sanitize.has(SanitizerKind::Realtime)) {
- PB.registerScalarOptimizerLateEPCallback(
- [](FunctionPassManager &FPM, OptimizationLevel Level) {
- RealtimeSanitizerOptions Opts;
- FPM.addPass(RealtimeSanitizerPass(Opts));
- });
- MPM.addPass(ModuleRealtimeSanitizerPass());
- }
+ if (LangOpts.Sanitize.has(SanitizerKind::Realtime))
+ MPM.addPass(RealtimeSanitizerPass());
// Don't add sanitizers if we are here from ThinLTO PostLink. That already
// done on PreLink stage.
diff --git a/llvm/include/llvm/Transforms/Instrumentation/RealtimeSanitizer.h b/llvm/include/llvm/Transforms/Instrumentation/RealtimeSanitizer.h
index 151e70e87b294d..5ee1cb0443932a 100644
--- a/llvm/include/llvm/Transforms/Instrumentation/RealtimeSanitizer.h
+++ b/llvm/include/llvm/Transforms/Instrumentation/RealtimeSanitizer.h
@@ -23,19 +23,8 @@
namespace llvm {
-struct RealtimeSanitizerOptions {};
-
-class RealtimeSanitizerPass : public PassInfoMixin<RealtimeSanitizerPass> {
-public:
- RealtimeSanitizerPass(const RealtimeSanitizerOptions &Options);
- PreservedAnalyses run(Function &F, AnalysisManager<Function> &AM);
-
- static bool isRequired() { return true; }
-};
-
/// Create ctor and init functions.
-struct ModuleRealtimeSanitizerPass
- : public PassInfoMixin<ModuleRealtimeSanitizerPass> {
+struct RealtimeSanitizerPass : public PassInfoMixin<RealtimeSanitizerPass> {
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
static bool isRequired() { return true; }
};
diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index 260a34f2e060d6..6e1cefdb3f4d70 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -1281,11 +1281,6 @@ parseRegAllocFastPassOptions(PassBuilder &PB, StringRef Params) {
return Opts;
}
-Expected<RealtimeSanitizerOptions> parseRtSanPassOptions(StringRef Params) {
- RealtimeSanitizerOptions Result;
- return Result;
-}
-
} // namespace
/// Tests whether a pass name starts with a valid prefix for a default pipeline
diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index 2ddebb07017c2a..5203e9989d1132 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -138,7 +138,7 @@ MODULE_PASS("rel-lookup-table-converter", RelLookupTableConverterPass())
MODULE_PASS("rewrite-statepoints-for-gc", RewriteStatepointsForGC())
MODULE_PASS("rewrite-symbols", RewriteSymbolPass())
MODULE_PASS("rpo-function-attrs", ReversePostOrderFunctionAttrsPass())
-MODULE_PASS("rtsan-module", ModuleRealtimeSanitizerPass())
+MODULE_PASS("rtsan", RealtimeSanitizerPass())
MODULE_PASS("sample-profile", SampleProfileLoaderPass())
MODULE_PASS("sancov-module", SanitizerCoveragePass())
MODULE_PASS("sanmd-module", SanitizerBinaryMetadataPass())
@@ -618,10 +618,6 @@ FUNCTION_PASS_WITH_PARAMS(
return WinEHPreparePass(DemoteCatchSwitchPHIOnly);
},
parseWinEHPrepareOptions, "demote-catchswitch-only")
-FUNCTION_PASS_WITH_PARAMS(
- "rtsan", "RealtimeSanitizerPass",
- [](RealtimeSanitizerOptions Opts) { return RealtimeSanitizerPass(Opts); },
- parseRtSanPassOptions, "")
#undef FUNCTION_PASS_WITH_PARAMS
#ifndef LOOPNEST_PASS
diff --git a/llvm/lib/Transforms/Instrumentation/RealtimeSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/RealtimeSanitizer.cpp
index 890c79ae96718a..5ef6ffb58a7c13 100644
--- a/llvm/lib/Transforms/Instrumentation/RealtimeSanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/RealtimeSanitizer.cpp
@@ -80,27 +80,22 @@ static PreservedAnalyses runSanitizeRealtimeBlocking(Function &Fn) {
return rtsanPreservedCFGAnalyses();
}
-RealtimeSanitizerPass::RealtimeSanitizerPass(
- const RealtimeSanitizerOptions &Options) {}
-
-PreservedAnalyses RealtimeSanitizerPass::run(Function &Fn,
- AnalysisManager<Function> &AM) {
- if (Fn.hasFnAttribute(Attribute::SanitizeRealtime))
- return runSanitizeRealtime(Fn);
-
- if (Fn.hasFnAttribute(Attribute::SanitizeRealtimeBlocking))
- return runSanitizeRealtimeBlocking(Fn);
-
- return PreservedAnalyses::all();
-}
-
-PreservedAnalyses ModuleRealtimeSanitizerPass::run(Module &M,
- ModuleAnalysisManager &MAM) {
+PreservedAnalyses RealtimeSanitizerPass::run(Module &M,
+ ModuleAnalysisManager &MAM) {
getOrCreateSanitizerCtorAndInitFunctions(
M, kRtsanModuleCtorName, kRtsanInitName, /*InitArgTypes=*/{},
/*InitArgs=*/{},
// This callback is invoked when the functions are created the first
// time. Hook them into the global ctors list in that case:
[&](Function *Ctor, FunctionCallee) { appendToGlobalCtors(M, Ctor, 0); });
+
+ for (Function &F : M) {
+ if (F.hasFnAttribute(Attribute::SanitizeRealtime))
+ runSanitizeRealtime(F);
+
+ if (F.hasFnAttribute(Attribute::SanitizeRealtimeBlocking))
+ runSanitizeRealtimeBlocking(F);
+ }
+
return PreservedAnalyses::none();
}
diff --git a/llvm/test/Instrumentation/RealtimeSanitizer/rtsan.ll b/llvm/test/Instrumentation/RealtimeSanitizer/rtsan.ll
index c245a85a9a4856..18d9b4cae95df2 100644
--- a/llvm/test/Instrumentation/RealtimeSanitizer/rtsan.ll
+++ b/llvm/test/Instrumentation/RealtimeSanitizer/rtsan.ll
@@ -1,4 +1,4 @@
-; RUN: opt < %s -passes='function(rtsan),module(rtsan-module)' -S | FileCheck %s
+; RUN: opt < %s -passes='rtsan' -S | FileCheck %s
define void @violation() #0 {
%1 = alloca ptr, align 8
More information about the llvm-commits
mailing list