mirror of
https://github.com/RPCSX/llvm.git
synced 2025-03-02 18:06:17 +00:00
Pseudo-ize the Thumb tPOP_RET instruction.
It's just a tPOP instruction with additional code-gen properties, so it doesn't need encoding information. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134172 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ef17e01725
commit
4629d50501
@ -1096,6 +1096,14 @@ void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
OutStreamer.EmitInstruction(TmpInst);
|
||||
return;
|
||||
}
|
||||
case ARM::tPOP_RET: {
|
||||
// As above for LDMIA_RET. Map to the tPOP instruction.
|
||||
MCInst TmpInst;
|
||||
LowerARMMachineInstrToMCInst(MI, TmpInst, *this);
|
||||
TmpInst.setOpcode(ARM::tPOP);
|
||||
OutStreamer.EmitInstruction(TmpInst);
|
||||
return;
|
||||
}
|
||||
|
||||
case ARM::t2MOVi32imm: assert(0 && "Should be lowered by thumb2it pass");
|
||||
case ARM::DBG_VALUE: {
|
||||
|
@ -408,15 +408,8 @@ let isBranch = 1, isTerminator = 1, isBarrier = 1, isIndirectBranch = 1 in {
|
||||
// FIXME: remove when we have a way to marking a MI with these properties.
|
||||
let isReturn = 1, isTerminator = 1, isBarrier = 1, mayLoad = 1,
|
||||
hasExtraDefRegAllocReq = 1 in
|
||||
def tPOP_RET : T1I<(outs), (ins pred:$p, reglist:$regs, variable_ops),
|
||||
IIC_iPop_Br,
|
||||
"pop${p}\t$regs", []>,
|
||||
T1Misc<{1,1,0,?,?,?,?}> {
|
||||
// A8.6.121
|
||||
bits<16> regs;
|
||||
let Inst{8} = regs{15}; // registers = P:'0000000':register_list
|
||||
let Inst{7-0} = regs{7-0};
|
||||
}
|
||||
def tPOP_RET : tPseudoInst<(outs), (ins pred:$p, reglist:$regs, variable_ops),
|
||||
Size4Bytes, IIC_iPop_Br, []>;
|
||||
|
||||
// All calls clobber the non-callee saved registers. SP is marked as a use to
|
||||
// prevent stack-pointer assignments that appear immediately before calls from
|
||||
|
@ -1656,13 +1656,13 @@ ARMDEBackend::populateInstruction(const CodeGenInstruction &CGI,
|
||||
// Resolve conflicts:
|
||||
//
|
||||
// tBfar conflicts with tBLr9
|
||||
// tPOP_RET/t2LDMIA_RET conflict with tPOP/t2LDM (ditto)
|
||||
// t2LDMIA_RET conflict with t2LDM (ditto)
|
||||
// tMOVCCi conflicts with tMOVi8
|
||||
// tMOVCCr conflicts with tMOVgpr2gpr
|
||||
// tLDRcp conflicts with tLDRspi
|
||||
// t2MOVCCi16 conflicts with tMOVi16
|
||||
if (Name == "tBfar" ||
|
||||
Name == "tPOP_RET" || Name == "t2LDMIA_RET" ||
|
||||
Name == "t2LDMIA_RET" ||
|
||||
Name == "tMOVCCi" || Name == "tMOVCCr" ||
|
||||
Name == "tLDRcp" ||
|
||||
Name == "t2MOVCCi16")
|
||||
|
Loading…
x
Reference in New Issue
Block a user