aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNadav Rotem <nrotem@apple.com>2013-02-27 21:59:43 +0000
committerNadav Rotem <nrotem@apple.com>2013-02-27 21:59:43 +0000
commit07cd932c93fc3d552763f3eddced138bffdd9bd9 (patch)
tree7176f3050e863d2ba6c699d4d55045a13e083a6b
parentcd275c57afda09f7c0ee98f23d0f243d5dc3fc8b (diff)
The FastISEL should be fast. But when we record statistics we use atomic operations to increment the counters.
This patch disables the counters on non-debug builds. This reduces the runtime of SelectionDAGISel::SelectCodeCommon by ~5%. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176214 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index acae58c12a..87c153468f 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -1076,7 +1076,8 @@ void SelectionDAGISel::SelectAllBasicBlocks(const Function &Fn) {
FastIS->setLastLocalValue(0);
}
- unsigned NumFastIselRemaining = std::distance(Begin, End);
+ unsigned NumFastIselRemaining = 0;
+ NumFastIselRemaining = std::distance(Begin, End);
// Do FastISel on as many instructions as possible.
for (; BI != Begin; --BI) {
const Instruction *Inst = llvm::prior(BI);
@@ -1094,7 +1095,7 @@ void SelectionDAGISel::SelectAllBasicBlocks(const Function &Fn) {
// Try to select the instruction with FastISel.
if (FastIS->SelectInstruction(Inst)) {
--NumFastIselRemaining;
- ++NumFastIselSuccess;
+ DEBUG(++NumFastIselSuccess);
// If fast isel succeeded, skip over all the folded instructions, and
// then see if there is a load right before the selected instructions.
// Try to fold the load if so.
@@ -1110,7 +1111,7 @@ void SelectionDAGISel::SelectAllBasicBlocks(const Function &Fn) {
// If we succeeded, don't re-select the load.
BI = llvm::next(BasicBlock::const_iterator(BeforeInst));
--NumFastIselRemaining;
- ++NumFastIselSuccess;
+ DEBUG(++NumFastIselSuccess);
}
continue;
}
@@ -1149,20 +1150,20 @@ void SelectionDAGISel::SelectAllBasicBlocks(const Function &Fn) {
// Recompute NumFastIselRemaining as Selection DAG instruction
// selection may have handled the call, input args, etc.
unsigned RemainingNow = std::distance(Begin, BI);
- NumFastIselFailures += NumFastIselRemaining - RemainingNow;
- NumFastIselRemaining = RemainingNow;
+ DEBUG(NumFastIselFailures += NumFastIselRemaining - RemainingNow);
+ DEBUG(NumFastIselRemaining = RemainingNow);
continue;
}
if (isa<TerminatorInst>(Inst) && !isa<BranchInst>(Inst)) {
// Don't abort, and use a different message for terminator misses.
- NumFastIselFailures += NumFastIselRemaining;
+ DEBUG(NumFastIselFailures += NumFastIselRemaining);
if (EnableFastISelVerbose || EnableFastISelAbort) {
dbgs() << "FastISel missed terminator: ";
Inst->dump();
}
} else {
- NumFastIselFailures += NumFastIselRemaining;
+ DEBUG(NumFastIselFailures += NumFastIselRemaining);
if (EnableFastISelVerbose || EnableFastISelAbort) {
dbgs() << "FastISel miss: ";
Inst->dump();
@@ -2362,7 +2363,7 @@ SelectCodeCommon(SDNode *NodeToMatch, const unsigned char *MatcherTable,
DEBUG(errs() << " Skipped scope entry (due to false predicate) at "
<< "index " << MatcherIndexOfPredicate
<< ", continuing at " << FailIndex << "\n");
- ++NumDAGIselRetries;
+ DEBUG(++NumDAGIselRetries);
// Otherwise, we know that this case of the Scope is guaranteed to fail,
// move to the next case.
@@ -2943,7 +2944,7 @@ SelectCodeCommon(SDNode *NodeToMatch, const unsigned char *MatcherTable,
// another child to try in the current 'Scope', otherwise pop it until we
// find a case to check.
DEBUG(errs() << " Match failed at index " << CurrentOpcodeIndex << "\n");
- ++NumDAGIselRetries;
+ DEBUG(++NumDAGIselRetries);
while (1) {
if (MatchScopes.empty()) {
CannotYetSelect(NodeToMatch);