You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[DAGCombiner] Preserve nuw when converting mul to shl. Use nuw in srl+shl combine. (llvm#155043)
If the srl+shl have the same shift amount and the shl has the nuw flag,
we can remove both.
In the affected test, the InterleavedAccess pass will emit a udiv after
the `mul nuw`. We expect them to combine away. The remaining shifts on
the RV64 tests are because we didn't add the zeroext attribute to the
incoming evl operand.
Copy file name to clipboardExpand all lines: llvm/test/CodeGen/RISCV/rvv/vp-vector-interleaved-access.ll
+44-65Lines changed: 44 additions & 65 deletions
Original file line number
Diff line number
Diff line change
@@ -5,16 +5,14 @@
5
5
define {<vscale x 2 x i32>, <vscale x 2 x i32>} @load_factor2_v2(ptr%ptr, i32%evl) {
6
6
; RV32-LABEL: load_factor2_v2:
7
7
; RV32: # %bb.0:
8
-
; RV32-NEXT: slli a1, a1, 1
9
-
; RV32-NEXT: srli a1, a1, 1
10
8
; RV32-NEXT: vsetvli zero, a1, e32, m1, ta, ma
11
9
; RV32-NEXT: vlseg2e32.v v8, (a0)
12
10
; RV32-NEXT: ret
13
11
;
14
12
; RV64-LABEL: load_factor2_v2:
15
13
; RV64: # %bb.0:
16
-
; RV64-NEXT: slli a1, a1, 33
17
-
; RV64-NEXT: srli a1, a1, 33
14
+
; RV64-NEXT: slli a1, a1, 32
15
+
; RV64-NEXT: srli a1, a1, 32
18
16
; RV64-NEXT: vsetvli zero, a1, e32, m1, ta, ma
19
17
; RV64-NEXT: vlseg2e32.v v8, (a0)
20
18
; RV64-NEXT: ret
@@ -142,16 +140,14 @@ merge:
142
140
define {<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>} @load_factor4_v2(ptr%ptr, i32%evl) {
143
141
; RV32-LABEL: load_factor4_v2:
144
142
; RV32: # %bb.0:
145
-
; RV32-NEXT: slli a1, a1, 2
146
-
; RV32-NEXT: srli a1, a1, 2
147
143
; RV32-NEXT: vsetvli zero, a1, e32, m1, ta, ma
148
144
; RV32-NEXT: vlseg4e32.v v8, (a0)
149
145
; RV32-NEXT: ret
150
146
;
151
147
; RV64-LABEL: load_factor4_v2:
152
148
; RV64: # %bb.0:
153
-
; RV64-NEXT: slli a1, a1, 34
154
-
; RV64-NEXT: srli a1, a1, 34
149
+
; RV64-NEXT: slli a1, a1, 32
150
+
; RV64-NEXT: srli a1, a1, 32
155
151
; RV64-NEXT: vsetvli zero, a1, e32, m1, ta, ma
156
152
; RV64-NEXT: vlseg4e32.v v8, (a0)
157
153
; RV64-NEXT: ret
@@ -237,16 +233,14 @@ define {<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2
237
233
define {<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>} @load_factor8_v2(ptr%ptr, i32%evl) {
238
234
; RV32-LABEL: load_factor8_v2:
239
235
; RV32: # %bb.0:
240
-
; RV32-NEXT: slli a1, a1, 3
241
-
; RV32-NEXT: srli a1, a1, 3
242
236
; RV32-NEXT: vsetvli zero, a1, e32, m1, ta, ma
243
237
; RV32-NEXT: vlseg8e32.v v8, (a0)
244
238
; RV32-NEXT: ret
245
239
;
246
240
; RV64-LABEL: load_factor8_v2:
247
241
; RV64: # %bb.0:
248
-
; RV64-NEXT: slli a1, a1, 35
249
-
; RV64-NEXT: srli a1, a1, 35
242
+
; RV64-NEXT: slli a1, a1, 32
243
+
; RV64-NEXT: srli a1, a1, 32
250
244
; RV64-NEXT: vsetvli zero, a1, e32, m1, ta, ma
251
245
; RV64-NEXT: vlseg8e32.v v8, (a0)
252
246
; RV64-NEXT: ret
@@ -276,16 +270,14 @@ define {<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2
276
270
definevoid@store_factor2_v2(<vscale x 1 x i32> %v0, <vscale x 1 x i32> %v1, ptr%ptr, i32%evl) {
277
271
; RV32-LABEL: store_factor2_v2:
278
272
; RV32: # %bb.0:
279
-
; RV32-NEXT: slli a1, a1, 1
280
-
; RV32-NEXT: srli a1, a1, 1
281
273
; RV32-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
282
274
; RV32-NEXT: vsseg2e32.v v8, (a0)
283
275
; RV32-NEXT: ret
284
276
;
285
277
; RV64-LABEL: store_factor2_v2:
286
278
; RV64: # %bb.0:
287
-
; RV64-NEXT: slli a1, a1, 33
288
-
; RV64-NEXT: srli a1, a1, 33
279
+
; RV64-NEXT: slli a1, a1, 32
280
+
; RV64-NEXT: srli a1, a1, 32
289
281
; RV64-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
290
282
; RV64-NEXT: vsseg2e32.v v8, (a0)
291
283
; RV64-NEXT: ret
@@ -384,8 +376,6 @@ define void @store_factor7_v2(<vscale x 1 x i32> %v0, <vscale x 1 x i32> %v1, <v
384
376
definevoid@store_factor8_v2(<vscale x 1 x i32> %v0, <vscale x 1 x i32> %v1, ptr%ptr, i32%evl) {
385
377
; RV32-LABEL: store_factor8_v2:
386
378
; RV32: # %bb.0:
387
-
; RV32-NEXT: slli a1, a1, 3
388
-
; RV32-NEXT: srli a1, a1, 3
389
379
; RV32-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
390
380
; RV32-NEXT: vmv1r.v v10, v8
391
381
; RV32-NEXT: vmv1r.v v11, v9
@@ -398,8 +388,8 @@ define void @store_factor8_v2(<vscale x 1 x i32> %v0, <vscale x 1 x i32> %v1, pt
398
388
;
399
389
; RV64-LABEL: store_factor8_v2:
400
390
; RV64: # %bb.0:
401
-
; RV64-NEXT: slli a1, a1, 35
402
-
; RV64-NEXT: srli a1, a1, 35
391
+
; RV64-NEXT: slli a1, a1, 32
392
+
; RV64-NEXT: srli a1, a1, 32
403
393
; RV64-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
404
394
; RV64-NEXT: vmv1r.v v10, v8
405
395
; RV64-NEXT: vmv1r.v v11, v9
@@ -418,16 +408,14 @@ define void @store_factor8_v2(<vscale x 1 x i32> %v0, <vscale x 1 x i32> %v1, pt
418
408
define {<vscale x 2 x i32>, <vscale x 2 x i32>} @masked_load_factor2_v2(<vscale x 2 x i1> %mask, ptr%ptr, i32%evl) {
419
409
; RV32-LABEL: masked_load_factor2_v2:
420
410
; RV32: # %bb.0:
421
-
; RV32-NEXT: slli a1, a1, 1
422
-
; RV32-NEXT: srli a1, a1, 1
423
411
; RV32-NEXT: vsetvli zero, a1, e32, m1, ta, ma
424
412
; RV32-NEXT: vlseg2e32.v v8, (a0), v0.t
425
413
; RV32-NEXT: ret
426
414
;
427
415
; RV64-LABEL: masked_load_factor2_v2:
428
416
; RV64: # %bb.0:
429
-
; RV64-NEXT: slli a1, a1, 33
430
-
; RV64-NEXT: srli a1, a1, 33
417
+
; RV64-NEXT: slli a1, a1, 32
418
+
; RV64-NEXT: srli a1, a1, 32
431
419
; RV64-NEXT: vsetvli zero, a1, e32, m1, ta, ma
432
420
; RV64-NEXT: vlseg2e32.v v8, (a0), v0.t
433
421
; RV64-NEXT: ret
@@ -445,16 +433,14 @@ define {<vscale x 2 x i32>, <vscale x 2 x i32>} @masked_load_factor2_v2(<vscale
445
433
define {<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>} @masked_load_factor4_v2(<vscale x 2 x i1> %mask, ptr%ptr, i32%evl) {
446
434
; RV32-LABEL: masked_load_factor4_v2:
447
435
; RV32: # %bb.0:
448
-
; RV32-NEXT: slli a1, a1, 2
449
-
; RV32-NEXT: srli a1, a1, 2
450
436
; RV32-NEXT: vsetvli zero, a1, e32, m1, ta, ma
451
437
; RV32-NEXT: vlseg4e32.v v8, (a0), v0.t
452
438
; RV32-NEXT: ret
453
439
;
454
440
; RV64-LABEL: masked_load_factor4_v2:
455
441
; RV64: # %bb.0:
456
-
; RV64-NEXT: slli a1, a1, 34
457
-
; RV64-NEXT: srli a1, a1, 34
442
+
; RV64-NEXT: slli a1, a1, 32
443
+
; RV64-NEXT: srli a1, a1, 32
458
444
; RV64-NEXT: vsetvli zero, a1, e32, m1, ta, ma
459
445
; RV64-NEXT: vlseg4e32.v v8, (a0), v0.t
460
446
; RV64-NEXT: ret
@@ -477,20 +463,17 @@ define {<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2
477
463
definevoid@masked_store_factor2_v2(<vscale x 1 x i1> %mask, <vscale x 1 x i32> %v0, <vscale x 1 x i32> %v1, ptr%ptr, i32%evl) {
478
464
; RV32-LABEL: masked_store_factor2_v2:
479
465
; RV32: # %bb.0:
480
-
; RV32-NEXT: slli a1, a1, 1
481
-
; RV32-NEXT: vsetivli zero, 1, e8, m1, ta, ma
482
-
; RV32-NEXT: vmv1r.v v9, v8
483
-
; RV32-NEXT: srli a1, a1, 1
484
466
; RV32-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
467
+
; RV32-NEXT: vmv1r.v v9, v8
485
468
; RV32-NEXT: vsseg2e32.v v8, (a0), v0.t
486
469
; RV32-NEXT: ret
487
470
;
488
471
; RV64-LABEL: masked_store_factor2_v2:
489
472
; RV64: # %bb.0:
490
-
; RV64-NEXT: slli a1, a1, 33
473
+
; RV64-NEXT: slli a1, a1, 32
491
474
; RV64-NEXT: vsetivli zero, 1, e8, m1, ta, ma
492
475
; RV64-NEXT: vmv1r.v v9, v8
493
-
; RV64-NEXT: srli a1, a1, 33
476
+
; RV64-NEXT: srli a1, a1, 32
494
477
; RV64-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
495
478
; RV64-NEXT: vsseg2e32.v v8, (a0), v0.t
496
479
; RV64-NEXT: ret
@@ -504,17 +487,15 @@ define void @masked_store_factor2_v2(<vscale x 1 x i1> %mask, <vscale x 1 x i32>
504
487
definevoid@masked_load_store_factor2_v2_shared_mask(<vscale x 2 x i1> %mask, ptr%ptr, i32%evl) {
0 commit comments