[llvm-branch-commits] [llvm-branch] r93516 - /llvm/branches/Apple/Zoidberg/lib/CodeGen/TailDuplication.cpp
Bob Wilson
bob.wilson at apple.com
Fri Jan 15 09:47:50 PST 2010
Author: bwilson
Date: Fri Jan 15 11:47:49 2010
New Revision: 93516
URL: http://llvm.org/viewvc/llvm-project?rev=93516&view=rev
Log:
--- Merging r93505 into '.':
U lib/CodeGen/TailDuplication.cpp
Modified:
llvm/branches/Apple/Zoidberg/lib/CodeGen/TailDuplication.cpp
Modified: llvm/branches/Apple/Zoidberg/lib/CodeGen/TailDuplication.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Zoidberg/lib/CodeGen/TailDuplication.cpp?rev=93516&r1=93515&r2=93516&view=diff
==============================================================================
--- llvm/branches/Apple/Zoidberg/lib/CodeGen/TailDuplication.cpp (original)
+++ llvm/branches/Apple/Zoidberg/lib/CodeGen/TailDuplication.cpp Fri Jan 15 11:47:49 2010
@@ -253,7 +253,7 @@
SSAUpdateVals.clear();
}
- // Eliminate some of the copies inserted tail duplication to maintain
+ // Eliminate some of the copies inserted by tail duplication to maintain
// SSA form.
for (unsigned i = 0, e = Copies.size(); i != e; ++i) {
MachineInstr *Copy = Copies[i];
@@ -437,8 +437,11 @@
TailDuplicatePass::TailDuplicate(MachineBasicBlock *TailBB, MachineFunction &MF,
SmallVector<MachineBasicBlock*, 8> &TDBBs,
SmallVector<MachineInstr*, 16> &Copies) {
- // Don't try to tail-duplicate single-block loops.
- if (TailBB->isSuccessor(TailBB))
+ // Pre-regalloc tail duplication hurts compile time and doesn't help
+ // much except for indirect branches.
+ bool hasIndirectBranch = (!TailBB->empty() &&
+ TailBB->back().getDesc().isIndirectBranch());
+ if (PreRegAlloc && !hasIndirectBranch)
return false;
// Set the limit on the number of instructions to duplicate, with a default
@@ -446,7 +449,7 @@
// duplicate only one, because one branch instruction can be eliminated to
// compensate for the duplication.
unsigned MaxDuplicateCount;
- if (!TailBB->empty() && TailBB->back().getDesc().isIndirectBranch())
+ if (hasIndirectBranch)
// If the target has hardware branch prediction that can handle indirect
// branches, duplicating them can often make them predictable when there
// are common paths through the code. The limit needs to be high enough
@@ -457,6 +460,10 @@
else
MaxDuplicateCount = TailDuplicateSize;
+ // Don't try to tail-duplicate single-block loops.
+ if (TailBB->isSuccessor(TailBB))
+ return false;
+
// Check the instructions in the block to determine whether tail-duplication
// is invalid or unlikely to be profitable.
unsigned InstrCount = 0;
More information about the llvm-branch-commits
mailing list