[mips] Define "trap" as a pseudo instruction that turns into "break 0, 0".
authorAkira Hatanaka <ahatanaka@mips.com>
Fri, 6 Sep 2013 23:52:46 +0000 (23:52 +0000)
committerAkira Hatanaka <ahatanaka@mips.com>
Fri, 6 Sep 2013 23:52:46 +0000 (23:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190224 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Mips/MipsCodeEmitter.cpp
lib/Target/Mips/MipsInstrInfo.td

index 0f1917a327dc41295ed5c3ea67a8fac26ce42b70..b50edf162a7c98bf597ba80db3073adc8e8fc5af 100644 (file)
@@ -327,6 +327,10 @@ bool MipsCodeEmitter::expandPseudos(MachineBasicBlock::instr_iterator &MI,
     BuildMI(MBB, &*MI, MI->getDebugLoc(), II->get(Mips::BEQ)).addReg(Mips::ZERO)
       .addReg(Mips::ZERO).addOperand(MI->getOperand(0));
     break;
+  case Mips::TRAP:
+    BuildMI(MBB, &*MI, MI->getDebugLoc(), II->get(Mips::BREAK)).addImm(0)
+      .addImm(0);
+    break;
   case Mips::JALRPseudo:
     BuildMI(MBB, &*MI, MI->getDebugLoc(), II->get(Mips::JALR), Mips::RA)
       .addReg(MI->getOperand(0).getReg());
index 9fb2a75be465885487054d034acfa0a3c539a04f..65dfaed1d8ec3a754b718d18e3174060e59f44a8 100644 (file)
@@ -783,9 +783,12 @@ class MFC3OP<string asmstr, RegisterOperand RO> :
   InstSE<(outs RO:$rt, RO:$rd, uimm16:$sel), (ins),
          !strconcat(asmstr, "\t$rt, $rd, $sel"), [], NoItinerary, FrmFR>;
 
-let isBarrier = 1, isTerminator = 1, isCodeGenOnly = 1 in
-def TRAP : InstSE<(outs), (ins), "break", [(trap)], NoItinerary, FrmOther> {
-   let Inst = 0x0000000d;
+class TrapBase<Instruction RealInst>
+  : PseudoSE<(outs), (ins), [(trap)], NoItinerary>,
+    PseudoInstExpansion<(RealInst 0, 0)> {
+  let isBarrier = 1;
+  let isTerminator = 1;
+  let isCodeGenOnly = 1;
 }
 
 //===----------------------------------------------------------------------===//
@@ -941,6 +944,7 @@ def TNEI : TEQI_FT<"tnei", GPR32Opnd>, TEQI_FM<0xe>;
 
 def BREAK : BRK_FT<"break">, BRK_FM<0xd>;
 def SYSCALL : SYS_FT<"syscall">, SYS_FM<0xc>;
+def TRAP : TrapBase<BREAK>;
 
 def ERET : ER_FT<"eret">, ER_FM<0x18>;
 def DERET : ER_FT<"deret">, ER_FM<0x1f>;