<div dir="ltr"><div dir="ltr"><div dir="ltr">Hello,<div><br></div><div>I'm running into an issue where SCEV misses explicit nsw flags on the following expressions:</div><div><br></div><div><div>  %mm.07 = phi i32 [ 0, %<a href="http://for.body.lr.ph">for.body.lr.ph</a> ], [ %add, %for.inc30 ]</div><div>  -->  {0,+,1}<nuw><nsw><%for.body> U: [0,2147483647) S: [0,2147483647)<span style="white-space:pre">         </span>Exits: (-1 + %m)<span style="white-space:pre">             </span>LoopDispositions: { %for.body: Computable, %for.body5: Invariant, %for.inc: Invariant }</div><div>  %add = add nsw i32 %mm.07, 1</div><div>  -->  {1,+,1}<nuw><nsw><%for.body> U: [1,-2147483648) S: [1,-2147483648)<span style="white-space:pre">         </span>Exits: %m<span style="white-space:pre">            </span>LoopDispositions: { %for.body: Computable, %for.body5: Invariant, %for.inc: Invariant }</div><div>  %add2 = add nsw i32 %mm.07, 96</div><div>  -->  {96,+,1}<nuw><%for.body> U: [96,-2147483553) S: [96,-2147483553)<span style="white-space:pre">               </span>Exits: (95 + %m)<span style="white-space:pre">             </span>LoopDispositions: { %for.body: Computable, %for.body5: Invariant, %for.inc: Invariant }</div></div><div><br></div><div>My problem is with the later one, where the <nsw> is missing (which cause me problems down the line with gep computation on 64 bit address space).</div><div><br></div><div>Any clue as to what could be the source of that disappearance? I tried to reproduce the issue on simple cases but to no avail. I get the following expected result:</div><div><br></div><div><div>  %i = phi i32 [ 0, %loop.prehead ], [ %i.next, %loop.body ]</div><div>  -->  {0,+,1}<nuw><nsw><%loop.body> U: [0,2147483647) S: [0,2147483647)<span style="white-space:pre">         </span>Exits: (-1 + %x)<span style="white-space:pre">             </span>LoopDispositions: { %loop.body: Computable }</div><div>  %i.next = add nsw i32 %i, 1</div><div>  -->  {1,+,1}<nuw><nsw><%loop.body> U: [1,-2147483648) S: [1,-2147483648)<span style="white-space:pre">            </span>Exits: %x<span style="white-space:pre">            </span>LoopDispositions: { %loop.body: Computable }</div><div>  %i.96 = add nsw i32 %i, 96</div><div>  -->  {96,+,1}<nuw><nsw><%loop.body> U: [96,-2147483648) S: [96,-2147483648)<span style="white-space:pre">          </span>Exits: (95 + %x)<span style="white-space:pre">             </span>LoopDispositions: { %loop.body: Computable }</div></div><div><br></div><div>Help?</div><div><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><b>Alexandre Isoard</b><br></div></div></div></div></div></div>