[llvm-dev] funnel shift, select, and poison

John Regehr via llvm-dev llvm-dev at lists.llvm.org
Tue Feb 26 13:06:24 PST 2019


> Transforms/InstCombine/select.ll
> ================================
> define i1 @trueval_is_true(i1 %C, i1 %X) {
>   %R = select i1 %C, i1 1, i1 %X
>   ret i1 %R
> }
> =>
> define i1 @trueval_is_true(i1 %C, i1 %X) {
>   %R = or i1 %C, %X
>   ret i1 %R
> }
> ERROR: Target is more poisonous than source (when %C = #x1 & %X = poison)
> 
> (there are many variations of these select->arithmetic transformations)

This particular little family of transformations can be reliably done by 
all of the backends I looked at, so disabling them at the IR level 
should be OK. See a bit more discussion here:

> https://bugs.llvm.org/show_bug.cgi?id=40768

John


More information about the llvm-dev mailing list