mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-11 21:57:55 +00:00
Stop using LiveIntervals::isReMaterializable().
It is an old function that does a lot more than required by CalcSpillWeights, which was the only remaining caller. The isRematerializable() function never actually sets the isLoad argument, so don't try to compute that. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157973 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e061053051
commit
3dfd59bdc3
@ -178,6 +178,10 @@ namespace llvm {
|
||||
return Indexes;
|
||||
}
|
||||
|
||||
AliasAnalysis *getAliasAnalysis() const {
|
||||
return AA;
|
||||
}
|
||||
|
||||
/// isNotInMIMap - returns true if the specified machine instr has been
|
||||
/// removed or was never entered in the map.
|
||||
bool isNotInMIMap(const MachineInstr* Instr) const {
|
||||
|
@ -86,6 +86,27 @@ static unsigned copyHint(const MachineInstr *mi, unsigned reg,
|
||||
return tri.getMatchingSuperReg(hreg, sub, rc);
|
||||
}
|
||||
|
||||
// Check if all values in LI are rematerializable
|
||||
static bool isRematerializable(const LiveInterval &LI,
|
||||
const LiveIntervals &LIS,
|
||||
const TargetInstrInfo &TII) {
|
||||
for (LiveInterval::const_vni_iterator I = LI.vni_begin(), E = LI.vni_end();
|
||||
I != E; ++I) {
|
||||
const VNInfo *VNI = *I;
|
||||
if (VNI->isUnused())
|
||||
continue;
|
||||
if (VNI->isPHIDef())
|
||||
return false;
|
||||
|
||||
MachineInstr *MI = LIS.getInstructionFromIndex(VNI->def);
|
||||
assert(MI && "Dead valno in interval");
|
||||
|
||||
if (!TII.isTriviallyReMaterializable(MI, LIS.getAliasAnalysis()))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void VirtRegAuxInfo::CalculateWeightAndHint(LiveInterval &li) {
|
||||
MachineRegisterInfo &mri = MF.getRegInfo();
|
||||
const TargetRegisterInfo &tri = *MF.getTarget().getRegisterInfo();
|
||||
@ -171,17 +192,11 @@ void VirtRegAuxInfo::CalculateWeightAndHint(LiveInterval &li) {
|
||||
}
|
||||
|
||||
// If all of the definitions of the interval are re-materializable,
|
||||
// it is a preferred candidate for spilling. If none of the defs are
|
||||
// loads, then it's potentially very cheap to re-materialize.
|
||||
// it is a preferred candidate for spilling.
|
||||
// FIXME: this gets much more complicated once we support non-trivial
|
||||
// re-materialization.
|
||||
bool isLoad = false;
|
||||
if (LIS.isReMaterializable(li, 0, isLoad)) {
|
||||
if (isLoad)
|
||||
totalWeight *= 0.9F;
|
||||
else
|
||||
totalWeight *= 0.5F;
|
||||
}
|
||||
if (isRematerializable(li, LIS, *MF.getTarget().getInstrInfo()))
|
||||
totalWeight *= 0.5F;
|
||||
|
||||
li.weight = normalizeSpillWeight(totalWeight, li.getSize());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user