Skip to content

Commit 2750fb2

Browse files
- Added PreserveMost_From_X1 regmask to __arm_get_current_vg call
1 parent 6e9cd8e commit 2750fb2

File tree

3 files changed

+42
-68
lines changed

3 files changed

+42
-68
lines changed

llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#include "llvm/CodeGen/MachineOperand.h"
3030
#include "llvm/CodeGen/TargetSubtargetInfo.h"
3131
#include "llvm/IR/DebugLoc.h"
32-
#include "llvm/MC/MCDwarf.h"
3332
#include "llvm/MC/MCInstrDesc.h"
3433
#include "llvm/Pass.h"
3534
#include "llvm/Support/CodeGen.h"

llvm/lib/Target/AArch64/AArch64FrameLowering.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3179,9 +3179,12 @@ bool AArch64FrameLowering::spillCalleeSavedRegisters(
31793179
.addReg(AArch64::X0, RegState::Implicit)
31803180
.setMIFlag(MachineInstr::FrameSetup);
31813181

3182-
// FIXME: Add PreserveMost_From_X1 regmask from PR #93963
3182+
const uint32_t *RegMask = TRI->getCallPreservedMask(
3183+
MF, CallingConv::
3184+
AArch64_SME_ABI_Support_Routines_PreserveMost_From_X1);
31833185
BuildMI(MBB, MI, DL, TII.get(AArch64::BL))
31843186
.addExternalSymbol("__arm_get_current_vg")
3187+
.addRegMask(RegMask)
31853188
.addReg(AArch64::X0, RegState::ImplicitDefine)
31863189
.setMIFlag(MachineInstr::FrameSetup);
31873190
Reg1 = AArch64::X0;

llvm/test/CodeGen/AArch64/sme-vg-to-stack.ll

Lines changed: 38 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -319,34 +319,27 @@ define void @vg_unwind_with_sve_args(<vscale x 2 x i64> %x) #0 {
319319
; CHECK-NEXT: .cfi_offset w29, -32
320320
; CHECK-NEXT: addvl sp, sp, #-18
321321
; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x8f, 0x00, 0x11, 0x20, 0x22, 0x11, 0x90, 0x01, 0x92, 0x2e, 0x00, 0x1e, 0x22 // sp + 32 + 144 * VG
322+
; CHECK-NEXT: str p8, [sp, #11, mul vl] // 2-byte Folded Spill
323+
; CHECK-NEXT: ptrue pn8.b
322324
; CHECK-NEXT: str p15, [sp, #4, mul vl] // 2-byte Folded Spill
325+
; CHECK-NEXT: st1b { z22.b, z23.b }, pn8, [sp, #4, mul vl] // 32-byte Folded Spill
326+
; CHECK-NEXT: st1b { z20.b, z21.b }, pn8, [sp, #8, mul vl] // 32-byte Folded Spill
323327
; CHECK-NEXT: str p14, [sp, #5, mul vl] // 2-byte Folded Spill
328+
; CHECK-NEXT: st1b { z18.b, z19.b }, pn8, [sp, #12, mul vl] // 32-byte Folded Spill
329+
; CHECK-NEXT: st1b { z16.b, z17.b }, pn8, [sp, #16, mul vl] // 32-byte Folded Spill
324330
; CHECK-NEXT: str p13, [sp, #6, mul vl] // 2-byte Folded Spill
331+
; CHECK-NEXT: st1b { z14.b, z15.b }, pn8, [sp, #20, mul vl] // 32-byte Folded Spill
332+
; CHECK-NEXT: st1b { z12.b, z13.b }, pn8, [sp, #24, mul vl] // 32-byte Folded Spill
325333
; CHECK-NEXT: str p12, [sp, #7, mul vl] // 2-byte Folded Spill
334+
; CHECK-NEXT: st1b { z10.b, z11.b }, pn8, [sp, #28, mul vl] // 32-byte Folded Spill
326335
; CHECK-NEXT: str p11, [sp, #8, mul vl] // 2-byte Folded Spill
327336
; CHECK-NEXT: str p10, [sp, #9, mul vl] // 2-byte Folded Spill
328337
; CHECK-NEXT: str p9, [sp, #10, mul vl] // 2-byte Folded Spill
329-
; CHECK-NEXT: str p8, [sp, #11, mul vl] // 2-byte Folded Spill
330338
; CHECK-NEXT: str p7, [sp, #12, mul vl] // 2-byte Folded Spill
331339
; CHECK-NEXT: str p6, [sp, #13, mul vl] // 2-byte Folded Spill
332340
; CHECK-NEXT: str p5, [sp, #14, mul vl] // 2-byte Folded Spill
333341
; CHECK-NEXT: str p4, [sp, #15, mul vl] // 2-byte Folded Spill
334-
; CHECK-NEXT: str z23, [sp, #2, mul vl] // 16-byte Folded Spill
335-
; CHECK-NEXT: str z22, [sp, #3, mul vl] // 16-byte Folded Spill
336-
; CHECK-NEXT: str z21, [sp, #4, mul vl] // 16-byte Folded Spill
337-
; CHECK-NEXT: str z20, [sp, #5, mul vl] // 16-byte Folded Spill
338-
; CHECK-NEXT: str z19, [sp, #6, mul vl] // 16-byte Folded Spill
339-
; CHECK-NEXT: str z18, [sp, #7, mul vl] // 16-byte Folded Spill
340-
; CHECK-NEXT: str z17, [sp, #8, mul vl] // 16-byte Folded Spill
341-
; CHECK-NEXT: str z16, [sp, #9, mul vl] // 16-byte Folded Spill
342-
; CHECK-NEXT: str z15, [sp, #10, mul vl] // 16-byte Folded Spill
343-
; CHECK-NEXT: str z14, [sp, #11, mul vl] // 16-byte Folded Spill
344-
; CHECK-NEXT: str z13, [sp, #12, mul vl] // 16-byte Folded Spill
345-
; CHECK-NEXT: str z12, [sp, #13, mul vl] // 16-byte Folded Spill
346-
; CHECK-NEXT: str z11, [sp, #14, mul vl] // 16-byte Folded Spill
347-
; CHECK-NEXT: str z10, [sp, #15, mul vl] // 16-byte Folded Spill
348-
; CHECK-NEXT: str z9, [sp, #16, mul vl] // 16-byte Folded Spill
349-
; CHECK-NEXT: str z8, [sp, #17, mul vl] // 16-byte Folded Spill
342+
; CHECK-NEXT: st1b { z8.b, z9.b }, pn8, [sp, #32, mul vl] // 32-byte Folded Spill
350343
; CHECK-NEXT: .cfi_escape 0x10, 0x48, 0x0a, 0x11, 0x60, 0x22, 0x11, 0x78, 0x92, 0x2e, 0x00, 0x1e, 0x22 // $d8 @ cfa - 32 - 8 * VG
351344
; CHECK-NEXT: .cfi_escape 0x10, 0x49, 0x0a, 0x11, 0x60, 0x22, 0x11, 0x70, 0x92, 0x2e, 0x00, 0x1e, 0x22 // $d9 @ cfa - 32 - 16 * VG
352345
; CHECK-NEXT: .cfi_escape 0x10, 0x4a, 0x0a, 0x11, 0x60, 0x22, 0x11, 0x68, 0x92, 0x2e, 0x00, 0x1e, 0x22 // $d10 @ cfa - 32 - 24 * VG
@@ -368,23 +361,16 @@ define void @vg_unwind_with_sve_args(<vscale x 2 x i64> %x) #0 {
368361
; CHECK-NEXT: .cfi_restore vg
369362
; CHECK-NEXT: addvl sp, sp, #1
370363
; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x8f, 0x00, 0x11, 0x20, 0x22, 0x11, 0x90, 0x01, 0x92, 0x2e, 0x00, 0x1e, 0x22 // sp + 32 + 144 * VG
371-
; CHECK-NEXT: ldr z23, [sp, #2, mul vl] // 16-byte Folded Reload
372-
; CHECK-NEXT: ldr z22, [sp, #3, mul vl] // 16-byte Folded Reload
373-
; CHECK-NEXT: ldr z21, [sp, #4, mul vl] // 16-byte Folded Reload
374-
; CHECK-NEXT: ldr z20, [sp, #5, mul vl] // 16-byte Folded Reload
375-
; CHECK-NEXT: ldr z19, [sp, #6, mul vl] // 16-byte Folded Reload
376-
; CHECK-NEXT: ldr z18, [sp, #7, mul vl] // 16-byte Folded Reload
377-
; CHECK-NEXT: ldr z17, [sp, #8, mul vl] // 16-byte Folded Reload
378-
; CHECK-NEXT: ldr z16, [sp, #9, mul vl] // 16-byte Folded Reload
379-
; CHECK-NEXT: ldr z15, [sp, #10, mul vl] // 16-byte Folded Reload
380-
; CHECK-NEXT: ldr z14, [sp, #11, mul vl] // 16-byte Folded Reload
381-
; CHECK-NEXT: ldr z13, [sp, #12, mul vl] // 16-byte Folded Reload
382-
; CHECK-NEXT: ldr z12, [sp, #13, mul vl] // 16-byte Folded Reload
383-
; CHECK-NEXT: ldr z11, [sp, #14, mul vl] // 16-byte Folded Reload
384-
; CHECK-NEXT: ldr z10, [sp, #15, mul vl] // 16-byte Folded Reload
385-
; CHECK-NEXT: ldr z9, [sp, #16, mul vl] // 16-byte Folded Reload
386-
; CHECK-NEXT: ldr z8, [sp, #17, mul vl] // 16-byte Folded Reload
364+
; CHECK-NEXT: ptrue pn8.b
387365
; CHECK-NEXT: ldr p15, [sp, #4, mul vl] // 2-byte Folded Reload
366+
; CHECK-NEXT: ld1b { z22.b, z23.b }, pn8/z, [sp, #4, mul vl] // 32-byte Folded Reload
367+
; CHECK-NEXT: ld1b { z20.b, z21.b }, pn8/z, [sp, #8, mul vl] // 32-byte Folded Reload
368+
; CHECK-NEXT: ld1b { z18.b, z19.b }, pn8/z, [sp, #12, mul vl] // 32-byte Folded Reload
369+
; CHECK-NEXT: ld1b { z16.b, z17.b }, pn8/z, [sp, #16, mul vl] // 32-byte Folded Reload
370+
; CHECK-NEXT: ld1b { z14.b, z15.b }, pn8/z, [sp, #20, mul vl] // 32-byte Folded Reload
371+
; CHECK-NEXT: ld1b { z12.b, z13.b }, pn8/z, [sp, #24, mul vl] // 32-byte Folded Reload
372+
; CHECK-NEXT: ld1b { z10.b, z11.b }, pn8/z, [sp, #28, mul vl] // 32-byte Folded Reload
373+
; CHECK-NEXT: ld1b { z8.b, z9.b }, pn8/z, [sp, #32, mul vl] // 32-byte Folded Reload
388374
; CHECK-NEXT: ldr p14, [sp, #5, mul vl] // 2-byte Folded Reload
389375
; CHECK-NEXT: ldr p13, [sp, #6, mul vl] // 2-byte Folded Reload
390376
; CHECK-NEXT: ldr p12, [sp, #7, mul vl] // 2-byte Folded Reload
@@ -428,34 +414,27 @@ define void @vg_unwind_with_sve_args(<vscale x 2 x i64> %x) #0 {
428414
; FP-CHECK-NEXT: .cfi_offset w30, -40
429415
; FP-CHECK-NEXT: .cfi_offset w29, -48
430416
; FP-CHECK-NEXT: addvl sp, sp, #-18
417+
; FP-CHECK-NEXT: str p8, [sp, #11, mul vl] // 2-byte Folded Spill
418+
; FP-CHECK-NEXT: ptrue pn8.b
431419
; FP-CHECK-NEXT: str p15, [sp, #4, mul vl] // 2-byte Folded Spill
420+
; FP-CHECK-NEXT: st1b { z22.b, z23.b }, pn8, [sp, #4, mul vl] // 32-byte Folded Spill
421+
; FP-CHECK-NEXT: st1b { z20.b, z21.b }, pn8, [sp, #8, mul vl] // 32-byte Folded Spill
432422
; FP-CHECK-NEXT: str p14, [sp, #5, mul vl] // 2-byte Folded Spill
423+
; FP-CHECK-NEXT: st1b { z18.b, z19.b }, pn8, [sp, #12, mul vl] // 32-byte Folded Spill
424+
; FP-CHECK-NEXT: st1b { z16.b, z17.b }, pn8, [sp, #16, mul vl] // 32-byte Folded Spill
433425
; FP-CHECK-NEXT: str p13, [sp, #6, mul vl] // 2-byte Folded Spill
426+
; FP-CHECK-NEXT: st1b { z14.b, z15.b }, pn8, [sp, #20, mul vl] // 32-byte Folded Spill
427+
; FP-CHECK-NEXT: st1b { z12.b, z13.b }, pn8, [sp, #24, mul vl] // 32-byte Folded Spill
434428
; FP-CHECK-NEXT: str p12, [sp, #7, mul vl] // 2-byte Folded Spill
429+
; FP-CHECK-NEXT: st1b { z10.b, z11.b }, pn8, [sp, #28, mul vl] // 32-byte Folded Spill
435430
; FP-CHECK-NEXT: str p11, [sp, #8, mul vl] // 2-byte Folded Spill
436431
; FP-CHECK-NEXT: str p10, [sp, #9, mul vl] // 2-byte Folded Spill
437432
; FP-CHECK-NEXT: str p9, [sp, #10, mul vl] // 2-byte Folded Spill
438-
; FP-CHECK-NEXT: str p8, [sp, #11, mul vl] // 2-byte Folded Spill
439433
; FP-CHECK-NEXT: str p7, [sp, #12, mul vl] // 2-byte Folded Spill
440434
; FP-CHECK-NEXT: str p6, [sp, #13, mul vl] // 2-byte Folded Spill
441435
; FP-CHECK-NEXT: str p5, [sp, #14, mul vl] // 2-byte Folded Spill
442436
; FP-CHECK-NEXT: str p4, [sp, #15, mul vl] // 2-byte Folded Spill
443-
; FP-CHECK-NEXT: str z23, [sp, #2, mul vl] // 16-byte Folded Spill
444-
; FP-CHECK-NEXT: str z22, [sp, #3, mul vl] // 16-byte Folded Spill
445-
; FP-CHECK-NEXT: str z21, [sp, #4, mul vl] // 16-byte Folded Spill
446-
; FP-CHECK-NEXT: str z20, [sp, #5, mul vl] // 16-byte Folded Spill
447-
; FP-CHECK-NEXT: str z19, [sp, #6, mul vl] // 16-byte Folded Spill
448-
; FP-CHECK-NEXT: str z18, [sp, #7, mul vl] // 16-byte Folded Spill
449-
; FP-CHECK-NEXT: str z17, [sp, #8, mul vl] // 16-byte Folded Spill
450-
; FP-CHECK-NEXT: str z16, [sp, #9, mul vl] // 16-byte Folded Spill
451-
; FP-CHECK-NEXT: str z15, [sp, #10, mul vl] // 16-byte Folded Spill
452-
; FP-CHECK-NEXT: str z14, [sp, #11, mul vl] // 16-byte Folded Spill
453-
; FP-CHECK-NEXT: str z13, [sp, #12, mul vl] // 16-byte Folded Spill
454-
; FP-CHECK-NEXT: str z12, [sp, #13, mul vl] // 16-byte Folded Spill
455-
; FP-CHECK-NEXT: str z11, [sp, #14, mul vl] // 16-byte Folded Spill
456-
; FP-CHECK-NEXT: str z10, [sp, #15, mul vl] // 16-byte Folded Spill
457-
; FP-CHECK-NEXT: str z9, [sp, #16, mul vl] // 16-byte Folded Spill
458-
; FP-CHECK-NEXT: str z8, [sp, #17, mul vl] // 16-byte Folded Spill
437+
; FP-CHECK-NEXT: st1b { z8.b, z9.b }, pn8, [sp, #32, mul vl] // 32-byte Folded Spill
459438
; FP-CHECK-NEXT: .cfi_escape 0x10, 0x48, 0x0a, 0x11, 0x50, 0x22, 0x11, 0x78, 0x92, 0x2e, 0x00, 0x1e, 0x22 // $d8 @ cfa - 48 - 8 * VG
460439
; FP-CHECK-NEXT: .cfi_escape 0x10, 0x49, 0x0a, 0x11, 0x50, 0x22, 0x11, 0x70, 0x92, 0x2e, 0x00, 0x1e, 0x22 // $d9 @ cfa - 48 - 16 * VG
461440
; FP-CHECK-NEXT: .cfi_escape 0x10, 0x4a, 0x0a, 0x11, 0x50, 0x22, 0x11, 0x68, 0x92, 0x2e, 0x00, 0x1e, 0x22 // $d10 @ cfa - 48 - 24 * VG
@@ -475,23 +454,16 @@ define void @vg_unwind_with_sve_args(<vscale x 2 x i64> %x) #0 {
475454
; FP-CHECK-NEXT: smstart sm
476455
; FP-CHECK-NEXT: .cfi_restore vg
477456
; FP-CHECK-NEXT: addvl sp, sp, #1
478-
; FP-CHECK-NEXT: ldr z23, [sp, #2, mul vl] // 16-byte Folded Reload
479-
; FP-CHECK-NEXT: ldr z22, [sp, #3, mul vl] // 16-byte Folded Reload
480-
; FP-CHECK-NEXT: ldr z21, [sp, #4, mul vl] // 16-byte Folded Reload
481-
; FP-CHECK-NEXT: ldr z20, [sp, #5, mul vl] // 16-byte Folded Reload
482-
; FP-CHECK-NEXT: ldr z19, [sp, #6, mul vl] // 16-byte Folded Reload
483-
; FP-CHECK-NEXT: ldr z18, [sp, #7, mul vl] // 16-byte Folded Reload
484-
; FP-CHECK-NEXT: ldr z17, [sp, #8, mul vl] // 16-byte Folded Reload
485-
; FP-CHECK-NEXT: ldr z16, [sp, #9, mul vl] // 16-byte Folded Reload
486-
; FP-CHECK-NEXT: ldr z15, [sp, #10, mul vl] // 16-byte Folded Reload
487-
; FP-CHECK-NEXT: ldr z14, [sp, #11, mul vl] // 16-byte Folded Reload
488-
; FP-CHECK-NEXT: ldr z13, [sp, #12, mul vl] // 16-byte Folded Reload
489-
; FP-CHECK-NEXT: ldr z12, [sp, #13, mul vl] // 16-byte Folded Reload
490-
; FP-CHECK-NEXT: ldr z11, [sp, #14, mul vl] // 16-byte Folded Reload
491-
; FP-CHECK-NEXT: ldr z10, [sp, #15, mul vl] // 16-byte Folded Reload
492-
; FP-CHECK-NEXT: ldr z9, [sp, #16, mul vl] // 16-byte Folded Reload
493-
; FP-CHECK-NEXT: ldr z8, [sp, #17, mul vl] // 16-byte Folded Reload
457+
; FP-CHECK-NEXT: ptrue pn8.b
494458
; FP-CHECK-NEXT: ldr p15, [sp, #4, mul vl] // 2-byte Folded Reload
459+
; FP-CHECK-NEXT: ld1b { z22.b, z23.b }, pn8/z, [sp, #4, mul vl] // 32-byte Folded Reload
460+
; FP-CHECK-NEXT: ld1b { z20.b, z21.b }, pn8/z, [sp, #8, mul vl] // 32-byte Folded Reload
461+
; FP-CHECK-NEXT: ld1b { z18.b, z19.b }, pn8/z, [sp, #12, mul vl] // 32-byte Folded Reload
462+
; FP-CHECK-NEXT: ld1b { z16.b, z17.b }, pn8/z, [sp, #16, mul vl] // 32-byte Folded Reload
463+
; FP-CHECK-NEXT: ld1b { z14.b, z15.b }, pn8/z, [sp, #20, mul vl] // 32-byte Folded Reload
464+
; FP-CHECK-NEXT: ld1b { z12.b, z13.b }, pn8/z, [sp, #24, mul vl] // 32-byte Folded Reload
465+
; FP-CHECK-NEXT: ld1b { z10.b, z11.b }, pn8/z, [sp, #28, mul vl] // 32-byte Folded Reload
466+
; FP-CHECK-NEXT: ld1b { z8.b, z9.b }, pn8/z, [sp, #32, mul vl] // 32-byte Folded Reload
495467
; FP-CHECK-NEXT: ldr p14, [sp, #5, mul vl] // 2-byte Folded Reload
496468
; FP-CHECK-NEXT: ldr p13, [sp, #6, mul vl] // 2-byte Folded Reload
497469
; FP-CHECK-NEXT: ldr p12, [sp, #7, mul vl] // 2-byte Folded Reload

0 commit comments

Comments
 (0)