https://github.com/Enna1 created https://github.com/llvm/llvm-project/pull/120667
As mentioned in https://github.com/llvm/llvm-project/pull/118989, all sanitizers but tsan are converted to just module pass for easier maintenance. This patch removes the TySan function pass, convert TySan from function+module pass to just module pass. >From 7cef5a275b176b8cf8703ae3b372637a1dded326 Mon Sep 17 00:00:00 2001 From: "xumingjie.enna1" <xumingjie.en...@bytedance.com> Date: Thu, 19 Dec 2024 20:38:09 +0800 Subject: [PATCH] [tysan] Convert TySan from function+module pass to just module pass As mentioned in https://github.com/llvm/llvm-project/pull/118989, all sanitizers but tsan are converted to just module pass for easier maintainence. This patch removes the TySan function pass, convert TySan from function+module pass to just module pass. --- clang/lib/CodeGen/BackendUtil.cpp | 6 ++--- .../Instrumentation/TypeSanitizer.h | 10 +-------- llvm/lib/Passes/PassRegistry.def | 3 +-- .../Instrumentation/TypeSanitizer.cpp | 22 +++++++++---------- .../TypeSanitizer/access-with-offset.ll | 2 +- .../TypeSanitizer/alloca-only.ll | 2 +- .../Instrumentation/TypeSanitizer/alloca.ll | 2 +- .../Instrumentation/TypeSanitizer/anon.ll | 2 +- .../TypeSanitizer/basic-nosan.ll | 2 +- .../Instrumentation/TypeSanitizer/basic.ll | 2 +- .../Instrumentation/TypeSanitizer/byval.ll | 2 +- .../Instrumentation/TypeSanitizer/globals.ll | 2 +- .../TypeSanitizer/invalid-metadata.ll | 2 +- .../TypeSanitizer/memintrinsics.ll | 2 +- .../TypeSanitizer/nosanitize.ll | 2 +- .../TypeSanitizer/sanitize-no-tbaa.ll | 2 +- .../TypeSanitizer/swifterror.ll | 2 +- 17 files changed, 28 insertions(+), 39 deletions(-) diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index b1003f2ce5032e..bab3520758fa4b 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -736,10 +736,8 @@ static void addSanitizers(const Triple &TargetTriple, MPM.addPass(createModuleToFunctionPassAdaptor(ThreadSanitizerPass())); } - if (LangOpts.Sanitize.has(SanitizerKind::Type)) { - MPM.addPass(ModuleTypeSanitizerPass()); - MPM.addPass(createModuleToFunctionPassAdaptor(TypeSanitizerPass())); - } + if (LangOpts.Sanitize.has(SanitizerKind::Type)) + MPM.addPass(TypeSanitizerPass()); if (LangOpts.Sanitize.has(SanitizerKind::NumericalStability)) MPM.addPass(NumericalStabilitySanitizerPass()); diff --git a/llvm/include/llvm/Transforms/Instrumentation/TypeSanitizer.h b/llvm/include/llvm/Transforms/Instrumentation/TypeSanitizer.h index a6cc56df35f14d..20f08b67908556 100644 --- a/llvm/include/llvm/Transforms/Instrumentation/TypeSanitizer.h +++ b/llvm/include/llvm/Transforms/Instrumentation/TypeSanitizer.h @@ -20,19 +20,11 @@ class Function; class FunctionPass; class Module; -/// A function pass for tysan instrumentation. struct TypeSanitizerPass : public PassInfoMixin<TypeSanitizerPass> { - PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM); - static bool isRequired() { return true; } -}; - -/// A module pass for tysan instrumentation. -/// -/// Create ctor and init functions. -struct ModuleTypeSanitizerPass : public PassInfoMixin<ModuleTypeSanitizerPass> { PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); static bool isRequired() { return true; } }; } // namespace llvm + #endif /* LLVM_TRANSFORMS_INSTRUMENTATION_TYPESANITIZER_H */ diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def index ecc9f554937103..98542c78ddf31b 100644 --- a/llvm/lib/Passes/PassRegistry.def +++ b/llvm/lib/Passes/PassRegistry.def @@ -157,7 +157,7 @@ MODULE_PASS("strip-nonlinetable-debuginfo", StripNonLineTableDebugInfoPass()) MODULE_PASS("trigger-crash-module", TriggerCrashModulePass()) MODULE_PASS("trigger-verifier-error", TriggerVerifierErrorPass()) MODULE_PASS("tsan-module", ModuleThreadSanitizerPass()) -MODULE_PASS("tysan-module", ModuleTypeSanitizerPass()) +MODULE_PASS("tysan", TypeSanitizerPass()) MODULE_PASS("verify", VerifierPass()) MODULE_PASS("view-callgraph", CallGraphViewerPass()) MODULE_PASS("wholeprogramdevirt", WholeProgramDevirtPass()) @@ -482,7 +482,6 @@ FUNCTION_PASS("transform-warning", WarnMissedTransformationsPass()) FUNCTION_PASS("trigger-crash-function", TriggerCrashFunctionPass()) FUNCTION_PASS("trigger-verifier-error", TriggerVerifierErrorPass()) FUNCTION_PASS("tsan", ThreadSanitizerPass()) -FUNCTION_PASS("tysan", TypeSanitizerPass()) FUNCTION_PASS("typepromotion", TypePromotionPass(TM)) FUNCTION_PASS("unify-loop-exits", UnifyLoopExitsPass()) FUNCTION_PASS("vector-combine", VectorCombinePass()) diff --git a/llvm/lib/Transforms/Instrumentation/TypeSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/TypeSanitizer.cpp index 19610958e47b72..f22d83d51aff65 100644 --- a/llvm/lib/Transforms/Instrumentation/TypeSanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/TypeSanitizer.cpp @@ -70,7 +70,7 @@ namespace { /// violations. struct TypeSanitizer { TypeSanitizer(Module &M); - bool run(Function &F, const TargetLibraryInfo &TLI); + bool sanitizeFunction(Function &F, const TargetLibraryInfo &TLI); void instrumentGlobals(Module &M); private: @@ -510,7 +510,7 @@ void collectMemAccessInfo( } } -bool TypeSanitizer::run(Function &F, const TargetLibraryInfo &TLI) { +bool TypeSanitizer::sanitizeFunction(Function &F, const TargetLibraryInfo &TLI) { // This is required to prevent instrumenting call to __tysan_init from within // the module constructor. if (&F == TysanCtorFunction.getCallee() || &F == TysanGlobalsSetTypeFunction) @@ -876,15 +876,8 @@ bool TypeSanitizer::instrumentMemInst(Value *V, Instruction *ShadowBase, return true; } -PreservedAnalyses TypeSanitizerPass::run(Function &F, - FunctionAnalysisManager &FAM) { - TypeSanitizer TySan(*F.getParent()); - TySan.run(F, FAM.getResult<TargetLibraryAnalysis>(F)); - return PreservedAnalyses::none(); -} - -PreservedAnalyses ModuleTypeSanitizerPass::run(Module &M, - ModuleAnalysisManager &AM) { +PreservedAnalyses TypeSanitizerPass::run(Module &M, + ModuleAnalysisManager &MAM) { Function *TysanCtorFunction; std::tie(TysanCtorFunction, std::ignore) = createSanitizerCtorAndInitFunctions(M, kTysanModuleCtorName, @@ -894,5 +887,12 @@ PreservedAnalyses ModuleTypeSanitizerPass::run(Module &M, TypeSanitizer TySan(M); TySan.instrumentGlobals(M); appendToGlobalCtors(M, TysanCtorFunction, 0); + + auto &FAM = MAM.getResult<FunctionAnalysisManagerModuleProxy>(M).getManager(); + for (Function &F : M) { + const TargetLibraryInfo &TLI = FAM.getResult<TargetLibraryAnalysis>(F); + TySan.sanitizeFunction(F, TLI); + } + return PreservedAnalyses::none(); } diff --git a/llvm/test/Instrumentation/TypeSanitizer/access-with-offset.ll b/llvm/test/Instrumentation/TypeSanitizer/access-with-offset.ll index 78f3816c9aefa4..56cf3f528f836f 100644 --- a/llvm/test/Instrumentation/TypeSanitizer/access-with-offset.ll +++ b/llvm/test/Instrumentation/TypeSanitizer/access-with-offset.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals -; RUN: opt -passes='tysan-module,tysan' -S %s | FileCheck %s +; RUN: opt -passes='tysan' -S %s | FileCheck %s ;. ; CHECK: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 0, ptr @tysan.module_ctor, ptr null }] diff --git a/llvm/test/Instrumentation/TypeSanitizer/alloca-only.ll b/llvm/test/Instrumentation/TypeSanitizer/alloca-only.ll index 1aa47cacc1275a..117cd1a3d41009 100644 --- a/llvm/test/Instrumentation/TypeSanitizer/alloca-only.ll +++ b/llvm/test/Instrumentation/TypeSanitizer/alloca-only.ll @@ -1,7 +1,7 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals ; Test basic type sanitizer instrumentation. ; -; RUN: opt -passes='tysan-module,tysan' -S %s | FileCheck %s +; RUN: opt -passes='tysan' -S %s | FileCheck %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" diff --git a/llvm/test/Instrumentation/TypeSanitizer/alloca.ll b/llvm/test/Instrumentation/TypeSanitizer/alloca.ll index 94098bd8a1739a..ea5adf6e43400e 100644 --- a/llvm/test/Instrumentation/TypeSanitizer/alloca.ll +++ b/llvm/test/Instrumentation/TypeSanitizer/alloca.ll @@ -1,7 +1,7 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; Test basic type sanitizer instrumentation. ; -; RUN: opt -passes='tysan-module,tysan' -S %s | FileCheck %s +; RUN: opt -passes='tysan' -S %s | FileCheck %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" diff --git a/llvm/test/Instrumentation/TypeSanitizer/anon.ll b/llvm/test/Instrumentation/TypeSanitizer/anon.ll index ce4f0c1be0a4f8..37de1b71e0c7ee 100644 --- a/llvm/test/Instrumentation/TypeSanitizer/anon.ll +++ b/llvm/test/Instrumentation/TypeSanitizer/anon.ll @@ -1,7 +1,7 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals ; Test basic type sanitizer instrumentation. ; -; RUN: opt -passes='tysan-module,tysan' -S %s | FileCheck %s +; RUN: opt -passes='tysan' -S %s | FileCheck %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" diff --git a/llvm/test/Instrumentation/TypeSanitizer/basic-nosan.ll b/llvm/test/Instrumentation/TypeSanitizer/basic-nosan.ll index 9b9522f3dba1c9..8ddc5738a673d4 100644 --- a/llvm/test/Instrumentation/TypeSanitizer/basic-nosan.ll +++ b/llvm/test/Instrumentation/TypeSanitizer/basic-nosan.ll @@ -1,6 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals --include-generated-funcs ; Test basic type sanitizer instrumentation. -; RUN: opt -passes='tysan-module,tysan' -S %s | FileCheck %s +; RUN: opt -passes='tysan' -S %s | FileCheck %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" diff --git a/llvm/test/Instrumentation/TypeSanitizer/basic.ll b/llvm/test/Instrumentation/TypeSanitizer/basic.ll index 8873a40798b18a..704c18800f19e0 100644 --- a/llvm/test/Instrumentation/TypeSanitizer/basic.ll +++ b/llvm/test/Instrumentation/TypeSanitizer/basic.ll @@ -1,7 +1,7 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals ; Test basic type sanitizer instrumentation. ; -; RUN: opt -passes='tysan-module,tysan' -S %s | FileCheck %s +; RUN: opt -passes='tysan' -S %s | FileCheck %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" diff --git a/llvm/test/Instrumentation/TypeSanitizer/byval.ll b/llvm/test/Instrumentation/TypeSanitizer/byval.ll index 23ed1b00173bfc..6ae343d8d53445 100644 --- a/llvm/test/Instrumentation/TypeSanitizer/byval.ll +++ b/llvm/test/Instrumentation/TypeSanitizer/byval.ll @@ -1,6 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals --include-generated-funcs ; Test basic type sanitizer instrumentation. -; RUN: opt -passes='tysan-module,tysan' -S %s | FileCheck %s +; RUN: opt -passes='tysan' -S %s | FileCheck %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" diff --git a/llvm/test/Instrumentation/TypeSanitizer/globals.ll b/llvm/test/Instrumentation/TypeSanitizer/globals.ll index 1f57c2a3816d9f..a73599e8644858 100644 --- a/llvm/test/Instrumentation/TypeSanitizer/globals.ll +++ b/llvm/test/Instrumentation/TypeSanitizer/globals.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-globals --include-generated-funcs -; RUN: opt -passes='tysan-module,tysan' -S %s | FileCheck %s +; RUN: opt -passes='tysan' -S %s | FileCheck %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" diff --git a/llvm/test/Instrumentation/TypeSanitizer/invalid-metadata.ll b/llvm/test/Instrumentation/TypeSanitizer/invalid-metadata.ll index e7de62e12d3553..0c99c0f2e674cb 100644 --- a/llvm/test/Instrumentation/TypeSanitizer/invalid-metadata.ll +++ b/llvm/test/Instrumentation/TypeSanitizer/invalid-metadata.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-globals --include-generated-funcs -; RUN: opt -passes='tysan-module,tysan' -S %s | FileCheck %s +; RUN: opt -passes='tysan' -S %s | FileCheck %s !llvm.tysan.globals = !{!0} diff --git a/llvm/test/Instrumentation/TypeSanitizer/memintrinsics.ll b/llvm/test/Instrumentation/TypeSanitizer/memintrinsics.ll index 26f7c186748cb6..65a30bd1ace46c 100644 --- a/llvm/test/Instrumentation/TypeSanitizer/memintrinsics.ll +++ b/llvm/test/Instrumentation/TypeSanitizer/memintrinsics.ll @@ -1,7 +1,7 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; Test basic type sanitizer instrumentation. ; -; RUN: opt -passes='tysan-module,tysan' -S %s | FileCheck %s +; RUN: opt -passes='tysan' -S %s | FileCheck %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" diff --git a/llvm/test/Instrumentation/TypeSanitizer/nosanitize.ll b/llvm/test/Instrumentation/TypeSanitizer/nosanitize.ll index 7b07a42379b3a1..c7c153e140fc21 100644 --- a/llvm/test/Instrumentation/TypeSanitizer/nosanitize.ll +++ b/llvm/test/Instrumentation/TypeSanitizer/nosanitize.ll @@ -1,7 +1,7 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals ; Test basic type sanitizer instrumentation. ; -; RUN: opt -passes='tysan-module,tysan' -S %s | FileCheck %s +; RUN: opt -passes='tysan' -S %s | FileCheck %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" diff --git a/llvm/test/Instrumentation/TypeSanitizer/sanitize-no-tbaa.ll b/llvm/test/Instrumentation/TypeSanitizer/sanitize-no-tbaa.ll index 3cb7b8365866b0..060f031bf2c581 100644 --- a/llvm/test/Instrumentation/TypeSanitizer/sanitize-no-tbaa.ll +++ b/llvm/test/Instrumentation/TypeSanitizer/sanitize-no-tbaa.ll @@ -1,7 +1,7 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; Test basic type sanitizer instrumentation. ; -; RUN: opt -passes='tysan-module,tysan' -S %s | FileCheck %s +; RUN: opt -passes='tysan' -S %s | FileCheck %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" diff --git a/llvm/test/Instrumentation/TypeSanitizer/swifterror.ll b/llvm/test/Instrumentation/TypeSanitizer/swifterror.ll index 5711fb4b839f4d..dc83a020bc1a96 100644 --- a/llvm/test/Instrumentation/TypeSanitizer/swifterror.ll +++ b/llvm/test/Instrumentation/TypeSanitizer/swifterror.ll @@ -1,7 +1,7 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; Test basic type sanitizer instrumentation. ; -; RUN: opt -passes='tysan-module,tysan' -S %s | FileCheck %s +; RUN: opt -passes='tysan' -S %s | FileCheck %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits