[all-commits] [llvm/llvm-project] f079ba: [DSE] Eliminate noop store even through has clobbe...

luxufan via All-commits all-commits at lists.llvm.org
Thu Sep 29 09:44:22 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: f079ba76cf0fe0c105f1ce05636342bc2dbe57b4
      https://github.com/llvm/llvm-project/commit/f079ba76cf0fe0c105f1ce05636342bc2dbe57b4
  Author: luxufan <luxufan at iscas.ac.cn>
  Date:   2022-09-29 (Thu, 29 Sep 2022)

  Changed paths:
    M llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
    M llvm/test/Transforms/DeadStoreElimination/noop-stores.ll
    M llvm/test/Transforms/DeadStoreElimination/stores-of-existing-values.ll

  Log Message:
  -----------
  [DSE] Eliminate noop store even through has clobbering between LoadI and StoreI

For noop store of the form of LoadI and StoreI,
An invariant should be kept is that the memory state of the related
MemoryLoc before LoadI is the same as before StoreI.
For this example:
```
define void @pr49927(i32* %q, i32* %p) {
  %v = load i32, i32* %p, align 4
  store i32 %v, i32* %q, align 4
  store i32 %v, i32* %p, align 4
  ret void
}
```
Here the definition of the store's destination is different with the
definition of the load's destination, which it seems that the
invariant mentioned above is broken. But the definition of the
store's destination would write a value that is LoadI, actually, the
invariant is still kept. So we can safely ignore it.

Fixes https://github.com/llvm/llvm-project/issues/49271

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D132657




More information about the All-commits mailing list