@@ -1265,15 +1265,58 @@ entry:
1265
1265
ret i32 0
1266
1266
}
1267
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" {
1268
+ define i32 @f12 (double %d , <vscale x 4 x i32 > %vs ) "aarch64_pstate_sm_compatible" {
1270
1269
; CHECK-LABEL: f12:
1271
1270
; CHECK: .seh_proc f12
1272
1271
; CHECK-NEXT: // %bb.0: // %entry
1273
1272
; CHECK-NEXT: addvl sp, sp, #-1
1274
1273
; CHECK-NEXT: .seh_allocz 1
1275
1274
; CHECK-NEXT: str z8, [sp] // 16-byte Folded Spill
1276
1275
; 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
1277
1320
; CHECK-NEXT: str x28, [sp, #-32]! // 8-byte Folded Spill
1278
1321
; CHECK-NEXT: .seh_save_reg_x x28, 32
1279
1322
; CHECK-NEXT: stp x29, x30, [sp, #8] // 16-byte Folded Spill
@@ -1306,3 +1349,51 @@ entry:
1306
1349
store double %d , ptr %a
1307
1350
ret i32 0
1308
1351
}
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