12
12
13
13
define i16 @t0 (i32 %x , i16 %y ) {
14
14
; CHECK-LABEL: @t0(
15
- ; CHECK-NEXT: [[X_TR:%.*]] = trunc i32 [[X:%.*]] to i16
16
- ; CHECK-NEXT: [[T5:%.*]] = shl i16 [[X_TR]], 8
15
+ ; CHECK-NEXT: [[T0:%.*]] = sub i16 32, [[Y:%.*]]
16
+ ; CHECK-NEXT: [[T1:%.*]] = zext i16 [[T0]] to i32
17
+ ; CHECK-NEXT: [[T2:%.*]] = shl i32 [[X:%.*]], [[T1]]
18
+ ; CHECK-NEXT: [[T3:%.*]] = trunc i32 [[T2]] to i16
19
+ ; CHECK-NEXT: [[T4:%.*]] = add i16 [[Y]], -24
20
+ ; CHECK-NEXT: [[T5:%.*]] = shl i16 [[T3]], [[T4]]
17
21
; CHECK-NEXT: ret i16 [[T5]]
18
22
;
19
23
%t0 = sub i16 32 , %y
@@ -27,8 +31,12 @@ define i16 @t0(i32 %x, i16 %y) {
27
31
28
32
define <2 x i16 > @t1_vec_splat (<2 x i32 > %x , <2 x i16 > %y ) {
29
33
; CHECK-LABEL: @t1_vec_splat(
30
- ; CHECK-NEXT: [[TMP1:%.*]] = shl <2 x i32> [[X:%.*]], <i32 8, i32 8>
31
- ; CHECK-NEXT: [[T5:%.*]] = trunc <2 x i32> [[TMP1]] to <2 x i16>
34
+ ; CHECK-NEXT: [[T0:%.*]] = sub <2 x i16> <i16 32, i16 32>, [[Y:%.*]]
35
+ ; CHECK-NEXT: [[T1:%.*]] = zext <2 x i16> [[T0]] to <2 x i32>
36
+ ; CHECK-NEXT: [[T2:%.*]] = shl <2 x i32> [[X:%.*]], [[T1]]
37
+ ; CHECK-NEXT: [[T3:%.*]] = trunc <2 x i32> [[T2]] to <2 x i16>
38
+ ; CHECK-NEXT: [[T4:%.*]] = add <2 x i16> [[Y]], <i16 -24, i16 -24>
39
+ ; CHECK-NEXT: [[T5:%.*]] = shl <2 x i16> [[T3]], [[T4]]
32
40
; CHECK-NEXT: ret <2 x i16> [[T5]]
33
41
;
34
42
%t0 = sub <2 x i16 > <i16 32 , i16 32 >, %y
@@ -42,8 +50,12 @@ define <2 x i16> @t1_vec_splat(<2 x i32> %x, <2 x i16> %y) {
42
50
43
51
define <2 x i16 > @t2_vec_nonsplat (<2 x i32 > %x , <2 x i16 > %y ) {
44
52
; CHECK-LABEL: @t2_vec_nonsplat(
45
- ; CHECK-NEXT: [[TMP1:%.*]] = shl <2 x i32> [[X:%.*]], <i32 8, i32 30>
46
- ; CHECK-NEXT: [[T5:%.*]] = trunc <2 x i32> [[TMP1]] to <2 x i16>
53
+ ; CHECK-NEXT: [[T0:%.*]] = sub <2 x i16> <i16 32, i16 30>, [[Y:%.*]]
54
+ ; CHECK-NEXT: [[T1:%.*]] = zext <2 x i16> [[T0]] to <2 x i32>
55
+ ; CHECK-NEXT: [[T2:%.*]] = shl <2 x i32> [[X:%.*]], [[T1]]
56
+ ; CHECK-NEXT: [[T3:%.*]] = trunc <2 x i32> [[T2]] to <2 x i16>
57
+ ; CHECK-NEXT: [[T4:%.*]] = add <2 x i16> [[Y]], <i16 -24, i16 0>
58
+ ; CHECK-NEXT: [[T5:%.*]] = shl <2 x i16> [[T3]], [[T4]]
47
59
; CHECK-NEXT: ret <2 x i16> [[T5]]
48
60
;
49
61
%t0 = sub <2 x i16 > <i16 32 , i16 30 >, %y
@@ -59,8 +71,12 @@ define <2 x i16> @t2_vec_nonsplat(<2 x i32> %x, <2 x i16> %y) {
59
71
60
72
define <3 x i16 > @t3_vec_nonsplat_undef0 (<3 x i32 > %x , <3 x i16 > %y ) {
61
73
; CHECK-LABEL: @t3_vec_nonsplat_undef0(
62
- ; CHECK-NEXT: [[TMP1:%.*]] = shl <3 x i32> [[X:%.*]], <i32 8, i32 0, i32 8>
63
- ; CHECK-NEXT: [[T5:%.*]] = trunc <3 x i32> [[TMP1]] to <3 x i16>
74
+ ; CHECK-NEXT: [[T0:%.*]] = sub <3 x i16> <i16 32, i16 undef, i16 32>, [[Y:%.*]]
75
+ ; CHECK-NEXT: [[T1:%.*]] = zext <3 x i16> [[T0]] to <3 x i32>
76
+ ; CHECK-NEXT: [[T2:%.*]] = shl <3 x i32> [[X:%.*]], [[T1]]
77
+ ; CHECK-NEXT: [[T3:%.*]] = trunc <3 x i32> [[T2]] to <3 x i16>
78
+ ; CHECK-NEXT: [[T4:%.*]] = add <3 x i16> [[Y]], <i16 -24, i16 -24, i16 -24>
79
+ ; CHECK-NEXT: [[T5:%.*]] = shl <3 x i16> [[T3]], [[T4]]
64
80
; CHECK-NEXT: ret <3 x i16> [[T5]]
65
81
;
66
82
%t0 = sub <3 x i16 > <i16 32 , i16 undef , i16 32 >, %y
@@ -74,8 +90,12 @@ define <3 x i16> @t3_vec_nonsplat_undef0(<3 x i32> %x, <3 x i16> %y) {
74
90
75
91
define <3 x i16 > @t4_vec_nonsplat_undef1 (<3 x i32 > %x , <3 x i16 > %y ) {
76
92
; CHECK-LABEL: @t4_vec_nonsplat_undef1(
77
- ; CHECK-NEXT: [[TMP1:%.*]] = shl <3 x i32> [[X:%.*]], <i32 8, i32 0, i32 8>
78
- ; CHECK-NEXT: [[T5:%.*]] = trunc <3 x i32> [[TMP1]] to <3 x i16>
93
+ ; CHECK-NEXT: [[T0:%.*]] = sub <3 x i16> <i16 32, i16 32, i16 32>, [[Y:%.*]]
94
+ ; CHECK-NEXT: [[T1:%.*]] = zext <3 x i16> [[T0]] to <3 x i32>
95
+ ; CHECK-NEXT: [[T2:%.*]] = shl <3 x i32> [[X:%.*]], [[T1]]
96
+ ; CHECK-NEXT: [[T3:%.*]] = trunc <3 x i32> [[T2]] to <3 x i16>
97
+ ; CHECK-NEXT: [[T4:%.*]] = add <3 x i16> [[Y]], <i16 -24, i16 undef, i16 -24>
98
+ ; CHECK-NEXT: [[T5:%.*]] = shl <3 x i16> [[T3]], [[T4]]
79
99
; CHECK-NEXT: ret <3 x i16> [[T5]]
80
100
;
81
101
%t0 = sub <3 x i16 > <i16 32 , i16 32 , i16 32 >, %y
@@ -89,8 +109,12 @@ define <3 x i16> @t4_vec_nonsplat_undef1(<3 x i32> %x, <3 x i16> %y) {
89
109
90
110
define <3 x i16 > @t5_vec_nonsplat_undef1 (<3 x i32 > %x , <3 x i16 > %y ) {
91
111
; CHECK-LABEL: @t5_vec_nonsplat_undef1(
92
- ; CHECK-NEXT: [[TMP1:%.*]] = shl <3 x i32> [[X:%.*]], <i32 8, i32 0, i32 8>
93
- ; CHECK-NEXT: [[T5:%.*]] = trunc <3 x i32> [[TMP1]] to <3 x i16>
112
+ ; CHECK-NEXT: [[T0:%.*]] = sub <3 x i16> <i16 32, i16 undef, i16 32>, [[Y:%.*]]
113
+ ; CHECK-NEXT: [[T1:%.*]] = zext <3 x i16> [[T0]] to <3 x i32>
114
+ ; CHECK-NEXT: [[T2:%.*]] = shl <3 x i32> [[X:%.*]], [[T1]]
115
+ ; CHECK-NEXT: [[T3:%.*]] = trunc <3 x i32> [[T2]] to <3 x i16>
116
+ ; CHECK-NEXT: [[T4:%.*]] = add <3 x i16> [[Y]], <i16 -24, i16 undef, i16 -24>
117
+ ; CHECK-NEXT: [[T5:%.*]] = shl <3 x i16> [[T3]], [[T4]]
94
118
; CHECK-NEXT: ret <3 x i16> [[T5]]
95
119
;
96
120
%t0 = sub <3 x i16 > <i16 32 , i16 undef , i16 32 >, %y
@@ -113,9 +137,9 @@ define i16 @t6_extrause0(i32 %x, i16 %y) {
113
137
; CHECK-NEXT: [[T1:%.*]] = zext i16 [[T0]] to i32
114
138
; CHECK-NEXT: [[T2:%.*]] = shl i32 [[X:%.*]], [[T1]]
115
139
; CHECK-NEXT: [[T3:%.*]] = trunc i32 [[T2]] to i16
140
+ ; CHECK-NEXT: [[T4:%.*]] = add i16 [[Y]], -24
116
141
; CHECK-NEXT: call void @use16(i16 [[T3]])
117
- ; CHECK-NEXT: [[X_TR:%.*]] = trunc i32 [[X]] to i16
118
- ; CHECK-NEXT: [[T5:%.*]] = shl i16 [[X_TR]], 8
142
+ ; CHECK-NEXT: [[T5:%.*]] = shl i16 [[T3]], [[T4]]
119
143
; CHECK-NEXT: ret i16 [[T5]]
120
144
;
121
145
%t0 = sub i16 32 , %y
@@ -130,10 +154,13 @@ define i16 @t6_extrause0(i32 %x, i16 %y) {
130
154
131
155
define i16 @t7_extrause1 (i32 %x , i16 %y ) {
132
156
; CHECK-LABEL: @t7_extrause1(
133
- ; CHECK-NEXT: [[T4:%.*]] = add i16 [[Y:%.*]], -24
157
+ ; CHECK-NEXT: [[T0:%.*]] = sub i16 32, [[Y:%.*]]
158
+ ; CHECK-NEXT: [[T1:%.*]] = zext i16 [[T0]] to i32
159
+ ; CHECK-NEXT: [[T2:%.*]] = shl i32 [[X:%.*]], [[T1]]
160
+ ; CHECK-NEXT: [[T3:%.*]] = trunc i32 [[T2]] to i16
161
+ ; CHECK-NEXT: [[T4:%.*]] = add i16 [[Y]], -24
134
162
; CHECK-NEXT: call void @use16(i16 [[T4]])
135
- ; CHECK-NEXT: [[X_TR:%.*]] = trunc i32 [[X:%.*]] to i16
136
- ; CHECK-NEXT: [[T5:%.*]] = shl i16 [[X_TR]], 8
163
+ ; CHECK-NEXT: [[T5:%.*]] = shl i16 [[T3]], [[T4]]
137
164
; CHECK-NEXT: ret i16 [[T5]]
138
165
;
139
166
%t0 = sub i16 32 , %y
0 commit comments