Skip to content

Commit fe13858

Browse files
committed
Choose the scratch register from X16 and X17
1 parent eb14eec commit fe13858

File tree

4 files changed

+38
-32
lines changed

4 files changed

+38
-32
lines changed

llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2185,10 +2185,16 @@ void AArch64AsmPrinter::emitPtrauthSign(const MachineInstr *MI) {
21852185
Register AddrDisc = MI->getOperand(4).getReg();
21862186
bool AddrDiscKilled = MI->getOperand(4).isKill();
21872187

2188-
// Compute aut discriminator into x17
2188+
// As long as at least one of Val and AddrDisc is in GPR64noip, a scratch
2189+
// register is available.
2190+
Register ScratchReg = Val == AArch64::X16 ? AArch64::X17 : AArch64::X16;
2191+
assert(ScratchReg != AddrDisc &&
2192+
"Neither X16 nor X17 is available as a scratch register");
2193+
2194+
// Compute pac discriminator
21892195
assert(isUInt<16>(Disc));
21902196
Register DiscReg = emitPtrauthDiscriminator(
2191-
Disc, AddrDisc, AArch64::X17, /*MayUseAddrAsScratch=*/AddrDiscKilled);
2197+
Disc, AddrDisc, ScratchReg, /*MayUseAddrAsScratch=*/AddrDiscKilled);
21922198
bool IsZeroDisc = DiscReg == AArch64::XZR;
21932199
unsigned Opc = getPACOpcodeForKey(Key, IsZeroDisc);
21942200

llvm/lib/Target/AArch64/AArch64InstrInfo.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2152,7 +2152,7 @@ let Predicates = [HasPAuth] in {
21522152
let Uses = [];
21532153
}
21542154

2155-
// PAC pseudo instruction. Is AsmPrinter, it is expanded into an actual PAC*
2155+
// PAC pseudo instruction. In AsmPrinter, it is expanded into an actual PAC*
21562156
// instruction immediately preceded by the discriminator computation.
21572157
// This enforces the expected immediate modifier is used for signing, even
21582158
// if an attacker is able to substitute AddrDisc.
@@ -2164,7 +2164,7 @@ let Predicates = [HasPAuth] in {
21642164
let mayStore = 0;
21652165
let mayLoad = 0;
21662166
let Size = 12;
2167-
let Defs = [X17];
2167+
let Defs = [X16, X17];
21682168
let usesCustomInserter = 1;
21692169
}
21702170

