[llvm-dev] funnel shift, select, and poison (original) (raw)

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 @truevalistrue(i1 %C, i1 %X) {  %R = select i1 %C, i1 1, i1 %X  ret i1 %R } => define i1 @truevalistrue(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/showbug.cgi?id=40768

John



More information about the llvm-dev mailing list