[llvm] [TSan] Fix missing inst cleanup (PR #144067)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 13 05:48:47 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-compiler-rt-sanitizer
Author: Kunqiu Chen (Camsyn)
<details>
<summary>Changes</summary>
Commit 44e875ad5b2ce26826dd53f9e7d1a71436c86212 introduced a change that replaces `ReplaceInstWithInst` with `Instruction::replaceAllUsesWith`, without subsequent instruction cleanup.
This results in TSan leaving behind useless `load atomic` instructions after 'replacing' them.
This commit adds cleanup back, consistent with the context.
---
Full diff: https://github.com/llvm/llvm-project/pull/144067.diff
1 Files Affected:
- (modified) llvm/lib/Transforms/Instrumentation/ThreadSanitizer.cpp (+1)
``````````diff
diff --git a/llvm/lib/Transforms/Instrumentation/ThreadSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/ThreadSanitizer.cpp
index ec9f78edfeb1c..195a157ee20af 100644
--- a/llvm/lib/Transforms/Instrumentation/ThreadSanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/ThreadSanitizer.cpp
@@ -729,6 +729,7 @@ bool ThreadSanitizer::instrumentAtomic(Instruction *I, const DataLayout &DL) {
Value *C = IRB.CreateCall(TsanAtomicLoad[Idx], Args);
Value *Cast = IRB.CreateBitOrPointerCast(C, OrigTy);
I->replaceAllUsesWith(Cast);
+ I->eraseFromParent();
} else if (StoreInst *SI = dyn_cast<StoreInst>(I)) {
Value *Addr = SI->getPointerOperand();
int Idx =
``````````
</details>
https://github.com/llvm/llvm-project/pull/144067
More information about the llvm-commits
mailing list