summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTanya Lattner <tonic@nondot.org>2010-03-23 17:15:19 +0000
committerTanya Lattner <tonic@nondot.org>2010-03-23 17:15:19 +0000
commit52ce29de2b147d88b1b11d2938725af30522b7ec (patch)
treebbe9be4e92877c0899d88bff86d1d82128fed6ae
parent0afc8f4e10850ba5b0298d86269d3d4c34dda8ec (diff)
downloadllvm-52ce29de2b147d88b1b11d2938725af30522b7ec.tar.gz
Merge 98977 from mainline.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_27@99292 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/CodeGen/MachineJumpTableInfo.h4
-rw-r--r--lib/CodeGen/BranchFolding.cpp34
-rw-r--r--lib/CodeGen/MachineFunction.cpp11
3 files changed, 6 insertions, 43 deletions
diff --git a/include/llvm/CodeGen/MachineJumpTableInfo.h b/include/llvm/CodeGen/MachineJumpTableInfo.h
index c578d285843a..b92ed7b42640 100644
--- a/include/llvm/CodeGen/MachineJumpTableInfo.h
+++ b/include/llvm/CodeGen/MachineJumpTableInfo.h
@@ -83,10 +83,6 @@ public:
///
unsigned createJumpTableIndex(const std::vector<MachineBasicBlock*> &DestBBs);
- /// getJumpTableIndex - Return the index for an existing jump table.
- ///
- unsigned getJumpTableIndex(const std::vector<MachineBasicBlock*> &DestBBs);
-
/// isEmpty - Return true if there are no jump tables.
///
bool isEmpty() const { return JumpTables.empty(); }
diff --git a/lib/CodeGen/BranchFolding.cpp b/lib/CodeGen/BranchFolding.cpp
index d94729ad7a89..d41a134b6ff0 100644
--- a/lib/CodeGen/BranchFolding.cpp
+++ b/lib/CodeGen/BranchFolding.cpp
@@ -203,7 +203,7 @@ bool BranchFolder::OptimizeFunction(MachineFunction &MF,
MadeChange |= MadeChangeThisIteration;
}
- // See if any jump tables have become mergable or dead as the code generator
+ // See if any jump tables have become dead as the code generator
// did its thing.
MachineJumpTableInfo *JTI = MF.getJumpTableInfo();
if (JTI == 0) {
@@ -211,27 +211,8 @@ bool BranchFolder::OptimizeFunction(MachineFunction &MF,
return MadeChange;
}
- const std::vector<MachineJumpTableEntry> &JTs = JTI->getJumpTables();
- // Figure out how these jump tables should be merged.
- std::vector<unsigned> JTMapping;
- JTMapping.reserve(JTs.size());
-
- // We always keep the 0th jump table.
- JTMapping.push_back(0);
-
- // Scan the jump tables, seeing if there are any duplicates. Note that this
- // is N^2, which should be fixed someday.
- for (unsigned i = 1, e = JTs.size(); i != e; ++i) {
- if (JTs[i].MBBs.empty())
- JTMapping.push_back(i);
- else
- JTMapping.push_back(JTI->getJumpTableIndex(JTs[i].MBBs));
- }
-
- // If a jump table was merge with another one, walk the function rewriting
- // references to jump tables to reference the new JT ID's. Keep track of
- // whether we see a jump table idx, if not, we can delete the JT.
- BitVector JTIsLive(JTs.size());
+ // Walk the function to find jump tables that are live.
+ BitVector JTIsLive(JTI->getJumpTables().size());
for (MachineFunction::iterator BB = MF.begin(), E = MF.end();
BB != E; ++BB) {
for (MachineBasicBlock::iterator I = BB->begin(), E = BB->end();
@@ -239,17 +220,14 @@ bool BranchFolder::OptimizeFunction(MachineFunction &MF,
for (unsigned op = 0, e = I->getNumOperands(); op != e; ++op) {
MachineOperand &Op = I->getOperand(op);
if (!Op.isJTI()) continue;
- unsigned NewIdx = JTMapping[Op.getIndex()];
- Op.setIndex(NewIdx);
// Remember that this JT is live.
- JTIsLive.set(NewIdx);
+ JTIsLive.set(Op.getIndex());
}
}
- // Finally, remove dead jump tables. This happens either because the
- // indirect jump was unreachable (and thus deleted) or because the jump
- // table was merged with some other one.
+ // Finally, remove dead jump tables. This happens when the
+ // indirect jump was unreachable (and thus deleted).
for (unsigned i = 0, e = JTIsLive.size(); i != e; ++i)
if (!JTIsLive.test(i)) {
JTI->RemoveJumpTable(i);
diff --git a/lib/CodeGen/MachineFunction.cpp b/lib/CodeGen/MachineFunction.cpp
index ccbb2ddfeaa1..33d840004310 100644
--- a/lib/CodeGen/MachineFunction.cpp
+++ b/lib/CodeGen/MachineFunction.cpp
@@ -603,17 +603,6 @@ unsigned MachineJumpTableInfo::createJumpTableIndex(
return JumpTables.size()-1;
}
-/// getJumpTableIndex - Return the index for an existing jump table entry in
-/// the jump table info.
-unsigned MachineJumpTableInfo::getJumpTableIndex(
- const std::vector<MachineBasicBlock*> &DestBBs) {
- for (unsigned i = 0, e = JumpTables.size(); i != e; ++i)
- if (JumpTables[i].MBBs == DestBBs)
- return i;
- assert(false && "getJumpTableIndex failed to find matching table");
- return ~0;
-}
-
/// ReplaceMBBInJumpTables - If Old is the target of any jump tables, update
/// the jump tables to branch to New instead.
bool MachineJumpTableInfo::ReplaceMBBInJumpTables(MachineBasicBlock *Old,