@@ -8,12 +8,7 @@ declare <4 x i16> @llvm.sshl.sat.v4i16(<4 x i16>, <4 x i16>)
8
8
define i16 @combine_shl_undef (i16 %x , i16 %y ) nounwind {
9
9
; CHECK-LABEL: combine_shl_undef:
10
10
; CHECK: // %bb.0:
11
- ; CHECK-NEXT: mov w8, wzr
12
- ; CHECK-NEXT: mov w9, #-2147483648
13
- ; CHECK-NEXT: cmp w8, #0
14
- ; CHECK-NEXT: cinv w9, w9, ge
15
- ; CHECK-NEXT: csel w8, w9, w8, ne
16
- ; CHECK-NEXT: asr w0, w8, #16
11
+ ; CHECK-NEXT: mov w0, wzr
17
12
; CHECK-NEXT: ret
18
13
%tmp = call i16 @llvm.sshl.sat.i16 (i16 undef , i16 %y )
19
14
ret i16 %tmp
@@ -23,13 +18,6 @@ define i16 @combine_shl_undef(i16 %x, i16 %y) nounwind {
23
18
define i16 @combine_shl_by_undef (i16 %x , i16 %y ) nounwind {
24
19
; CHECK-LABEL: combine_shl_by_undef:
25
20
; CHECK: // %bb.0:
26
- ; CHECK-NEXT: lsl w9, w0, #16
27
- ; CHECK-NEXT: mov w8, #-2147483648
28
- ; CHECK-NEXT: cmp w9, #0
29
- ; CHECK-NEXT: cinv w8, w8, ge
30
- ; CHECK-NEXT: cmp w9, w9
31
- ; CHECK-NEXT: csel w8, w8, w9, ne
32
- ; CHECK-NEXT: asr w0, w8, #16
33
21
; CHECK-NEXT: ret
34
22
%tmp = call i16 @llvm.sshl.sat.i16 (i16 %x , i16 undef )
35
23
ret i16 %tmp
@@ -39,12 +27,7 @@ define i16 @combine_shl_by_undef(i16 %x, i16 %y) nounwind {
39
27
define i16 @combine_shl_poison (i16 %x , i16 %y ) nounwind {
40
28
; CHECK-LABEL: combine_shl_poison:
41
29
; CHECK: // %bb.0:
42
- ; CHECK-NEXT: mov w8, wzr
43
- ; CHECK-NEXT: mov w9, #-2147483648
44
- ; CHECK-NEXT: cmp w8, #0
45
- ; CHECK-NEXT: cinv w9, w9, ge
46
- ; CHECK-NEXT: csel w8, w9, w8, ne
47
- ; CHECK-NEXT: asr w0, w8, #16
30
+ ; CHECK-NEXT: mov w0, wzr
48
31
; CHECK-NEXT: ret
49
32
%tmp = call i16 @llvm.sshl.sat.i16 (i16 poison, i16 %y )
50
33
ret i16 %tmp
@@ -54,13 +37,6 @@ define i16 @combine_shl_poison(i16 %x, i16 %y) nounwind {
54
37
define i16 @combine_shl_by_poison (i16 %x , i16 %y ) nounwind {
55
38
; CHECK-LABEL: combine_shl_by_poison:
56
39
; CHECK: // %bb.0:
57
- ; CHECK-NEXT: lsl w9, w0, #16
58
- ; CHECK-NEXT: mov w8, #-2147483648
59
- ; CHECK-NEXT: cmp w9, #0
60
- ; CHECK-NEXT: cinv w8, w8, ge
61
- ; CHECK-NEXT: cmp w9, w9
62
- ; CHECK-NEXT: csel w8, w8, w9, ne
63
- ; CHECK-NEXT: asr w0, w8, #16
64
40
; CHECK-NEXT: ret
65
41
%tmp = call i16 @llvm.sshl.sat.i16 (i16 %x , i16 poison)
66
42
ret i16 %tmp
@@ -70,12 +46,6 @@ define i16 @combine_shl_by_poison(i16 %x, i16 %y) nounwind {
70
46
define i16 @combine_shl_by_bitwidth (i16 %x , i16 %y ) nounwind {
71
47
; CHECK-LABEL: combine_shl_by_bitwidth:
72
48
; CHECK: // %bb.0:
73
- ; CHECK-NEXT: lsl w9, w0, #16
74
- ; CHECK-NEXT: mov w8, #-2147483648
75
- ; CHECK-NEXT: cmp w9, #0
76
- ; CHECK-NEXT: cinv w8, w8, ge
77
- ; CHECK-NEXT: csel w8, w8, wzr, ne
78
- ; CHECK-NEXT: asr w0, w8, #16
79
49
; CHECK-NEXT: ret
80
50
%tmp = call i16 @llvm.sshl.sat.i16 (i16 %x , i16 16 )
81
51
ret i16 %tmp
@@ -85,12 +55,7 @@ define i16 @combine_shl_by_bitwidth(i16 %x, i16 %y) nounwind {
85
55
define i16 @combine_shl_zero (i16 %x , i16 %y ) nounwind {
86
56
; CHECK-LABEL: combine_shl_zero:
87
57
; CHECK: // %bb.0:
88
- ; CHECK-NEXT: mov w8, wzr
89
- ; CHECK-NEXT: mov w9, #-2147483648
90
- ; CHECK-NEXT: cmp w8, #0
91
- ; CHECK-NEXT: cinv w9, w9, ge
92
- ; CHECK-NEXT: csel w8, w9, w8, ne
93
- ; CHECK-NEXT: asr w0, w8, #16
58
+ ; CHECK-NEXT: mov w0, wzr
94
59
; CHECK-NEXT: ret
95
60
%tmp = call i16 @llvm.sshl.sat.i16 (i16 0 , i16 %y )
96
61
ret i16 %tmp
@@ -100,13 +65,6 @@ define i16 @combine_shl_zero(i16 %x, i16 %y) nounwind {
100
65
define i16 @combine_shlsat_by_zero (i16 %x , i16 %y ) nounwind {
101
66
; CHECK-LABEL: combine_shlsat_by_zero:
102
67
; CHECK: // %bb.0:
103
- ; CHECK-NEXT: lsl w9, w0, #16
104
- ; CHECK-NEXT: mov w8, #-2147483648
105
- ; CHECK-NEXT: cmp w9, #0
106
- ; CHECK-NEXT: cinv w8, w8, ge
107
- ; CHECK-NEXT: cmp w9, w9
108
- ; CHECK-NEXT: csel w8, w8, w9, ne
109
- ; CHECK-NEXT: asr w0, w8, #16
110
68
; CHECK-NEXT: ret
111
69
%tmp = call i16 @llvm.sshl.sat.i16 (i16 %x , i16 0 )
112
70
ret i16 %tmp
@@ -116,14 +74,7 @@ define i16 @combine_shlsat_by_zero(i16 %x, i16 %y) nounwind {
116
74
define i16 @combine_shlsat_constfold (i16 %x , i16 %y ) nounwind {
117
75
; CHECK-LABEL: combine_shlsat_constfold:
118
76
; CHECK: // %bb.0:
119
- ; CHECK-NEXT: mov w8, #524288
120
- ; CHECK-NEXT: mov w9, #-2147483648
121
- ; CHECK-NEXT: cmp w8, #0
122
- ; CHECK-NEXT: cinv w9, w9, ge
123
- ; CHECK-NEXT: cmp w8, #128, lsl #12 // =524288
124
- ; CHECK-NEXT: mov w8, #2097152
125
- ; CHECK-NEXT: csel w8, w9, w8, ne
126
- ; CHECK-NEXT: asr w0, w8, #16
77
+ ; CHECK-NEXT: mov w0, #32
127
78
; CHECK-NEXT: ret
128
79
%tmp = call i16 @llvm.sshl.sat.i16 (i16 8 , i16 2 )
129
80
ret i16 %tmp
@@ -133,12 +84,7 @@ define i16 @combine_shlsat_constfold(i16 %x, i16 %y) nounwind {
133
84
define i16 @combine_shlsat_satmax (i16 %x , i16 %y ) nounwind {
134
85
; CHECK-LABEL: combine_shlsat_satmax:
135
86
; CHECK: // %bb.0:
136
- ; CHECK-NEXT: mov w8, #524288
137
- ; CHECK-NEXT: cmp w8, #0
138
- ; CHECK-NEXT: mov w8, #-2147483648
139
- ; CHECK-NEXT: cinv w8, w8, ge
140
- ; CHECK-NEXT: csel w8, w8, wzr, ne
141
- ; CHECK-NEXT: asr w0, w8, #16
87
+ ; CHECK-NEXT: mov w0, #32767
142
88
; CHECK-NEXT: ret
143
89
%tmp = call i16 @llvm.sshl.sat.i16 (i16 8 , i16 15 )
144
90
ret i16 %tmp
@@ -148,12 +94,7 @@ define i16 @combine_shlsat_satmax(i16 %x, i16 %y) nounwind {
148
94
define i16 @combine_shlsat_satmin (i16 %x , i16 %y ) nounwind {
149
95
; CHECK-LABEL: combine_shlsat_satmin:
150
96
; CHECK: // %bb.0:
151
- ; CHECK-NEXT: mov w8, #-524288
152
- ; CHECK-NEXT: cmp w8, #0
153
- ; CHECK-NEXT: mov w8, #-2147483648
154
- ; CHECK-NEXT: cinv w8, w8, ge
155
- ; CHECK-NEXT: csel w8, w8, wzr, ne
156
- ; CHECK-NEXT: asr w0, w8, #16
97
+ ; CHECK-NEXT: mov w0, #32768
157
98
; CHECK-NEXT: ret
158
99
%tmp = call i16 @llvm.sshl.sat.i16 (i16 -8 , i16 15 )
159
100
ret i16 %tmp
@@ -166,33 +107,10 @@ define void @combine_shlsat_vector() nounwind {
166
107
; CHECK-LABEL: combine_shlsat_vector:
167
108
; CHECK: // %bb.0:
168
109
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
169
- ; CHECK-NEXT: mov w8, #524288
170
- ; CHECK-NEXT: mov w9, #-2147483648
171
- ; CHECK-NEXT: cmp w8, #0
172
- ; CHECK-NEXT: cinv w10, w9, ge
173
- ; CHECK-NEXT: csel w11, w10, wzr, ne
174
- ; CHECK-NEXT: cmp w8, #128, lsl #12 // =524288
175
- ; CHECK-NEXT: mov w8, #2097152
176
- ; CHECK-NEXT: asr w11, w11, #16
177
- ; CHECK-NEXT: csel w8, w10, w8, ne
178
- ; CHECK-NEXT: mov w10, #-524288
179
- ; CHECK-NEXT: asr w8, w8, #16
180
- ; CHECK-NEXT: cmp w10, #0
181
- ; CHECK-NEXT: cinv w9, w9, ge
182
- ; CHECK-NEXT: fmov s0, w8
183
- ; CHECK-NEXT: csel w8, w9, wzr, ne
184
- ; CHECK-NEXT: cmn w10, #128, lsl #12 // =524288
185
- ; CHECK-NEXT: mov w10, #-2097152
186
- ; CHECK-NEXT: csel w9, w9, w10, ne
187
- ; CHECK-NEXT: asr w8, w8, #16
188
- ; CHECK-NEXT: mov v0.h[1], w11
189
- ; CHECK-NEXT: asr w9, w9, #16
190
- ; CHECK-NEXT: mov v0.h[2], w9
191
- ; CHECK-NEXT: mov v0.h[3], w8
192
- ; CHECK-NEXT: umov w0, v0.h[0]
193
- ; CHECK-NEXT: umov w1, v0.h[1]
194
- ; CHECK-NEXT: umov w2, v0.h[2]
195
- ; CHECK-NEXT: umov w3, v0.h[3]
110
+ ; CHECK-NEXT: mov w0, #32
111
+ ; CHECK-NEXT: mov w1, #32767
112
+ ; CHECK-NEXT: mov w2, #65504
113
+ ; CHECK-NEXT: mov w3, #32768
196
114
; CHECK-NEXT: bl sink4xi16
197
115
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
198
116
; CHECK-NEXT: ret
0 commit comments