This compile-time slowdown was discussed earlier in the original version of the patch as well.<div><br></div><div>Where I left that thread, we asked for details about what the problem was -- was scev slower, or did it just cause some other pass to do additional work?<br><br><div class="gmail_quote"><div dir="ltr">On Wed, Jul 4, 2018, 10:27 AM Amara Emerson via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Tim,<br>
<br>
It looks like this change affects some CTMark compile time metrics. The exact amount varies depending on the build configuration, but CTMark/mafft/pairlocalalign regresses by about 2-3% consistently, and CTMark/lencod/lencod also seems to regress by about 1% too. Not necessarily blocking this commit, but letting you know it had an effect in case there’s anything you can do to improve it.<br>
<br>
Cheers,<br>
Amara<br>
<br>
> On Jul 2, 2018, at 9:01 PM, Tim Shen via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
> <br>
> Author: timshen<br>
> Date: Mon Jul  2 13:01:54 2018<br>
> New Revision: 336140<br>
> <br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=336140&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=336140&view=rev</a><br>
> Log:<br>
> [SCEV] Strengthen StrengthenNoWrapFlags (reapply r334428).<br>
> <br>
> Summary:<br>
> Comment on Transforms/LoopVersioning/incorrect-phi.ll: With the change<br>
> SCEV is able to prove that the loop doesn't wrap-self (due to zext i16<br>
> to i64), disabling the entire loop versioning pass. Removed the zext and<br>
> just use i64.<br>
> <br>
> Reviewers: sanjoy<br>
> <br>
> Subscribers: jlebar, hiraditya, javed.absar, bixia, llvm-commits<br>
> <br>
> Differential Revision: <a href="https://reviews.llvm.org/D48409" rel="noreferrer" target="_blank">https://reviews.llvm.org/D48409</a><br>
> <br>
> Modified:<br>
>    llvm/trunk/lib/Analysis/ScalarEvolution.cpp<br>
>    llvm/trunk/test/Analysis/Delinearization/a.ll<br>
>    llvm/trunk/test/Analysis/Delinearization/iv_times_constant_in_subscript.ll<br>
>    llvm/trunk/test/Analysis/IVUsers/quadradic-exit-value.ll<br>
>    llvm/trunk/test/Analysis/LoopAccessAnalysis/number-of-memchecks.ll<br>
>    llvm/trunk/test/Analysis/LoopAccessAnalysis/wrapping-pointer-versioning.ll<br>
>    llvm/trunk/test/Analysis/ScalarEvolution/different-loops-recs.ll<br>
>    llvm/trunk/test/Analysis/ScalarEvolution/extract-highbits-sameconstmask.ll<br>
>    llvm/trunk/test/Analysis/ScalarEvolution/lshr-shl-differentconstmask.ll<br>
>    llvm/trunk/test/Analysis/ScalarEvolution/nsw-offset-assume.ll<br>
>    llvm/trunk/test/Analysis/ScalarEvolution/nsw-offset.ll<br>
>    llvm/trunk/test/Analysis/ScalarEvolution/nsw.ll<br>
>    llvm/trunk/test/Analysis/ScalarEvolution/predicated-trip-count.ll<br>
>    llvm/trunk/test/Analysis/ScalarEvolution/sext-mul.ll<br>
>    llvm/trunk/test/Analysis/ScalarEvolution/shl-lshr-differentconstmask.ll<br>
>    llvm/trunk/test/Analysis/ScalarEvolution/trip-count-pow2.ll<br>
>    llvm/trunk/test/Analysis/ScalarEvolution/zext-mul.ll<br>
>    llvm/trunk/test/Transforms/LoopVersioning/incorrect-phi.ll<br>
> <br>
> Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original)<br>
> +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Mon Jul  2 13:01:54 2018<br>
> @@ -2247,22 +2247,35 @@ StrengthenNoWrapFlags(ScalarEvolution *S<br>
> <br>
>   SignOrUnsignWrap = ScalarEvolution::maskFlags(Flags, SignOrUnsignMask);<br>
> <br>
> -  if (SignOrUnsignWrap != SignOrUnsignMask && Type == scAddExpr &&<br>
> -      Ops.size() == 2 && isa<SCEVConstant>(Ops[0])) {<br>
> +  if (SignOrUnsignWrap != SignOrUnsignMask &&<br>
> +      (Type == scAddExpr || Type == scMulExpr) && Ops.size() == 2 &&<br>
> +      isa<SCEVConstant>(Ops[0])) {<br>
> <br>
> -    // (A + C) --> (A + C)<nsw> if the addition does not sign overflow<br>
> -    // (A + C) --> (A + C)<nuw> if the addition does not unsign overflow<br>
> +    auto Opcode = [&] {<br>
> +      switch (Type) {<br>
> +      case scAddExpr:<br>
> +        return Instruction::Add;<br>
> +      case scMulExpr:<br>
> +        return Instruction::Mul;<br>
> +      default:<br>
> +        llvm_unreachable("Unexpected SCEV op.");<br>
> +      }<br>
> +    }();<br>
> <br>
>     const APInt &C = cast<SCEVConstant>(Ops[0])->getAPInt();<br>
> +<br>
> +    // (A <opcode> C) --> (A <opcode> C)<nsw> if the op doesn't sign overflow.<br>
>     if (!(SignOrUnsignWrap & SCEV::FlagNSW)) {<br>
>       auto NSWRegion = ConstantRange::makeGuaranteedNoWrapRegion(<br>
> -          Instruction::Add, C, OBO::NoSignedWrap);<br>
> +          Opcode, C, OBO::NoSignedWrap);<br>
>       if (NSWRegion.contains(SE->getSignedRange(Ops[1])))<br>
>         Flags = ScalarEvolution::setFlags(Flags, SCEV::FlagNSW);<br>
>     }<br>
> +<br>
> +    // (A <opcode> C) --> (A <opcode> C)<nuw> if the op doesn't unsign overflow.<br>
>     if (!(SignOrUnsignWrap & SCEV::FlagNUW)) {<br>
>       auto NUWRegion = ConstantRange::makeGuaranteedNoWrapRegion(<br>
> -          Instruction::Add, C, OBO::NoUnsignedWrap);<br>
> +          Opcode, C, OBO::NoUnsignedWrap);<br>
>       if (NUWRegion.contains(SE->getUnsignedRange(Ops[1])))<br>
>         Flags = ScalarEvolution::setFlags(Flags, SCEV::FlagNUW);<br>
>     }<br>
> <br>
> Modified: llvm/trunk/test/Analysis/Delinearization/a.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/a.ll?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/a.ll?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/Delinearization/a.ll (original)<br>
> +++ llvm/trunk/test/Analysis/Delinearization/a.ll Mon Jul  2 13:01:54 2018<br>
> @@ -10,7 +10,7 @@<br>
> ; AddRec: {{{(28 + (4 * (-4 + (3 * %m)) * %o) + %A),+,(8 * %m * %o)}<%for.i>,+,(12 * %o)}<%for.j>,+,20}<%for.k><br>
> ; CHECK: Base offset: %A<br>
> ; CHECK: ArrayDecl[UnknownSize][%m][%o] with elements of 4 bytes.<br>
> -; CHECK: ArrayRef[{3,+,2}<%for.i>][{-4,+,3}<nw><%for.j>][{7,+,5}<nw><%for.k>]<br>
> +; CHECK: ArrayRef[{3,+,2}<nw><%for.i>][{-4,+,3}<nw><%for.j>][{7,+,5}<nw><%for.k>]<br>
> <br>
> define void @foo(i64 %n, i64 %m, i64 %o, i32* nocapture %A) #0 {<br>
> entry:<br>
> <br>
> Modified: llvm/trunk/test/Analysis/Delinearization/iv_times_constant_in_subscript.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/iv_times_constant_in_subscript.ll?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/Delinearization/iv_times_constant_in_subscript.ll?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/Delinearization/iv_times_constant_in_subscript.ll (original)<br>
> +++ llvm/trunk/test/Analysis/Delinearization/iv_times_constant_in_subscript.ll Mon Jul  2 13:01:54 2018<br>
> @@ -11,7 +11,7 @@<br>
> ; AddRec: {{((%m * %b * 8) + %A),+,(2 * %m * 8)}<%for.i>,+,(2 * 8)}<%for.j><br>
> ; CHECK: Base offset: %A<br>
> ; CHECK: ArrayDecl[UnknownSize][%m] with elements of 8 bytes.<br>
> -; CHECK: ArrayRef[{%b,+,2}<nsw><%for.i>][{0,+,2}<%for.j>]<br>
> +; CHECK: ArrayRef[{%b,+,2}<nsw><%for.i>][{0,+,2}<nuw><%for.j>]<br>
> <br>
> <br>
> define void @foo(i64 %n, i64 %m, i64 %b, double* %A) {<br>
> <br>
> Modified: llvm/trunk/test/Analysis/IVUsers/quadradic-exit-value.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/IVUsers/quadradic-exit-value.ll?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/IVUsers/quadradic-exit-value.ll?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/IVUsers/quadradic-exit-value.ll (original)<br>
> +++ llvm/trunk/test/Analysis/IVUsers/quadradic-exit-value.ll Mon Jul  2 13:01:54 2018<br>
> @@ -70,7 +70,7 @@ exit:<br>
> ; sure they aren't marked as post-inc users.<br>
> ;<br>
> ; CHECK-LABEL: IV Users for loop %test2.loop<br>
> -; CHECK-NO-LCSSA: %<a href="http://sub.cond.us" rel="noreferrer" target="_blank">sub.cond.us</a> = ((-1 * %<a href="http://sub.us" rel="noreferrer" target="_blank">sub.us</a>)<nsw> + {0,+,1}<nuw><nsw><%test2.loop>) (post-inc with loop %test2.loop) in    %<a href="http://sext.us" rel="noreferrer" target="_blank">sext.us</a> = mul i32 %<a href="http://mul.us" rel="noreferrer" target="_blank">mul.us</a>, %<a href="http://sub.cond.us" rel="noreferrer" target="_blank">sub.cond.us</a><br>
> +; CHECK-NO-LCSSA: %<a href="http://sub.cond.us" rel="noreferrer" target="_blank">sub.cond.us</a> = ((-1 * %<a href="http://sub.us" rel="noreferrer" target="_blank">sub.us</a>)<nuw><nsw> + {0,+,1}<nuw><nsw><%test2.loop>) (post-inc with loop %test2.loop) in    %<a href="http://sext.us" rel="noreferrer" target="_blank">sext.us</a> = mul i32 %<a href="http://mul.us" rel="noreferrer" target="_blank">mul.us</a>, %<a href="http://sub.cond.us" rel="noreferrer" target="_blank">sub.cond.us</a><br>
> define i32 @test2() {<br>
> entry:<br>
>   br label %test2.loop<br>
> <br>
> Modified: llvm/trunk/test/Analysis/LoopAccessAnalysis/number-of-memchecks.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/LoopAccessAnalysis/number-of-memchecks.ll?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/LoopAccessAnalysis/number-of-memchecks.ll?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/LoopAccessAnalysis/number-of-memchecks.ll (original)<br>
> +++ llvm/trunk/test/Analysis/LoopAccessAnalysis/number-of-memchecks.ll Mon Jul  2 13:01:54 2018<br>
> @@ -251,10 +251,10 @@ for.end:<br>
> ; CHECK-NEXT:         Member: {((2 * %offset) + %a)<nsw>,+,2}<nsw><%for.body><br>
> ; CHECK-NEXT:     Group {{.*}}[[ONE]]:<br>
> ; CHECK-NEXT:       (Low: %a High: (10000 + %a))<br>
> -; CHECK-NEXT:         Member: {%a,+,2}<%for.body><br>
> +; CHECK-NEXT:         Member: {%a,+,2}<nw><%for.body><br>
> ; CHECK-NEXT:     Group {{.*}}[[TWO]]:<br>
> ; CHECK-NEXT:       (Low: (20000 + %a) High: (30000 + %a))<br>
> -; CHECK-NEXT:         Member: {(20000 + %a),+,2}<%for.body><br>
> +; CHECK-NEXT:         Member: {(20000 + %a),+,2}<nw><%for.body><br>
> <br>
> define void @testi(i16* %a,<br>
>                    i64 %offset) {<br>
> <br>
> Modified: llvm/trunk/test/Analysis/LoopAccessAnalysis/wrapping-pointer-versioning.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/LoopAccessAnalysis/wrapping-pointer-versioning.ll?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/LoopAccessAnalysis/wrapping-pointer-versioning.ll?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/LoopAccessAnalysis/wrapping-pointer-versioning.ll (original)<br>
> +++ llvm/trunk/test/Analysis/LoopAccessAnalysis/wrapping-pointer-versioning.ll Mon Jul  2 13:01:54 2018<br>
> @@ -33,7 +33,7 @@ target datalayout = "e-m:o-i64:64-f80:12<br>
> ;    i64 {0,+,2}<%for.body><br>
> <br>
> ; LAA: [PSE]  %arrayidxA = getelementptr i16, i16* %a, i64 %mul_ext:<br>
> -; LAA-NEXT: ((2 * (zext i32 {0,+,2}<%for.body> to i64)) + %a)<br>
> +; LAA-NEXT: ((2 * (zext i32 {0,+,2}<%for.body> to i64))<nuw><nsw> + %a)<br>
> ; LAA-NEXT: --> {%a,+,4}<%for.body><br>
> <br>
> <br>
> @@ -130,7 +130,7 @@ for.end:<br>
> ;     i64 {zext i32 (2 * (trunc i64 %N to i32)) to i64,+,-2}<%for.body><br>
> <br>
> ; LAA: [PSE]  %arrayidxA = getelementptr i16, i16* %a, i64 %mul_ext:<br>
> -; LAA-NEXT: ((2 * (zext i32 {(2 * (trunc i64 %N to i32)),+,-2}<%for.body> to i64)) + %a)<br>
> +; LAA-NEXT: ((2 * (zext i32 {(2 * (trunc i64 %N to i32)),+,-2}<%for.body> to i64))<nuw><nsw> + %a)<br>
> ; LAA-NEXT: --> {((4 * (zext i31 (trunc i64 %N to i31) to i64)) + %a),+,-4}<%for.body><br>
> <br>
> ; LV-LABEL: f2<br>
> @@ -210,7 +210,7 @@ for.end:<br>
> ;     i64 {0,+,2}<%for.body><br>
> <br>
> ; LAA: [PSE]  %arrayidxA = getelementptr i16, i16* %a, i64 %mul_ext:<br>
> -; LAA-NEXT: ((2 * (sext i32 {0,+,2}<%for.body> to i64)) + %a)<br>
> +; LAA-NEXT: ((2 * (sext i32 {0,+,2}<%for.body> to i64))<nsw> + %a)<br>
> ; LAA-NEXT: --> {%a,+,4}<%for.body><br>
> <br>
> ; LV-LABEL: f3<br>
> @@ -278,7 +278,7 @@ for.end:<br>
> ; LAA: Memory dependences are safe{{$}}<br>
> ; LAA: SCEV assumptions:<br>
> ; LAA-NEXT: {(2 * (trunc i64 %N to i32)),+,-2}<%for.body> Added Flags: <nssw><br>
> -; LAA-NEXT: {((2 * (sext i32 (2 * (trunc i64 %N to i32)) to i64)) + %a),+,-4}<%for.body> Added Flags: <nusw><br>
> +; LAA-NEXT: {((2 * (sext i32 (2 * (trunc i64 %N to i32)) to i64))<nsw> + %a),+,-4}<%for.body> Added Flags: <nusw><br>
> <br>
> ; The expression for %mul_ext as analyzed by SCEV is<br>
> ;     i64  (sext i32 {(2 * (trunc i64 %N to i32)),+,-2}<%for.body> to i64)<br>
> @@ -286,8 +286,8 @@ for.end:<br>
> ;     i64 {sext i32 (2 * (trunc i64 %N to i32)) to i64,+,-2}<%for.body><br>
> <br>
> ; LAA: [PSE]  %arrayidxA = getelementptr i16, i16* %a, i64 %mul_ext:<br>
> -; LAA-NEXT: ((2 * (sext i32 {(2 * (trunc i64 %N to i32)),+,-2}<%for.body> to i64)) + %a)<br>
> -; LAA-NEXT: --> {((2 * (sext i32 (2 * (trunc i64 %N to i32)) to i64)) + %a),+,-4}<%for.body><br>
> +; LAA-NEXT: ((2 * (sext i32 {(2 * (trunc i64 %N to i32)),+,-2}<%for.body> to i64))<nsw> + %a)<br>
> +; LAA-NEXT: --> {((2 * (sext i32 (2 * (trunc i64 %N to i32)) to i64))<nsw> + %a),+,-4}<%for.body><br>
> <br>
> ; LV-LABEL: f4<br>
> ; LV-LABEL: for.body.lver.check<br>
> @@ -362,11 +362,11 @@ for.end:<br>
> ; LAA: Memory dependences are safe{{$}}<br>
> ; LAA: SCEV assumptions:<br>
> ; LAA-NEXT: {(2 * (trunc i64 %N to i32)),+,-2}<%for.body> Added Flags: <nssw><br>
> -; LAA-NEXT: {((2 * (sext i32 (2 * (trunc i64 %N to i32)) to i64)) + %a),+,-4}<%for.body> Added Flags: <nusw><br>
> +; LAA-NEXT: {((2 * (sext i32 (2 * (trunc i64 %N to i32)) to i64))<nsw> + %a),+,-4}<%for.body> Added Flags: <nusw><br>
> <br>
> ; LAA: [PSE]  %arrayidxA = getelementptr inbounds i16, i16* %a, i32 %mul:<br>
> ; LAA-NEXT: ((2 * (sext i32 {(2 * (trunc i64 %N to i32)),+,-2}<%for.body> to i64))<nsw> + %a)<nsw><br>
> -; LAA-NEXT: --> {((2 * (sext i32 (2 * (trunc i64 %N to i32)) to i64)) + %a),+,-4}<%for.body><br>
> +; LAA-NEXT: --> {((2 * (sext i32 (2 * (trunc i64 %N to i32)) to i64))<nsw> + %a),+,-4}<%for.body><br>
> <br>
> ; LV-LABEL: f5<br>
> ; LV-LABEL: for.body.lver.check<br>
> <br>
> Modified: llvm/trunk/test/Analysis/ScalarEvolution/different-loops-recs.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/different-loops-recs.ll?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/different-loops-recs.ll?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/ScalarEvolution/different-loops-recs.ll (original)<br>
> +++ llvm/trunk/test/Analysis/ScalarEvolution/different-loops-recs.ll Mon Jul  2 13:01:54 2018<br>
> @@ -322,7 +322,7 @@ define void @test_05(i32 %N) {<br>
> ; CHECK:       %SQ = mul i32 %i.0, %i.0<br>
> ; CHECK-NEXT:  -->  {4,+,5,+,2}<%bb3><br>
> ; CHECK:       %tmp4 = mul i32 %i.0, 2<br>
> -; CHECK-NEXT:  -->  {4,+,2}<%bb3><br>
> +; CHECK-NEXT:  -->  {4,+,2}<nuw><nsw><%bb3><br>
> ; CHECK:       %tmp5 = sub i32 %SQ, %tmp4<br>
> ; CHECK-NEXT:  -->  {0,+,3,+,2}<%bb3><br>
> <br>
> <br>
> Modified: llvm/trunk/test/Analysis/ScalarEvolution/extract-highbits-sameconstmask.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/extract-highbits-sameconstmask.ll?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/extract-highbits-sameconstmask.ll?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/ScalarEvolution/extract-highbits-sameconstmask.ll (original)<br>
> +++ llvm/trunk/test/Analysis/ScalarEvolution/extract-highbits-sameconstmask.ll Mon Jul  2 13:01:54 2018<br>
> @@ -8,7 +8,7 @@ define i32 @div(i32 %val) nounwind {<br>
> ; CHECK-NEXT:    %tmp1 = udiv i32 %val, 16<br>
> ; CHECK-NEXT:    -->  (%val /u 16) U: [0,268435456) S: [0,268435456)<br>
> ; CHECK-NEXT:    %tmp2 = mul i32 %tmp1, 16<br>
> -; CHECK-NEXT:    -->  (16 * (%val /u 16)) U: [0,-15) S: [0,-15)<br>
> +; CHECK-NEXT:    -->  (16 * (%val /u 16))<nuw> U: [0,-15) S: [0,-15)<br>
> ; CHECK-NEXT:  Determining loop execution counts for: @div<br>
> ;<br>
>   %tmp1 = udiv i32 %val, 16<br>
> @@ -22,7 +22,7 @@ define i32 @sdiv(i32 %val) nounwind {<br>
> ; CHECK-NEXT:    %tmp1 = sdiv i32 %val, 16<br>
> ; CHECK-NEXT:    -->  %tmp1 U: full-set S: [-134217728,134217728)<br>
> ; CHECK-NEXT:    %tmp2 = mul i32 %tmp1, 16<br>
> -; CHECK-NEXT:    -->  (16 * %tmp1) U: [0,-15) S: <a href="tel:(214)%20748-3648" value="+12147483648" target="_blank">[-2147483648</a>,<a href="tel:(214)%20748-3633" value="+12147483633" target="_blank">2147483633</a>)<br>
> +; CHECK-NEXT:    -->  (16 * %tmp1)<nsw> U: [0,-15) S: <a href="tel:(214)%20748-3648" value="+12147483648" target="_blank">[-2147483648</a>,<a href="tel:(214)%20748-3633" value="+12147483633" target="_blank">2147483633</a>)<br>
> ; CHECK-NEXT:  Determining loop execution counts for: @sdiv<br>
> ;<br>
>   %tmp1 = sdiv i32 %val, 16<br>
> @@ -38,7 +38,7 @@ define i32 @mask_b(i32 %val) nounwind {<br>
> ; CHECK-LABEL: 'mask_b'<br>
> ; CHECK-NEXT:  Classifying expressions for: @mask_b<br>
> ; CHECK-NEXT:    %masked = and i32 %val, -16<br>
> -; CHECK-NEXT:    -->  (16 * (%val /u 16)) U: [0,-15) S: [0,-15)<br>
> +; CHECK-NEXT:    -->  (16 * (%val /u 16))<nuw> U: [0,-15) S: [0,-15)<br>
> ; CHECK-NEXT:  Determining loop execution counts for: @mask_b<br>
> ;<br>
>   %masked = and i32 %val, -16<br>
> @@ -51,7 +51,7 @@ define i32 @mask_d(i32 %val) nounwind {<br>
> ; CHECK-NEXT:    %lowbitscleared = lshr i32 %val, 4<br>
> ; CHECK-NEXT:    -->  (%val /u 16) U: [0,268435456) S: [0,268435456)<br>
> ; CHECK-NEXT:    %masked = shl i32 %lowbitscleared, 4<br>
> -; CHECK-NEXT:    -->  (16 * (%val /u 16)) U: [0,-15) S: [0,-15)<br>
> +; CHECK-NEXT:    -->  (16 * (%val /u 16))<nuw> U: [0,-15) S: [0,-15)<br>
> ; CHECK-NEXT:  Determining loop execution counts for: @mask_d<br>
> ;<br>
>   %lowbitscleared = lshr i32 %val, 4<br>
> <br>
> Modified: llvm/trunk/test/Analysis/ScalarEvolution/lshr-shl-differentconstmask.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/lshr-shl-differentconstmask.ll?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/lshr-shl-differentconstmask.ll?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/ScalarEvolution/lshr-shl-differentconstmask.ll (original)<br>
> +++ llvm/trunk/test/Analysis/ScalarEvolution/lshr-shl-differentconstmask.ll Mon Jul  2 13:01:54 2018<br>
> @@ -8,7 +8,7 @@ define i32 @udiv_biggerLshr(i32 %val) no<br>
> ; CHECK-NEXT:    %tmp1 = udiv i32 %val, 64<br>
> ; CHECK-NEXT:    -->  (%val /u 64) U: [0,67108864) S: [0,67108864)<br>
> ; CHECK-NEXT:    %tmp2 = mul i32 %tmp1, 16<br>
> -; CHECK-NEXT:    -->  (16 * (%val /u 64)) U: [0,1073741809) S: [0,1073741809)<br>
> +; CHECK-NEXT:    -->  (16 * (%val /u 64))<nuw><nsw> U: [0,1073741809) S: [0,1073741809)<br>
> ; CHECK-NEXT:  Determining loop execution counts for: @udiv_biggerLshr<br>
> ;<br>
>   %tmp1 = udiv i32 %val, 64<br>
> @@ -38,7 +38,7 @@ define i32 @shifty_biggerLshr(i32 %val)<br>
> ; CHECK-NEXT:    %tmp1 = lshr i32 %val, 6<br>
> ; CHECK-NEXT:    -->  (%val /u 64) U: [0,67108864) S: [0,67108864)<br>
> ; CHECK-NEXT:    %tmp2 = shl i32 %tmp1, 4<br>
> -; CHECK-NEXT:    -->  (16 * (%val /u 64)) U: [0,1073741809) S: [0,1073741809)<br>
> +; CHECK-NEXT:    -->  (16 * (%val /u 64))<nuw><nsw> U: [0,1073741809) S: [0,1073741809)<br>
> ; CHECK-NEXT:  Determining loop execution counts for: @shifty_biggerLshr<br>
> ;<br>
>   %tmp1 = lshr i32 %val, 6<br>
> @@ -52,7 +52,7 @@ define i32 @shifty_biggerLshr_lshrexact(<br>
> ; CHECK-NEXT:    %tmp1 = lshr exact i32 %val, 6<br>
> ; CHECK-NEXT:    -->  (%val /u 64) U: [0,67108864) S: [0,67108864)<br>
> ; CHECK-NEXT:    %tmp2 = shl i32 %tmp1, 4<br>
> -; CHECK-NEXT:    -->  (16 * (%val /u 64)) U: [0,1073741809) S: [0,1073741809)<br>
> +; CHECK-NEXT:    -->  (16 * (%val /u 64))<nuw><nsw> U: [0,1073741809) S: [0,1073741809)<br>
> ; CHECK-NEXT:  Determining loop execution counts for: @shifty_biggerLshr_lshrexact<br>
> ;<br>
>   %tmp1 = lshr exact i32 %val, 6<br>
> @@ -96,7 +96,7 @@ define i32 @masky_biggerLshr(i32 %val) {<br>
> ; CHECK-NEXT:    %tmp1 = lshr i32 %val, 2<br>
> ; CHECK-NEXT:    -->  (%val /u 4) U: [0,1073741824) S: [0,1073741824)<br>
> ; CHECK-NEXT:    %tmp2 = and i32 %tmp1, -16<br>
> -; CHECK-NEXT:    -->  (16 * (%val /u 64)) U: [0,1073741809) S: [0,1073741809)<br>
> +; CHECK-NEXT:    -->  (16 * (%val /u 64))<nuw><nsw> U: [0,1073741809) S: [0,1073741809)<br>
> ; CHECK-NEXT:  Determining loop execution counts for: @masky_biggerLshr<br>
> ;<br>
>   %tmp1 = lshr i32 %val, 2<br>
> @@ -121,7 +121,7 @@ define i32 @masky_biggerShr(i32 %val) {<br>
> ; CHECK-NEXT:    %tmp1 = shl i32 %val, 2<br>
> ; CHECK-NEXT:    -->  (4 * %val) U: [0,-3) S: <a href="tel:(214)%20748-3648" value="+12147483648" target="_blank">[-2147483648</a>,<a href="tel:(214)%20748-3645" value="+12147483645" target="_blank">2147483645</a>)<br>
> ; CHECK-NEXT:    %tmp2 = and i32 %tmp1, -64<br>
> -; CHECK-NEXT:    -->  (64 * (zext i26 (trunc i32 (%val /u 16) to i26) to i32)) U: [0,-63) S: [0,-63)<br>
> +; CHECK-NEXT:    -->  (64 * (zext i26 (trunc i32 (%val /u 16) to i26) to i32))<nuw> U: [0,-63) S: [0,-63)<br>
> ; CHECK-NEXT:  Determining loop execution counts for: @masky_biggerShr<br>
> ;<br>
>   %tmp1 = shl i32 %val, 2<br>
> <br>
> Modified: llvm/trunk/test/Analysis/ScalarEvolution/nsw-offset-assume.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/nsw-offset-assume.ll?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/nsw-offset-assume.ll?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/ScalarEvolution/nsw-offset-assume.ll (original)<br>
> +++ llvm/trunk/test/Analysis/ScalarEvolution/nsw-offset-assume.ll Mon Jul  2 13:01:54 2018<br>
> @@ -79,5 +79,5 @@ declare void @llvm.assume(i1) nounwind<br>
> <br>
> ; Note: Without the preheader assume, there is an 'smax' in the<br>
> ; backedge-taken count expression:<br>
> -; CHECK: Loop %bb: backedge-taken count is ((-1 + (2 * (%no /u 2))) /u 2)<br>
> +; CHECK: Loop %bb: backedge-taken count is ((-1 + (2 * (%no /u 2))<nuw>) /u 2)<br>
> ; CHECK: Loop %bb: max backedge-taken count is 1073741822<br>
> <br>
> Modified: llvm/trunk/test/Analysis/ScalarEvolution/nsw-offset.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/nsw-offset.ll?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/nsw-offset.ll?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/ScalarEvolution/nsw-offset.ll (original)<br>
> +++ llvm/trunk/test/Analysis/ScalarEvolution/nsw-offset.ll Mon Jul  2 13:01:54 2018<br>
> @@ -73,5 +73,5 @@ return:<br>
>   ret void<br>
> }<br>
> <br>
> -; CHECK: Loop %bb: backedge-taken count is ((-1 + (2 * (%no /u 2))) /u 2)<br>
> +; CHECK: Loop %bb: backedge-taken count is ((-1 + (2 * (%no /u 2))<nuw>) /u 2)<br>
> ; CHECK: Loop %bb: max backedge-taken count is 1073741822<br>
> <br>
> Modified: llvm/trunk/test/Analysis/ScalarEvolution/nsw.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/nsw.ll?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/nsw.ll?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/ScalarEvolution/nsw.ll (original)<br>
> +++ llvm/trunk/test/Analysis/ScalarEvolution/nsw.ll Mon Jul  2 13:01:54 2018<br>
> @@ -126,7 +126,7 @@ exit:<br>
> }<br>
> <br>
> ; CHECK-LABEL: PR12375<br>
> -; CHECK: -->  {(4 + %arg)<nsw>,+,4}<nuw><%bb1>{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: (4 + (4 * ((-1 + (-1 * %arg) + ((4 + %arg)<nsw> umax (8 + %arg)<nsw>)) /u 4)) + %arg)<br>
> +; CHECK: -->  {(4 + %arg)<nsw>,+,4}<nuw><%bb1>{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: (4 + (4 * ((-1 + (-1 * %arg) + ((4 + %arg)<nsw> umax (8 + %arg)<nsw>)) /u 4))<nuw> + %arg)<br>
> define i32 @PR12375(i32* readnone %arg) {<br>
> bb:<br>
>   %tmp = getelementptr inbounds i32, i32* %arg, i64 2<br>
> @@ -145,7 +145,7 @@ bb7:<br>
> }<br>
> <br>
> ; CHECK-LABEL: PR12376<br>
> -; CHECK: -->  {(4 + %arg)<nsw>,+,4}<nuw><%bb2>{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: (4 + (4 * ((-1 + (-1 * %arg) + ((4 + %arg)<nsw> umax %arg1)) /u 4)) + %arg)<br>
> +; CHECK: -->  {(4 + %arg)<nsw>,+,4}<nuw><%bb2>{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: (4 + (4 * ((-1 + (-1 * %arg) + ((4 + %arg)<nsw> umax %arg1)) /u 4))<nuw> + %arg)<br>
> define void @PR12376(i32* nocapture %arg, i32* nocapture %arg1)  {<br>
> bb:<br>
>   br label %bb2<br>
> <br>
> Modified: llvm/trunk/test/Analysis/ScalarEvolution/predicated-trip-count.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/predicated-trip-count.ll?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/predicated-trip-count.ll?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/ScalarEvolution/predicated-trip-count.ll (original)<br>
> +++ llvm/trunk/test/Analysis/ScalarEvolution/predicated-trip-count.ll Mon Jul  2 13:01:54 2018<br>
> @@ -80,7 +80,7 @@ return:         ; preds = %bb5<br>
> ; CHECK-NEXT:    -->  (sext i16 {%Start,+,-1}<%bb3> to i32)<br>
> ; CHECK:       Loop %bb3: Unpredictable backedge-taken count.<br>
> ; CHECK-NEXT:  Loop %bb3: Unpredictable max backedge-taken count.<br>
> -; CHECK-NEXT:  Loop %bb3: Predicated backedge-taken count is (2 + (sext i16 %Start to i32) + ((-2 + (-1 * (sext i16 %Start to i32))) smax (-1 + (-1 * %M))))<br>
> +; CHECK-NEXT:  Loop %bb3: Predicated backedge-taken count is (2 + (sext i16 %Start to i32) + ((-2 + (-1 * (sext i16 %Start to i32))<nsw>) smax (-1 + (-1 * %M))))<br>
> ; CHECK-NEXT:  Predicates:<br>
> ; CHECK-NEXT:    {%Start,+,-1}<%bb3> Added Flags: <nssw><br>
> <br>
> <br>
> Modified: llvm/trunk/test/Analysis/ScalarEvolution/sext-mul.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/sext-mul.ll?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/sext-mul.ll?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/ScalarEvolution/sext-mul.ll (original)<br>
> +++ llvm/trunk/test/Analysis/ScalarEvolution/sext-mul.ll Mon Jul  2 13:01:54 2018<br>
> @@ -5,11 +5,11 @@<br>
> ; CHECK: %tmp10 = ashr exact i64 %tmp9, 32<br>
> ; CHECK-NEXT: --> {{.*}} Exits: (sext i32 (-2 + (2 * %arg2)) to i64)<br>
> ; CHECK: %tmp11 = getelementptr inbounds i32, i32* %arg, i64 %tmp10<br>
> -; CHECK-NEXT: --> {{.*}} Exits: ((4 * (sext i32 (-2 + (2 * %arg2)) to i64)) + %arg)<br>
> +; CHECK-NEXT: --> {{.*}} Exits: ((4 * (sext i32 (-2 + (2 * %arg2)) to i64))<nsw> + %arg)<br>
> ; CHECK:  %tmp14 = or i64 %tmp10, 1<br>
> ; CHECK-NEXT: --> {{.*}} Exits: (1 + (sext i32 (-2 + (2 * %arg2)) to i64))<nsw><br>
> ; CHECK: %tmp15 = getelementptr inbounds i32, i32* %arg, i64 %tmp14<br>
> -; CHECK-NEXT: --> {{.*}} Exits: (4 + (4 * (sext i32 (-2 + (2 * %arg2)) to i64)) + %arg)<br>
> +; CHECK-NEXT: --> {{.*}} Exits: (4 + (4 * (sext i32 (-2 + (2 * %arg2)) to i64))<nsw> + %arg)<br>
> ; CHECK:Loop %bb7: backedge-taken count is (-1 + (zext i32 %arg2 to i64))<nsw><br>
> ; CHECK-NEXT:Loop %bb7: max backedge-taken count is -1<br>
> ; CHECK-NEXT:Loop %bb7: Predicated backedge-taken count is (-1 + (zext i32 %arg2 to i64))<nsw><br>
> <br>
> Modified: llvm/trunk/test/Analysis/ScalarEvolution/shl-lshr-differentconstmask.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/shl-lshr-differentconstmask.ll?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/shl-lshr-differentconstmask.ll?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/te<a href="https://maps.google.com/?q=st/An&entry=gmail&source=g">st/An</a>alysis/ScalarEvolution/shl-lshr-differentconstmask.ll (original)<br>
> +++ llvm/trunk/test/Analysis/ScalarEvolution/shl-lshr-differentconstmask.ll Mon Jul  2 13:01:54 2018<br>
> @@ -96,7 +96,7 @@ define i32 @masky_biggerShl(i32 %val) {<br>
> ; CHECK-NEXT:    %tmp1 = shl i32 %val, 2<br>
> ; CHECK-NEXT:    -->  (4 * %val) U: [0,-3) S: <a href="tel:(214)%20748-3648" value="+12147483648" target="_blank">[-2147483648</a>,<a href="tel:(214)%20748-3645" value="+12147483645" target="_blank">2147483645</a>)<br>
> ; CHECK-NEXT:    %tmp2 = and i32 %tmp1, 268435452<br>
> -; CHECK-NEXT:    -->  (4 * (zext i26 (trunc i32 %val to i26) to i32)) U: [0,268435453) S: [0,268435453)<br>
> +; CHECK-NEXT:    -->  (4 * (zext i26 (trunc i32 %val to i26) to i32))<nuw><nsw> U: [0,268435453) S: [0,268435453)<br>
> ; CHECK-NEXT:  Determining loop execution counts for: @masky_biggerShl<br>
> ;<br>
>   %tmp1 = shl i32 %val, 2<br>
> <br>
> Modified: llvm/trunk/test/Analysis/ScalarEvolution/trip-count-pow2.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/trip-count-pow2.ll?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/trip-count-pow2.ll?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/ScalarEvolution/trip-count-pow2.ll (original)<br>
> +++ llvm/trunk/test/Analysis/ScalarEvolution/trip-count-pow2.ll Mon Jul  2 13:01:54 2018<br>
> @@ -31,7 +31,7 @@ exit:<br>
>   ret i32 %i<br>
> <br>
> ; CHECK-LABEL: @test2<br>
> -; CHECK: Loop %loop: backedge-taken count is ((-32 + (32 * (%n /u 32))) /u 32)<br>
> +; CHECK: Loop %loop: backedge-taken count is ((-32 + (32 * (%n /u 32))<nuw>) /u 32)<br>
> ; CHECK: Loop %loop: max backedge-taken count is 134217727<br>
> }<br>
> <br>
> <br>
> Modified: llvm/trunk/test/Analysis/ScalarEvolution/zext-mul.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/zext-mul.ll?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/zext-mul.ll?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Analysis/ScalarEvolution/zext-mul.ll (original)<br>
> +++ llvm/trunk/test/Analysis/ScalarEvolution/zext-mul.ll Mon Jul  2 13:01:54 2018<br>
> @@ -19,16 +19,20 @@ define void @no_range() {<br>
> }<br>
> <br>
> ; CHECK-LABEL: @range<br>
> -;<br>
> -; This had to be disabled when r334428 was reverted.  We should enable this test<br>
> -; when r334428 is reapplied with a fix.<br>
> define void @range() {<br>
> -  %a = call i32 @get_int(), !range !0<br>
> +  %a = call i32 @get_int(), !range !{i32 0, i32 100}<br>
>   %b = mul i32 %a, 4<br>
>   %c = zext i32 %b to i64<br>
>   ; CHECK: %c<br>
> -  ; CHECK-NEXT: --> (zext i32 (4 * %a) to i64)<br>
> +  ; CHECK-NEXT: --> (4 * (zext i32 %a to i64))<nuw><nsw><br>
>   ret void<br>
> }<br>
> <br>
> -!0 = !{i32 0, i32 100}<br>
> +; CHECK-LABEL: @no_nuw<br>
> +define void @no_nuw() {<br>
> +  %a = call i32 @get_int(), !range !{i32 0, i32 3}<br>
> +  %b = mul i32 %a, -100<br>
> +  ; CHECK: %b<br>
> +  ; CHECK-NEXT: -->  (-100 * %a)<nsw><br>
> +  ret void<br>
> +}<br>
> <br>
> Modified: llvm/trunk/test/Transforms/LoopVersioning/incorrect-phi.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopVersioning/incorrect-phi.ll?rev=336140&r1=336139&r2=336140&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopVersioning/incorrect-phi.ll?rev=336140&r1=336139&r2=336140&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Transforms/LoopVersioning/incorrect-phi.ll (original)<br>
> +++ llvm/trunk/test/Transforms/LoopVersioning/incorrect-phi.ll Mon Jul  2 13:01:54 2018<br>
> @@ -14,18 +14,17 @@ <a href="http://bb6.lr.ph" rel="noreferrer" target="_blank">bb6.lr.ph</a>:<br>
>   br label %bb6<br>
> <br>
> bb6:                                              ; preds = %<a href="http://bb6.lr.ph" rel="noreferrer" target="_blank">bb6.lr.ph</a>, %bb6<br>
> -  %_tmp1423 = phi i16 [ undef, %<a href="http://bb6.lr.ph" rel="noreferrer" target="_blank">bb6.lr.ph</a> ], [ %_tmp142, %bb6 ]<br>
> +  %_tmp1423 = phi i64 [ undef, %<a href="http://bb6.lr.ph" rel="noreferrer" target="_blank">bb6.lr.ph</a> ], [ %_tmp142, %bb6 ]<br>
>   %_tmp123 = getelementptr [2 x [3 x [5 x i16]]], [2 x [3 x [5 x i16]]]* @x, i16 0, i64 undef<br>
> -  %_tmp125 = sext i16 %_tmp1423 to i64<br>
> -  %_tmp126 = getelementptr [3 x [5 x i16]], [3 x [5 x i16]]* %_tmp123, i16 0, i64 %_tmp125<br>
> +  %_tmp126 = getelementptr [3 x [5 x i16]], [3 x [5 x i16]]* %_tmp123, i16 0, i64 %_tmp1423<br>
>   %_tmp129 = getelementptr [5 x i16], [5 x i16]* %_tmp126, i16 0, i64 undef<br>
>   %_tmp130 = load i16, i16* %_tmp129<br>
>   store i16 undef, i16* getelementptr ([2 x [3 x [5 x i16]]], [2 x [3 x [5 x i16]]]* @x, i64 0, i64 undef, i64 undef, i64 undef)<br>
> -  %_tmp142 = add i16 %_tmp1423, 1<br>
> +  %_tmp142 = add i64 %_tmp1423, 1<br>
>   br i1 false, label %bb6, label %loop.exit<br>
> <br>
> loop.exit:                                ; preds = %bb6<br>
> -  %_tmp142.lcssa = phi i16 [ %_tmp142, %bb6 ]<br>
> +  %_tmp142.lcssa = phi i64 [ %_tmp142, %bb6 ]<br>
>   %split = phi i16 [ undef, %bb6 ]<br>
> ; CHECK: %split = phi i16 [ undef, %bb6 ], [ undef, %bb6.lver.orig ]<br>
>   br label %bb9<br>
> @@ -41,18 +40,17 @@ <a href="http://bb6.lr.ph" rel="noreferrer" target="_blank">bb6.lr.ph</a>:<br>
>   br label %bb6<br>
> <br>
> bb6:                                              ; preds = %<a href="http://bb6.lr.ph" rel="noreferrer" target="_blank">bb6.lr.ph</a>, %bb6<br>
> -  %_tmp1423 = phi i16 [ undef, %<a href="http://bb6.lr.ph" rel="noreferrer" target="_blank">bb6.lr.ph</a> ], [ %_tmp142, %bb6 ]<br>
> +  %_tmp1423 = phi i64 [ undef, %<a href="http://bb6.lr.ph" rel="noreferrer" target="_blank">bb6.lr.ph</a> ], [ %_tmp142, %bb6 ]<br>
>   %_tmp123 = getelementptr [2 x [3 x [5 x i16]]], [2 x [3 x [5 x i16]]]* @x, i16 0, i64 undef<br>
> -  %_tmp125 = sext i16 %_tmp1423 to i64<br>
> -  %_tmp126 = getelementptr [3 x [5 x i16]], [3 x [5 x i16]]* %_tmp123, i16 0, i64 %_tmp125<br>
> +  %_tmp126 = getelementptr [3 x [5 x i16]], [3 x [5 x i16]]* %_tmp123, i16 0, i64 %_tmp1423<br>
>   %_tmp129 = getelementptr [5 x i16], [5 x i16]* %_tmp126, i16 0, i64 undef<br>
>   %_tmp130 = load i16, i16* %_tmp129<br>
>   store i16 undef, i16* getelementptr ([2 x [3 x [5 x i16]]], [2 x [3 x [5 x i16]]]* @x, i64 0, i64 undef, i64 undef, i64 undef)<br>
> -  %_tmp142 = add i16 %_tmp1423, 1<br>
> +  %_tmp142 = add i64 %_tmp1423, 1<br>
>   br i1 false, label %bb6, label %loop.exit<br>
> <br>
> loop.exit:                                ; preds = %bb6<br>
> -  %_tmp142.lcssa = phi i16 [ %_tmp142, %bb6 ]<br>
> +  %_tmp142.lcssa = phi i64 [ %_tmp142, %bb6 ]<br>
>   %split = phi i16 [ %t, %bb6 ]<br>
> ; CHECK: %split = phi i16 [ %t, %bb6 ], [ %t, %bb6.lver.orig ]<br>
>   br label %bb9<br>
> <br>
> <br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div>