llvm/test/CodeGen/AArch64/ptrauth-isel.ll

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ define i64 @small_imm_disc_optimized(i64 %addr) {
3030
; DAGISEL-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
3131
; DAGISEL-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 42
3232
; DAGISEL-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gpr64noip = SUBREG_TO_REG 0, killed [[MOVi32imm]], %subreg.sub_32
33-
; DAGISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, killed $noreg, implicit-def dead $x17
33+
; DAGISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, killed $noreg, implicit-def dead $x16, implicit-def dead $x17
3434
; DAGISEL-NEXT: $x0 = COPY [[PAC]]
3535
; DAGISEL-NEXT: RET_ReallyLR implicit $x0
3636
;
@@ -41,7 +41,7 @@ define i64 @small_imm_disc_optimized(i64 %addr) {
4141
; GISEL-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
4242
; GISEL-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 42
4343
; GISEL-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gpr64noip = SUBREG_TO_REG 0, [[MOVi32imm]], %subreg.sub_32
44-
; GISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, $noreg, implicit-def dead $x17
44+
; GISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, $noreg, implicit-def dead $x16, implicit-def dead $x17
4545
; GISEL-NEXT: $x0 = COPY [[PAC]]
4646
; GISEL-NEXT: RET_ReallyLR implicit $x0
4747
entry:
@@ -59,7 +59,7 @@ define i64 @small_imm_disc_non_optimized(i64 %addr) noinline optnone {
5959
; DAGISEL-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY killed [[COPY]]
6060
; DAGISEL-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 42
6161
; DAGISEL-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gpr64noip = SUBREG_TO_REG 0, killed [[MOVi32imm]], %subreg.sub_32
62-
; DAGISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY1]], 2, 42, killed $noreg, implicit-def dead $x17
62+
; DAGISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY1]], 2, 42, killed $noreg, implicit-def dead $x16, implicit-def dead $x17
6363
; DAGISEL-NEXT: [[COPY2:%[0-9]+]]:gpr64all = COPY [[PAC]]
6464
; DAGISEL-NEXT: $x0 = COPY [[COPY2]]
6565
; DAGISEL-NEXT: RET_ReallyLR implicit $x0
@@ -70,7 +70,7 @@ define i64 @small_imm_disc_non_optimized(i64 %addr) noinline optnone {
7070
; GISEL-NEXT: {{ $}}
7171
; GISEL-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
7272
; GISEL-NEXT: [[MOVi64imm:%[0-9]+]]:gpr64noip = MOVi64imm 42
73-
; GISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, $noreg, implicit-def dead $x17
73+
; GISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, $noreg, implicit-def dead $x16, implicit-def dead $x17
7474
; GISEL-NEXT: $x0 = COPY [[PAC]]
7575
; GISEL-NEXT: RET_ReallyLR implicit $x0
7676
entry:
@@ -86,7 +86,7 @@ define i64 @large_imm_disc_wreg(i64 %addr) {
8686
; DAGISEL-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
8787
; DAGISEL-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 12345678
8888
; DAGISEL-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gpr64noip = SUBREG_TO_REG 0, killed [[MOVi32imm]], %subreg.sub_32
89-
; DAGISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, killed [[SUBREG_TO_REG]], implicit-def dead $x17
89+
; DAGISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, killed [[SUBREG_TO_REG]], implicit-def dead $x16, implicit-def dead $x17
9090
; DAGISEL-NEXT: $x0 = COPY [[PAC]]
9191
; DAGISEL-NEXT: RET_ReallyLR implicit $x0
9292
;
@@ -97,7 +97,7 @@ define i64 @large_imm_disc_wreg(i64 %addr) {
9797
; GISEL-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
9898
; GISEL-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 12345678
9999
; GISEL-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gpr64noip = SUBREG_TO_REG 0, [[MOVi32imm]], %subreg.sub_32
100-
; GISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, [[SUBREG_TO_REG]], implicit-def dead $x17
100+
; GISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, [[SUBREG_TO_REG]], implicit-def dead $x16, implicit-def dead $x17
101101
; GISEL-NEXT: $x0 = COPY [[PAC]]
102102
; GISEL-NEXT: RET_ReallyLR implicit $x0
103103
entry:
@@ -112,7 +112,7 @@ define i64 @large_imm_disc_xreg(i64 %addr) {
112112
; DAGISEL-NEXT: {{ $}}
113113
; DAGISEL-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
114114
; DAGISEL-NEXT: [[MOVi64imm:%[0-9]+]]:gpr64noip = MOVi64imm 123456789012345
115-
; DAGISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, killed [[MOVi64imm]], implicit-def dead $x17
115+
; DAGISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, killed [[MOVi64imm]], implicit-def dead $x16, implicit-def dead $x17
116116
; DAGISEL-NEXT: $x0 = COPY [[PAC]]
117117
; DAGISEL-NEXT: RET_ReallyLR implicit $x0
118118
;
@@ -122,7 +122,7 @@ define i64 @large_imm_disc_xreg(i64 %addr) {
122122
; GISEL-NEXT: {{ $}}
123123
; GISEL-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
124124
; GISEL-NEXT: [[MOVi64imm:%[0-9]+]]:gpr64noip = MOVi64imm 123456789012345
125-
; GISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, [[MOVi64imm]], implicit-def dead $x17
125+
; GISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, [[MOVi64imm]], implicit-def dead $x16, implicit-def dead $x17
126126
; GISEL-NEXT: $x0 = COPY [[PAC]]
127127
; GISEL-NEXT: RET_ReallyLR implicit $x0
128128
entry:
@@ -143,7 +143,7 @@ define i64 @blended_disc_non_optimized(i64 %addr, i64 %addrdisc) noinline optnon
143143
; DAGISEL-NEXT: [[MOVKXi:%[0-9]+]]:gpr64 = MOVKXi [[COPY3]], 42, 48
144144
; DAGISEL-NEXT: [[COPY4:%[0-9]+]]:gpr64noip = COPY [[MOVKXi]]
145145
; DAGISEL-NEXT: [[COPY5:%[0-9]+]]:gpr64noip = COPY [[COPY3]]
146-
; DAGISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY2]], 2, 42, [[COPY5]], implicit-def dead $x17
146+
; DAGISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY2]], 2, 42, [[COPY5]], implicit-def dead $x16, implicit-def dead $x17
147147
; DAGISEL-NEXT: [[COPY6:%[0-9]+]]:gpr64all = COPY [[PAC]]
148148
; DAGISEL-NEXT: $x0 = COPY [[COPY6]]
149149
; DAGISEL-NEXT: RET_ReallyLR implicit $x0
@@ -156,7 +156,7 @@ define i64 @blended_disc_non_optimized(i64 %addr, i64 %addrdisc) noinline optnon
156156
; GISEL-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
157157
; GISEL-NEXT: [[MOVKXi:%[0-9]+]]:gpr64noip = MOVKXi [[COPY1]], 42, 48
158158
; GISEL-NEXT: [[COPY2:%[0-9]+]]:gpr64noip = COPY [[COPY1]]
159-
; GISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, [[COPY2]], implicit-def dead $x17
159+
; GISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, [[COPY2]], implicit-def dead $x16, implicit-def dead $x17
160160
; GISEL-NEXT: $x0 = COPY [[PAC]]
161161
; GISEL-NEXT: RET_ReallyLR implicit $x0
162162
entry:
@@ -175,7 +175,7 @@ define i64 @blend_and_sign_same_bb(i64 %addr) {
175175
; DAGISEL-NEXT: [[LDRXui:%[0-9]+]]:gpr64 = LDRXui killed [[ADRP]], target-flags(aarch64-pageoff, aarch64-nc) @discvar :: (dereferenceable load (s64) from @discvar)
176176
; DAGISEL-NEXT: [[MOVKXi:%[0-9]+]]:gpr64noip = MOVKXi [[LDRXui]], 42, 48
177177
; DAGISEL-NEXT: [[COPY1:%[0-9]+]]:gpr64noip = COPY [[LDRXui]]
178-
; DAGISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, killed [[COPY1]], implicit-def dead $x17
178+
; DAGISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, killed [[COPY1]], implicit-def dead $x16, implicit-def dead $x17
179179
; DAGISEL-NEXT: $x0 = COPY [[PAC]]
180180
; DAGISEL-NEXT: RET_ReallyLR implicit $x0
181181
;
@@ -188,7 +188,7 @@ define i64 @blend_and_sign_same_bb(i64 %addr) {
188188
; GISEL-NEXT: [[LDRXui:%[0-9]+]]:gpr64 = LDRXui [[ADRP]], target-flags(aarch64-pageoff, aarch64-nc) @discvar :: (dereferenceable load (s64) from @discvar)
189189
; GISEL-NEXT: [[MOVKXi:%[0-9]+]]:gpr64noip = MOVKXi [[LDRXui]], 42, 48
190190
; GISEL-NEXT: [[COPY1:%[0-9]+]]:gpr64noip = COPY [[LDRXui]]
191-
; GISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, [[COPY1]], implicit-def dead $x17
191+
; GISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, [[COPY1]], implicit-def dead $x16, implicit-def dead $x17
192192
; GISEL-NEXT: $x0 = COPY [[PAC]]
193193
; GISEL-NEXT: RET_ReallyLR implicit $x0
194194
entry:
@@ -225,7 +225,7 @@ define i64 @blend_and_sign_different_bbs(i64 %addr, i64 %cond) {
225225
; DAGISEL-NEXT: {{ $}}
226226
; DAGISEL-NEXT: bb.2.exit:
227227
; DAGISEL-NEXT: [[COPY4:%[0-9]+]]:gpr64noip = COPY [[LDRXui]]
228-
; DAGISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY1]], 2, 42, [[COPY4]], implicit-def dead $x17
228+
; DAGISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY1]], 2, 42, [[COPY4]], implicit-def dead $x16, implicit-def dead $x17
229229
; DAGISEL-NEXT: $x0 = COPY [[PAC]]
230230
; DAGISEL-NEXT: RET_ReallyLR implicit $x0
231231
;
@@ -250,7 +250,7 @@ define i64 @blend_and_sign_different_bbs(i64 %addr, i64 %cond) {
250250
; GISEL-NEXT: {{ $}}
251251
; GISEL-NEXT: bb.3.exit:
252252
; GISEL-NEXT: [[COPY3:%[0-9]+]]:gpr64noip = COPY [[LDRXui]]
253-
; GISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, [[COPY3]], implicit-def dead $x17
253+
; GISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, [[COPY3]], implicit-def dead $x16, implicit-def dead $x17
254254
; GISEL-NEXT: $x0 = COPY [[PAC]]
255255
; GISEL-NEXT: RET_ReallyLR implicit $x0
256256
entry:

llvm/test/CodeGen/AArch64/ptrauth-isel.mir

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,13 @@ body: |
5959
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
6060
; CHECK-NEXT: [[MOVKXi:%[0-9]+]]:gpr64noip = MOVKXi [[COPY1]], 42, 48
6161
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr64noip = COPY [[COPY1]]
62-
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, killed [[COPY2]], implicit-def dead $x17
62+
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, killed [[COPY2]], implicit-def dead $x16, implicit-def dead $x17
6363
; CHECK-NEXT: $x0 = COPY [[PAC]]
6464
; CHECK-NEXT: RET_ReallyLR implicit $x0
6565
%0:gpr64 = COPY $x0
6666
%1:gpr64 = COPY $x1
6767
%2:gpr64noip = MOVKXi %1, 42, 48
68-
%3:gpr64 = PAC %0, 2, 0, killed %2, implicit-def dead $x17
68+
%3:gpr64 = PAC %0, 2, 0, killed %2, implicit-def dead $x16, implicit-def dead $x17
6969
$x0 = COPY %3
7070
RET_ReallyLR implicit $x0
7171
...
@@ -82,13 +82,13 @@ body: |
8282
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
8383
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
8484
; CHECK-NEXT: [[MOVKXi:%[0-9]+]]:gpr64noip = MOVKXi [[COPY1]], 42, 0
85-
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, killed [[MOVKXi]], implicit-def dead $x17
85+
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, killed [[MOVKXi]], implicit-def dead $x16, implicit-def dead $x17
8686
; CHECK-NEXT: $x0 = COPY [[PAC]]
8787
; CHECK-NEXT: RET_ReallyLR implicit $x0
8888
%0:gpr64 = COPY $x0
8989
%1:gpr64 = COPY $x1
9090
%2:gpr64noip = MOVKXi %1, 42, 0
91-
%3:gpr64 = PAC %0, 2, 0, killed %2, implicit-def dead $x17
91+
%3:gpr64 = PAC %0, 2, 0, killed %2, implicit-def dead $x16, implicit-def dead $x17
9292
$x0 = COPY %3
9393
RET_ReallyLR implicit $x0
9494
...
@@ -105,13 +105,13 @@ body: |
105105
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
106106
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
107107
; CHECK-NEXT: [[MOVKXi:%[0-9]+]]:gpr64noip = MOVKXi [[COPY1]], target-flags(aarch64-pageoff, aarch64-nc) @globalvar, 48
108-
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, killed [[MOVKXi]], implicit-def dead $x17
108+
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, killed [[MOVKXi]], implicit-def dead $x16, implicit-def dead $x17
109109
; CHECK-NEXT: $x0 = COPY [[PAC]]
110110
; CHECK-NEXT: RET_ReallyLR implicit $x0
111111
%0:gpr64 = COPY $x0
112112
%1:gpr64 = COPY $x1
113113
%2:gpr64noip = MOVKXi %1, target-flags(aarch64-pageoff, aarch64-nc) @globalvar, 48
114-
%3:gpr64 = PAC %0, 2, 0, killed %2, implicit-def dead $x17
114+
%3:gpr64 = PAC %0, 2, 0, killed %2, implicit-def dead $x16, implicit-def dead $x17
115115
$x0 = COPY %3
116116
RET_ReallyLR implicit $x0
117117
...
@@ -127,12 +127,12 @@ body: |
127127
; CHECK-NEXT: {{ $}}
128128
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
129129
; CHECK-NEXT: [[MOVi64imm:%[0-9]+]]:gpr64noip = MOVi64imm 42
130-
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, killed $noreg, implicit-def dead $x17
130+
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, killed $noreg, implicit-def dead $x16, implicit-def dead $x17
131131
; CHECK-NEXT: $x0 = COPY [[PAC]]
132132
; CHECK-NEXT: RET_ReallyLR implicit $x0
133133
%0:gpr64 = COPY $x0
134134
%1:gpr64noip = MOVi64imm 42
135-
%2:gpr64 = PAC %0, 2, 0, killed %1, implicit-def dead $x17
135+
%2:gpr64 = PAC %0, 2, 0, killed %1, implicit-def dead $x16, implicit-def dead $x17
136136
$x0 = COPY %2
137137
RET_ReallyLR implicit $x0
138138
...
@@ -148,12 +148,12 @@ body: |
148148
; CHECK-NEXT: {{ $}}
149149
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
150150
; CHECK-NEXT: [[MOVi64imm:%[0-9]+]]:gpr64noip = MOVi64imm target-flags(aarch64-pageoff, aarch64-nc) @globalvar
151-
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, killed [[MOVi64imm]], implicit-def dead $x17
151+
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, killed [[MOVi64imm]], implicit-def dead $x16, implicit-def dead $x17
152152
; CHECK-NEXT: $x0 = COPY [[PAC]]
153153
; CHECK-NEXT: RET_ReallyLR implicit $x0
154154
%0:gpr64 = COPY $x0
155155
%1:gpr64noip = MOVi64imm target-flags(aarch64-pageoff, aarch64-nc) @globalvar
156-
%2:gpr64 = PAC %0, 2, 0, killed %1, implicit-def dead $x17
156+
%2:gpr64 = PAC %0, 2, 0, killed %1, implicit-def dead $x16, implicit-def dead $x17
157157
$x0 = COPY %2
158158
RET_ReallyLR implicit $x0
159159
...
@@ -170,13 +170,13 @@ body: |
170170
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
171171
; CHECK-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 42
172172
; CHECK-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gpr64noip = SUBREG_TO_REG 0, killed [[MOVi32imm]], %subreg.sub_32
173-
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, killed $noreg, implicit-def dead $x17
173+
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, killed $noreg, implicit-def dead $x16, implicit-def dead $x17
174174
; CHECK-NEXT: $x0 = COPY [[PAC]]
175175
; CHECK-NEXT: RET_ReallyLR implicit $x0
176176
%0:gpr64 = COPY $x0
177177
%1:gpr32 = MOVi32imm 42
178178
%2:gpr64noip = SUBREG_TO_REG 0, killed %1, %subreg.sub_32
179-
%3:gpr64 = PAC %0, 2, 0, killed %2, implicit-def dead $x17
179+
%3:gpr64 = PAC %0, 2, 0, killed %2, implicit-def dead $x16, implicit-def dead $x17
180180
$x0 = COPY %3
181181
RET_ReallyLR implicit $x0
182182
...
@@ -193,13 +193,13 @@ body: |
193193
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
194194
; CHECK-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm target-flags(aarch64-pageoff, aarch64-nc) @globalvar
195195
; CHECK-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gpr64noip = SUBREG_TO_REG 0, killed [[MOVi32imm]], %subreg.sub_32
196-
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, killed [[SUBREG_TO_REG]], implicit-def dead $x17
196+
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, killed [[SUBREG_TO_REG]], implicit-def dead $x16, implicit-def dead $x17
197197
; CHECK-NEXT: $x0 = COPY [[PAC]]
198198
; CHECK-NEXT: RET_ReallyLR implicit $x0
199199
%0:gpr64 = COPY $x0
200200
%1:gpr32 = MOVi32imm target-flags(aarch64-pageoff, aarch64-nc) @globalvar
201201
%2:gpr64noip = SUBREG_TO_REG 0, killed %1, %subreg.sub_32
202-
%3:gpr64 = PAC %0, 2, 0, killed %2, implicit-def dead $x17
202+
%3:gpr64 = PAC %0, 2, 0, killed %2, implicit-def dead $x16, implicit-def dead $x17
203203
$x0 = COPY %3
204204
RET_ReallyLR implicit $x0
205205
...

0 commit comments

Comments
 (0)