[NFC][InstCombine] Tests for negation of `add` w/ single negatible operand
authorRoman Lebedev <lebedev.ri@gmail.com>
Wed, 5 Aug 2020 16:06:40 +0000 (19:06 +0300)
committerRoman Lebedev <lebedev.ri@gmail.com>
Wed, 5 Aug 2020 17:01:13 +0000 (20:01 +0300)
llvm/test/Transforms/InstCombine/sub-of-negatible.ll

index 4a3c563..478724d 100644 (file)
@@ -1102,3 +1102,37 @@ define i8 @negate_left_shift_by_constant_extrause(i8 %x, i8 %y, i8 %z, i8 %k) {
   %t2 = sub i8 %x, %t1
   ret i8 %t2
 }
+
+; `add` with single negatible operand is still negatible
+define i8 @negate_add_with_single_negatible_operand(i8 %x, i8 %y) {
+; CHECK-LABEL: @negate_add_with_single_negatible_operand(
+; CHECK-NEXT:    [[T0:%.*]] = add i8 [[X:%.*]], 42
+; CHECK-NEXT:    [[T1:%.*]] = sub i8 0, [[T0]]
+; CHECK-NEXT:    ret i8 [[T1]]
+;
+  %t0 = add i8 %x, 42
+  %t1 = sub i8 0, %t0
+  ret i8 %t1
+}
+define i8 @negate_add_with_single_negatible_operand_extrause(i8 %x, i8 %y) {
+; CHECK-LABEL: @negate_add_with_single_negatible_operand_extrause(
+; CHECK-NEXT:    [[T0:%.*]] = add i8 [[X:%.*]], 42
+; CHECK-NEXT:    call void @use8(i8 [[T0]])
+; CHECK-NEXT:    [[T1:%.*]] = sub i8 0, [[T0]]
+; CHECK-NEXT:    ret i8 [[T1]]
+;
+  %t0 = add i8 %x, 42
+  call void @use8(i8 %t0)
+  %t1 = sub i8 0, %t0
+  ret i8 %t1
+}
+define i8 @negate_add_with_single_negatible_operand_non_negation(i8 %x, i8 %y) {
+; CHECK-LABEL: @negate_add_with_single_negatible_operand_non_negation(
+; CHECK-NEXT:    [[T0:%.*]] = add i8 [[X:%.*]], 42
+; CHECK-NEXT:    [[T1:%.*]] = sub i8 [[Y:%.*]], [[T0]]
+; CHECK-NEXT:    ret i8 [[T1]]
+;
+  %t0 = add i8 %x, 42
+  %t1 = sub i8 %y, %t0
+  ret i8 %t1
+}