Skip to content

Commit 3f33033

Browse files
committed
[NFC][InstCombine] Negator: add tests for negation of left-shift by constant
1 parent 7e9bab6 commit 3f33033

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

llvm/test/Transforms/InstCombine/sub-of-negatible.ll

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,3 +1040,65 @@ define <2 x i4> @negate_insertelement_nonnegatible_insert(<2 x i4> %src, i4 %a,
10401040
%t3 = sub <2 x i4> %b, %t2
10411041
ret <2 x i4> %t3
10421042
}
1043+
1044+
; left-shift by constant can always be negated
1045+
define i8 @negate_left_shift_by_constant_prefer_keeping_shl(i8 %x, i8 %y, i8 %z) {
1046+
; CHECK-LABEL: @negate_left_shift_by_constant_prefer_keeping_shl(
1047+
; CHECK-NEXT: [[T0:%.*]] = sub i8 0, [[Z:%.*]]
1048+
; CHECK-NEXT: call void @use8(i8 [[T0]])
1049+
; CHECK-NEXT: [[T1_NEG:%.*]] = shl i8 [[Z]], 4
1050+
; CHECK-NEXT: [[T2:%.*]] = add i8 [[T1_NEG]], [[X:%.*]]
1051+
; CHECK-NEXT: ret i8 [[T2]]
1052+
;
1053+
%t0 = sub i8 0, %z
1054+
call void @use8(i8 %t0)
1055+
%t1 = shl i8 %t0, 4
1056+
%t2 = sub i8 %x, %t1
1057+
ret i8 %t2
1058+
}
1059+
define i8 @negate_left_shift_by_constant_prefer_keeping_shl_extrause(i8 %x, i8 %y, i8 %z) {
1060+
; CHECK-LABEL: @negate_left_shift_by_constant_prefer_keeping_shl_extrause(
1061+
; CHECK-NEXT: [[T0:%.*]] = sub i8 0, [[Z:%.*]]
1062+
; CHECK-NEXT: call void @use8(i8 [[T0]])
1063+
; CHECK-NEXT: [[T1:%.*]] = shl i8 [[T0]], 4
1064+
; CHECK-NEXT: call void @use8(i8 [[T1]])
1065+
; CHECK-NEXT: [[T2:%.*]] = sub i8 [[X:%.*]], [[T1]]
1066+
; CHECK-NEXT: ret i8 [[T2]]
1067+
;
1068+
%t0 = sub i8 0, %z
1069+
call void @use8(i8 %t0)
1070+
%t1 = shl i8 %t0, 4
1071+
call void @use8(i8 %t1)
1072+
%t2 = sub i8 %x, %t1
1073+
ret i8 %t2
1074+
}
1075+
define i8 @negate_left_shift_by_constant(i8 %x, i8 %y, i8 %z, i8 %k) {
1076+
; CHECK-LABEL: @negate_left_shift_by_constant(
1077+
; CHECK-NEXT: [[T0:%.*]] = sub i8 [[K:%.*]], [[Z:%.*]]
1078+
; CHECK-NEXT: call void @use8(i8 [[T0]])
1079+
; CHECK-NEXT: [[T1:%.*]] = shl i8 [[T0]], 4
1080+
; CHECK-NEXT: [[T2:%.*]] = sub i8 [[X:%.*]], [[T1]]
1081+
; CHECK-NEXT: ret i8 [[T2]]
1082+
;
1083+
%t0 = sub i8 %k, %z
1084+
call void @use8(i8 %t0)
1085+
%t1 = shl i8 %t0, 4
1086+
%t2 = sub i8 %x, %t1
1087+
ret i8 %t2
1088+
}
1089+
define i8 @negate_left_shift_by_constant_extrause(i8 %x, i8 %y, i8 %z, i8 %k) {
1090+
; CHECK-LABEL: @negate_left_shift_by_constant_extrause(
1091+
; CHECK-NEXT: [[T0:%.*]] = sub i8 [[K:%.*]], [[Z:%.*]]
1092+
; CHECK-NEXT: call void @use8(i8 [[T0]])
1093+
; CHECK-NEXT: [[T1:%.*]] = shl i8 [[T0]], 4
1094+
; CHECK-NEXT: call void @use8(i8 [[T1]])
1095+
; CHECK-NEXT: [[T2:%.*]] = sub i8 [[X:%.*]], [[T1]]
1096+
; CHECK-NEXT: ret i8 [[T2]]
1097+
;
1098+
%t0 = sub i8 %k, %z
1099+
call void @use8(i8 %t0)
1100+
%t1 = shl i8 %t0, 4
1101+
call void @use8(i8 %t1)
1102+
%t2 = sub i8 %x, %t1
1103+
ret i8 %t2
1104+
}

0 commit comments

Comments
 (0)