Skip to content

Commit 4b65ee6

Browse files
committed
[InstCombine] add sub narrowing tests; NFC
This might be the root cause of PR35295: https://bugs.llvm.org/show_bug.cgi?id=35295 llvm-svn: 318342
1 parent 11a7ef8 commit 4b65ee6

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

llvm/test/Transforms/InstCombine/trunc-binop-ext.ll

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,32 @@ define i16 @narrow_zext_add(i16 %x16, i32 %y32) {
9696
ret i16 %r
9797
}
9898

99+
define i16 @narrow_sext_sub(i16 %x16, i32 %y32) {
100+
; CHECK-LABEL: @narrow_sext_sub(
101+
; CHECK-NEXT: [[X321:%.*]] = zext i16 %x16 to i32
102+
; CHECK-NEXT: [[B:%.*]] = sub i32 [[X321]], %y32
103+
; CHECK-NEXT: [[R:%.*]] = trunc i32 [[B]] to i16
104+
; CHECK-NEXT: ret i16 [[R]]
105+
;
106+
%x32 = sext i16 %x16 to i32
107+
%b = sub i32 %x32, %y32
108+
%r = trunc i32 %b to i16
109+
ret i16 %r
110+
}
111+
112+
define i16 @narrow_zext_sub(i16 %x16, i32 %y32) {
113+
; CHECK-LABEL: @narrow_zext_sub(
114+
; CHECK-NEXT: [[X32:%.*]] = zext i16 %x16 to i32
115+
; CHECK-NEXT: [[B:%.*]] = sub i32 [[X32]], %y32
116+
; CHECK-NEXT: [[R:%.*]] = trunc i32 [[B]] to i16
117+
; CHECK-NEXT: ret i16 [[R]]
118+
;
119+
%x32 = zext i16 %x16 to i32
120+
%b = sub i32 %x32, %y32
121+
%r = trunc i32 %b to i16
122+
ret i16 %r
123+
}
124+
99125
define i16 @narrow_sext_mul(i16 %x16, i32 %y32) {
100126
; CHECK-LABEL: @narrow_sext_mul(
101127
; CHECK-NEXT: [[TMP1:%.*]] = trunc i32 %y32 to i16
@@ -235,6 +261,36 @@ define <2 x i16> @narrow_zext_add_commute(<2 x i16> %x16, <2 x i32> %y32) {
235261
ret <2 x i16> %r
236262
}
237263

264+
define <2 x i16> @narrow_sext_sub_commute(<2 x i16> %x16, <2 x i32> %y32) {
265+
; CHECK-LABEL: @narrow_sext_sub_commute(
266+
; CHECK-NEXT: [[Y32OP0:%.*]] = sdiv <2 x i32> %y32, <i32 7, i32 -17>
267+
; CHECK-NEXT: [[X321:%.*]] = zext <2 x i16> %x16 to <2 x i32>
268+
; CHECK-NEXT: [[B:%.*]] = sub <2 x i32> [[Y32OP0]], [[X321]]
269+
; CHECK-NEXT: [[R:%.*]] = trunc <2 x i32> [[B]] to <2 x i16>
270+
; CHECK-NEXT: ret <2 x i16> [[R]]
271+
;
272+
%y32op0 = sdiv <2 x i32> %y32, <i32 7, i32 -17>
273+
%x32 = sext <2 x i16> %x16 to <2 x i32>
274+
%b = sub <2 x i32> %y32op0, %x32
275+
%r = trunc <2 x i32> %b to <2 x i16>
276+
ret <2 x i16> %r
277+
}
278+
279+
define <2 x i16> @narrow_zext_sub_commute(<2 x i16> %x16, <2 x i32> %y32) {
280+
; CHECK-LABEL: @narrow_zext_sub_commute(
281+
; CHECK-NEXT: [[Y32OP0:%.*]] = sdiv <2 x i32> %y32, <i32 7, i32 -17>
282+
; CHECK-NEXT: [[X32:%.*]] = zext <2 x i16> %x16 to <2 x i32>
283+
; CHECK-NEXT: [[B:%.*]] = sub <2 x i32> [[Y32OP0]], [[X32]]
284+
; CHECK-NEXT: [[R:%.*]] = trunc <2 x i32> [[B]] to <2 x i16>
285+
; CHECK-NEXT: ret <2 x i16> [[R]]
286+
;
287+
%y32op0 = sdiv <2 x i32> %y32, <i32 7, i32 -17>
288+
%x32 = zext <2 x i16> %x16 to <2 x i32>
289+
%b = sub <2 x i32> %y32op0, %x32
290+
%r = trunc <2 x i32> %b to <2 x i16>
291+
ret <2 x i16> %r
292+
}
293+
238294
define <2 x i16> @narrow_sext_mul_commute(<2 x i16> %x16, <2 x i32> %y32) {
239295
; CHECK-LABEL: @narrow_sext_mul_commute(
240296
; CHECK-NEXT: [[Y32OP0:%.*]] = sdiv <2 x i32> %y32, <i32 7, i32 -17>

0 commit comments

Comments
 (0)