@@ -9,8 +9,7 @@ declare <4 x i32> @llvm.fshl.v4i32(<4 x i32>, <4 x i32>, <4 x i32>)
9
9
define i1 @fshl_or_eq_0 (i32 %x , i32 %y ) {
10
10
; CHECK-LABEL: fshl_or_eq_0:
11
11
; CHECK: // %bb.0:
12
- ; CHECK-NEXT: ror w8, w0, #27
13
- ; CHECK-NEXT: orr w8, w8, w1, lsl #5
12
+ ; CHECK-NEXT: orr w8, w0, w1, lsl #5
14
13
; CHECK-NEXT: cmp w8, #0
15
14
; CHECK-NEXT: cset w0, eq
16
15
; CHECK-NEXT: ret
@@ -23,8 +22,7 @@ define i1 @fshl_or_eq_0(i32 %x, i32 %y) {
23
22
define i1 @fshl_or_commute_eq_0 (i32 %x , i32 %y ) {
24
23
; CHECK-LABEL: fshl_or_commute_eq_0:
25
24
; CHECK: // %bb.0:
26
- ; CHECK-NEXT: ror w8, w0, #27
27
- ; CHECK-NEXT: orr w8, w8, w1, lsl #5
25
+ ; CHECK-NEXT: orr w8, w0, w1, lsl #5
28
26
; CHECK-NEXT: cmp w8, #0
29
27
; CHECK-NEXT: cset w0, eq
30
28
; CHECK-NEXT: ret
@@ -37,10 +35,8 @@ define i1 @fshl_or_commute_eq_0(i32 %x, i32 %y) {
37
35
define <4 x i1 > @fshl_or2_eq_0 (<4 x i32 > %x , <4 x i32 > %y ) {
38
36
; CHECK-LABEL: fshl_or2_eq_0:
39
37
; CHECK: // %bb.0:
40
- ; CHECK-NEXT: orr v1.16b, v0.16b, v1.16b
41
- ; CHECK-NEXT: shl v0.4s, v0.4s, #25
42
38
; CHECK-NEXT: ushr v1.4s, v1.4s, #7
43
- ; CHECK-NEXT: orr v0.16b, v0 .16b, v1 .16b
39
+ ; CHECK-NEXT: orr v0.16b, v1 .16b, v0 .16b
44
40
; CHECK-NEXT: cmeq v0.4s, v0.4s, #0
45
41
; CHECK-NEXT: xtn v0.4h, v0.4s
46
42
; CHECK-NEXT: ret
@@ -53,10 +49,8 @@ define <4 x i1> @fshl_or2_eq_0(<4 x i32> %x, <4 x i32> %y) {
53
49
define <4 x i1 > @fshl_or2_commute_eq_0 (<4 x i32 > %x , <4 x i32 > %y ) {
54
50
; CHECK-LABEL: fshl_or2_commute_eq_0:
55
51
; CHECK: // %bb.0:
56
- ; CHECK-NEXT: orr v1.16b, v1.16b, v0.16b
57
- ; CHECK-NEXT: shl v0.4s, v0.4s, #25
58
52
; CHECK-NEXT: ushr v1.4s, v1.4s, #7
59
- ; CHECK-NEXT: orr v0.16b, v0 .16b, v1 .16b
53
+ ; CHECK-NEXT: orr v0.16b, v1 .16b, v0 .16b
60
54
; CHECK-NEXT: cmeq v0.4s, v0.4s, #0
61
55
; CHECK-NEXT: xtn v0.4h, v0.4s
62
56
; CHECK-NEXT: ret
@@ -69,9 +63,7 @@ define <4 x i1> @fshl_or2_commute_eq_0(<4 x i32> %x, <4 x i32> %y) {
69
63
define i1 @fshr_or_eq_0 (i16 %x , i16 %y ) {
70
64
; CHECK-LABEL: fshr_or_eq_0:
71
65
; CHECK: // %bb.0:
72
- ; CHECK-NEXT: lsl w8, w0, #16
73
- ; CHECK-NEXT: orr w9, w0, w1
74
- ; CHECK-NEXT: extr w8, w9, w8, #24
66
+ ; CHECK-NEXT: orr w8, w0, w1, lsl #8
75
67
; CHECK-NEXT: tst w8, #0xffff
76
68
; CHECK-NEXT: cset w0, eq
77
69
; CHECK-NEXT: ret
@@ -84,9 +76,7 @@ define i1 @fshr_or_eq_0(i16 %x, i16 %y) {
84
76
define i1 @fshr_or_commute_eq_0 (i16 %x , i16 %y ) {
85
77
; CHECK-LABEL: fshr_or_commute_eq_0:
86
78
; CHECK: // %bb.0:
87
- ; CHECK-NEXT: lsl w8, w0, #16
88
- ; CHECK-NEXT: orr w9, w1, w0
89
- ; CHECK-NEXT: extr w8, w9, w8, #24
79
+ ; CHECK-NEXT: orr w8, w0, w1, lsl #8
90
80
; CHECK-NEXT: tst w8, #0xffff
91
81
; CHECK-NEXT: cset w0, eq
92
82
; CHECK-NEXT: ret
@@ -99,8 +89,7 @@ define i1 @fshr_or_commute_eq_0(i16 %x, i16 %y) {
99
89
define i1 @fshr_or2_eq_0 (i64 %x , i64 %y ) {
100
90
; CHECK-LABEL: fshr_or2_eq_0:
101
91
; CHECK: // %bb.0:
102
- ; CHECK-NEXT: ror x8, x0, #3
103
- ; CHECK-NEXT: orr x8, x8, x1, lsr #3
92
+ ; CHECK-NEXT: orr x8, x0, x1, lsr #3
104
93
; CHECK-NEXT: cmp x8, #0
105
94
; CHECK-NEXT: cset w0, eq
106
95
; CHECK-NEXT: ret
@@ -113,8 +102,7 @@ define i1 @fshr_or2_eq_0(i64 %x, i64 %y) {
113
102
define i1 @fshl_or_ne_0 (i32 %x , i32 %y ) {
114
103
; CHECK-LABEL: fshl_or_ne_0:
115
104
; CHECK: // %bb.0:
116
- ; CHECK-NEXT: ror w8, w0, #25
117
- ; CHECK-NEXT: orr w8, w8, w1, lsl #7
105
+ ; CHECK-NEXT: orr w8, w0, w1, lsl #7
118
106
; CHECK-NEXT: cmp w8, #0
119
107
; CHECK-NEXT: cset w0, ne
120
108
; CHECK-NEXT: ret
@@ -127,8 +115,7 @@ define i1 @fshl_or_ne_0(i32 %x, i32 %y) {
127
115
define i1 @fshl_or_commute_ne_0 (i32 %x , i32 %y ) {
128
116
; CHECK-LABEL: fshl_or_commute_ne_0:
129
117
; CHECK: // %bb.0:
130
- ; CHECK-NEXT: ror w8, w0, #25
131
- ; CHECK-NEXT: orr w8, w8, w1, lsl #7
118
+ ; CHECK-NEXT: orr w8, w0, w1, lsl #7
132
119
; CHECK-NEXT: cmp w8, #0
133
120
; CHECK-NEXT: cset w0, ne
134
121
; CHECK-NEXT: ret
@@ -141,10 +128,8 @@ define i1 @fshl_or_commute_ne_0(i32 %x, i32 %y) {
141
128
define <4 x i1 > @fshl_or2_ne_0 (<4 x i32 > %x , <4 x i32 > %y ) {
142
129
; CHECK-LABEL: fshl_or2_ne_0:
143
130
; CHECK: // %bb.0:
144
- ; CHECK-NEXT: orr v1.16b, v0.16b, v1.16b
145
- ; CHECK-NEXT: shl v0.4s, v0.4s, #5
146
131
; CHECK-NEXT: ushr v1.4s, v1.4s, #27
147
- ; CHECK-NEXT: orr v0.16b, v0 .16b, v1 .16b
132
+ ; CHECK-NEXT: orr v0.16b, v1 .16b, v0 .16b
148
133
; CHECK-NEXT: cmtst v0.4s, v0.4s, v0.4s
149
134
; CHECK-NEXT: xtn v0.4h, v0.4s
150
135
; CHECK-NEXT: ret
@@ -157,10 +142,8 @@ define <4 x i1> @fshl_or2_ne_0(<4 x i32> %x, <4 x i32> %y) {
157
142
define <4 x i1 > @fshl_or2_commute_ne_0 (<4 x i32 > %x , <4 x i32 > %y ) {
158
143
; CHECK-LABEL: fshl_or2_commute_ne_0:
159
144
; CHECK: // %bb.0:
160
- ; CHECK-NEXT: orr v1.16b, v1.16b, v0.16b
161
- ; CHECK-NEXT: shl v0.4s, v0.4s, #5
162
145
; CHECK-NEXT: ushr v1.4s, v1.4s, #27
163
- ; CHECK-NEXT: orr v0.16b, v0 .16b, v1 .16b
146
+ ; CHECK-NEXT: orr v0.16b, v1 .16b, v0 .16b
164
147
; CHECK-NEXT: cmtst v0.4s, v0.4s, v0.4s
165
148
; CHECK-NEXT: xtn v0.4h, v0.4s
166
149
; CHECK-NEXT: ret
@@ -173,8 +156,7 @@ define <4 x i1> @fshl_or2_commute_ne_0(<4 x i32> %x, <4 x i32> %y) {
173
156
define i1 @fshr_or_ne_0 (i64 %x , i64 %y ) {
174
157
; CHECK-LABEL: fshr_or_ne_0:
175
158
; CHECK: // %bb.0:
176
- ; CHECK-NEXT: orr w8, w0, w1
177
- ; CHECK-NEXT: extr x8, x8, x0, #1
159
+ ; CHECK-NEXT: orr x8, x0, x1, lsl #63
178
160
; CHECK-NEXT: cmp x8, #0
179
161
; CHECK-NEXT: cset w0, ne
180
162
; CHECK-NEXT: ret
@@ -187,8 +169,7 @@ define i1 @fshr_or_ne_0(i64 %x, i64 %y) {
187
169
define i1 @fshr_or_commute_ne_0 (i64 %x , i64 %y ) {
188
170
; CHECK-LABEL: fshr_or_commute_ne_0:
189
171
; CHECK: // %bb.0:
190
- ; CHECK-NEXT: orr w8, w1, w0
191
- ; CHECK-NEXT: extr x8, x8, x0, #1
172
+ ; CHECK-NEXT: orr x8, x0, x1, lsl #63
192
173
; CHECK-NEXT: cmp x8, #0
193
174
; CHECK-NEXT: cset w0, ne
194
175
; CHECK-NEXT: ret
@@ -201,9 +182,8 @@ define i1 @fshr_or_commute_ne_0(i64 %x, i64 %y) {
201
182
define i1 @fshr_or2_ne_0 (i16 %x , i16 %y ) {
202
183
; CHECK-LABEL: fshr_or2_ne_0:
203
184
; CHECK: // %bb.0:
204
- ; CHECK-NEXT: orr w8, w0, w1
205
- ; CHECK-NEXT: lsl w8, w8, #16
206
- ; CHECK-NEXT: extr w8, w0, w8, #18
185
+ ; CHECK-NEXT: and w8, w1, #0xfffc
186
+ ; CHECK-NEXT: orr w8, w0, w8, lsr #2
207
187
; CHECK-NEXT: tst w8, #0xffff
208
188
; CHECK-NEXT: cset w0, ne
209
189
; CHECK-NEXT: ret
@@ -216,9 +196,8 @@ define i1 @fshr_or2_ne_0(i16 %x, i16 %y) {
216
196
define i1 @fshr_or2_commute_ne_0 (i16 %x , i16 %y ) {
217
197
; CHECK-LABEL: fshr_or2_commute_ne_0:
218
198
; CHECK: // %bb.0:
219
- ; CHECK-NEXT: orr w8, w1, w0
220
- ; CHECK-NEXT: lsl w8, w8, #16
221
- ; CHECK-NEXT: extr w8, w0, w8, #18
199
+ ; CHECK-NEXT: and w8, w1, #0xfffc
200
+ ; CHECK-NEXT: orr w8, w0, w8, lsr #2
222
201
; CHECK-NEXT: tst w8, #0xffff
223
202
; CHECK-NEXT: cset w0, ne
224
203
; CHECK-NEXT: ret
0 commit comments