[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