mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-20 16:17:38 +00:00
- Two-address pass should not assume unfolding is always successful.
- X86 unfolding should check if the instructions being unfolded has memoperands. If there is no memoperands, then it must assume conservative alignment. If this would introduce an expensive sse unaligned load / store, then unfoldMemoryOperand etc. should not unfold the instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107509 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -926,14 +926,12 @@ TryInstructionTransform(MachineBasicBlock::iterator &mi,
|
||||
UnfoldTID.OpInfo[LoadRegIndex].getRegClass(TRI);
|
||||
unsigned Reg = MRI->createVirtualRegister(RC);
|
||||
SmallVector<MachineInstr *, 2> NewMIs;
|
||||
bool Success =
|
||||
TII->unfoldMemoryOperand(MF, mi, Reg,
|
||||
/*UnfoldLoad=*/true, /*UnfoldStore=*/false,
|
||||
NewMIs);
|
||||
(void)Success;
|
||||
assert(Success &&
|
||||
"unfoldMemoryOperand failed when getOpcodeAfterMemoryUnfold "
|
||||
"succeeded!");
|
||||
if (!TII->unfoldMemoryOperand(MF, mi, Reg,
|
||||
/*UnfoldLoad=*/true,/*UnfoldStore=*/false,
|
||||
NewMIs)) {
|
||||
DEBUG(dbgs() << "2addr: ABANDONING UNFOLD\n");
|
||||
return false;
|
||||
}
|
||||
assert(NewMIs.size() == 2 &&
|
||||
"Unfolded a load into multiple instructions!");
|
||||
// The load was previously folded, so this is the only use.
|
||||
|
||||
Reference in New Issue
Block a user