<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div class="">I'm looking at the bug (<a href="https://llvm.org/bugs/show_bug.cgi?id=31181" class="">https://llvm.org/bugs/show_bug.cgi?id=31181</a>) which was triggered by my change to make CVP mark adds as no wrap (<a href="https://reviews.llvm.org/rL278220" class="">https://reviews.llvm.org/rL278220</a>)
 and I'd like to have some broader discussion of the problem. In this bug CVP correctly marks an add as nuw basing on the loop latch check, but later loop rotation pass moves the add to a point before the check. In the new context nuw is no longer valid and
 leads to an incorrect transformation of the loop. See <a href="https://llvm.org/bugs/show_bug.cgi?id=31181#c5" class="">https://llvm.org/bugs/show_bug.cgi?id=31181#c5</a> comment in the bug for more details.</div>
<div class=""><br class="">
</div>
<div class="">Since nsw, nuw flags can be control dependent, it seems like we should be treating them as metadata, i.e. we should be stripping them when we speculate the instruction. I don’t think that we are doing this now anywhere. The problem was noticed
 on loop rotation, but I expect any other pass which speculates overflowing operations is suffering from the same problem.</div>
<div class=""><br class="">
</div>
<div class="">Thoughts?</div>
<div class=""><br class="">
</div>
<div class="">Artur</div>
</body>
</html>