mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-08 19:25:47 +00:00
Undo spill weight tweak. Need to investigate the performance regressions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52572 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -121,12 +121,8 @@ namespace llvm {
|
|||||||
return getBaseIndex(index) + InstrSlots::STORE;
|
return getBaseIndex(index) + InstrSlots::STORE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static float getSpillWeight(bool isDef, bool isUse, bool isMem,
|
static float getSpillWeight(bool isDef, bool isUse, unsigned loopDepth) {
|
||||||
unsigned loopDepth) {
|
return (isDef + isUse) * powf(10.0F, (float)loopDepth);
|
||||||
float Weight = isDef;
|
|
||||||
if (isUse)
|
|
||||||
Weight += isMem ? 1.2f : 1.0f;
|
|
||||||
return Weight * powf(10.0F, (float)loopDepth);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef Reg2IntervalMap::iterator iterator;
|
typedef Reg2IntervalMap::iterator iterator;
|
||||||
|
@@ -979,7 +979,6 @@ rewriteInstructionForSpills(const LiveInterval &li, const VNInfo *VNI,
|
|||||||
unsigned loopDepth = loopInfo->getLoopDepth(MBB);
|
unsigned loopDepth = loopInfo->getLoopDepth(MBB);
|
||||||
bool CanFold = false;
|
bool CanFold = false;
|
||||||
RestartInstruction:
|
RestartInstruction:
|
||||||
bool isMem = MI->getDesc().mayLoad() || MI->getDesc().mayStore();
|
|
||||||
for (unsigned i = 0; i != MI->getNumOperands(); ++i) {
|
for (unsigned i = 0; i != MI->getNumOperands(); ++i) {
|
||||||
MachineOperand& mop = MI->getOperand(i);
|
MachineOperand& mop = MI->getOperand(i);
|
||||||
if (!mop.isRegister())
|
if (!mop.isRegister())
|
||||||
@@ -1047,7 +1046,7 @@ rewriteInstructionForSpills(const LiveInterval &li, const VNInfo *VNI,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Update stack slot spill weight if we are splitting.
|
// Update stack slot spill weight if we are splitting.
|
||||||
float Weight = getSpillWeight(HasDef, HasUse, isMem, loopDepth);
|
float Weight = getSpillWeight(HasDef, HasUse, loopDepth);
|
||||||
if (!TrySplit)
|
if (!TrySplit)
|
||||||
SSWeight += Weight;
|
SSWeight += Weight;
|
||||||
|
|
||||||
@@ -1240,7 +1239,6 @@ rewriteInstructionsForSpills(const LiveInterval &li, bool TrySplit,
|
|||||||
bool MIHasUse = rwi.HasUse;
|
bool MIHasUse = rwi.HasUse;
|
||||||
bool MIHasDef = rwi.HasDef;
|
bool MIHasDef = rwi.HasDef;
|
||||||
MachineInstr *MI = rwi.MI;
|
MachineInstr *MI = rwi.MI;
|
||||||
bool isMem = MI->getDesc().mayLoad() || MI->getDesc().mayStore();
|
|
||||||
// If MI def and/or use the same register multiple times, then there
|
// If MI def and/or use the same register multiple times, then there
|
||||||
// are multiple entries.
|
// are multiple entries.
|
||||||
unsigned NumUses = MIHasUse;
|
unsigned NumUses = MIHasUse;
|
||||||
@@ -1388,7 +1386,7 @@ rewriteInstructionsForSpills(const LiveInterval &li, bool TrySplit,
|
|||||||
|
|
||||||
// Update spill weight.
|
// Update spill weight.
|
||||||
unsigned loopDepth = loopInfo->getLoopDepth(MBB);
|
unsigned loopDepth = loopInfo->getLoopDepth(MBB);
|
||||||
nI.weight += getSpillWeight(HasDef, HasUse, isMem, loopDepth);
|
nI.weight += getSpillWeight(HasDef, HasUse, loopDepth);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NewVReg && TrySplit && AllCanFold) {
|
if (NewVReg && TrySplit && AllCanFold) {
|
||||||
@@ -1630,7 +1628,6 @@ addIntervalsForSpills(const LiveInterval &li,
|
|||||||
LiveInterval &nI = getOrCreateInterval(VReg);
|
LiveInterval &nI = getOrCreateInterval(VReg);
|
||||||
bool isReMat = vrm.isReMaterialized(VReg);
|
bool isReMat = vrm.isReMaterialized(VReg);
|
||||||
MachineInstr *MI = getInstructionFromIndex(index);
|
MachineInstr *MI = getInstructionFromIndex(index);
|
||||||
bool isMem = MI->getDesc().mayLoad() || MI->getDesc().mayStore();
|
|
||||||
bool CanFold = false;
|
bool CanFold = false;
|
||||||
bool FoundUse = false;
|
bool FoundUse = false;
|
||||||
Ops.clear();
|
Ops.clear();
|
||||||
@@ -1683,7 +1680,7 @@ addIntervalsForSpills(const LiveInterval &li,
|
|||||||
|
|
||||||
// Update spill slot weight.
|
// Update spill slot weight.
|
||||||
if (!isReMat)
|
if (!isReMat)
|
||||||
SSWeight += getSpillWeight(true, false, isMem, loopDepth);
|
SSWeight += getSpillWeight(true, false, loopDepth);
|
||||||
}
|
}
|
||||||
Id = SpillMBBs.find_next(Id);
|
Id = SpillMBBs.find_next(Id);
|
||||||
}
|
}
|
||||||
@@ -1703,7 +1700,6 @@ addIntervalsForSpills(const LiveInterval &li,
|
|||||||
LiveInterval &nI = getOrCreateInterval(VReg);
|
LiveInterval &nI = getOrCreateInterval(VReg);
|
||||||
bool isReMat = vrm.isReMaterialized(VReg);
|
bool isReMat = vrm.isReMaterialized(VReg);
|
||||||
MachineInstr *MI = getInstructionFromIndex(index);
|
MachineInstr *MI = getInstructionFromIndex(index);
|
||||||
bool isMem = MI->getDesc().mayLoad() || MI->getDesc().mayStore();
|
|
||||||
bool CanFold = false;
|
bool CanFold = false;
|
||||||
Ops.clear();
|
Ops.clear();
|
||||||
if (restores[i].canFold) {
|
if (restores[i].canFold) {
|
||||||
@@ -1757,7 +1753,7 @@ addIntervalsForSpills(const LiveInterval &li,
|
|||||||
|
|
||||||
// Update spill slot weight.
|
// Update spill slot weight.
|
||||||
if (!isReMat)
|
if (!isReMat)
|
||||||
SSWeight += getSpillWeight(false, true, isMem, loopDepth);
|
SSWeight += getSpillWeight(false, true, loopDepth);
|
||||||
}
|
}
|
||||||
Id = RestoreMBBs.find_next(Id);
|
Id = RestoreMBBs.find_next(Id);
|
||||||
}
|
}
|
||||||
|
@@ -2145,7 +2145,6 @@ bool SimpleRegisterCoalescing::runOnMachineFunction(MachineFunction &fn) {
|
|||||||
mii = mbbi->erase(mii);
|
mii = mbbi->erase(mii);
|
||||||
++numPeep;
|
++numPeep;
|
||||||
} else if (!isMove || !TurnCopyIntoImpDef(mii, mbb, DstReg, SrcReg)) {
|
} else if (!isMove || !TurnCopyIntoImpDef(mii, mbb, DstReg, SrcReg)) {
|
||||||
bool isMem = mii->getDesc().mayLoad() || mii->getDesc().mayStore();
|
|
||||||
SmallSet<unsigned, 4> UniqueUses;
|
SmallSet<unsigned, 4> UniqueUses;
|
||||||
for (unsigned i = 0, e = mii->getNumOperands(); i != e; ++i) {
|
for (unsigned i = 0, e = mii->getNumOperands(); i != e; ++i) {
|
||||||
const MachineOperand &mop = mii->getOperand(i);
|
const MachineOperand &mop = mii->getOperand(i);
|
||||||
@@ -2158,7 +2157,7 @@ bool SimpleRegisterCoalescing::runOnMachineFunction(MachineFunction &fn) {
|
|||||||
continue;
|
continue;
|
||||||
LiveInterval &RegInt = li_->getInterval(reg);
|
LiveInterval &RegInt = li_->getInterval(reg);
|
||||||
RegInt.weight +=
|
RegInt.weight +=
|
||||||
li_->getSpillWeight(mop.isDef(), mop.isUse(), isMem, loopDepth);
|
li_->getSpillWeight(mop.isDef(), mop.isUse(), loopDepth);
|
||||||
UniqueUses.insert(reg);
|
UniqueUses.insert(reg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 -stats -realign-stack=0 |&\
|
; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 -stats -realign-stack=0 |&\
|
||||||
; RUN: grep {asm-printer} | grep 31
|
; RUN: grep {asm-printer} | grep 32
|
||||||
|
|
||||||
target datalayout = "e-p:32:32"
|
target datalayout = "e-p:32:32"
|
||||||
define void @foo(i32* %mc, i32* %bp, i32* %ms, i32* %xmb, i32* %mpp, i32* %tpmm, i32* %ip, i32* %tpim, i32* %dpp, i32* %tpdm, i32* %bpi, i32 %M) nounwind {
|
define void @foo(i32* %mc, i32* %bp, i32* %ms, i32* %xmb, i32* %mpp, i32* %tpmm, i32* %ip, i32* %tpim, i32* %dpp, i32* %tpdm, i32* %bpi, i32 %M) nounwind {
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
; RUN: llvm-as < %s | llc -march=x86 -x86-asm-syntax=att | grep movl | count 4
|
; RUN: llvm-as < %s | llc -march=x86 -x86-asm-syntax=att | grep movl | count 2
|
||||||
|
|
||||||
%struct.double_int = type { i64, i64 }
|
%struct.double_int = type { i64, i64 }
|
||||||
%struct.tree_common = type <{ i8, [3 x i8] }>
|
%struct.tree_common = type <{ i8, [3 x i8] }>
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin -mattr=+sse2 -disable-fp-elim | grep movss | count 1
|
; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin -mattr=+sse2 -disable-fp-elim | grep movss | count 1
|
||||||
; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin -mattr=+sse2 -disable-fp-elim -stats |& grep {Number of re-materialization} | grep 2
|
; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin -mattr=+sse2 -disable-fp-elim -stats |& grep {Number of re-materialization} | grep 1
|
||||||
|
|
||||||
%struct..0objc_object = type opaque
|
%struct..0objc_object = type opaque
|
||||||
%struct.OhBoy = type { }
|
%struct.OhBoy = type { }
|
||||||
|
Reference in New Issue
Block a user