Skip to content

Commit a3bcde5

Browse files
committed
Test + comments
Change-Id: I68a4ae06ecabe87b02ec351b30de28ffa45ca812
1 parent 3c911fd commit a3bcde5

File tree

2 files changed

+111
-4
lines changed

2 files changed

+111
-4
lines changed

llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,7 +1031,13 @@ MachineBasicBlock *AArch64ExpandPseudo::expandCommitOrRestoreZASave(
10311031
// Replace the pseudo with a call (BL).
10321032
MachineInstrBuilder MIB =
10331033
BuildMI(*SMBB, SMBB->end(), DL, TII->get(AArch64::BL));
1034+
// Copy operands (mainly the regmask) from the pseudo.
1035+
unsigned FirstBLOperand = IsRestoreZA ? 2 : 1;
1036+
for (unsigned I = FirstBLOperand; I < MI.getNumOperands(); ++I)
1037+
MIB.add(MI.getOperand(I));
1038+
10341039
if (IsRestoreZA) {
1040+
// Mark the TPIDR2 block pointer (X0) as an implicit use.
10351041
MIB.addReg(MI.getOperand(1).getReg(), RegState::Implicit);
10361042
} else /*CommitZA*/ {
10371043
auto *TRI = MBB.getParent()->getSubtarget().getRegisterInfo();
@@ -1046,11 +1052,8 @@ MachineBasicBlock *AArch64ExpandPseudo::expandCommitOrRestoreZASave(
10461052
.addDef(AArch64::ZAB0, RegState::ImplicitDefine);
10471053
}
10481054
}
1049-
unsigned FirstBLOperand = IsRestoreZA ? 2 : 1;
1050-
for (unsigned I = FirstBLOperand; I < MI.getNumOperands(); ++I)
1051-
MIB.add(MI.getOperand(I));
1052-
BuildMI(SMBB, DL, TII->get(AArch64::B)).addMBB(EndBB);
10531055

1056+
BuildMI(SMBB, DL, TII->get(AArch64::B)).addMBB(EndBB);
10541057
MI.eraseFromParent();
10551058
return EndBB;
10561059
}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
2+
# RUN: llc -run-pass=aarch64-expand-pseudo -mtriple=aarch64-unknown-linux-gnu -o - %s | FileCheck %s
3+
4+
---
5+
6+
# X0 = TPIDR2 block pointer
7+
# X8 = TPIDR2_EL0
8+
name: restore_za_save
9+
alignment: 4
10+
tracksRegLiveness: true
11+
body: |
12+
bb.0:
13+
; CHECK-LABEL: name: restore_za_save
14+
; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000)
15+
; CHECK-NEXT: {{ $}}
16+
; CHECK-NEXT: $x0 = IMPLICIT_DEF
17+
; CHECK-NEXT: $x8 = MRS 56965, implicit-def $nzcv
18+
; CHECK-NEXT: CBZX $x8, %bb.1
19+
; CHECK-NEXT: B %bb.2
20+
; CHECK-NEXT: {{ $}}
21+
; CHECK-NEXT: .1:
22+
; CHECK-NEXT: successors: %bb.2(0x80000000)
23+
; CHECK-NEXT: liveins: $x8, $x0
24+
; CHECK-NEXT: {{ $}}
25+
; CHECK-NEXT: BL &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x0, implicit-def $lr, implicit $sp, implicit $x0
26+
; CHECK-NEXT: B %bb.2
27+
; CHECK-NEXT: {{ $}}
28+
; CHECK-NEXT: .2:
29+
; CHECK-NEXT: RET undef $lr
30+
$x0 = IMPLICIT_DEF
31+
$x8 = MRS 56965, implicit-def $nzcv
32+
33+
RestoreZAPseudo $x8, $x0, &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x0
34+
35+
RET_ReallyLR
36+
37+
...
38+
---
39+
40+
# X0 = TPIDR2 block pointer
41+
# X8 = TPIDR2_EL0
42+
name: commit_za_save
43+
alignment: 4
44+
tracksRegLiveness: true
45+
body: |
46+
bb.0:
47+
; CHECK-LABEL: name: commit_za_save
48+
; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000)
49+
; CHECK-NEXT: {{ $}}
50+
; CHECK-NEXT: $x0 = IMPLICIT_DEF
51+
; CHECK-NEXT: $x8 = MRS 56965, implicit-def $nzcv
52+
; CHECK-NEXT: CBNZX $x8, %bb.1
53+
; CHECK-NEXT: B %bb.2
54+
; CHECK-NEXT: {{ $}}
55+
; CHECK-NEXT: .1:
56+
; CHECK-NEXT: successors: %bb.2(0x80000000)
57+
; CHECK-NEXT: liveins: $x8, $x0
58+
; CHECK-NEXT: {{ $}}
59+
; CHECK-NEXT: BL $x0, &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x0, implicit-def $lr, implicit $sp
60+
; CHECK-NEXT: MSR 56965, $xzr
61+
; CHECK-NEXT: B %bb.2
62+
; CHECK-NEXT: {{ $}}
63+
; CHECK-NEXT: .2:
64+
; CHECK-NEXT: RET undef $lr
65+
$x0 = IMPLICIT_DEF
66+
$x8 = MRS 56965, implicit-def $nzcv
67+
68+
CommitZASavePseudo $x8, $x0, &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x0
69+
70+
RET_ReallyLR
71+
72+
...
73+
---
74+
# X8 = TPIDR2_EL0
75+
name: commit_za_save_zero_za
76+
alignment: 4
77+
tracksRegLiveness: true
78+
body: |
79+
bb.0:
80+
; CHECK-LABEL: name: commit_za_save_zero_za
81+
; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000)
82+
; CHECK-NEXT: {{ $}}
83+
; CHECK-NEXT: $x8 = MRS 56965, implicit-def $nzcv
84+
; CHECK-NEXT: CBNZX $x8, %bb.1
85+
; CHECK-NEXT: B %bb.2
86+
; CHECK-NEXT: {{ $}}
87+
; CHECK-NEXT: .1:
88+
; CHECK-NEXT: successors: %bb.2(0x80000000)
89+
; CHECK-NEXT: liveins: $x8
90+
; CHECK-NEXT: {{ $}}
91+
; CHECK-NEXT: BL &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x0, implicit-def $lr, implicit $sp, implicit-def $zab0
92+
; CHECK-NEXT: MSR 56965, $xzr
93+
; CHECK-NEXT: ZERO_M 255, implicit-def $zab0
94+
; CHECK-NEXT: B %bb.2
95+
; CHECK-NEXT: {{ $}}
96+
; CHECK-NEXT: .2:
97+
; CHECK-NEXT: RET undef $lr
98+
$x8 = MRS 56965, implicit-def $nzcv
99+
100+
CommitZASavePseudo $x8, &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x0, implicit-def $zab0
101+
102+
RET_ReallyLR
103+
104+
...

0 commit comments

Comments
 (0)