<div dir="ltr"><div>I don't object to deferring the optimization, but let me check my poison understanding...</div><div>  select i1 %cond, i1 true, i1 %x --> or i1 %cond, %x</div><div><br></div><div>1. 'select' is a poison-blocking operation, but 'or' is non-poison-blocking, so we are propagating a potentially poisonous %x with this transform.</div><div>2. We will fix the problem in IR by removing this transform in IR</div><div>3. The backend (SDAG) has that same transform. <br></div><div>4. SDAG has poison because we propagate the wrapping/exact flags to DAG nodes. <br></div><div>5. Are we just sweeping the bug under the rug? Nobody cares because SDAG is undocumented, so anything goes down there?</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Feb 26, 2019 at 2:06 PM John Regehr via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">> Transforms/InstCombine/select.ll<br>
> ================================<br>
> define i1 @trueval_is_true(i1 %C, i1 %X) {<br>
>   %R = select i1 %C, i1 1, i1 %X<br>
>   ret i1 %R<br>
> }<br>
> =><br>
> define i1 @trueval_is_true(i1 %C, i1 %X) {<br>
>   %R = or i1 %C, %X<br>
>   ret i1 %R<br>
> }<br>
> ERROR: Target is more poisonous than source (when %C = #x1 & %X = poison)<br>
> <br>
> (there are many variations of these select->arithmetic transformations)<br>
<br>
This particular little family of transformations can be reliably done by <br>
all of the backends I looked at, so disabling them at the IR level <br>
should be OK. See a bit more discussion here:<br>
<br>
> <a href="https://bugs.llvm.org/show_bug.cgi?id=40768" rel="noreferrer" target="_blank">https://bugs.llvm.org/show_bug.cgi?id=40768</a><br>
<br>
John<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>