mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-16 14:31:59 +00:00
Make SwitchInst::removeCase() more efficient.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124659 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f9e4a986c0
commit
0faa60938a
@ -2247,7 +2247,8 @@ public:
|
||||
|
||||
/// removeCase - This method removes the specified successor from the switch
|
||||
/// instruction. Note that this cannot be used to remove the default
|
||||
/// destination (successor #0).
|
||||
/// destination (successor #0). Also note that this operation may reorder the
|
||||
/// remaining cases at index idx and above.
|
||||
///
|
||||
void removeCase(unsigned idx);
|
||||
|
||||
|
@ -3009,14 +3009,10 @@ void SwitchInst::removeCase(unsigned idx) {
|
||||
unsigned NumOps = getNumOperands();
|
||||
Use *OL = OperandList;
|
||||
|
||||
// Move everything after this operand down.
|
||||
//
|
||||
// FIXME: we could just swap with the end of the list, then erase. However,
|
||||
// client might not expect this to happen. The code as it is thrashes the
|
||||
// use/def lists, which is kinda lame.
|
||||
for (unsigned i = (idx+1)*2; i != NumOps; i += 2) {
|
||||
OL[i-2] = OL[i];
|
||||
OL[i-2+1] = OL[i+1];
|
||||
// Overwrite this case with the end of the list.
|
||||
if ((idx + 1) * 2 != NumOps) {
|
||||
OL[idx * 2] = OL[NumOps - 2];
|
||||
OL[idx * 2 + 1] = OL[NumOps - 1];
|
||||
}
|
||||
|
||||
// Nuke the last value.
|
||||
|
Loading…
x
Reference in New Issue
Block a user