Skip to content

Commit 9350906

Browse files
committed
Revert "ARM: Remove override of shouldRewriteCopySrc (#125219)"
This reverts commit 9d90f8b. Test fails the machine verifier. There's a bug somewhere, the unrepresentable cases should be avoided by the default logic.
1 parent 02e0a95 commit 9350906

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -961,3 +961,17 @@ bool ARMBaseRegisterInfo::shouldCoalesce(MachineInstr *MI,
961961
}
962962
return false;
963963
}
964+
965+
bool ARMBaseRegisterInfo::shouldRewriteCopySrc(const TargetRegisterClass *DefRC,
966+
unsigned DefSubReg,
967+
const TargetRegisterClass *SrcRC,
968+
unsigned SrcSubReg) const {
969+
// We can't extract an SPR from an arbitary DPR (as opposed to a DPR_VFP2).
970+
if (DefRC == &ARM::SPRRegClass && DefSubReg == 0 &&
971+
SrcRC == &ARM::DPRRegClass &&
972+
(SrcSubReg == ARM::ssub_0 || SrcSubReg == ARM::ssub_1))
973+
return false;
974+
975+
return TargetRegisterInfo::shouldRewriteCopySrc(DefRC, DefSubReg,
976+
SrcRC, SrcSubReg);
977+
}

llvm/lib/Target/ARM/ARMBaseRegisterInfo.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,11 @@ class ARMBaseRegisterInfo : public ARMGenRegisterInfo {
159159
const TargetRegisterClass *NewRC,
160160
LiveIntervals &LIS) const override;
161161

162+
bool shouldRewriteCopySrc(const TargetRegisterClass *DefRC,
163+
unsigned DefSubReg,
164+
const TargetRegisterClass *SrcRC,
165+
unsigned SrcSubReg) const override;
166+
162167
int getSEHRegNum(unsigned i) const { return getEncodingValue(i); }
163168
};
164169

llvm/test/CodeGen/ARM/shouldRewriteCopySrc.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ define float @shouldRewriteCopySrc(double %arg) #0 {
1212
; CHECK-NEXT: @APP
1313
; CHECK-NEXT: nop
1414
; CHECK-NEXT: @NO_APP
15-
; CHECK-NEXT: vmov.f64 d0, d16
16-
; CHECK-NEXT: @ kill: def $s0 killed $s0 killed $d0
15+
; CHECK-NEXT: vmov r0, r1, d16
16+
; CHECK-NEXT: vmov s0, r0
1717
; CHECK-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}
1818
; CHECK-NEXT: bx lr
1919
bb:

0 commit comments

Comments
 (0)