@@ -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