mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 00:32:55 +00:00
GNU as refuses to assemble "pop {}" instruction. Do not emit such
(this is the case when we have thumb vararg function with single callee-saved register, which is handled separately). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73529 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
de8aed2808
commit
2932795309
@ -697,7 +697,6 @@ restoreCalleeSavedRegisters(MachineBasicBlock &MBB,
|
||||
|
||||
bool isVarArg = AFI->getVarArgsRegSaveSize() > 0;
|
||||
MachineInstr *PopMI = MF.CreateMachineInstr(get(ARM::tPOP),MI->getDebugLoc());
|
||||
MBB.insert(MI, PopMI);
|
||||
for (unsigned i = CSI.size(); i != 0; --i) {
|
||||
unsigned Reg = CSI[i-1].getReg();
|
||||
if (Reg == ARM::LR) {
|
||||
@ -706,10 +705,15 @@ restoreCalleeSavedRegisters(MachineBasicBlock &MBB,
|
||||
continue;
|
||||
Reg = ARM::PC;
|
||||
PopMI->setDesc(get(ARM::tPOP_RET));
|
||||
MBB.erase(MI);
|
||||
MI = MBB.erase(MI);
|
||||
}
|
||||
PopMI->addOperand(MachineOperand::CreateReg(Reg, true));
|
||||
}
|
||||
|
||||
// It's illegal to emit pop instruction without operands.
|
||||
if (PopMI->getNumOperands() > 0)
|
||||
MBB.insert(MI, PopMI);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
; RUN: llvm-as < %s | llc -march=thumb
|
||||
; RUN: llvm-as < %s | llc -march=thumb | \
|
||||
; RUN: grep pop | count 2
|
||||
; RUN: grep pop | count 1
|
||||
|
||||
@str = internal constant [4 x i8] c"%d\0A\00" ; <[4 x i8]*> [#uses=1]
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user