[PATCH] D132657: [DSE] Eliminate noop store even through has clobbering between LoadI and StoreI
    Nikita Popov via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Wed Sep 21 02:12:32 PDT 2022
    
    
  
nikic added inline comments.
================
Comment at: llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp:1872
+              if (auto *CurrentStoreI =
+                      dyn_cast<StoreInst>(CurrentDef->getMemoryInst()))
+                // Check alignment to ensure load or store does not access at an
----------------
This should use dyn_cast_or_null to account for liveOnEntry defs. Please add a test case like this, that currently crashes:
```
define void @test(i1 %c, ptr %p, ptr noalias %q) {
entry:
  br i1 %c, label %if, label %join
if:
  store i8 0, ptr %q, align 1
  br label %join
join:
  %v = load i8, ptr %q, align 1
  store i8 0, ptr %p, align 1
  store i8 %v, ptr %q, align 1
  ret void
}
```
================
Comment at: llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp:1875
+                // offset.
+                if (CurrentStoreI->getOperand(0) == LoadI &&
+                    std::min(CurrentStoreI->getAlign(), LoadI->getAlign()) >=
----------------
nit: Prefer `getValueOperand()`.
Repository:
  rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D132657/new/
https://reviews.llvm.org/D132657
    
    
More information about the llvm-commits
mailing list