forked from OSchip/llvm-project
LSR: Calculate instruction cost only if InsnsCost is set to true (NFC)
Summary: The patch guard all instruction cost calculations with InsnCosts (-lsr-insns-cost) option. Currently even if the option set to false we calculate and print (in debug mode) instruction costs. Reviewers: qcolombet Differential Revision: http://reviews.llvm.org/D33914 From: Evgeny Stupachenko <evstupac@gmail.com> llvm-svn: 304746
This commit is contained in:
parent
3092d728cd
commit
4d94e99446
|
@ -1251,18 +1251,6 @@ void Cost::RateFormula(const TargetTransformInfo &TTI,
|
|||
return;
|
||||
}
|
||||
|
||||
// Treat every new register that exceeds TTI.getNumberOfRegisters() - 1 as
|
||||
// additional instruction (at least fill).
|
||||
unsigned TTIRegNum = TTI.getNumberOfRegisters(false) - 1;
|
||||
if (NumRegs > TTIRegNum) {
|
||||
// Cost already exceeded TTIRegNum, then only newly added register can add
|
||||
// new instructions.
|
||||
if (PrevNumRegs > TTIRegNum)
|
||||
Insns += (NumRegs - PrevNumRegs);
|
||||
else
|
||||
Insns += (NumRegs - TTIRegNum);
|
||||
}
|
||||
|
||||
// Determine how many (unfolded) adds we'll need inside the loop.
|
||||
size_t NumBaseParts = F.getNumRegs();
|
||||
if (NumBaseParts > 1)
|
||||
|
@ -1292,6 +1280,24 @@ void Cost::RateFormula(const TargetTransformInfo &TTI,
|
|||
NumBaseAdds++;
|
||||
}
|
||||
|
||||
// If we don't count instruction cost exit here.
|
||||
if (!InsnsCost) {
|
||||
assert(isValid() && "invalid cost");
|
||||
return;
|
||||
}
|
||||
|
||||
// Treat every new register that exceeds TTI.getNumberOfRegisters() - 1 as
|
||||
// additional instruction (at least fill).
|
||||
unsigned TTIRegNum = TTI.getNumberOfRegisters(false) - 1;
|
||||
if (NumRegs > TTIRegNum) {
|
||||
// Cost already exceeded TTIRegNum, then only newly added register can add
|
||||
// new instructions.
|
||||
if (PrevNumRegs > TTIRegNum)
|
||||
Insns += (NumRegs - PrevNumRegs);
|
||||
else
|
||||
Insns += (NumRegs - TTIRegNum);
|
||||
}
|
||||
|
||||
// If ICmpZero formula ends with not 0, it could not be replaced by
|
||||
// just add or sub. We'll need to compare final result of AddRec.
|
||||
// That means we'll need an additional instruction.
|
||||
|
@ -1326,7 +1332,7 @@ void Cost::Lose() {
|
|||
|
||||
/// Choose the lower cost.
|
||||
bool Cost::operator<(const Cost &Other) const {
|
||||
if (InsnsCost && Insns != Other.Insns)
|
||||
if (InsnsCost.getNumOccurrences() > 0 && InsnsCost && Insns != Other.Insns)
|
||||
return Insns < Other.Insns;
|
||||
return std::tie(NumRegs, AddRecCost, NumIVMuls, NumBaseAdds, ScaleCost,
|
||||
ImmCost, SetupCost) <
|
||||
|
@ -1336,7 +1342,8 @@ bool Cost::operator<(const Cost &Other) const {
|
|||
}
|
||||
|
||||
void Cost::print(raw_ostream &OS) const {
|
||||
OS << Insns << " instruction" << (Insns == 1 ? " " : "s ");
|
||||
if (InsnsCost)
|
||||
OS << Insns << " instruction" << (Insns == 1 ? " " : "s ");
|
||||
OS << NumRegs << " reg" << (NumRegs == 1 ? "" : "s");
|
||||
if (AddRecCost != 0)
|
||||
OS << ", with addrec cost " << AddRecCost;
|
||||
|
|
Loading…
Reference in New Issue