Skip to content

Commit feefd8e

Browse files
committed
[AArch64][PAC] Reset killed operand flag in fixupPtrauthDiscriminator
Conservatively reset `killed` flag on the AddrDisc operand when it is updated by fixupPtrauthDiscriminator function.
1 parent 44061d1 commit feefd8e

File tree

3 files changed

+42
-6
lines changed

3 files changed

+42
-6
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3271,6 +3271,9 @@ void AArch64TargetLowering::fixupPtrauthDiscriminator(
32713271
AddrDisc = TmpReg;
32723272
}
32733273

3274+
if (AddrDiscOp.getReg() != AddrDisc)
3275+
AddrDiscOp.setIsKill(false);
3276+
32743277
AddrDiscOp.setReg(AddrDisc);
32753278
IntDiscOp.setImm(IntDisc);
32763279
}

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

Lines changed: 3 additions & 3 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 $x16, implicit-def dead $x17
33+
; DAGISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, $noreg, implicit-def dead $x16, implicit-def dead $x17
3434
; DAGISEL-NEXT: $x0 = COPY [[PAC]]
3535
; DAGISEL-NEXT: RET_ReallyLR implicit $x0
3636
;
@@ -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 $x16, implicit-def dead $x17
62+
; DAGISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY1]], 2, 42, $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
@@ -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 $x16, implicit-def dead $x17
178+
; DAGISEL-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, [[COPY1]], implicit-def dead $x16, implicit-def dead $x17
179179
; DAGISEL-NEXT: $x0 = COPY [[PAC]]
180180
; DAGISEL-NEXT: RET_ReallyLR implicit $x0
181181
;

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

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@
4444
entry:
4545
ret i64 0
4646
}
47+
48+
define i64 @killed_blended_disc(i64 %a, i64 %b, i64 %c) {
49+
entry:
50+
ret i64 0
51+
}
4752
...
4853
---
4954
name: movk_correct_blend
@@ -59,7 +64,7 @@ body: |
5964
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
6065
; CHECK-NEXT: [[MOVKXi:%[0-9]+]]:gpr64noip = MOVKXi [[COPY1]], 42, 48
6166
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr64noip = COPY [[COPY1]]
62-
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, killed [[COPY2]], implicit-def dead $x16, implicit-def dead $x17
67+
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, [[COPY2]], implicit-def dead $x16, implicit-def dead $x17
6368
; CHECK-NEXT: $x0 = COPY [[PAC]]
6469
; CHECK-NEXT: RET_ReallyLR implicit $x0
6570
%0:gpr64 = COPY $x0
@@ -127,7 +132,7 @@ body: |
127132
; CHECK-NEXT: {{ $}}
128133
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
129134
; CHECK-NEXT: [[MOVi64imm:%[0-9]+]]:gpr64noip = MOVi64imm 42
130-
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, killed $noreg, implicit-def dead $x16, implicit-def dead $x17
135+
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, $noreg, implicit-def dead $x16, implicit-def dead $x17
131136
; CHECK-NEXT: $x0 = COPY [[PAC]]
132137
; CHECK-NEXT: RET_ReallyLR implicit $x0
133138
%0:gpr64 = COPY $x0
@@ -170,7 +175,7 @@ body: |
170175
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
171176
; CHECK-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 42
172177
; 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 $x16, implicit-def dead $x17
178+
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, $noreg, implicit-def dead $x16, implicit-def dead $x17
174179
; CHECK-NEXT: $x0 = COPY [[PAC]]
175180
; CHECK-NEXT: RET_ReallyLR implicit $x0
176181
%0:gpr64 = COPY $x0
@@ -203,3 +208,31 @@ body: |
203208
$x0 = COPY %3
204209
RET_ReallyLR implicit $x0
205210
...
211+
---
212+
name: killed_blended_disc
213+
tracksRegLiveness: true
214+
body: |
215+
bb.0.entry:
216+
liveins: $x0, $x1, $x2
217+
218+
; CHECK-LABEL: name: killed_blended_disc
219+
; CHECK: liveins: $x0, $x1, $x2
220+
; CHECK-NEXT: {{ $}}
221+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
222+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64noip = COPY $x1
223+
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr64sp = COPY $x2
224+
; CHECK-NEXT: [[MOVKXi:%[0-9]+]]:gpr64noip = MOVKXi [[COPY1]], 42, 48
225+
; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 42, [[COPY1]], implicit-def dead $x16, implicit-def dead $x17
226+
; CHECK-NEXT: STRXui [[PAC]], [[COPY2]], 0 :: (store (s64))
227+
; CHECK-NEXT: $x0 = COPY [[COPY1]]
228+
; CHECK-NEXT: RET_ReallyLR implicit $x0
229+
%0:gpr64 = COPY $x0
230+
; %1 is in GPR64noip, so that it will be directly used by PAC.
231+
%1:gpr64noip = COPY $x1
232+
%2:gpr64sp = COPY $x2
233+
%3:gpr64noip = MOVKXi %1, 42, 48
234+
%4:gpr64 = PAC %0, 2, 0, killed %3, implicit-def dead $x16, implicit-def dead $x17
235+
STRXui %4, %2, 0 :: (store (s64))
236+
$x0 = COPY %1
237+
RET_ReallyLR implicit $x0
238+
...

0 commit comments

Comments
 (0)