Skip to content

Commit 3097021

Browse files
committed
Rebase on main
Required changes: * Use APInt::getAllOnes() instead of using -1 in DAG.getConstant() * A new test case was added that is affected by this change
1 parent 6d87db2 commit 3097021

File tree

2 files changed

+12
-31
lines changed

2 files changed

+12
-31
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15859,7 +15859,8 @@ static SDValue getVectorBitwiseReduce(unsigned Opcode, SDValue Vec, EVT VT,
1585915859
if (ScalarOpcode == ISD::AND && NumElems < 16) {
1586015860
Vec = DAG.getNode(
1586115861
ISD::XOR, DL, VecVT, Vec,
15862-
DAG.getSplatVector(VecVT, DL, DAG.getConstant(-1, DL, MVT::i32)));
15862+
DAG.getSplatVector(
15863+
VecVT, DL, DAG.getConstant(APInt::getAllOnes(32), DL, MVT::i32)));
1586315864
}
1586415865

1586515866
// any_ext doesn't work with umin/umax, so only use it for uadd.

llvm/test/CodeGen/AArch64/vector-extract-last-active.ll

Lines changed: 10 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,11 @@ define i16 @extract_last_i16(<8 x i16> %data, <8 x i16> %mask, i16 %passthru) {
6262
; NEON-FIXED-NEXT: str q0, [sp]
6363
; NEON-FIXED-NEXT: xtn v1.8b, v1.8h
6464
; NEON-FIXED-NEXT: and v2.8b, v1.8b, v2.8b
65-
; NEON-FIXED-NEXT: umaxv b1, v1.8b
65+
; NEON-FIXED-NEXT: fcmp d1, #0.0
6666
; NEON-FIXED-NEXT: umaxv b2, v2.8b
6767
; NEON-FIXED-NEXT: fmov w8, s2
6868
; NEON-FIXED-NEXT: bfi x9, x8, #1, #3
6969
; NEON-FIXED-NEXT: ldrh w8, [x9]
70-
; NEON-FIXED-NEXT: fmov w9, s1
71-
; NEON-FIXED-NEXT: tst w9, #0x1
7270
; NEON-FIXED-NEXT: csel w0, w8, w0, ne
7371
; NEON-FIXED-NEXT: add sp, sp, #16
7472
; NEON-FIXED-NEXT: ret
@@ -83,13 +81,11 @@ define i16 @extract_last_i16(<8 x i16> %data, <8 x i16> %mask, i16 %passthru) {
8381
; SVE-FIXED-NEXT: str q0, [sp]
8482
; SVE-FIXED-NEXT: xtn v1.8b, v1.8h
8583
; SVE-FIXED-NEXT: and v2.8b, v1.8b, v2.8b
86-
; SVE-FIXED-NEXT: umaxv b1, v1.8b
84+
; SVE-FIXED-NEXT: fcmp d1, #0.0
8785
; SVE-FIXED-NEXT: umaxv b2, v2.8b
8886
; SVE-FIXED-NEXT: fmov w8, s2
8987
; SVE-FIXED-NEXT: bfi x9, x8, #1, #3
9088
; SVE-FIXED-NEXT: ldrh w8, [x9]
91-
; SVE-FIXED-NEXT: fmov w9, s1
92-
; SVE-FIXED-NEXT: tst w9, #0x1
9389
; SVE-FIXED-NEXT: csel w0, w8, w0, ne
9490
; SVE-FIXED-NEXT: add sp, sp, #16
9591
; SVE-FIXED-NEXT: ret
@@ -110,13 +106,11 @@ define i32 @extract_last_i32(<4 x i32> %data, <4 x i32> %mask, i32 %passthru) {
110106
; NEON-FIXED-NEXT: str q0, [sp]
111107
; NEON-FIXED-NEXT: xtn v1.4h, v1.4s
112108
; NEON-FIXED-NEXT: and v2.8b, v1.8b, v2.8b
113-
; NEON-FIXED-NEXT: umaxv h1, v1.4h
109+
; NEON-FIXED-NEXT: fcmp d1, #0.0
114110
; NEON-FIXED-NEXT: umaxv h2, v2.4h
115111
; NEON-FIXED-NEXT: fmov w8, s2
116112
; NEON-FIXED-NEXT: bfi x9, x8, #2, #2
117113
; NEON-FIXED-NEXT: ldr w8, [x9]
118-
; NEON-FIXED-NEXT: fmov w9, s1
119-
; NEON-FIXED-NEXT: tst w9, #0x1
120114
; NEON-FIXED-NEXT: csel w0, w8, w0, ne
121115
; NEON-FIXED-NEXT: add sp, sp, #16
122116
; NEON-FIXED-NEXT: ret
@@ -131,13 +125,11 @@ define i32 @extract_last_i32(<4 x i32> %data, <4 x i32> %mask, i32 %passthru) {
131125
; SVE-FIXED-NEXT: str q0, [sp]
132126
; SVE-FIXED-NEXT: xtn v1.4h, v1.4s
133127
; SVE-FIXED-NEXT: and v2.8b, v1.8b, v2.8b
134-
; SVE-FIXED-NEXT: umaxv h1, v1.4h
128+
; SVE-FIXED-NEXT: fcmp d1, #0.0
135129
; SVE-FIXED-NEXT: umaxv h2, v2.4h
136130
; SVE-FIXED-NEXT: fmov w8, s2
137131
; SVE-FIXED-NEXT: bfi x9, x8, #2, #2
138132
; SVE-FIXED-NEXT: ldr w8, [x9]
139-
; SVE-FIXED-NEXT: fmov w9, s1
140-
; SVE-FIXED-NEXT: tst w9, #0x1
141133
; SVE-FIXED-NEXT: csel w0, w8, w0, ne
142134
; SVE-FIXED-NEXT: add sp, sp, #16
143135
; SVE-FIXED-NEXT: ret
@@ -158,13 +150,11 @@ define i64 @extract_last_i64(<2 x i64> %data, <2 x i64> %mask, i64 %passthru) {
158150
; NEON-FIXED-NEXT: str q0, [sp]
159151
; NEON-FIXED-NEXT: xtn v1.2s, v1.2d
160152
; NEON-FIXED-NEXT: and v2.8b, v1.8b, v2.8b
161-
; NEON-FIXED-NEXT: umaxp v1.2s, v1.2s, v1.2s
153+
; NEON-FIXED-NEXT: fcmp d1, #0.0
162154
; NEON-FIXED-NEXT: umaxp v2.2s, v2.2s, v2.2s
163155
; NEON-FIXED-NEXT: fmov w8, s2
164156
; NEON-FIXED-NEXT: bfi x9, x8, #3, #1
165157
; NEON-FIXED-NEXT: ldr x8, [x9]
166-
; NEON-FIXED-NEXT: fmov w9, s1
167-
; NEON-FIXED-NEXT: tst w9, #0x1
168158
; NEON-FIXED-NEXT: csel x0, x8, x0, ne
169159
; NEON-FIXED-NEXT: add sp, sp, #16
170160
; NEON-FIXED-NEXT: ret
@@ -179,13 +169,11 @@ define i64 @extract_last_i64(<2 x i64> %data, <2 x i64> %mask, i64 %passthru) {
179169
; SVE-FIXED-NEXT: str q0, [sp]
180170
; SVE-FIXED-NEXT: xtn v1.2s, v1.2d
181171
; SVE-FIXED-NEXT: and v2.8b, v1.8b, v2.8b
182-
; SVE-FIXED-NEXT: umaxp v1.2s, v1.2s, v1.2s
172+
; SVE-FIXED-NEXT: fcmp d1, #0.0
183173
; SVE-FIXED-NEXT: umaxp v2.2s, v2.2s, v2.2s
184174
; SVE-FIXED-NEXT: fmov w8, s2
185175
; SVE-FIXED-NEXT: bfi x9, x8, #3, #1
186176
; SVE-FIXED-NEXT: ldr x8, [x9]
187-
; SVE-FIXED-NEXT: fmov w9, s1
188-
; SVE-FIXED-NEXT: tst w9, #0x1
189177
; SVE-FIXED-NEXT: csel x0, x8, x0, ne
190178
; SVE-FIXED-NEXT: add sp, sp, #16
191179
; SVE-FIXED-NEXT: ret
@@ -206,13 +194,11 @@ define float @extract_last_float(<4 x float> %data, <4 x i32> %mask, float %pass
206194
; NEON-FIXED-NEXT: str q0, [sp]
207195
; NEON-FIXED-NEXT: xtn v1.4h, v1.4s
208196
; NEON-FIXED-NEXT: and v3.8b, v1.8b, v3.8b
209-
; NEON-FIXED-NEXT: umaxv h1, v1.4h
197+
; NEON-FIXED-NEXT: fcmp d1, #0.0
210198
; NEON-FIXED-NEXT: umaxv h3, v3.4h
211199
; NEON-FIXED-NEXT: fmov w8, s3
212200
; NEON-FIXED-NEXT: bfi x9, x8, #2, #2
213-
; NEON-FIXED-NEXT: fmov w8, s1
214201
; NEON-FIXED-NEXT: ldr s0, [x9]
215-
; NEON-FIXED-NEXT: tst w8, #0x1
216202
; NEON-FIXED-NEXT: fcsel s0, s0, s2, ne
217203
; NEON-FIXED-NEXT: add sp, sp, #16
218204
; NEON-FIXED-NEXT: ret
@@ -227,13 +213,11 @@ define float @extract_last_float(<4 x float> %data, <4 x i32> %mask, float %pass
227213
; SVE-FIXED-NEXT: str q0, [sp]
228214
; SVE-FIXED-NEXT: xtn v1.4h, v1.4s
229215
; SVE-FIXED-NEXT: and v3.8b, v1.8b, v3.8b
230-
; SVE-FIXED-NEXT: umaxv h1, v1.4h
216+
; SVE-FIXED-NEXT: fcmp d1, #0.0
231217
; SVE-FIXED-NEXT: umaxv h3, v3.4h
232218
; SVE-FIXED-NEXT: fmov w8, s3
233219
; SVE-FIXED-NEXT: bfi x9, x8, #2, #2
234-
; SVE-FIXED-NEXT: fmov w8, s1
235220
; SVE-FIXED-NEXT: ldr s0, [x9]
236-
; SVE-FIXED-NEXT: tst w8, #0x1
237221
; SVE-FIXED-NEXT: fcsel s0, s0, s2, ne
238222
; SVE-FIXED-NEXT: add sp, sp, #16
239223
; SVE-FIXED-NEXT: ret
@@ -254,13 +238,11 @@ define double @extract_last_double(<2 x double> %data, <2 x i64> %mask, double %
254238
; NEON-FIXED-NEXT: str q0, [sp]
255239
; NEON-FIXED-NEXT: xtn v1.2s, v1.2d
256240
; NEON-FIXED-NEXT: and v3.8b, v1.8b, v3.8b
257-
; NEON-FIXED-NEXT: umaxp v1.2s, v1.2s, v1.2s
241+
; NEON-FIXED-NEXT: fcmp d1, #0.0
258242
; NEON-FIXED-NEXT: umaxp v3.2s, v3.2s, v3.2s
259243
; NEON-FIXED-NEXT: fmov w8, s3
260244
; NEON-FIXED-NEXT: bfi x9, x8, #3, #1
261-
; NEON-FIXED-NEXT: fmov w8, s1
262245
; NEON-FIXED-NEXT: ldr d0, [x9]
263-
; NEON-FIXED-NEXT: tst w8, #0x1
264246
; NEON-FIXED-NEXT: fcsel d0, d0, d2, ne
265247
; NEON-FIXED-NEXT: add sp, sp, #16
266248
; NEON-FIXED-NEXT: ret
@@ -275,13 +257,11 @@ define double @extract_last_double(<2 x double> %data, <2 x i64> %mask, double %
275257
; SVE-FIXED-NEXT: str q0, [sp]
276258
; SVE-FIXED-NEXT: xtn v1.2s, v1.2d
277259
; SVE-FIXED-NEXT: and v3.8b, v1.8b, v3.8b
278-
; SVE-FIXED-NEXT: umaxp v1.2s, v1.2s, v1.2s
260+
; SVE-FIXED-NEXT: fcmp d1, #0.0
279261
; SVE-FIXED-NEXT: umaxp v3.2s, v3.2s, v3.2s
280262
; SVE-FIXED-NEXT: fmov w8, s3
281263
; SVE-FIXED-NEXT: bfi x9, x8, #3, #1
282-
; SVE-FIXED-NEXT: fmov w8, s1
283264
; SVE-FIXED-NEXT: ldr d0, [x9]
284-
; SVE-FIXED-NEXT: tst w8, #0x1
285265
; SVE-FIXED-NEXT: fcsel d0, d0, d2, ne
286266
; SVE-FIXED-NEXT: add sp, sp, #16
287267
; SVE-FIXED-NEXT: ret

0 commit comments

Comments
 (0)