mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-26 13:10:42 +00:00
LowerCall() should always do getCopyFromReg() to reference the stack pointer.
Machine instruction selection is much happier when operands are in virtual registers. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97012 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
97e6b8390b
commit
f9a4b7653d
@ -924,7 +924,7 @@ ARMTargetLowering::LowerCall(SDValue Chain, SDValue Callee,
|
||||
// These operations are automatically eliminated by the prolog/epilog pass
|
||||
Chain = DAG.getCALLSEQ_START(Chain, DAG.getIntPtrConstant(NumBytes, true));
|
||||
|
||||
SDValue StackPtr = DAG.getRegister(ARM::SP, MVT::i32);
|
||||
SDValue StackPtr = DAG.getCopyFromReg(Chain, dl, ARM::SP, getPointerTy());
|
||||
|
||||
RegsToPassVector RegsToPass;
|
||||
SmallVector<SDValue, 8> MemOpChains;
|
||||
@ -973,8 +973,6 @@ ARMTargetLowering::LowerCall(SDValue Chain, SDValue Callee,
|
||||
VA, ArgLocs[++i], StackPtr, MemOpChains, Flags);
|
||||
} else {
|
||||
assert(VA.isMemLoc());
|
||||
if (StackPtr.getNode() == 0)
|
||||
StackPtr = DAG.getCopyFromReg(Chain, dl, ARM::SP, getPointerTy());
|
||||
|
||||
MemOpChains.push_back(LowerMemOpCallTo(Chain, StackPtr, Op1,
|
||||
dl, DAG, VA, Flags));
|
||||
@ -987,8 +985,6 @@ ARMTargetLowering::LowerCall(SDValue Chain, SDValue Callee,
|
||||
RegsToPass.push_back(std::make_pair(VA.getLocReg(), Arg));
|
||||
} else {
|
||||
assert(VA.isMemLoc());
|
||||
if (StackPtr.getNode() == 0)
|
||||
StackPtr = DAG.getCopyFromReg(Chain, dl, ARM::SP, getPointerTy());
|
||||
|
||||
MemOpChains.push_back(LowerMemOpCallTo(Chain, StackPtr, Arg,
|
||||
dl, DAG, VA, Flags));
|
||||
|
@ -52,7 +52,7 @@ bb420: ; preds = %bb20, %bb20
|
||||
; CHECK: str r{{[0-7]}}, [sp]
|
||||
; CHECK: str r{{[0-7]}}, [sp, #+4]
|
||||
; CHECK: str r{{[0-7]}}, [sp, #+8]
|
||||
; CHECK: str r{{[0-7]}}, [sp, #+24]
|
||||
; CHECK: str{{(.w)?}} r{{[0-9]+}}, [sp, #+24]
|
||||
store %union.rec* null, %union.rec** @zz_hold, align 4
|
||||
store %union.rec* null, %union.rec** @zz_res, align 4
|
||||
store %union.rec* %x, %union.rec** @zz_hold, align 4
|
||||
|
Loading…
Reference in New Issue
Block a user