Skip to content

Commit 2a1ed4e

Browse files
committed
Bail out if MemVT is a fixed-length vector
1 parent 114d8cd commit 2a1ed4e

File tree

3 files changed

+51
-49
lines changed

3 files changed

+51
-49
lines changed

llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7388,7 +7388,8 @@ bool AArch64DAGToDAGISel::SelectAddrModeIndexedSVE(SDNode *Root, SDValue N,
73887388
const auto KnownVScale =
73897389
Subtarget->getSVEVectorSizeInBits() / AArch64::SVEBitsPerBlock;
73907390

7391-
if (!KnownVScale || ByteOffset % KnownVScale != 0)
7391+
if (!KnownVScale || ByteOffset % KnownVScale != 0 ||
7392+
!MemVT.isScalableVector())
73927393
return false;
73937394

73947395
MulImm = ByteOffset / KnownVScale;

llvm/test/CodeGen/AArch64/sve-fixed-length-offsets.ll

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -381,11 +381,12 @@ define void @v8i32(ptr %ldptr, ptr %stptr) {
381381
; CHECK-256-LABEL: v8i32:
382382
; CHECK-256: // %bb.0:
383383
; CHECK-256-NEXT: ptrue p0.s
384-
; CHECK-256-NEXT: mov x8, #8 // =0x8
384+
; CHECK-256-NEXT: mov x8, #16 // =0x10
385+
; CHECK-256-NEXT: mov x9, #8 // =0x8
385386
; CHECK-256-NEXT: ld1w { z0.s }, p0/z, [x0, x8, lsl #2]
386-
; CHECK-256-NEXT: ld1w { z1.s }, p0/z, [x0, #1, mul vl]
387+
; CHECK-256-NEXT: ld1w { z1.s }, p0/z, [x0, x9, lsl #2]
387388
; CHECK-256-NEXT: st1w { z0.s }, p0, [x1, x8, lsl #2]
388-
; CHECK-256-NEXT: st1w { z1.s }, p0, [x1, #1, mul vl]
389+
; CHECK-256-NEXT: st1w { z1.s }, p0, [x1, x9, lsl #2]
389390
; CHECK-256-NEXT: ret
390391
;
391392
; CHECK-512-LABEL: v8i32:

llvm/test/CodeGen/AArch64/sve-fixed-length-shuffles.ll

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -30,64 +30,64 @@ define void @crash_when_lowering_extract_shuffle(ptr %dst, i1 %cond) vscale_rang
3030
; CHECK-NEXT: // %bb.1: // %vector.body
3131
; CHECK-NEXT: mov z0.b, #0 // =0x0
3232
; CHECK-NEXT: ptrue p0.s
33-
; CHECK-NEXT: mov x9, #24 // =0x18
33+
; CHECK-NEXT: mov x9, #8 // =0x8
34+
; CHECK-NEXT: mov x10, #24 // =0x18
3435
; CHECK-NEXT: umov w8, v0.b[8]
35-
; CHECK-NEXT: mov v2.16b, v0.16b
36-
; CHECK-NEXT: mov z3.d, z0.d
37-
; CHECK-NEXT: mov v2.b[1], v0.b[1]
38-
; CHECK-NEXT: ext z3.b, z3.b, z0.b, #16
39-
; CHECK-NEXT: fmov s1, w8
40-
; CHECK-NEXT: mov x8, #8 // =0x8
41-
; CHECK-NEXT: ext v4.16b, v3.16b, v3.16b, #8
42-
; CHECK-NEXT: mov v1.b[1], v0.b[9]
43-
; CHECK-NEXT: mov v2.b[2], v0.b[2]
44-
; CHECK-NEXT: mov v1.b[2], v0.b[10]
45-
; CHECK-NEXT: mov v2.b[3], v0.b[3]
46-
; CHECK-NEXT: mov v1.b[3], v0.b[11]
47-
; CHECK-NEXT: mov v2.b[4], v0.b[4]
48-
; CHECK-NEXT: mov v1.b[4], v0.b[12]
49-
; CHECK-NEXT: mov v2.b[5], v0.b[5]
50-
; CHECK-NEXT: mov v1.b[5], v0.b[13]
51-
; CHECK-NEXT: mov v2.b[6], v0.b[6]
52-
; CHECK-NEXT: mov v1.b[6], v0.b[14]
53-
; CHECK-NEXT: mov v2.b[7], v0.b[7]
54-
; CHECK-NEXT: mov v1.b[7], v0.b[15]
36+
; CHECK-NEXT: mov v1.16b, v0.16b
37+
; CHECK-NEXT: mov v1.b[1], v0.b[1]
38+
; CHECK-NEXT: fmov s2, w8
39+
; CHECK-NEXT: mov x8, #16 // =0x10
40+
; CHECK-NEXT: mov v2.b[1], v0.b[9]
41+
; CHECK-NEXT: mov v1.b[2], v0.b[2]
42+
; CHECK-NEXT: mov v2.b[2], v0.b[10]
43+
; CHECK-NEXT: mov v1.b[3], v0.b[3]
44+
; CHECK-NEXT: mov v2.b[3], v0.b[11]
45+
; CHECK-NEXT: mov v1.b[4], v0.b[4]
46+
; CHECK-NEXT: mov v2.b[4], v0.b[12]
47+
; CHECK-NEXT: mov v1.b[5], v0.b[5]
48+
; CHECK-NEXT: mov v2.b[5], v0.b[13]
49+
; CHECK-NEXT: mov v1.b[6], v0.b[6]
50+
; CHECK-NEXT: mov v2.b[6], v0.b[14]
51+
; CHECK-NEXT: mov v1.b[7], v0.b[7]
52+
; CHECK-NEXT: mov v2.b[7], v0.b[15]
53+
; CHECK-NEXT: ext z0.b, z0.b, z0.b, #16
54+
; CHECK-NEXT: uunpklo z1.h, z1.b
55+
; CHECK-NEXT: ext v3.16b, v0.16b, v0.16b, #8
56+
; CHECK-NEXT: uunpklo z0.h, z0.b
5557
; CHECK-NEXT: uunpklo z2.h, z2.b
56-
; CHECK-NEXT: uunpklo z0.h, z1.b
57-
; CHECK-NEXT: uunpklo z1.h, z3.b
58-
; CHECK-NEXT: uunpklo z3.h, z4.b
59-
; CHECK-NEXT: uunpklo z2.s, z2.h
60-
; CHECK-NEXT: uunpklo z0.s, z0.h
6158
; CHECK-NEXT: uunpklo z1.s, z1.h
59+
; CHECK-NEXT: uunpklo z3.h, z3.b
60+
; CHECK-NEXT: uunpklo z0.s, z0.h
61+
; CHECK-NEXT: uunpklo z2.s, z2.h
62+
; CHECK-NEXT: lsl z1.s, z1.s, #31
6263
; CHECK-NEXT: uunpklo z3.s, z3.h
63-
; CHECK-NEXT: lsl z2.s, z2.s, #31
6464
; CHECK-NEXT: lsl z0.s, z0.s, #31
65-
; CHECK-NEXT: lsl z1.s, z1.s, #31
65+
; CHECK-NEXT: asr z1.s, z1.s, #31
66+
; CHECK-NEXT: lsl z2.s, z2.s, #31
67+
; CHECK-NEXT: asr z0.s, z0.s, #31
68+
; CHECK-NEXT: and z1.s, z1.s, #0x1
6669
; CHECK-NEXT: lsl z3.s, z3.s, #31
6770
; CHECK-NEXT: asr z2.s, z2.s, #31
68-
; CHECK-NEXT: asr z0.s, z0.s, #31
69-
; CHECK-NEXT: asr z1.s, z1.s, #31
71+
; CHECK-NEXT: and z0.s, z0.s, #0x1
72+
; CHECK-NEXT: cmpne p4.s, p0/z, z1.s, #0
73+
; CHECK-NEXT: ld1w { z1.s }, p0/z, [x0]
7074
; CHECK-NEXT: asr z3.s, z3.s, #31
7175
; CHECK-NEXT: and z2.s, z2.s, #0x1
72-
; CHECK-NEXT: and z0.s, z0.s, #0x1
73-
; CHECK-NEXT: and z1.s, z1.s, #0x1
74-
; CHECK-NEXT: and z3.s, z3.s, #0x1
75-
; CHECK-NEXT: cmpne p4.s, p0/z, z2.s, #0
76-
; CHECK-NEXT: ld1w { z2.s }, p0/z, [x0]
7776
; CHECK-NEXT: cmpne p1.s, p0/z, z0.s, #0
78-
; CHECK-NEXT: cmpne p2.s, p0/z, z1.s, #0
79-
; CHECK-NEXT: cmpne p3.s, p0/z, z3.s, #0
8077
; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0, x8, lsl #2]
81-
; CHECK-NEXT: ld1w { z1.s }, p0/z, [x0, #1, mul vl]
82-
; CHECK-NEXT: ld1w { z3.s }, p0/z, [x0, x9, lsl #2]
83-
; CHECK-NEXT: mov z2.s, p4/m, #0 // =0x0
78+
; CHECK-NEXT: and z3.s, z3.s, #0x1
79+
; CHECK-NEXT: cmpne p2.s, p0/z, z2.s, #0
80+
; CHECK-NEXT: ld1w { z2.s }, p0/z, [x0, x9, lsl #2]
81+
; CHECK-NEXT: mov z1.s, p4/m, #0 // =0x0
82+
; CHECK-NEXT: cmpne p3.s, p0/z, z3.s, #0
83+
; CHECK-NEXT: ld1w { z3.s }, p0/z, [x0, x10, lsl #2]
8484
; CHECK-NEXT: mov z0.s, p1/m, #0 // =0x0
85-
; CHECK-NEXT: mov z1.s, p2/m, #0 // =0x0
86-
; CHECK-NEXT: mov z3.s, p3/m, #0 // =0x0
87-
; CHECK-NEXT: st1w { z2.s }, p0, [x0]
85+
; CHECK-NEXT: mov z2.s, p2/m, #0 // =0x0
86+
; CHECK-NEXT: st1w { z1.s }, p0, [x0]
8887
; CHECK-NEXT: st1w { z0.s }, p0, [x0, x8, lsl #2]
89-
; CHECK-NEXT: st1w { z1.s }, p0, [x0, #1, mul vl]
90-
; CHECK-NEXT: st1w { z3.s }, p0, [x0, x9, lsl #2]
88+
; CHECK-NEXT: mov z3.s, p3/m, #0 // =0x0
89+
; CHECK-NEXT: st1w { z2.s }, p0, [x0, x9, lsl #2]
90+
; CHECK-NEXT: st1w { z3.s }, p0, [x0, x10, lsl #2]
9191
; CHECK-NEXT: .LBB1_2: // %exit
9292
; CHECK-NEXT: ret
9393
%broadcast.splat = shufflevector <32 x i1> zeroinitializer, <32 x i1> zeroinitializer, <32 x i32> zeroinitializer

0 commit comments

Comments
 (0)