mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-03 08:51:43 +00:00
[mips] Redefine TAILCALL as a pseudo instruction.
No functionality change. llvm-svn: 195896
This commit is contained in:
parent
91268863a6
commit
a964ea01fe
@ -175,13 +175,9 @@ let DecoderNamespace = "MicroMips", Predicates = [InMicroMips] in {
|
||||
def J_MM : MMRel, JumpFJ<jmptarget_mm, "j", br, bb, "j">,
|
||||
J_FM_MM<0x35>;
|
||||
def JAL_MM : MMRel, JumpLink<"jal", calltarget_mm>, J_FM_MM<0x3d>;
|
||||
def TAILCALL_MM : MMRel, JumpFJ<calltarget_mm, "j", MipsTailCall, imm,
|
||||
"tcall">, J_FM_MM<0x3d>, IsTailCall;
|
||||
}
|
||||
def JR_MM : MMRel, IndirectBranch<"jr", GPR32Opnd>, JR_FM_MM<0x3c>;
|
||||
def JALR_MM : MMRel, JumpLinkReg<"jalr", GPR32Opnd>, JALR_FM_MM<0x03c>;
|
||||
def TAILCALL_R_MM : MMRel, JumpFR<"tcallr", GPR32Opnd, MipsTailCall>,
|
||||
JR_FM_MM<0x3c>, IsTailCall;
|
||||
def RET_MM : MMRel, RetBase<"ret", GPR32Opnd>, JR_FM_MM<0x3c>;
|
||||
|
||||
/// Branch Instructions
|
||||
|
@ -159,8 +159,7 @@ def BLEZ64 : CBranchZero<"blez", brtarget, setle, GPR64Opnd>, BGEZ_FM<6, 0>;
|
||||
def BLTZ64 : CBranchZero<"bltz", brtarget, setlt, GPR64Opnd>, BGEZ_FM<1, 0>;
|
||||
def JALR64 : JumpLinkReg<"jalr", GPR64Opnd>, JALR_FM;
|
||||
def JALR64Pseudo : JumpLinkRegPseudo<GPR64Opnd, JALR, RA, GPR32Opnd>;
|
||||
def TAILCALL64_R : JumpFR<"tcallr", GPR64Opnd, MipsTailCall>,
|
||||
MTLO_FM<8>, IsTailCall;
|
||||
def TAILCALL64_R : TailCallReg<GPR64Opnd, JR, GPR32Opnd>;
|
||||
}
|
||||
|
||||
/// Multiply and Divide Instructions.
|
||||
|
@ -611,6 +611,18 @@ let isCall=1, hasDelaySlot=1, Defs = [RA] in {
|
||||
|
||||
}
|
||||
|
||||
let isCall = 1, isTerminator = 1, isReturn = 1, isBarrier = 1, hasDelaySlot = 1,
|
||||
hasExtraSrcRegAllocReq = 1, Defs = [AT] in {
|
||||
class TailCall<Instruction JumpInst> :
|
||||
PseudoSE<(outs), (ins calltarget:$target), [], IIBranch>,
|
||||
PseudoInstExpansion<(JumpInst jmptarget:$target)>;
|
||||
|
||||
class TailCallReg<RegisterOperand RO, Instruction JRInst,
|
||||
RegisterOperand ResRO = RO> :
|
||||
PseudoSE<(outs), (ins RO:$rs), [(MipsTailCall RO:$rs)], IIBranch>,
|
||||
PseudoInstExpansion<(JRInst ResRO:$rs)>;
|
||||
}
|
||||
|
||||
class BAL_BR_Pseudo<Instruction RealInst> :
|
||||
PseudoSE<(outs), (ins brtarget:$offset), [], IIBranch>,
|
||||
PseudoInstExpansion<(RealInst ZERO, brtarget:$offset)> {
|
||||
@ -1018,10 +1030,8 @@ def JALRPseudo : JumpLinkRegPseudo<GPR32Opnd, JALR, RA>;
|
||||
def BGEZAL : MMRel, BGEZAL_FT<"bgezal", brtarget, GPR32Opnd>, BGEZAL_FM<0x11>;
|
||||
def BLTZAL : MMRel, BGEZAL_FT<"bltzal", brtarget, GPR32Opnd>, BGEZAL_FM<0x10>;
|
||||
def BAL_BR : BAL_BR_Pseudo<BGEZAL>;
|
||||
def TAILCALL : MMRel, JumpFJ<calltarget, "j", MipsTailCall, imm, "tcall">,
|
||||
FJ<2>, IsTailCall;
|
||||
def TAILCALL_R : MMRel, JumpFR<"tcallr", GPR32Opnd, MipsTailCall>, MTLO_FM<8>,
|
||||
IsTailCall;
|
||||
def TAILCALL : TailCall<J>;
|
||||
def TAILCALL_R : TailCallReg<GPR32Opnd, JR>;
|
||||
|
||||
def RET : MMRel, RetBase<"ret", GPR32Opnd>, MTLO_FM<8>;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user