[InstCombine] `insertelement` is negatible if both sources are negatible
authorRoman Lebedev <lebedev.ri@gmail.com>
Wed, 20 May 2020 18:37:02 +0000 (21:37 +0300)
committerRoman Lebedev <lebedev.ri@gmail.com>
Wed, 20 May 2020 18:44:31 +0000 (21:44 +0300)
commit55430f53f397e942b91d8379b5dbae5d2c852986
tree5511911248ebbdc5baf31c819f61d9fb46841133
parenta6097cebe9cd0887478cb81f9b09f1c48ae13b4f
[InstCombine] `insertelement` is negatible if both sources are negatible

----------------------------------------
define <2 x i4> @negate_insertelement(<2 x i4> %src, i4 %a, i32 %x, <2 x i4> %b) {
%0:
  %t0 = sub <2 x i4> { 0, 0 }, %src
  %t1 = sub i4 0, %a
  %t2 = insertelement <2 x i4> %t0, i4 %t1, i32 %x
  %t3 = sub <2 x i4> %b, %t2
  ret <2 x i4> %t3
}
=>
define <2 x i4> @negate_insertelement(<2 x i4> %src, i4 %a, i32 %x, <2 x i4> %b) {
%0:
  %t2.neg = insertelement <2 x i4> %src, i4 %a, i32 %x
  %t3 = add <2 x i4> %t2.neg, %b
  ret <2 x i4> %t3
}
Transformation seems to be correct!
llvm/lib/Transforms/InstCombine/InstCombineNegator.cpp
llvm/test/Transforms/InstCombine/sub-of-negatible.ll