From: Akira Hatanaka Date: Tue, 15 Oct 2013 01:21:37 +0000 (+0000) Subject: [mips] Use predicates to guard instructions using accumulator registers instead X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=397f6da28cc889597e8c267e15154f1f70a0922a;p=oota-llvm.git [mips] Use predicates to guard instructions using accumulator registers instead of relying on AddedComplexity. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192665 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/Mips/MipsDSPInstrInfo.td b/lib/Target/Mips/MipsDSPInstrInfo.td index f511d0d73af..fd4ab5a292c 100644 --- a/lib/Target/Mips/MipsDSPInstrInfo.td +++ b/lib/Target/Mips/MipsDSPInstrInfo.td @@ -453,7 +453,6 @@ class MULT_DESC_BASE Pattern = [(set ACC64DSPOpnd:$ac, (OpNode GPR32Opnd:$rs, GPR32Opnd:$rt))]; InstrItinClass Itinerary = itin; - int AddedComplexity = 20; bit isCommutable = 1; } @@ -465,7 +464,6 @@ class MADD_DESC_BASE Pattern = [(set ACC64DSPOpnd:$ac, (OpNode GPR32Opnd:$rs, GPR32Opnd:$rt, ACC64DSPOpnd:$acin))]; InstrItinClass Itinerary = itin; - int AddedComplexity = 20; string Constraints = "$acin = $ac"; } @@ -476,7 +474,6 @@ class MFHI_DESC_BASE Pattern = [(set GPR32Opnd:$rd, (OpNode RO:$ac))]; InstrItinClass Itinerary = itin; - int AddedComplexity = 20; } class MTHI_DESC_BASE { diff --git a/lib/Target/Mips/MipsInstrInfo.td b/lib/Target/Mips/MipsInstrInfo.td index 6e06ba21c68..842aab08d0d 100644 --- a/lib/Target/Mips/MipsInstrInfo.td +++ b/lib/Target/Mips/MipsInstrInfo.td @@ -1030,21 +1030,13 @@ def MULT : MMRel, Mult<"mult", IIImult, GPR32Opnd, [HI0, LO0]>, MULT_FM<0, 0x18>; def MULTu : MMRel, Mult<"multu", IIImult, GPR32Opnd, [HI0, LO0]>, MULT_FM<0, 0x19>; -def PseudoMULT : MultDivPseudo; -def PseudoMULTu : MultDivPseudo; def SDIV : Div<"div", IIIdiv, GPR32Opnd, [HI0, LO0]>, MULT_FM<0, 0x1a>; def UDIV : Div<"divu", IIIdiv, GPR32Opnd, [HI0, LO0]>, MULT_FM<0, 0x1b>; -def PseudoSDIV : MultDivPseudo; -def PseudoUDIV : MultDivPseudo; def MTHI : MMRel, MoveToLOHI<"mthi", GPR32Opnd, [HI0]>, MTLO_FM<0x11>; def MTLO : MMRel, MoveToLOHI<"mtlo", GPR32Opnd, [LO0]>, MTLO_FM<0x13>; def MFHI : MMRel, MoveFromLOHI<"mfhi", GPR32Opnd, AC0>, MFLO_FM<0x10>; def MFLO : MMRel, MoveFromLOHI<"mflo", GPR32Opnd, AC0>, MFLO_FM<0x12>; -def PseudoMFHI : PseudoMFLOHI; -def PseudoMFLO : PseudoMFLOHI; /// Sign Ext In Register Instructions. def SEB : MMRel, SignExtInReg<"seb", i8, GPR32Opnd>, SEB_FM<0x10, 0x20>; @@ -1071,10 +1063,22 @@ def MADD : MMRel, MArithR<"madd", 1>, MULT_FM<0x1c, 0>; def MADDU : MMRel, MArithR<"maddu", 1>, MULT_FM<0x1c, 1>; def MSUB : MMRel, MArithR<"msub">, MULT_FM<0x1c, 4>; def MSUBU : MMRel, MArithR<"msubu">, MULT_FM<0x1c, 5>; + +let Predicates = [HasStdEnc, NotDSP] in { +def PseudoMULT : MultDivPseudo; +def PseudoMULTu : MultDivPseudo; +def PseudoMFHI : PseudoMFLOHI; +def PseudoMFLO : PseudoMFLOHI; def PseudoMADD : MAddSubPseudo; def PseudoMADDU : MAddSubPseudo; def PseudoMSUB : MAddSubPseudo; def PseudoMSUBU : MAddSubPseudo; +} + +def PseudoSDIV : MultDivPseudo; +def PseudoUDIV : MultDivPseudo; def RDHWR : ReadHardware, RDHWR_FM;