@@ -1265,15 +1265,58 @@ entry:
12651265 ret i32 0
12661266}
12671267
1268- ; Check handling of alloca allocated into CSR space, with frame pointer.
1269- define i32 @f12 (double %d , <vscale x 4 x i32 > %vs ) "frame-pointer" ="all" {
1268+ define i32 @f12 (double %d , <vscale x 4 x i32 > %vs ) "aarch64_pstate_sm_compatible" {
12701269; CHECK-LABEL: f12:
12711270; CHECK: .seh_proc f12
12721271; CHECK-NEXT: // %bb.0: // %entry
12731272; CHECK-NEXT: addvl sp, sp, #-1
12741273; CHECK-NEXT: .seh_allocz 1
12751274; CHECK-NEXT: str z8, [sp] // 16-byte Folded Spill
12761275; CHECK-NEXT: .seh_save_zreg z8, 0
1276+ ; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1277+ ; CHECK-NEXT: .seh_save_reg_x x30, 16
1278+ ; CHECK-NEXT: addvl sp, sp, #-1
1279+ ; CHECK-NEXT: .seh_allocz 1
1280+ ; CHECK-NEXT: .seh_endprologue
1281+ ; CHECK-NEXT: addvl x8, sp, #1
1282+ ; CHECK-NEXT: mov w0, wzr
1283+ ; CHECK-NEXT: //APP
1284+ ; CHECK-NEXT: //NO_APP
1285+ ; CHECK-NEXT: str d0, [x8, #8]
1286+ ; CHECK-NEXT: str d0, [sp]
1287+ ; CHECK-NEXT: .seh_startepilogue
1288+ ; CHECK-NEXT: addvl sp, sp, #1
1289+ ; CHECK-NEXT: .seh_allocz 1
1290+ ; CHECK-NEXT: ldr x30, [sp] // 8-byte Folded Reload
1291+ ; CHECK-NEXT: .seh_save_reg x30, 0
1292+ ; CHECK-NEXT: add sp, sp, #16
1293+ ; CHECK-NEXT: .seh_stackalloc 16
1294+ ; CHECK-NEXT: ldr z8, [sp] // 16-byte Folded Reload
1295+ ; CHECK-NEXT: .seh_save_zreg z8, 0
1296+ ; CHECK-NEXT: addvl sp, sp, #1
1297+ ; CHECK-NEXT: .seh_allocz 1
1298+ ; CHECK-NEXT: .seh_endepilogue
1299+ ; CHECK-NEXT: ret
1300+ ; CHECK-NEXT: .seh_endfunclet
1301+ ; CHECK-NEXT: .seh_endproc
1302+ entry:
1303+ %a = alloca double
1304+ %b = alloca <vscale x 16 x i8 >
1305+ tail call void asm sideeffect "" , "~{d8}" () #1
1306+ store double %d , ptr %a
1307+ store double %d , ptr %b
1308+ ret i32 0
1309+ }
1310+
1311+ ; Check handling of alloca allocated into CSR space, with frame pointer.
1312+ define i32 @f13 (double %d , <vscale x 4 x i32 > %vs ) "frame-pointer" ="all" {
1313+ ; CHECK-LABEL: f13:
1314+ ; CHECK: .seh_proc f13
1315+ ; CHECK-NEXT: // %bb.0: // %entry
1316+ ; CHECK-NEXT: addvl sp, sp, #-1
1317+ ; CHECK-NEXT: .seh_allocz 1
1318+ ; CHECK-NEXT: str z8, [sp] // 16-byte Folded Spill
1319+ ; CHECK-NEXT: .seh_save_zreg z8, 0
12771320; CHECK-NEXT: str x28, [sp, #-32]! // 8-byte Folded Spill
12781321; CHECK-NEXT: .seh_save_reg_x x28, 32
12791322; CHECK-NEXT: stp x29, x30, [sp, #8] // 16-byte Folded Spill
@@ -1306,3 +1349,51 @@ entry:
13061349 store double %d , ptr %a
13071350 ret i32 0
13081351}
1352+
1353+ define i32 @f14 (double %d , <vscale x 4 x i32 > %vs ) "frame-pointer" ="all" {
1354+ ; CHECK-LABEL: f14:
1355+ ; CHECK: .seh_proc f14
1356+ ; CHECK-NEXT: // %bb.0: // %entry
1357+ ; CHECK-NEXT: addvl sp, sp, #-1
1358+ ; CHECK-NEXT: .seh_allocz 1
1359+ ; CHECK-NEXT: str z8, [sp] // 16-byte Folded Spill
1360+ ; CHECK-NEXT: .seh_save_zreg z8, 0
1361+ ; CHECK-NEXT: str x28, [sp, #-32]! // 8-byte Folded Spill
1362+ ; CHECK-NEXT: .seh_save_reg_x x28, 32
1363+ ; CHECK-NEXT: stp x29, x30, [sp, #8] // 16-byte Folded Spill
1364+ ; CHECK-NEXT: .seh_save_fplr 8
1365+ ; CHECK-NEXT: add x29, sp, #8
1366+ ; CHECK-NEXT: .seh_add_fp 8
1367+ ; CHECK-NEXT: .seh_endprologue
1368+ ; CHECK-NEXT: addvl sp, sp, #-1
1369+ ; CHECK-NEXT: addvl x8, x29, #-1
1370+ ; CHECK-NEXT: mov w0, wzr
1371+ ; CHECK-NEXT: //APP
1372+ ; CHECK-NEXT: //NO_APP
1373+ ; CHECK-NEXT: str d0, [x29, #16]
1374+ ; CHECK-NEXT: stur d0, [x8, #-8]
1375+ ; CHECK-NEXT: .seh_startepilogue
1376+ ; CHECK-NEXT: addvl sp, sp, #1
1377+ ; CHECK-NEXT: .seh_allocz 1
1378+ ; CHECK-NEXT: ldp x29, x30, [sp, #8] // 16-byte Folded Reload
1379+ ; CHECK-NEXT: .seh_save_fplr 8
1380+ ; CHECK-NEXT: ldr x28, [sp] // 8-byte Folded Reload
1381+ ; CHECK-NEXT: .seh_save_reg x28, 0
1382+ ; CHECK-NEXT: add sp, sp, #32
1383+ ; CHECK-NEXT: .seh_stackalloc 32
1384+ ; CHECK-NEXT: ldr z8, [sp] // 16-byte Folded Reload
1385+ ; CHECK-NEXT: .seh_save_zreg z8, 0
1386+ ; CHECK-NEXT: addvl sp, sp, #1
1387+ ; CHECK-NEXT: .seh_allocz 1
1388+ ; CHECK-NEXT: .seh_endepilogue
1389+ ; CHECK-NEXT: ret
1390+ ; CHECK-NEXT: .seh_endfunclet
1391+ ; CHECK-NEXT: .seh_endproc
1392+ entry:
1393+ %a = alloca double
1394+ %b = alloca <vscale x 16 x i8 >
1395+ tail call void asm sideeffect "" , "~{d8},~{x28}" () #1
1396+ store double %d , ptr %a
1397+ store double %d , ptr %b
1398+ ret i32 0
1399+ }
0 commit comments