From: Krzysztof Parzyszek Date: Fri, 15 Jul 2016 16:58:34 +0000 (+0000) Subject: [Hexagon] Update instruction itineraries X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bd8bfbd4cb2c8d0da956db853202c666757601da;p=llvm [Hexagon] Update instruction itineraries git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275578 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/Hexagon/HexagonInstrFormats.td b/lib/Target/Hexagon/HexagonInstrFormats.td index 3c5ec1701dc..0bfb04447f2 100644 --- a/lib/Target/Hexagon/HexagonInstrFormats.td +++ b/lib/Target/Hexagon/HexagonInstrFormats.td @@ -342,6 +342,10 @@ class JInst pattern = [], string cstr = "", InstrItinClass itin = J_tc_2early_SLOT23> : InstHexagon, OpcodeHexagon; +class JInst_CJUMP_UCJUMP pattern = [], + string cstr = "", InstrItinClass itin = J_tc_2early_CJUMP_UCJUMP_ARCHDEPSLOT> + : InstHexagon, OpcodeHexagon; + // JR Instruction Class in V2/V3/V4. // Definition of the instruction class NOT CHANGED. class JRInst pattern = [], @@ -412,21 +416,11 @@ class STInstPI pattern = [], string cstr = ""> : STInst; -let mayStore = 1 in -class STInst2PI pattern = [], - string cstr = ""> - : STInst; - // Post increment LD Instruction. class LDInstPI pattern = [], string cstr = ""> : LDInst; -let mayLoad = 1 in -class LDInst2PI pattern = [], - string cstr = ""> - : LDInst; - //===----------------------------------------------------------------------===// // V4 Instruction Format Definitions + //===----------------------------------------------------------------------===// diff --git a/lib/Target/Hexagon/HexagonInstrFormatsV4.td b/lib/Target/Hexagon/HexagonInstrFormatsV4.td index 2d1dea526ee..e17f71fe4e6 100644 --- a/lib/Target/Hexagon/HexagonInstrFormatsV4.td +++ b/lib/Target/Hexagon/HexagonInstrFormatsV4.td @@ -139,7 +139,6 @@ class MEMInst_V4 pattern = [], string cstr = "", InstrItinClass itin = V4LDST_tc_st_SLOT0> : MEMInst; -let isCodeGenOnly = 1 in class EXTENDERInst pattern = []> : InstHexagon, OpcodeHexagon; @@ -151,5 +150,11 @@ class SUBInst pattern = [], class CJInst pattern = [], string cstr = ""> + : InstHexagon, + OpcodeHexagon; + +class CJInst_JMPSET pattern = [], + string cstr = ""> : InstHexagon, OpcodeHexagon; + diff --git a/lib/Target/Hexagon/HexagonInstrInfo.td b/lib/Target/Hexagon/HexagonInstrInfo.td index 16decf31c77..74dc5ac9a3a 100644 --- a/lib/Target/Hexagon/HexagonInstrInfo.td +++ b/lib/Target/Hexagon/HexagonInstrInfo.td @@ -1447,9 +1447,9 @@ let isBranch = 1, isBarrier = 1, Defs = [PC], hasSideEffects = 0, isExtendable = 1, opExtendable = 0, isExtentSigned = 1, opExtentBits = 24, opExtentAlign = 2, InputType = "imm" in class T_JMP - : JInst<(outs), (ins brtarget:$dst), + : JInst_CJUMP_UCJUMP<(outs), (ins brtarget:$dst), "jump " # ExtStr # "$dst", - [], "", J_tc_2early_SLOT23> { + [], "", J_tc_2early_CJUMP_UCJUMP_ARCHDEPSLOT> { bits<24> dst; let IClass = 0b0101; @@ -1462,11 +1462,11 @@ let isBranch = 1, Defs = [PC], hasSideEffects = 0, isPredicated = 1, isExtendable = 1, opExtendable = 1, isExtentSigned = 1, opExtentBits = 17, opExtentAlign = 2, InputType = "imm" in class T_JMP_c - : JInst<(outs), (ins PredRegs:$src, brtarget:$dst), + : JInst_CJUMP_UCJUMP<(outs), (ins PredRegs:$src, brtarget:$dst), CondStr<"$src", !if(PredNot,0,1), isPredNew>.S # JumpOpcStr<"jump", isPredNew, isTak>.S # " " # ExtStr # "$dst", - [], "", J_tc_2early_SLOT23>, ImmRegRel { + [], "", J_tc_2early_CJUMP_UCJUMP_ARCHDEPSLOT>, ImmRegRel { let isTaken = isTak; let isPredicatedFalse = PredNot; let isPredicatedNew = isPredNew; diff --git a/lib/Target/Hexagon/HexagonInstrInfoV4.td b/lib/Target/Hexagon/HexagonInstrInfoV4.td index a15e9a67511..398d2d3bc71 100644 --- a/lib/Target/Hexagon/HexagonInstrInfoV4.td +++ b/lib/Target/Hexagon/HexagonInstrInfoV4.td @@ -4151,7 +4151,7 @@ class CJInst_tstbit_R0 : InstHexagon<(outs), (ins IntRegs:$Rs, brtarget:$r9_2), ""#px#" = tstbit($Rs, #0); if (" #!if(np, "!","")#""#px#".new) jump:"#tnt#" $r9_2", - [], "", COMPOUND, TypeCOMPOUND>, OpcodeHexagon { + [], "", COMPOUND_CJ_ARCHDEPSLOT, TypeCOMPOUND>, OpcodeHexagon { bits<4> Rs; bits<11> r9_2; @@ -4197,7 +4197,7 @@ class CJInst_RR : InstHexagon<(outs), (ins IntRegs:$Rs, IntRegs:$Rt, brtarget:$r9_2), ""#px#" = cmp."#op#"($Rs, $Rt); if (" #!if(np, "!","")#""#px#".new) jump:"#tnt#" $r9_2", - [], "", COMPOUND, TypeCOMPOUND>, OpcodeHexagon { + [], "", COMPOUND_CJ_ARCHDEPSLOT, TypeCOMPOUND>, OpcodeHexagon { bits<4> Rs; bits<4> Rt; bits<11> r9_2; @@ -4251,7 +4251,7 @@ class CJInst_RU5 : InstHexagon<(outs), (ins IntRegs:$Rs, u5Imm:$U5, brtarget:$r9_2), ""#px#" = cmp."#op#"($Rs, #$U5); if (" #!if(np, "!","")#""#px#".new) jump:"#tnt#" $r9_2", - [], "", COMPOUND, TypeCOMPOUND>, OpcodeHexagon { + [], "", COMPOUND_CJ_ARCHDEPSLOT, TypeCOMPOUND>, OpcodeHexagon { bits<4> Rs; bits<5> U5; bits<11> r9_2; @@ -4306,7 +4306,7 @@ class CJInst_Rn1 : InstHexagon<(outs), (ins IntRegs:$Rs, brtarget:$r9_2), ""#px#" = cmp."#op#"($Rs,#-1); if (" #!if(np, "!","")#""#px#".new) jump:"#tnt#" $r9_2", - [], "", COMPOUND, TypeCOMPOUND>, OpcodeHexagon { + [], "", COMPOUND_CJ_ARCHDEPSLOT, TypeCOMPOUND>, OpcodeHexagon { bits<4> Rs; bits<11> r9_2; @@ -4355,7 +4355,7 @@ defm gt : T_pnp_CJInst_Rn1<"gt">; let Defs = [PC], isBranch = 1, hasSideEffects = 0, hasNewValue = 1, isExtentSigned = 1, opNewValue = 0, isExtendable = 1, opExtentBits = 11, opExtentAlign = 2, opExtendable = 2 in -def J4_jumpseti: CJInst < +def J4_jumpseti: CJInst_JMPSET < (outs IntRegs:$Rd), (ins u6Imm:$U6, brtarget:$r9_2), "$Rd = #$U6 ; jump $r9_2"> { @@ -4375,7 +4375,7 @@ def J4_jumpseti: CJInst < let Defs = [PC], isBranch = 1, hasSideEffects = 0, hasNewValue = 1, isExtentSigned = 1, opNewValue = 0, isExtendable = 1, opExtentBits = 11, opExtentAlign = 2, opExtendable = 2 in -def J4_jumpsetr: CJInst < +def J4_jumpsetr: CJInst_JMPSET < (outs IntRegs:$Rd), (ins IntRegs:$Rs, brtarget:$r9_2), "$Rd = $Rs ; jump $r9_2"> { diff --git a/lib/Target/Hexagon/HexagonScheduleV4.td b/lib/Target/Hexagon/HexagonScheduleV4.td index 0f462c98913..7416baab392 100644 --- a/lib/Target/Hexagon/HexagonScheduleV4.td +++ b/lib/Target/Hexagon/HexagonScheduleV4.td @@ -49,7 +49,6 @@ def ALU32_3op_tc_1_SLOT0123 : InstrItinClass; def ALU32_3op_tc_2_SLOT0123 : InstrItinClass; def ALU32_ADDI_tc_1_SLOT0123 : InstrItinClass; def ALU64_tc_1_SLOT23 : InstrItinClass; -def ALU64_tc_1or2_SLOT23 : InstrItinClass; def ALU64_tc_2_SLOT23 : InstrItinClass; def ALU64_tc_2early_SLOT23 : InstrItinClass; def ALU64_tc_3x_SLOT23 : InstrItinClass; @@ -64,10 +63,9 @@ def J_tc_2early_SLOT2 : InstrItinClass; def LD_tc_ld_SLOT01 : InstrItinClass; def LD_tc_ld_SLOT0 : InstrItinClass; def LD_tc_3or4stall_SLOT0 : InstrItinClass; -def M_tc_1_SLOT23 : InstrItinClass; -def M_tc_1or2_SLOT23 : InstrItinClass; def M_tc_2_SLOT23 : InstrItinClass; def M_tc_3_SLOT23 : InstrItinClass; +def M_tc_1_SLOT23 : InstrItinClass; def M_tc_3x_SLOT23 : InstrItinClass; def M_tc_3or4x_SLOT23 : InstrItinClass; def ST_tc_st_SLOT01 : InstrItinClass; @@ -79,7 +77,6 @@ def S_2op_tc_2_SLOT23 : InstrItinClass; def S_2op_tc_2early_SLOT23 : InstrItinClass; def S_2op_tc_3or4x_SLOT23 : InstrItinClass; def S_3op_tc_1_SLOT23 : InstrItinClass; -def S_3op_tc_1or2_SLOT23 : InstrItinClass; def S_3op_tc_2_SLOT23 : InstrItinClass; def S_3op_tc_2early_SLOT23 : InstrItinClass; def S_3op_tc_3_SLOT23 : InstrItinClass; @@ -95,7 +92,6 @@ def J_tc_2early_SLOT0123 : InstrItinClass; def EXTENDER_tc_1_SLOT0123 : InstrItinClass; def S_3op_tc_3stall_SLOT23 : InstrItinClass; - def HexagonItinerariesV4 : ProcessorItineraries<[SLOT0, SLOT1, SLOT2, SLOT3, SLOT_ENDLOOP], [], [ // ALU32 @@ -114,7 +110,6 @@ def HexagonItinerariesV4 : // ALU64 InstrItinData]>, - InstrItinData]>, InstrItinData]>, InstrItinData]>, InstrItinData]>, @@ -130,6 +125,7 @@ def HexagonItinerariesV4 : InstrItinData]>, // J InstrItinData]>, + InstrItinData]>, // JR InstrItinData]>, @@ -140,7 +136,6 @@ def HexagonItinerariesV4 : // M InstrItinData]>, - InstrItinData]>, InstrItinData]>, InstrItinData]>, InstrItinData]>, @@ -159,11 +154,11 @@ def HexagonItinerariesV4 : InstrItinData]>, InstrItinData]>, InstrItinData]>, - InstrItinData]>, InstrItinData]>, InstrItinData]>, InstrItinData]>, InstrItinData]>, + InstrItinData]>, // SYS InstrItinData]>, @@ -188,6 +183,7 @@ def HexagonItinerariesV4 : InstrItinData]>, + InstrItinData]>, InstrItinData]>, InstrItinData]>, InstrItinData, diff --git a/lib/Target/Hexagon/HexagonScheduleV55.td b/lib/Target/Hexagon/HexagonScheduleV55.td index 2bc4a3db98b..b2a75f7200d 100644 --- a/lib/Target/Hexagon/HexagonScheduleV55.td +++ b/lib/Target/Hexagon/HexagonScheduleV55.td @@ -31,131 +31,154 @@ def COPROC_VX_vtc_SLOT23 : InstrItinClass; def J_tc_3stall_SLOT2 : InstrItinClass; def MAPPING_tc_1_SLOT0123 : InstrItinClass; def M_tc_3stall_SLOT23 : InstrItinClass; -def SUBINSN_tc_1_SLOT01 : InstrItinClass; -def SUBINSN_tc_2early_SLOT0 : InstrItinClass; -def SUBINSN_tc_2early_SLOT01 : InstrItinClass; -def SUBINSN_tc_3stall_SLOT0 : InstrItinClass; -def SUBINSN_tc_ld_SLOT0 : InstrItinClass; -def SUBINSN_tc_ld_SLOT01 : InstrItinClass; -def SUBINSN_tc_st_SLOT01 : InstrItinClass; def HexagonItinerariesV55 : ProcessorItineraries<[SLOT0, SLOT1, SLOT2, SLOT3, SLOT_ENDLOOP], [], [ // ALU32 InstrItinData]>, + [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>], [1, 1, 1]>, InstrItinData]>, + [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>], [2, 1, 1]>, InstrItinData]>, + [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>], [1, 1, 1]>, InstrItinData]>, + [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>], [2, 1, 1]>, InstrItinData]>, + [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>], [2, 1, 1]>, InstrItinData]>, + [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>], [1, 1, 1]>, // ALU64 - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, + InstrItinData], + [1, 1, 1]>, + InstrItinData], + [2, 1, 1]>, + InstrItinData], + [2, 1, 1]>, + InstrItinData], + [3, 1, 1]>, // CR -> System - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, + InstrItinData], [2, 1, 1]>, + InstrItinData], [2, 1, 1]>, + InstrItinData], [3, 1, 1]>, // Jump (conditional/unconditional/return etc) - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, + InstrItinData], + [2, 1, 1, 1]>, + InstrItinData], + [3, 1, 1, 1]>, + InstrItinData], + [1, 1, 1, 1]>, + InstrItinData], + [2, 1, 1, 1]>, + InstrItinData], + [2, 1, 1, 1]>, + InstrItinData], [2, 1, 1, 1]>, // JR - InstrItinData]>, - InstrItinData]>, + InstrItinData], [2, 1, 1]>, + InstrItinData], [3, 1, 1]>, // Extender InstrItinData]>, + [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>], [1, 1, 1]>, // Load - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, + InstrItinData], + [2, 1]>, + InstrItinData], [2, 1]>, + InstrItinData], [2, 1]>, // M - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, + InstrItinData], + [1, 1, 1]>, + InstrItinData], + [2, 1, 1]>, + InstrItinData], + [1, 1, 1]>, + InstrItinData], + [3, 1, 1]>, + InstrItinData], + [3, 1, 1]>, + InstrItinData], + [3, 1, 1]>, // Store - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - - // Subinsn - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, + InstrItinData], + [1, 1, 1]>, + InstrItinData], [2, 1, 1]>, + InstrItinData], [2, 1, 1]>, + InstrItinData], [1, 1, 1]>, // S - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, + InstrItinData], + [1, 1, 1]>, + InstrItinData], + [2, 1, 1]>, + InstrItinData], + [2, 1, 1]>, + InstrItinData], + [3, 1, 1]>, + InstrItinData], + [1, 1, 1]>, + InstrItinData], + [2, 1, 1]>, + InstrItinData], + [2, 1, 1]>, + InstrItinData], + [3, 1, 1]>, + InstrItinData], + [3, 1, 1]>, + InstrItinData], + [3, 1, 1]>, // New Value Compare Jump - InstrItinData]>, + InstrItinData], + [3, 1, 1, 1]>, // Mem ops - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, + InstrItinData], + [1, 1, 1, 1]>, + InstrItinData], + [2, 1, 1, 1]>, + InstrItinData], + [1, 1, 1, 1]>, + InstrItinData], + [1, 1, 1, 1]>, + InstrItinData], + [3, 1, 1, 1]>, + InstrItinData], + [1, 1, 1, 1]>, // Endloop - InstrItinData]>, + InstrItinData], + [2]>, // Vector InstrItinData]>, + [InstrStage<1, [SLOT0, SLOT1]>], [2, 1, 1, 1]>, InstrItinData]>, + [InstrStage<1, [SLOT2, SLOT3]>], [3, 1, 1, 1]>, InstrItinData]>, + [InstrStage<1, [SLOT2, SLOT3]>], [3, 1, 1, 1]>, InstrItinData]>, + [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>], + [1, 1, 1, 1]>, // Misc - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, + InstrItinData], + [1, 1, 1]>, + InstrItinData], + [1, 1, 1]>, + InstrItinData], [1, 1, 1]>, + InstrItinData], + [1, 1, 1]>, + InstrItinData], + [1, 1, 1]>, InstrItinData, - InstrStage<1, [SLOT2, SLOT3]>]> - + InstrStage<1, [SLOT2, SLOT3]>], [1, 1, 1]> ]>; def HexagonModelV55 : SchedMachineModel { diff --git a/lib/Target/Hexagon/HexagonScheduleV60.td b/lib/Target/Hexagon/HexagonScheduleV60.td index a92377f7178..dc2ce43b057 100644 --- a/lib/Target/Hexagon/HexagonScheduleV60.td +++ b/lib/Target/Hexagon/HexagonScheduleV60.td @@ -167,16 +167,6 @@ def HexagonItinerariesV60 : InstrItinData]>, InstrItinData]>, - // Subinsn - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - InstrItinData]>, - // S InstrItinData]>, InstrItinData]>,