[llvm] [DSE] Use alias analysis to identify no-op stores (PR #122610)
Alex MacLean via llvm-commits
llvm-commits at lists.llvm.org
Sat Jan 11 11:30:44 PST 2025
https://github.com/AlexMaclean created https://github.com/llvm/llvm-project/pull/122610
None
>From 1f479901a1218f99c18f551c3e1c3f744a6a434f Mon Sep 17 00:00:00 2001
From: Alex Maclean <amaclean at nvidia.com>
Date: Fri, 10 Jan 2025 20:23:48 +0000
Subject: [PATCH] [DSE] Use alias analysis to identify no-op stores
---
llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp | 4 +++-
.../Transforms/DeadStoreElimination/noop-stores.ll | 11 +++++++++++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
index cae5b9c41a37f1..908b9110bd595d 100644
--- a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
+++ b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
@@ -2116,7 +2116,9 @@ struct DSEState {
return true;
if (auto *LoadI = dyn_cast<LoadInst>(Store->getOperand(0))) {
- if (LoadI->getPointerOperand() == Store->getOperand(1)) {
+ if (LoadI->getPointerOperand() == Store->getOperand(1) ||
+ AA.isMustAlias(MemoryLocation::get(LoadI),
+ MemoryLocation::get(Store))) {
// Get the defining access for the load.
auto *LoadAccess = MSSA.getMemoryAccess(LoadI)->getDefiningAccess();
// Fast path: the defining accesses are the same.
diff --git a/llvm/test/Transforms/DeadStoreElimination/noop-stores.ll b/llvm/test/Transforms/DeadStoreElimination/noop-stores.ll
index 9fc20d76da5eb4..5bedc1ebe8281e 100644
--- a/llvm/test/Transforms/DeadStoreElimination/noop-stores.ll
+++ b/llvm/test/Transforms/DeadStoreElimination/noop-stores.ll
@@ -1152,3 +1152,14 @@ if.else:
end:
ret void
}
+
+define i32 @test_use_alias_analysis(ptr %Q) {
+; CHECK-LABEL: @test_use_alias_analysis(
+; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[Q:%.*]], align 4
+; CHECK-NEXT: ret i32 [[A]]
+;
+ %a = load i32, ptr %Q
+ %Q2 = addrspacecast ptr %Q to ptr addrspace(5)
+ store i32 %a, ptr addrspace(5) %Q2
+ ret i32 %a
+}
More information about the llvm-commits
mailing list