[PATCH] D89550: [IndVars] Recognize 'sub nuw' expressed as 'add' for widening
Max Kazantsev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 5 23:52:05 PST 2020
mkazantsev added inline comments.
================
Comment at: llvm/lib/Transforms/Scalar/IndVarSimplify.cpp:1158
for (Use &U : NarrowUse->uses()) {
+ if (U.getUser() == NarrowDef)
+ continue;
----------------
fhahn wrote:
> This seems independent of the `add x, -y` -> `sub nuw`? Can this be split off into a separate patch? IIUC the test case for the detection without this change would be something like
>
> ```
> loop:
> %iv = phi i32 [%start, %entry], [%iv.next.1, %backedge]
> %cond = icmp eq i32 %iv, 0
> br i1 %cond, label %exit, label %backedge
>
> backedge:
> %foo = add i32 %iv, -1
> %index = zext i32 %foo to i64
> %store.addr = getelementptr i32, i32* %p, i64 %index
> store i32 1, i32* %store.addr
> %load.addr = getelementptr i32, i32* %q, i64 %index
> %stop = load i32, i32* %q
> %loop.cond = icmp eq i32 %stop, 0
> %iv.next.1 = add i32 %iv, -1
> br i1 %loop.cond, label %loop, label %failure
>
> ```
Good point, thanks for catching! I'll split it out.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D89550/new/
https://reviews.llvm.org/D89550
More information about the llvm-commits
mailing list