Skip to content

Commit

Permalink
LSR: Calculate instruction cost only if InsnsCost is set to true (NFC)
Browse files Browse the repository at this point in the history
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
  • Loading branch information
evstupac committed Jun 5, 2017
1 parent 3092d72 commit 4d94e99
Showing 1 changed file with 21 additions and 14 deletions.
35 changes: 21 additions & 14 deletions llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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) <
Expand All @@ -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;
Expand Down

0 comments on commit 4d94e99

Please sign in to comment.