Skip to content

Commit 52e5a72

Browse files
sdesmalen-armtru
authored andcommitted
[AArch64] Remove redundant COPY from loadRegFromStackSlot (#107396)
This removes a redundant 'COPY' instruction that #81716 probably forgot to remove. This redundant COPY led to an issue because because code in LiveRangeSplitting expects that the instruction emitted by `loadRegFromStackSlot` is an instruction that accesses memory, which isn't the case for the COPY instruction. (cherry picked from commit 91a3c6f)
1 parent 5cf7845 commit 52e5a72

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

llvm/lib/Target/AArch64/AArch64InstrInfo.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -5144,10 +5144,6 @@ void AArch64InstrInfo::loadRegFromStackSlot(MachineBasicBlock &MBB,
51445144
if (PNRReg.isValid() && !PNRReg.isVirtual())
51455145
MI.addDef(PNRReg, RegState::Implicit);
51465146
MI.addMemOperand(MMO);
5147-
5148-
if (PNRReg.isValid() && PNRReg.isVirtual())
5149-
BuildMI(MBB, MBBI, DebugLoc(), get(TargetOpcode::COPY), PNRReg)
5150-
.addReg(DestReg);
51515147
}
51525148

51535149
bool llvm::isNZCVTouchedInInstructionRange(const MachineInstr &DefMI,

llvm/test/CodeGen/AArch64/spillfill-sve.mir

+36-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
define aarch64_sve_vector_pcs void @spills_fills_stack_id_ppr2mul2() #0 { entry: unreachable }
1212
define aarch64_sve_vector_pcs void @spills_fills_stack_id_pnr() #1 { entry: unreachable }
1313
define aarch64_sve_vector_pcs void @spills_fills_stack_id_virtreg_pnr() #1 { entry: unreachable }
14+
define aarch64_sve_vector_pcs void @spills_fills_stack_id_virtreg_ppr_to_pnr() #1 { entry: unreachable }
1415
define aarch64_sve_vector_pcs void @spills_fills_stack_id_zpr() #0 { entry: unreachable }
1516
define aarch64_sve_vector_pcs void @spills_fills_stack_id_zpr2() #0 { entry: unreachable }
1617
define aarch64_sve_vector_pcs void @spills_fills_stack_id_zpr2strided() #0 { entry: unreachable }
@@ -216,7 +217,7 @@ body: |
216217
; EXPAND: STR_PXI killed renamable $pn8, $sp, 7
217218
;
218219
; EXPAND: renamable $pn8 = LDR_PXI $sp, 7
219-
; EXPAND: $p0 = PEXT_PCI_B killed renamable $pn8, 0
220+
; EXPAND-NEXT: $p0 = PEXT_PCI_B killed renamable $pn8, 0
220221
221222
222223
%0:pnr_p8to15 = WHILEGE_CXX_B undef $x0, undef $x0, 0, implicit-def dead $nzcv
@@ -242,6 +243,40 @@ body: |
242243
RET_ReallyLR
243244
...
244245
---
246+
name: spills_fills_stack_id_virtreg_ppr_to_pnr
247+
tracksRegLiveness: true
248+
registers:
249+
- { id: 0, class: ppr }
250+
- { id: 1, class: pnr_p8to15 }
251+
stack:
252+
body: |
253+
bb.0.entry:
254+
liveins: $p0
255+
256+
%0:ppr = COPY $p0
257+
258+
$pn0 = IMPLICIT_DEF
259+
$pn1 = IMPLICIT_DEF
260+
$pn2 = IMPLICIT_DEF
261+
$pn3 = IMPLICIT_DEF
262+
$pn4 = IMPLICIT_DEF
263+
$pn5 = IMPLICIT_DEF
264+
$pn6 = IMPLICIT_DEF
265+
$pn7 = IMPLICIT_DEF
266+
$pn8 = IMPLICIT_DEF
267+
$pn9 = IMPLICIT_DEF
268+
$pn10 = IMPLICIT_DEF
269+
$pn11 = IMPLICIT_DEF
270+
$pn12 = IMPLICIT_DEF
271+
$pn13 = IMPLICIT_DEF
272+
$pn14 = IMPLICIT_DEF
273+
$pn15 = IMPLICIT_DEF
274+
275+
%1:pnr_p8to15 = COPY %0
276+
$p0 = PEXT_PCI_B %1, 0
277+
RET_ReallyLR
278+
...
279+
---
245280
name: spills_fills_stack_id_zpr
246281
tracksRegLiveness: true
247282
registers:

0 commit comments

Comments
 (0)