The following transformation in Transforms/InstCombine/canonicalize-constant-low-bit-mask-and-icmp-sgt-to-icmp-sgt.ll is incorrect: define <3 x i1> @p3_vec_splat_undef() { %x = call <3 x i8> @gen3x8() %tmp0 = and <3 x i8> %x, { 3, undef, 3 } %ret = icmp sgt <3 x i8> %x, %tmp0 ret <3 x i1> %ret } => define <3 x i1> @p3_vec_splat_undef() { %x = call <3 x i8> @gen3x8() %1 = icmp sgt <3 x i8> %x, { 3, undef, 3 } ret <3 x i1> %1 } Transformation doesn't verify! ERROR: Value mismatch Example: Source: <3 x i8> %x = < poison, #x00 (0), poison > <3 x i8> %tmp0 = < poison, #x00 (0), poison > <3 x i1> %ret = < poison, #x0 (0), poison > Target: <3 x i8> %x = < poison, #x00 (0), poison > <3 x i1> %1 = < poison, #x1 (1), poison > Source value: < poison, #x0 (0), poison > Target value: < poison, #x1 (1), poison > The transformation does 'x > (x & undef)' -> 'x > undef'. Take x=0, undef=-1, and we get '0 > 0' -> '0 > -1'.
https://reviews.llvm.org/D72101
(In reply to Sanjay Patel from comment #1) > https://reviews.llvm.org/D72101 @nlopes @spatel This landed at rG164058274364 - resolve this?
Forgot to mark this bug as fixed with: https://reviews.llvm.org/rG164058274364670c8b59055b4689ae7e1720268e