[PATCH] D92045: [DSE] Consider out-of-bound writes in isOverwrite.
Florian Hahn via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 18 07:56:09 PST 2020
fhahn abandoned this revision.
fhahn added a comment.
In D92045#2458839 <https://reviews.llvm.org/D92045#2458839>, @nikic wrote:
> Thinking about this a bit more, here is one more variation of this problem:
>
> ; opt -scoped-noalias-aa -dse
> define void @test(i1 %c, i8* %p1, i8* %p2) {
> store i8 0, i8* %p1
> br i1 %c, label %if, label %else
>
> if:
> store i8 1, i8* %p1, !noalias !2
> ret void
>
> else:
> load i8, i8* %p2, !alias.scope !2
> store i8 2, i8* %p1
> ret void
> }
>
> !0 = !{!0}
> !1 = !{!1, !0}
> !2 = !{!1}
>
> Let's say that `%p1 == %p2` if `%c == false`. I believe the noalias metadata is legal in that case, as the branch claiming noalias will not be executed. However, the current DSE logic will decide that `store i8 0` is dead, because the `store i8 1` does not alias with the `load i8` due to the alias metadata attached to them. However, the metadata used to derive that fact is not actually applicable on this branch (using metadata from the `store i8 0` would be legal though, as it is a dominating store).
That's a great motivation to change the order sooner, thanks for putting up D93523 <https://reviews.llvm.org/D93523>!
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D92045/new/
https://reviews.llvm.org/D92045
More information about the llvm-commits
mailing list