mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-04 04:19:25 +00:00
Revert 202433 - Provide a target override for the latest regalloc heuristic
That commit was introduced in order to help investigate a problem in ARM codegen breaking from commit 202304 (Add a limit to the heuristic that register allocates instructions in local order). Recent analisys indicated that the problem no longer exists, so I'm reverting this change. See PR18996. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218981 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -683,12 +683,6 @@ public:
|
|||||||
/// (3) Bottom-up allocation is no longer guaranteed to optimally color.
|
/// (3) Bottom-up allocation is no longer guaranteed to optimally color.
|
||||||
virtual bool reverseLocalAssignment() const { return false; }
|
virtual bool reverseLocalAssignment() const { return false; }
|
||||||
|
|
||||||
/// Allow the target to override register assignment heuristics based on the
|
|
||||||
/// live range size. If this returns false, then local live ranges are always
|
|
||||||
/// assigned in order regardless of their size. This is a temporary hook for
|
|
||||||
/// debugging downstream codegen failures exposed by regalloc.
|
|
||||||
virtual bool mayOverrideLocalAssignment() const { return true; }
|
|
||||||
|
|
||||||
/// Allow the target to override the cost of using a callee-saved register for
|
/// Allow the target to override the cost of using a callee-saved register for
|
||||||
/// the first time. Default value of 0 means we will use a callee-saved
|
/// the first time. Default value of 0 means we will use a callee-saved
|
||||||
/// register if it is available.
|
/// register if it is available.
|
||||||
|
@@ -514,7 +514,7 @@ void RAGreedy::enqueue(PQueue &CurQueue, LiveInterval *LI) {
|
|||||||
// Giant live ranges fall back to the global assignment heuristic, which
|
// Giant live ranges fall back to the global assignment heuristic, which
|
||||||
// prevents excessive spilling in pathological cases.
|
// prevents excessive spilling in pathological cases.
|
||||||
bool ReverseLocal = TRI->reverseLocalAssignment();
|
bool ReverseLocal = TRI->reverseLocalAssignment();
|
||||||
bool ForceGlobal = !ReverseLocal && TRI->mayOverrideLocalAssignment() &&
|
bool ForceGlobal = !ReverseLocal &&
|
||||||
(Size / SlotIndex::InstrDist) > (2 * MRI->getRegClass(Reg)->getNumRegs());
|
(Size / SlotIndex::InstrDist) > (2 * MRI->getRegClass(Reg)->getNumRegs());
|
||||||
|
|
||||||
if (ExtraRegInfo[Reg].Stage == RS_Assign && !ForceGlobal && !LI->empty() &&
|
if (ExtraRegInfo[Reg].Stage == RS_Assign && !ForceGlobal && !LI->empty() &&
|
||||||
|
@@ -423,11 +423,6 @@ emitLoadConstPool(MachineBasicBlock &MBB,
|
|||||||
.setMIFlags(MIFlags);
|
.setMIFlags(MIFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ARMBaseRegisterInfo::mayOverrideLocalAssignment() const {
|
|
||||||
// The native linux build hits a downstream codegen bug when this is enabled.
|
|
||||||
return STI.isTargetDarwin();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ARMBaseRegisterInfo::
|
bool ARMBaseRegisterInfo::
|
||||||
requiresRegisterScavenging(const MachineFunction &MF) const {
|
requiresRegisterScavenging(const MachineFunction &MF) const {
|
||||||
return true;
|
return true;
|
||||||
|
@@ -174,8 +174,6 @@ public:
|
|||||||
unsigned MIFlags = MachineInstr::NoFlags)const;
|
unsigned MIFlags = MachineInstr::NoFlags)const;
|
||||||
|
|
||||||
/// Code Generation virtual methods...
|
/// Code Generation virtual methods...
|
||||||
bool mayOverrideLocalAssignment() const override;
|
|
||||||
|
|
||||||
bool requiresRegisterScavenging(const MachineFunction &MF) const override;
|
bool requiresRegisterScavenging(const MachineFunction &MF) const override;
|
||||||
|
|
||||||
bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override;
|
bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override;
|
||||||
|
@@ -6,8 +6,8 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
|
|||||||
; the changes for PR:18825 prevent that spilling.
|
; the changes for PR:18825 prevent that spilling.
|
||||||
|
|
||||||
; CHECK: test:
|
; CHECK: test:
|
||||||
; CHECK-NOT: vstmia
|
; CHECK: vstmia
|
||||||
; CHECK-NOT: vldmia
|
; CHECK: vldmia
|
||||||
define void @test(i64* %src) #0 {
|
define void @test(i64* %src) #0 {
|
||||||
entry:
|
entry:
|
||||||
%arrayidx39 = getelementptr inbounds i64* %src, i32 13
|
%arrayidx39 = getelementptr inbounds i64* %src, i32 13
|
||||||
|
Reference in New Issue
Block a user