mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-28 14:36:34 +00:00
Fix X86's unfoldMemoryOperand to properly handle MachineMemOperands.
llvm-svn: 82597
This commit is contained in:
parent
1f53a128a9
commit
e7e623cd25
@ -2567,7 +2567,7 @@ X86InstrInfo::unfoldMemoryOperand(SelectionDAG &DAG, SDNode *N,
|
||||
std::vector<SDValue> AfterOps;
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
unsigned NumOps = N->getNumOperands();
|
||||
for (unsigned i = 0; i != NumOps-1; ++i) {
|
||||
for (unsigned i = 0; i != NumOps-2; ++i) {
|
||||
SDValue Op = N->getOperand(i);
|
||||
if (i >= Index-NumDefs && i < Index-NumDefs + X86AddrNumOperands)
|
||||
AddrOps.push_back(Op);
|
||||
@ -2576,6 +2576,8 @@ X86InstrInfo::unfoldMemoryOperand(SelectionDAG &DAG, SDNode *N,
|
||||
else if (i > Index-NumDefs)
|
||||
AfterOps.push_back(Op);
|
||||
}
|
||||
SDValue MemOp = N->getOperand(NumOps-2);
|
||||
AddrOps.push_back(MemOp);
|
||||
SDValue Chain = N->getOperand(NumOps-1);
|
||||
AddrOps.push_back(Chain);
|
||||
|
||||
@ -2612,8 +2614,10 @@ X86InstrInfo::unfoldMemoryOperand(SelectionDAG &DAG, SDNode *N,
|
||||
|
||||
// Emit the store instruction.
|
||||
if (FoldedStore) {
|
||||
AddrOps.pop_back();
|
||||
AddrOps.pop_back();
|
||||
AddrOps.push_back(SDValue(NewNode, 0));
|
||||
AddrOps.push_back(MemOp);
|
||||
AddrOps.push_back(Chain);
|
||||
bool isAligned = (RI.getStackAlignment() >= 16) ||
|
||||
RI.needsStackRealignment(MF);
|
||||
|
Loading…
Reference in New Issue
Block a user