diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-05-04 17:47:46 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-05-04 17:47:46 +0000 |
| commit | d7ffbc5c7e5d033ee3812fde2c13f1bb80044e70 (patch) | |
| tree | 54e65f35c8569339cc6015c72f360154121197f4 /llvm/lib/Target | |
| parent | ded8ee07e991a25a27be9968340b109d8a6ff83f (diff) | |
| download | bcm5719-llvm-d7ffbc5c7e5d033ee3812fde2c13f1bb80044e70.tar.gz bcm5719-llvm-d7ffbc5c7e5d033ee3812fde2c13f1bb80044e70.zip | |
[X86] Finish splitting WriteVecShift and WriteVecIMul to remove InstRW overrides.
llvm-svn: 331543
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/X86/X86Instr3DNow.td | 6 | ||||
| -rwxr-xr-x | llvm/lib/Target/X86/X86SchedBroadwell.td | 2 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86SchedHaswell.td | 13 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86SchedSandyBridge.td | 13 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86SchedSkylakeClient.td | 41 | ||||
| -rwxr-xr-x | llvm/lib/Target/X86/X86SchedSkylakeServer.td | 20 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86Schedule.td | 8 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86ScheduleAtom.td | 23 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86ScheduleBtVer2.td | 2 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86ScheduleSLM.td | 2 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86ScheduleZnver1.td | 17 |
11 files changed, 44 insertions, 103 deletions
diff --git a/llvm/lib/Target/X86/X86Instr3DNow.td b/llvm/lib/Target/X86/X86Instr3DNow.td index 5ffe95e3be3..0c834260a5b 100644 --- a/llvm/lib/Target/X86/X86Instr3DNow.td +++ b/llvm/lib/Target/X86/X86Instr3DNow.td @@ -54,7 +54,7 @@ multiclass I3DNow_conv_rm_int<bits<8> opc, string Mn, Sched<[sched.Folded, ReadAfterLd]>; } -defm PAVGUSB : I3DNow_binop_rm_int<0xBF, "pavgusb", WriteVecIMul, 1>; +defm PAVGUSB : I3DNow_binop_rm_int<0xBF, "pavgusb", SchedWriteVecALU.MMX, 1>; defm PF2ID : I3DNow_conv_rm_int<0x1D, "pf2id", WriteCvtF2I>; defm PFACC : I3DNow_binop_rm_int<0xAE, "pfacc", WriteFAdd>; defm PFADD : I3DNow_binop_rm_int<0x9E, "pfadd", WriteFAdd, 1>; @@ -72,7 +72,7 @@ defm PFRSQRT : I3DNow_conv_rm_int<0x97, "pfrsqrt", WriteFAdd>; defm PFSUB : I3DNow_binop_rm_int<0x9A, "pfsub", WriteFAdd, 1>; defm PFSUBR : I3DNow_binop_rm_int<0xAA, "pfsubr", WriteFAdd, 1>; defm PI2FD : I3DNow_conv_rm_int<0x0D, "pi2fd", WriteCvtI2F>; -defm PMULHRW : I3DNow_binop_rm_int<0xB7, "pmulhrw", WriteVecIMul, 1>; +defm PMULHRW : I3DNow_binop_rm_int<0xB7, "pmulhrw", SchedWriteVecIMul.MMX, 1>; // FIXME: Is there a better scheduler class for EMMS/FEMMS? let SchedRW = [WriteMicrocoded] in @@ -109,4 +109,4 @@ defm PF2IW : I3DNow_conv_rm_int<0x1C, "pf2iw", WriteCvtF2I, "a">; defm PI2FW : I3DNow_conv_rm_int<0x0C, "pi2fw", WriteCvtI2F, "a">; defm PFNACC : I3DNow_binop_rm_int<0x8A, "pfnacc", WriteFAdd, 0, "a">; defm PFPNACC : I3DNow_binop_rm_int<0x8E, "pfpnacc", WriteFAdd, 0, "a">; -defm PSWAPD : I3DNow_conv_rm_int<0xBB, "pswapd", WriteShuffle, "a">; +defm PSWAPD : I3DNow_conv_rm_int<0xBB, "pswapd", SchedWriteShuffle.MMX, "a">; diff --git a/llvm/lib/Target/X86/X86SchedBroadwell.td b/llvm/lib/Target/X86/X86SchedBroadwell.td index 09fb08064db..21d0c8a629d 100755 --- a/llvm/lib/Target/X86/X86SchedBroadwell.td +++ b/llvm/lib/Target/X86/X86SchedBroadwell.td @@ -211,6 +211,7 @@ defm : BWWriteResPair<WriteVecALUY, [BWPort15], 1, [1], 1, 6>; // Vector intege defm : BWWriteResPair<WriteVecLogic, [BWPort015], 1, [1], 1, 5>; // Vector integer and/or/xor. defm : BWWriteResPair<WriteVecLogicY,[BWPort015], 1, [1], 1, 6>; // Vector integer and/or/xor (YMM/ZMM). defm : BWWriteResPair<WriteVecIMul, [BWPort0], 5, [1], 1, 5>; // Vector integer multiply. +defm : BWWriteResPair<WriteVecIMulX, [BWPort0], 5, [1], 1, 5>; // Vector integer multiply. defm : BWWriteResPair<WriteVecIMulY, [BWPort0], 5, [1], 1, 6>; // Vector integer multiply. defm : BWWriteResPair<WritePMULLD, [BWPort0], 10, [2], 2, 5>; // Vector PMULLD. defm : BWWriteResPair<WritePMULLDY, [BWPort0], 10, [2], 2, 6>; // Vector PMULLD (YMM/ZMM). @@ -234,6 +235,7 @@ defm : BWWriteResPair<WriteVecShiftX, [BWPort0,BWPort5], 2, [1,1], 2, 5>; defm : X86WriteRes<WriteVecShiftY, [BWPort0,BWPort5], 4, [1,1], 2>; defm : X86WriteRes<WriteVecShiftYLd, [BWPort0,BWPort23], 7, [1,1], 2>; +defm : BWWriteResPair<WriteVecShiftImm, [BWPort0], 1, [1], 1, 5>; defm : BWWriteResPair<WriteVecShiftImmX, [BWPort0], 1, [1], 1, 5>; // Vector integer immediate shifts (XMM). defm : BWWriteResPair<WriteVecShiftImmY, [BWPort0], 1, [1], 1, 6>; // Vector integer immediate shifts (YMM/ZMM). defm : BWWriteResPair<WriteVarVecShift, [BWPort0, BWPort5], 3, [2,1], 3, 5>; // Variable vector shifts. diff --git a/llvm/lib/Target/X86/X86SchedHaswell.td b/llvm/lib/Target/X86/X86SchedHaswell.td index 748f3c7ceb2..cacf24f1e34 100644 --- a/llvm/lib/Target/X86/X86SchedHaswell.td +++ b/llvm/lib/Target/X86/X86SchedHaswell.td @@ -205,7 +205,8 @@ defm : HWWriteResPair<WriteVecLogic, [HWPort015], 1, [1], 1, 6>; defm : HWWriteResPair<WriteVecLogicY,[HWPort015], 1, [1], 1, 7>; defm : HWWriteResPair<WriteVecALU, [HWPort15], 1, [1], 1, 6>; defm : HWWriteResPair<WriteVecALUY, [HWPort15], 1, [1], 1, 7>; -defm : HWWriteResPair<WriteVecIMul, [HWPort0], 5, [1], 1, 6>; +defm : HWWriteResPair<WriteVecIMul, [HWPort0], 5, [1], 1, 5>; +defm : HWWriteResPair<WriteVecIMulX, [HWPort0], 5, [1], 1, 6>; defm : HWWriteResPair<WriteVecIMulY, [HWPort0], 5, [1], 1, 7>; defm : HWWriteResPair<WritePMULLD, [HWPort0], 10, [2], 2, 6>; defm : HWWriteResPair<WritePMULLDY, [HWPort0], 10, [2], 2, 7>; @@ -231,6 +232,7 @@ defm : HWWriteResPair<WriteVecShiftX, [HWPort0,HWPort5], 2, [1,1], 2, 6>; defm : X86WriteRes<WriteVecShiftY, [HWPort0,HWPort5], 4, [1,1], 2>; defm : X86WriteRes<WriteVecShiftYLd, [HWPort0,HWPort23], 8, [1,1], 2>; +defm : HWWriteResPair<WriteVecShiftImm, [HWPort0], 1, [1], 1, 5>; defm : HWWriteResPair<WriteVecShiftImmX, [HWPort0], 1, [1], 1, 6>; defm : HWWriteResPair<WriteVecShiftImmY, [HWPort0], 1, [1], 1, 7>; defm : HWWriteResPair<WriteVarVecShift, [HWPort0, HWPort5], 3, [2,1], 3, 6>; @@ -1672,14 +1674,7 @@ def HWWriteResGroup91_5 : SchedWriteRes<[HWPort0,HWPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[HWWriteResGroup91_5], (instregex "MMX_PMADDUBSWrm", - "MMX_PMADDWDirm", - "MMX_PMULHRSWrm", - "MMX_PMULHUWirm", - "MMX_PMULHWirm", - "MMX_PMULLWirm", - "MMX_PMULUDQirm", - "MMX_PSADBWirm")>; +def: InstRW<[HWWriteResGroup91_5], (instregex "MMX_PSADBWirm")>; def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> { let Latency = 10; diff --git a/llvm/lib/Target/X86/X86SchedSandyBridge.td b/llvm/lib/Target/X86/X86SchedSandyBridge.td index 014fc5013eb..9c424c06536 100644 --- a/llvm/lib/Target/X86/X86SchedSandyBridge.td +++ b/llvm/lib/Target/X86/X86SchedSandyBridge.td @@ -183,7 +183,8 @@ defm : SBWriteResPair<WriteVecLogic, [SBPort015], 1, [1], 1, 6>; defm : SBWriteResPair<WriteVecLogicY,[SBPort015], 1, [1], 1, 7>; defm : SBWriteResPair<WriteVecALU, [SBPort15], 1, [1], 1, 6>; defm : SBWriteResPair<WriteVecALUY, [SBPort15], 1, [1], 1, 7>; -defm : SBWriteResPair<WriteVecIMul, [SBPort0], 5, [1], 1, 6>; +defm : SBWriteResPair<WriteVecIMul, [SBPort0], 5, [1], 1, 5>; +defm : SBWriteResPair<WriteVecIMulX, [SBPort0], 5, [1], 1, 6>; defm : SBWriteResPair<WriteVecIMulY, [SBPort0], 5, [1], 1, 7>; defm : SBWriteResPair<WritePMULLD, [SBPort0], 5, [1], 1, 6>; defm : SBWriteResPair<WritePMULLDY, [SBPort0], 5, [1], 1, 7>; // TODO this is probably wrong for 256/512-bit for the "generic" model @@ -205,6 +206,7 @@ defm : SBWriteResPair<WritePHMINPOS, [SBPort0], 5, [1], 1, 6>; defm : SBWriteResPair<WriteVecShift, [SBPort5], 1, [1], 1, 5>; defm : SBWriteResPair<WriteVecShiftX, [SBPort0,SBPort15], 2, [1,1], 2, 6>; defm : SBWriteResPair<WriteVecShiftY, [SBPort0,SBPort15], 4, [1,1], 2, 7>; +defm : SBWriteResPair<WriteVecShiftImm, [SBPort5], 1, [1], 1, 5>; defm : SBWriteResPair<WriteVecShiftImmX, [SBPort0], 1, [1], 1, 6>; defm : SBWriteResPair<WriteVecShiftImmY, [SBPort0], 1, [1], 1, 7>; defm : SBWriteResPair<WriteVarVecShift, [SBPort0], 1, [1], 1, 6>; @@ -1143,14 +1145,7 @@ def SBWriteResGroup89_2 : SchedWriteRes<[SBPort0,SBPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SBWriteResGroup89_2], (instregex "MMX_PMADDUBSWrm", - "MMX_PMADDWDirm", - "MMX_PMULHRSWrm", - "MMX_PMULHUWirm", - "MMX_PMULHWirm", - "MMX_PMULLWirm", - "MMX_PMULUDQirm", - "MMX_PSADBWirm")>; +def: InstRW<[SBWriteResGroup89_2], (instregex "MMX_PSADBWirm")>; def SBWriteResGroup90 : SchedWriteRes<[SBPort1,SBPort23]> { let Latency = 9; diff --git a/llvm/lib/Target/X86/X86SchedSkylakeClient.td b/llvm/lib/Target/X86/X86SchedSkylakeClient.td index 70d0e5f38c1..1e34b840915 100644 --- a/llvm/lib/Target/X86/X86SchedSkylakeClient.td +++ b/llvm/lib/Target/X86/X86SchedSkylakeClient.td @@ -204,7 +204,8 @@ defm : SKLWriteResPair<WriteVecALU, [SKLPort01], 1, [1], 1, 6>; // Vector inte defm : SKLWriteResPair<WriteVecALUY, [SKLPort01], 1, [1], 1, 7>; // Vector integer ALU op, no logicals (YMM/ZMM). defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor. defm : SKLWriteResPair<WriteVecLogicY,[SKLPort015], 1, [1], 1, 7>; // Vector integer and/or/xor (YMM/ZMM). -defm : SKLWriteResPair<WriteVecIMul, [SKLPort01], 4, [1], 1, 6>; // Vector integer multiply. +defm : SKLWriteResPair<WriteVecIMul, [SKLPort0] , 4, [1], 1, 5>; // Vector integer multiply. +defm : SKLWriteResPair<WriteVecIMulX, [SKLPort01], 4, [1], 1, 6>; // Vector integer multiply (XMM). defm : SKLWriteResPair<WriteVecIMulY, [SKLPort01], 4, [1], 1, 7>; // Vector integer multiply (YMM/ZMM). defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>; // Vector PMULLD. defm : SKLWriteResPair<WritePMULLDY, [SKLPort01], 10, [2], 2, 7>; // Vector PMULLD (YMM/ZMM). @@ -224,14 +225,16 @@ defm : SKLWriteResPair<WritePHMINPOS, [SKLPort01], 4, [1], 1, 6>; // Vector PHMI // Vector integer shifts. defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1, [1], 1, 5>; -defm : SKLWriteResPair<WriteVecShiftX, [SKLPort5,SKLPort01], 2, [1,1], 2, 6>; +defm : X86WriteRes<WriteVecShiftX, [SKLPort5,SKLPort01], 2, [1,1], 2>; defm : X86WriteRes<WriteVecShiftY, [SKLPort5,SKLPort01], 4, [1,1], 2>; +defm : X86WriteRes<WriteVecShiftXLd, [SKLPort01,SKLPort23], 7, [1,1], 2>; defm : X86WriteRes<WriteVecShiftYLd, [SKLPort01,SKLPort23], 8, [1,1], 2>; +defm : SKLWriteResPair<WriteVecShiftImm, [SKLPort0], 1, [1], 1, 5>; defm : SKLWriteResPair<WriteVecShiftImmX, [SKLPort01], 1, [1], 1, 6>; // Vector integer immediate shifts (XMM). defm : SKLWriteResPair<WriteVecShiftImmY, [SKLPort01], 1, [1], 1, 7>; // Vector integer immediate shifts (YMM/ZMM). -defm : SKLWriteResPair<WriteVarVecShift, [SKLPort01], 1, [1], 1, 6>; // Variable vector shifts. -defm : SKLWriteResPair<WriteVarVecShiftY, [SKLPort01], 1, [1], 1, 7>; // Variable vector shifts (YMM/ZMM). +defm : SKLWriteResPair<WriteVarVecShift, [SKLPort01], 1, [1], 1, 6>; // Variable vector shifts. +defm : SKLWriteResPair<WriteVarVecShiftY, [SKLPort01], 1, [1], 1, 7>; // Variable vector shifts (YMM/ZMM). // Vector insert/extract operations. def : WriteRes<WriteVecInsert, [SKLPort5]> { @@ -843,14 +846,7 @@ def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr", - "MMX_PMADDWDirr", - "MMX_PMULHRSWrr", - "MMX_PMULHUWirr", - "MMX_PMULHWirr", - "MMX_PMULLWirr", - "MMX_PMULUDQirr", - "MUL_FPrST0", +def: InstRW<[SKLWriteResGroup47], (instregex "MUL_FPrST0", "MUL_FST0r", "MUL_FrST0")>; @@ -1224,20 +1220,6 @@ def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr", "VCVTPS2PHYrr", "VCVTTPD2DQYrr")>; -def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> { - let Latency = 7; - let NumMicroOps = 2; - let ResourceCycles = [1,1]; -} -def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PSLLDrm", - "(V?)PSLLQrm", - "(V?)PSLLWrm", - "(V?)PSRADrm", - "(V?)PSRAWrm", - "(V?)PSRLDrm", - "(V?)PSRLQrm", - "(V?)PSRLWrm")>; - def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> { let Latency = 7; let NumMicroOps = 2; @@ -1468,13 +1450,6 @@ def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> { let ResourceCycles = [1,1]; } def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm", - "MMX_PMADDUBSWrm", - "MMX_PMADDWDirm", - "MMX_PMULHRSWrm", - "MMX_PMULHUWirm", - "MMX_PMULHWirm", - "MMX_PMULLWirm", - "MMX_PMULUDQirm", "VTESTPDYrm", "VTESTPSYrm")>; diff --git a/llvm/lib/Target/X86/X86SchedSkylakeServer.td b/llvm/lib/Target/X86/X86SchedSkylakeServer.td index 346cb3e92c4..c22c864425f 100755 --- a/llvm/lib/Target/X86/X86SchedSkylakeServer.td +++ b/llvm/lib/Target/X86/X86SchedSkylakeServer.td @@ -204,7 +204,8 @@ defm : SKXWriteResPair<WriteVecALU, [SKXPort01], 1, [1], 1, 6>; // Vector inte defm : SKXWriteResPair<WriteVecALUY, [SKXPort01], 1, [1], 1, 7>; // Vector integer ALU op, no logicals (YMM/ZMM). defm : SKXWriteResPair<WriteVecLogic, [SKXPort015], 1, [1], 1, 6>; // Vector integer and/or/xor. defm : SKXWriteResPair<WriteVecLogicY,[SKXPort015], 1, [1], 1, 7>; // Vector integer and/or/xor (YMM/ZMM). -defm : SKXWriteResPair<WriteVecIMul, [SKXPort015], 4, [1], 1, 6>; // Vector integer multiply. +defm : SKXWriteResPair<WriteVecIMul, [SKXPort0], 4, [1], 1, 5>; // Vector integer multiply. +defm : SKXWriteResPair<WriteVecIMulX, [SKXPort015], 4, [1], 1, 6>; // Vector integer multiply (XMM). defm : SKXWriteResPair<WriteVecIMulY, [SKXPort015], 4, [1], 1, 7>; // Vector integer multiply (YMM/ZMM). defm : SKXWriteResPair<WritePMULLD, [SKXPort015], 10, [2], 2, 6>; // Vector PMULLD. defm : SKXWriteResPair<WritePMULLDY, [SKXPort015], 10, [2], 2, 7>; // Vector PMULLD (YMM/ZMM). @@ -229,6 +230,7 @@ defm : X86WriteRes<WriteVecShiftY, [SKXPort5,SKXPort01], 4, [1,1], 2>; defm : X86WriteRes<WriteVecShiftXLd, [SKXPort01,SKXPort23], 7, [1,1], 2>; defm : X86WriteRes<WriteVecShiftYLd, [SKXPort01,SKXPort23], 8, [1,1], 2>; +defm : SKXWriteResPair<WriteVecShiftImm, [SKXPort0], 1, [1], 1, 5>; defm : SKXWriteResPair<WriteVecShiftImmX, [SKXPort01], 1, [1], 1, 6>; // Vector integer immediate shifts (XMM). defm : SKXWriteResPair<WriteVecShiftImmY, [SKXPort01], 1, [1], 1, 7>; // Vector integer immediate shifts (YMM/ZMM). defm : SKXWriteResPair<WriteVarVecShift, [SKXPort01], 1, [1], 1, 6>; // Variable vector shifts. @@ -1198,14 +1200,7 @@ def SKXWriteResGroup49 : SchedWriteRes<[SKXPort0]> { let NumMicroOps = 1; let ResourceCycles = [1]; } -def: InstRW<[SKXWriteResGroup49], (instregex "MMX_PMADDUBSWrr", - "MMX_PMADDWDirr", - "MMX_PMULHRSWrr", - "MMX_PMULHUWirr", - "MMX_PMULHWirr", - "MMX_PMULLWirr", - "MMX_PMULUDQirr", - "MUL_FPrST0", +def: InstRW<[SKXWriteResGroup49], (instregex "MUL_FPrST0", "MUL_FST0r", "MUL_FrST0")>; @@ -2392,13 +2387,6 @@ def SKXWriteResGroup135 : SchedWriteRes<[SKXPort0,SKXPort23]> { let ResourceCycles = [1,1]; } def: InstRW<[SKXWriteResGroup135], (instregex "MMX_CVTPI2PSirm", - "MMX_PMADDUBSWrm", - "MMX_PMADDWDirm", - "MMX_PMULHRSWrm", - "MMX_PMULHUWirm", - "MMX_PMULHWirm", - "MMX_PMULLWirm", - "MMX_PMULUDQirm", "RCPSSm", "RSQRTSSm", "VRCPSSm", diff --git a/llvm/lib/Target/X86/X86Schedule.td b/llvm/lib/Target/X86/X86Schedule.td index b2f0cb09c6e..e44aeaf0e17 100644 --- a/llvm/lib/Target/X86/X86Schedule.td +++ b/llvm/lib/Target/X86/X86Schedule.td @@ -156,9 +156,11 @@ defm WriteVecLogicY: X86SchedWritePair; // Vector integer and/or/xor logicals (Y defm WriteVecShift : X86SchedWritePair; // Vector integer shifts (default). defm WriteVecShiftX : X86SchedWritePair; // Vector integer shifts (XMM). defm WriteVecShiftY : X86SchedWritePair; // Vector integer shifts (YMM/ZMM). +defm WriteVecShiftImm : X86SchedWritePair; // Vector integer immediate shifts (default). defm WriteVecShiftImmX: X86SchedWritePair; // Vector integer immediate shifts (XMM). defm WriteVecShiftImmY: X86SchedWritePair; // Vector integer immediate shifts (YMM/ZMM). -defm WriteVecIMul : X86SchedWritePair; // Vector integer multiply. +defm WriteVecIMul : X86SchedWritePair; // Vector integer multiply (default). +defm WriteVecIMulX : X86SchedWritePair; // Vector integer multiply (XMM). defm WriteVecIMulY : X86SchedWritePair; // Vector integer multiply (YMM/ZMM). defm WritePMULLD : X86SchedWritePair; // Vector PMULLD. defm WritePMULLDY : X86SchedWritePair; // Vector PMULLD (YMM/ZMM). @@ -289,13 +291,13 @@ def SchedWriteVecShift : X86SchedWriteWidths<WriteVecShift, WriteVecShiftX, WriteVecShiftY, WriteVecShiftY>; def SchedWriteVecShiftImm - : X86SchedWriteWidths<WriteVecShift, WriteVecShiftImmX, + : X86SchedWriteWidths<WriteVecShiftImm, WriteVecShiftImmX, WriteVecShiftImmY, WriteVecShiftImmY>; def SchedWriteVarVecShift : X86SchedWriteWidths<WriteVarVecShift, WriteVarVecShift, WriteVarVecShiftY, WriteVarVecShiftY>; def SchedWriteVecIMul - : X86SchedWriteWidths<WriteVecIMul, WriteVecIMul, + : X86SchedWriteWidths<WriteVecIMul, WriteVecIMulX, WriteVecIMulY, WriteVecIMulY>; def SchedWritePMULLD : X86SchedWriteWidths<WritePMULLD, WritePMULLD, diff --git a/llvm/lib/Target/X86/X86ScheduleAtom.td b/llvm/lib/Target/X86/X86ScheduleAtom.td index b96c76ad93e..4c64657c70a 100644 --- a/llvm/lib/Target/X86/X86ScheduleAtom.td +++ b/llvm/lib/Target/X86/X86ScheduleAtom.td @@ -263,9 +263,11 @@ defm : AtomWriteResPair<WriteVecLogicY, [AtomPort01], [AtomPort0], 1, 1>; defm : AtomWriteResPair<WriteVecShift, [AtomPort01], [AtomPort01], 2, 3, [2], [3]>; defm : AtomWriteResPair<WriteVecShiftX, [AtomPort01], [AtomPort01], 2, 3, [2], [3]>; defm : AtomWriteResPair<WriteVecShiftY, [AtomPort01], [AtomPort01], 2, 3, [2], [3]>; -defm : AtomWriteResPair<WriteVecShiftImmX, [AtomPort01], [AtomPort01], 2, 3, [2], [3]>; -defm : AtomWriteResPair<WriteVecShiftImmY, [AtomPort01], [AtomPort01], 2, 3, [2], [3]>; -defm : AtomWriteResPair<WriteVecIMul, [AtomPort0], [AtomPort0], 5, 5, [5], [5]>; +defm : AtomWriteResPair<WriteVecShiftImm, [AtomPort01], [AtomPort01], 1, 1, [1], [1]>; +defm : AtomWriteResPair<WriteVecShiftImmX, [AtomPort01], [AtomPort01], 1, 1, [1], [1]>; +defm : AtomWriteResPair<WriteVecShiftImmY, [AtomPort01], [AtomPort01], 1, 1, [1], [1]>; +defm : AtomWriteResPair<WriteVecIMul, [AtomPort0], [AtomPort0], 4, 4, [4], [4]>; +defm : AtomWriteResPair<WriteVecIMulX, [AtomPort0], [AtomPort0], 5, 5, [5], [5]>; defm : AtomWriteResPair<WriteVecIMulY, [AtomPort0], [AtomPort0], 5, 5, [5], [5]>; defm : AtomWriteResPair<WritePMULLD, [AtomPort01], [AtomPort0], 1, 1>; defm : AtomWriteResPair<WritePMULLDY, [AtomPort01], [AtomPort0], 1, 1>; @@ -376,18 +378,6 @@ def : InstRW<[AtomWrite0_3], (instrs MMX_MOVD64from64rr, MMX_MOVD64grr, MOVPDI2DIrr, MOVPQIto64rr, MOVSDto64rr, MOVSS2DIrr)>; -def AtomWrite0_4 : SchedWriteRes<[AtomPort0]> { - let Latency = 4; - let ResourceCycles = [4]; -} -def : InstRW<[AtomWrite0_4], (instrs MMX_PMADDUBSWrr, MMX_PMADDUBSWrm, - MMX_PMADDWDirr, MMX_PMADDWDirm, - MMX_PMULHRSWrr, MMX_PMULHRSWrm, - MMX_PMULHUWirr, MMX_PMULHUWirm, - MMX_PMULHWirr, MMX_PMULHWirm, - MMX_PMULLWirr, MMX_PMULLWirm, - MMX_PMULUDQirr, MMX_PMULUDQirm)>; - def AtomWrite0_5 : SchedWriteRes<[AtomPort0]> { let Latency = 5; let ResourceCycles = [5]; @@ -443,8 +433,7 @@ def : InstRW<[AtomWrite01_1], (instrs FDECSTP, FFREE, FFREEP, FINCSTP, LD_F0, WA STOSB, STOSL, STOSQ, STOSW, MOVSSrr, MOVSSrr_REV, PSLLDQri, PSRLDQri)>; -def : InstRW<[AtomWrite01_1], (instregex "(MMX_)?PS(LL|RA|RL)(D|Q|W)ri", - "MMX_PACK(SSDW|SSWB|USWB)irr", +def : InstRW<[AtomWrite01_1], (instregex "MMX_PACK(SSDW|SSWB|USWB)irr", "MMX_PUNPCKH(BW|DQ|WD)irr")>; def AtomWrite01_2 : SchedWriteRes<[AtomPort01]> { diff --git a/llvm/lib/Target/X86/X86ScheduleBtVer2.td b/llvm/lib/Target/X86/X86ScheduleBtVer2.td index 3f99f4ae503..d9dccf40829 100644 --- a/llvm/lib/Target/X86/X86ScheduleBtVer2.td +++ b/llvm/lib/Target/X86/X86ScheduleBtVer2.td @@ -413,9 +413,11 @@ defm : JWriteResFpuPair<WriteVecALUY, [JFPU01, JVALU], 1>; defm : JWriteResFpuPair<WriteVecShift, [JFPU01, JVALU], 1>; defm : JWriteResFpuPair<WriteVecShiftX, [JFPU01, JVALU], 1>; defm : JWriteResFpuPair<WriteVecShiftY, [JFPU01, JVALU], 1>; +defm : JWriteResFpuPair<WriteVecShiftImm, [JFPU01, JVALU], 1>; defm : JWriteResFpuPair<WriteVecShiftImmX,[JFPU01, JVALU], 1>; defm : JWriteResFpuPair<WriteVecShiftImmY,[JFPU01, JVALU], 1>; defm : JWriteResFpuPair<WriteVecIMul, [JFPU0, JVIMUL], 2>; +defm : JWriteResFpuPair<WriteVecIMulX, [JFPU0, JVIMUL], 2>; defm : JWriteResFpuPair<WriteVecIMulY, [JFPU0, JVIMUL], 2>; defm : JWriteResFpuPair<WritePMULLD, [JFPU0, JFPU01, JVIMUL, JVALU], 4, [2, 1, 2, 1], 3>; defm : JWriteResFpuPair<WritePMULLDY, [JFPU0, JFPU01, JVIMUL, JVALU], 4, [2, 1, 2, 1], 3>; diff --git a/llvm/lib/Target/X86/X86ScheduleSLM.td b/llvm/lib/Target/X86/X86ScheduleSLM.td index 6f96191caf0..08b3f36728e 100644 --- a/llvm/lib/Target/X86/X86ScheduleSLM.td +++ b/llvm/lib/Target/X86/X86ScheduleSLM.td @@ -170,6 +170,7 @@ def : WriteRes<WriteVecMove, [SLM_FPC_RSV01]>; defm : SLMWriteResPair<WriteVecShift, [SLM_FPC_RSV0], 1>; defm : SLMWriteResPair<WriteVecShiftX, [SLM_FPC_RSV0], 1>; defm : SLMWriteResPair<WriteVecShiftY, [SLM_FPC_RSV0], 1>; +defm : SLMWriteResPair<WriteVecShiftImm, [SLM_FPC_RSV0], 1>; defm : SLMWriteResPair<WriteVecShiftImmX,[SLM_FPC_RSV0], 1>; defm : SLMWriteResPair<WriteVecShiftImmY,[SLM_FPC_RSV0], 1>; defm : SLMWriteResPair<WriteVecLogic, [SLM_FPC_RSV01], 1>; @@ -177,6 +178,7 @@ defm : SLMWriteResPair<WriteVecLogicY,[SLM_FPC_RSV01], 1>; defm : SLMWriteResPair<WriteVecALU, [SLM_FPC_RSV01], 1>; defm : SLMWriteResPair<WriteVecALUY, [SLM_FPC_RSV01], 1>; defm : SLMWriteResPair<WriteVecIMul, [SLM_FPC_RSV0], 4>; +defm : SLMWriteResPair<WriteVecIMulX, [SLM_FPC_RSV0], 4>; defm : SLMWriteResPair<WriteVecIMulY, [SLM_FPC_RSV0], 4>; // FIXME: The below is closer to correct, but caused some perf regressions. //defm : SLMWriteResPair<WritePMULLD, [SLM_FPC_RSV0], 11, [11], 7>; diff --git a/llvm/lib/Target/X86/X86ScheduleZnver1.td b/llvm/lib/Target/X86/X86ScheduleZnver1.td index 550501701ce..3e20cb2c75d 100644 --- a/llvm/lib/Target/X86/X86ScheduleZnver1.td +++ b/llvm/lib/Target/X86/X86ScheduleZnver1.td @@ -236,8 +236,9 @@ def : WriteRes<WriteVecMove, [ZnFPU]>; def : WriteRes<WriteVecLoad, [ZnAGU]> { let Latency = 8; } defm : ZnWriteResFpuPair<WriteVecShift, [ZnFPU], 1>; -defm : ZnWriteResFpuPair<WriteVecShiftX, [ZnFPU], 1>; -defm : ZnWriteResFpuPair<WriteVecShiftY, [ZnFPU], 1>; +defm : ZnWriteResFpuPair<WriteVecShiftX, [ZnFPU2], 1>; +defm : ZnWriteResFpuPair<WriteVecShiftY, [ZnFPU2], 2>; +defm : ZnWriteResFpuPair<WriteVecShiftImm, [ZnFPU], 1>; defm : ZnWriteResFpuPair<WriteVecShiftImmX, [ZnFPU], 1>; defm : ZnWriteResFpuPair<WriteVecShiftImmY, [ZnFPU], 1>; defm : ZnWriteResFpuPair<WriteVecLogic, [ZnFPU], 1>; @@ -245,6 +246,7 @@ defm : ZnWriteResFpuPair<WriteVecLogicY, [ZnFPU], 1>; defm : ZnWriteResFpuPair<WriteVecALU, [ZnFPU], 1>; defm : ZnWriteResFpuPair<WriteVecALUY, [ZnFPU], 1>; defm : ZnWriteResFpuPair<WriteVecIMul, [ZnFPU0], 4>; +defm : ZnWriteResFpuPair<WriteVecIMulX, [ZnFPU0], 4>; defm : ZnWriteResFpuPair<WriteVecIMulY, [ZnFPU0], 4>; defm : ZnWriteResFpuPair<WritePMULLD, [ZnFPU0], 4>; // FIXME defm : ZnWriteResFpuPair<WritePMULLDY, [ZnFPU0], 5, [2]>; // FIXME @@ -1087,17 +1089,6 @@ def ZnWritePShift : SchedWriteRes<[ZnFPU2]> ; def ZnWritePShiftY : SchedWriteRes<[ZnFPU2]> { let Latency = 2; } -def ZnWritePShiftLd : SchedWriteRes<[ZnAGU,ZnFPU2]> { - let Latency = 8; -} -def ZnWritePShiftYLd : SchedWriteRes<[ZnAGU, ZnFPU2]> { - let Latency = 9; -} -def : InstRW<[ZnWritePShift], (instregex "(V?)PS(LL|RL|RA)(W|D|Q)rr")>; -def : InstRW<[ZnWritePShiftY], (instregex "(V?)PS(LL|RL|RA)(W|D|Q)Yrr")>; - -def : InstRW<[ZnWritePShiftLd], (instregex "(V?)PS(LL|RL|RA)(W|D|Q)rm")>; -def : InstRW<[ZnWritePShiftYLd], (instregex "(V?)PS(LL|RL|RA)(W|D|Q)Yrm")>; // PSLL,PSRL DQ. def : InstRW<[ZnWritePShift], (instregex "(V?)PS(R|L)LDQri")>; |

