[llvm-branch-commits] [llvm-branch] r95883 - in /llvm/branches/Apple/Hermes/lib/CodeGen: SelectionDAG/SelectionDAGBuilder.cpp TailDuplication.cpp
Jakob Stoklund Olesen
stoklund at 2pi.dk
Thu Feb 11 10:09:34 PST 2010
Author: stoklund
Date: Thu Feb 11 12:09:34 2010
New Revision: 95883
URL: http://llvm.org/viewvc/llvm-project?rev=95883&view=rev
Log:
$ svn merge -c 95831 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r95831 into '.':
U lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
$ svn merge -c 95832 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r95832 into '.':
U lib/CodeGen/TailDuplication.cpp
$ svn merge -c 95879 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r95879 into '.':
G lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
Modified:
llvm/branches/Apple/Hermes/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
llvm/branches/Apple/Hermes/lib/CodeGen/TailDuplication.cpp
Modified: llvm/branches/Apple/Hermes/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Hermes/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp?rev=95883&r1=95882&r2=95883&view=diff
==============================================================================
--- llvm/branches/Apple/Hermes/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp (original)
+++ llvm/branches/Apple/Hermes/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp Thu Feb 11 12:09:34 2010
@@ -2062,9 +2062,15 @@
}
void SelectionDAGBuilder::visitIndirectBr(IndirectBrInst &I) {
- // Update machine-CFG edges.
+ // Update machine-CFG edges with unique successors.
+ SmallVector<BasicBlock*, 32> succs;
+ succs.reserve(I.getNumSuccessors());
for (unsigned i = 0, e = I.getNumSuccessors(); i != e; ++i)
- CurMBB->addSuccessor(FuncInfo.MBBMap[I.getSuccessor(i)]);
+ succs.push_back(I.getSuccessor(i));
+ array_pod_sort(succs.begin(), succs.end());
+ succs.erase(std::unique(succs.begin(), succs.end()), succs.end());
+ for (unsigned i = 0, e = succs.size(); i != e; ++i)
+ CurMBB->addSuccessor(FuncInfo.MBBMap[succs[i]]);
DAG.setRoot(DAG.getNode(ISD::BRIND, getCurDebugLoc(),
MVT::Other, getControlRoot(),
Modified: llvm/branches/Apple/Hermes/lib/CodeGen/TailDuplication.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Hermes/lib/CodeGen/TailDuplication.cpp?rev=95883&r1=95882&r2=95883&view=diff
==============================================================================
--- llvm/branches/Apple/Hermes/lib/CodeGen/TailDuplication.cpp (original)
+++ llvm/branches/Apple/Hermes/lib/CodeGen/TailDuplication.cpp Thu Feb 11 12:09:34 2010
@@ -403,26 +403,45 @@
II->RemoveOperand(i);
}
}
- II->RemoveOperand(Idx+1);
- II->RemoveOperand(Idx);
- }
+ } else
+ Idx = 0;
+
+ // If Idx is set, the operands at Idx and Idx+1 must be removed.
+ // We reuse the location to avoid expensive RemoveOperand calls.
+
DenseMap<unsigned,AvailableValsTy>::iterator LI=SSAUpdateVals.find(Reg);
if (LI != SSAUpdateVals.end()) {
// This register is defined in the tail block.
for (unsigned j = 0, ee = LI->second.size(); j != ee; ++j) {
MachineBasicBlock *SrcBB = LI->second[j].first;
unsigned SrcReg = LI->second[j].second;
- II->addOperand(MachineOperand::CreateReg(SrcReg, false));
- II->addOperand(MachineOperand::CreateMBB(SrcBB));
+ if (Idx != 0) {
+ II->getOperand(Idx).setReg(SrcReg);
+ II->getOperand(Idx+1).setMBB(SrcBB);
+ Idx = 0;
+ } else {
+ II->addOperand(MachineOperand::CreateReg(SrcReg, false));
+ II->addOperand(MachineOperand::CreateMBB(SrcBB));
+ }
}
} else {
// Live in tail block, must also be live in predecessors.
for (unsigned j = 0, ee = TDBBs.size(); j != ee; ++j) {
MachineBasicBlock *SrcBB = TDBBs[j];
- II->addOperand(MachineOperand::CreateReg(Reg, false));
- II->addOperand(MachineOperand::CreateMBB(SrcBB));
+ if (Idx != 0) {
+ II->getOperand(Idx).setReg(Reg);
+ II->getOperand(Idx+1).setMBB(SrcBB);
+ Idx = 0;
+ } else {
+ II->addOperand(MachineOperand::CreateReg(Reg, false));
+ II->addOperand(MachineOperand::CreateMBB(SrcBB));
+ }
}
}
+ if (Idx != 0) {
+ II->RemoveOperand(Idx+1);
+ II->RemoveOperand(Idx);
+ }
}
}
}
More information about the llvm-branch-commits
mailing list