@@ -1228,3 +1228,81 @@ define void @f10(i64 %n, <vscale x 2 x i64> %x) "frame-pointer"="all" {
12281228 call void @g10 (ptr %p1 , ptr %p2 )
12291229 ret void
12301230}
1231+
1232+ ; Check handling of alloca allocated into CSR space, no frame pointer.
1233+ define i32 @f11 (double %d , <vscale x 4 x i32 > %vs ) "aarch64_pstate_sm_compatible" {
1234+ ; CHECK-LABEL: f11:
1235+ ; CHECK: .seh_proc f11
1236+ ; CHECK-NEXT: // %bb.0: // %entry
1237+ ; CHECK-NEXT: addvl sp, sp, #-1
1238+ ; CHECK-NEXT: .seh_allocz 1
1239+ ; CHECK-NEXT: str z8, [sp] // 16-byte Folded Spill
1240+ ; CHECK-NEXT: .seh_save_zreg z8, 0
1241+ ; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1242+ ; CHECK-NEXT: .seh_save_reg_x x30, 16
1243+ ; CHECK-NEXT: .seh_endprologue
1244+ ; CHECK-NEXT: mov w0, wzr
1245+ ; CHECK-NEXT: //APP
1246+ ; CHECK-NEXT: //NO_APP
1247+ ; CHECK-NEXT: str d0, [sp, #8]
1248+ ; CHECK-NEXT: .seh_startepilogue
1249+ ; CHECK-NEXT: ldr x30, [sp] // 8-byte Folded Reload
1250+ ; CHECK-NEXT: .seh_save_reg x30, 0
1251+ ; CHECK-NEXT: add sp, sp, #16
1252+ ; CHECK-NEXT: .seh_stackalloc 16
1253+ ; CHECK-NEXT: ldr z8, [sp] // 16-byte Folded Reload
1254+ ; CHECK-NEXT: .seh_save_zreg z8, 0
1255+ ; CHECK-NEXT: addvl sp, sp, #1
1256+ ; CHECK-NEXT: .seh_allocz 1
1257+ ; CHECK-NEXT: .seh_endepilogue
1258+ ; CHECK-NEXT: ret
1259+ ; CHECK-NEXT: .seh_endfunclet
1260+ ; CHECK-NEXT: .seh_endproc
1261+ entry:
1262+ %a = alloca double
1263+ tail call void asm sideeffect "" , "~{d8}" () #1
1264+ store double %d , ptr %a
1265+ ret i32 0
1266+ }
1267+
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" {
1270+ ; CHECK-LABEL: f12:
1271+ ; CHECK: .seh_proc f12
1272+ ; CHECK-NEXT: // %bb.0: // %entry
1273+ ; CHECK-NEXT: addvl sp, sp, #-1
1274+ ; CHECK-NEXT: .seh_allocz 1
1275+ ; CHECK-NEXT: str z8, [sp] // 16-byte Folded Spill
1276+ ; CHECK-NEXT: .seh_save_zreg z8, 0
1277+ ; CHECK-NEXT: str x28, [sp, #-32]! // 8-byte Folded Spill
1278+ ; CHECK-NEXT: .seh_save_reg_x x28, 32
1279+ ; CHECK-NEXT: stp x29, x30, [sp, #8] // 16-byte Folded Spill
1280+ ; CHECK-NEXT: .seh_save_fplr 8
1281+ ; CHECK-NEXT: add x29, sp, #8
1282+ ; CHECK-NEXT: .seh_add_fp 8
1283+ ; CHECK-NEXT: .seh_endprologue
1284+ ; CHECK-NEXT: mov w0, wzr
1285+ ; CHECK-NEXT: //APP
1286+ ; CHECK-NEXT: //NO_APP
1287+ ; CHECK-NEXT: str d0, [x29, #16]
1288+ ; CHECK-NEXT: .seh_startepilogue
1289+ ; CHECK-NEXT: ldp x29, x30, [sp, #8] // 16-byte Folded Reload
1290+ ; CHECK-NEXT: .seh_save_fplr 8
1291+ ; CHECK-NEXT: ldr x28, [sp] // 8-byte Folded Reload
1292+ ; CHECK-NEXT: .seh_save_reg x28, 0
1293+ ; CHECK-NEXT: add sp, sp, #32
1294+ ; CHECK-NEXT: .seh_stackalloc 32
1295+ ; CHECK-NEXT: ldr z8, [sp] // 16-byte Folded Reload
1296+ ; CHECK-NEXT: .seh_save_zreg z8, 0
1297+ ; CHECK-NEXT: addvl sp, sp, #1
1298+ ; CHECK-NEXT: .seh_allocz 1
1299+ ; CHECK-NEXT: .seh_endepilogue
1300+ ; CHECK-NEXT: ret
1301+ ; CHECK-NEXT: .seh_endfunclet
1302+ ; CHECK-NEXT: .seh_endproc
1303+ entry:
1304+ %a = alloca double
1305+ tail call void asm sideeffect "" , "~{d8},~{x28}" () #1
1306+ store double %d , ptr %a
1307+ ret i32 0
1308+ }
0 commit comments