mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-27 00:15:58 +00:00
Split the argument unscheduling loop in the WebAssembly register
coloring pass. Turn the logic into "look for an insert point and then move things past the insert point". No functional change intended. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@253626 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
cbf870d3b1
commit
77072b3170
@ -98,20 +98,30 @@ bool WebAssemblyRegColoring::runOnMachineFunction(MachineFunction &MF) {
|
||||
|
||||
// FIXME: If scheduling has moved an ARGUMENT virtual register, move it back,
|
||||
// and recompute liveness. This is a temporary hack.
|
||||
bool SawNonArg = false;
|
||||
bool MovedArg = false;
|
||||
MachineBasicBlock &EntryMBB = MF.front();
|
||||
for (auto MII = EntryMBB.begin(); MII != EntryMBB.end(); ) {
|
||||
MachineInstr *MI = &*MII++;
|
||||
MachineBasicBlock::iterator InsertPt = EntryMBB.end();
|
||||
// Look for the first NonArg instruction.
|
||||
for (auto MII = EntryMBB.begin(), MIE = EntryMBB.end(); MII != MIE; ++MII) {
|
||||
MachineInstr *MI = MII;
|
||||
if (MI->getOpcode() != WebAssembly::ARGUMENT_I32 &&
|
||||
MI->getOpcode() != WebAssembly::ARGUMENT_I64 &&
|
||||
MI->getOpcode() != WebAssembly::ARGUMENT_F32 &&
|
||||
MI->getOpcode() != WebAssembly::ARGUMENT_F64) {
|
||||
InsertPt = MII;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Now move any argument instructions later in the block
|
||||
// to before our first NonArg instruction.
|
||||
for (auto I = InsertPt, E = EntryMBB.end(); I != E; ++I) {
|
||||
MachineInstr *MI = I;
|
||||
if (MI->getOpcode() == WebAssembly::ARGUMENT_I32 ||
|
||||
MI->getOpcode() == WebAssembly::ARGUMENT_I64 ||
|
||||
MI->getOpcode() == WebAssembly::ARGUMENT_F32 ||
|
||||
MI->getOpcode() == WebAssembly::ARGUMENT_F64) {
|
||||
EntryMBB.insert(EntryMBB.begin(), MI->removeFromParent());
|
||||
if (SawNonArg)
|
||||
MovedArg = true;
|
||||
} else {
|
||||
SawNonArg = true;
|
||||
EntryMBB.insert(InsertPt, MI->removeFromParent());
|
||||
MovedArg = true;
|
||||
}
|
||||
}
|
||||
if (MovedArg) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user