From: Akira Hatanaka Date: Tue, 30 Jul 2013 20:24:24 +0000 (+0000) Subject: [mips] Define "bal" as a pseudo instruction. Also, fix bug in the InstAlias that X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=8838da6587e60a248b07d4db0e874429ad4e9747 [mips] Define "bal" as a pseudo instruction. Also, fix bug in the InstAlias that turns "bal" into "bgezal". git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187440 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/Mips/InstPrinter/MipsInstPrinter.cpp b/lib/Target/Mips/InstPrinter/MipsInstPrinter.cpp index a2098a0f8c0..c1c141ac5c0 100644 --- a/lib/Target/Mips/InstPrinter/MipsInstPrinter.cpp +++ b/lib/Target/Mips/InstPrinter/MipsInstPrinter.cpp @@ -241,6 +241,9 @@ bool MipsInstPrinter::printAlias(const MCInst &MI, raw_ostream &OS) { case Mips::BNE64: // bne $r0, $zero, $L2 => bnez $r0, $L2 return isReg(MI, 1) && printAlias("bnez", MI, 0, 2, OS); + case Mips::BGEZAL: + // bgezal $zero, $L1 => bal $L1 + return isReg(MI, 0) && printAlias("bal", MI, 1, OS); case Mips::BC1T: // bc1t $fcc0, $L1 => bc1t $L1 return isReg(MI, 0) && printAlias("bc1t", MI, 1, OS); diff --git a/lib/Target/Mips/MipsInstrInfo.td b/lib/Target/Mips/MipsInstrInfo.td index 83afcce98a9..729203d30dd 100644 --- a/lib/Target/Mips/MipsInstrInfo.td +++ b/lib/Target/Mips/MipsInstrInfo.td @@ -635,14 +635,16 @@ let isCall=1, hasDelaySlot=1, Defs = [RA] in { } -class BAL_FT : - InstSE<(outs), (ins brtarget:$offset), "bal\t$offset", [], IIBranch, FrmI> { +class BAL_BR_Pseudo : + PseudoSE<(outs), (ins brtarget:$offset), [], IIBranch>, + PseudoInstExpansion<(RealInst ZERO, brtarget:$offset)> { let isBranch = 1; let isTerminator = 1; let isBarrier = 1; let hasDelaySlot = 1; let Defs = [RA]; } + // Syscall class SYS_FT : InstSE<(outs), (ins uimm20:$code_), @@ -994,13 +996,12 @@ def BGTZ : CBranchZero<"bgtz", setgt, CPURegsOpnd>, BGEZ_FM<7, 0>; def BLEZ : CBranchZero<"blez", setle, CPURegsOpnd>, BGEZ_FM<6, 0>; def BLTZ : CBranchZero<"bltz", setlt, CPURegsOpnd>, BGEZ_FM<1, 0>; -def BAL_BR: BAL_FT, BAL_FM; - def JAL : JumpLink<"jal">, FJ<3>; def JALR : JumpLinkReg<"jalr", CPURegs>, JALR_FM; def JALRPseudo : JumpLinkRegPseudo; def BGEZAL : BGEZAL_FT<"bgezal", CPURegsOpnd>, BGEZAL_FM<0x11>; def BLTZAL : BGEZAL_FT<"bltzal", CPURegsOpnd>, BGEZAL_FM<0x10>; +def BAL_BR : BAL_BR_Pseudo; def TAILCALL : JumpFJ, FJ<2>, IsTailCall; def TAILCALL_R : JumpFR, MTLO_FM<8>, IsTailCall; @@ -1104,7 +1105,7 @@ def MTC2_3OP : MFC3OP<(outs CPURegsOpnd:$rd, uimm16:$sel), def : InstAlias<"move $dst, $src", (ADDu CPURegsOpnd:$dst, CPURegsOpnd:$src,ZERO), 1>, Requires<[NotMips64]>; -def : InstAlias<"bal $offset", (BGEZAL RA, brtarget:$offset), 1>; +def : InstAlias<"bal $offset", (BGEZAL ZERO, brtarget:$offset), 1>; def : InstAlias<"addu $rs, $rt, $imm", (ADDiu CPURegsOpnd:$rs, CPURegsOpnd:$rt, simm16:$imm), 0>; def : InstAlias<"add $rs, $rt, $imm",