From: Simon Pilgrim Date: Fri, 11 Nov 2022 17:39:14 +0000 (+0000) Subject: [X86] Split int2double and float2double scheduler classes on Haswell/Broadwell to... X-Git-Tag: upstream/17.0.6~27921 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=192b715677ebbfcde78342e5e1f8f834001f7b80;p=platform%2Fupstream%2Fllvm.git [X86] Split int2double and float2double scheduler classes on Haswell/Broadwell to remove overrides Haswell/Broadwell have numerous conversion instructions that use different scheduler pipes for the reg-reg and reg-mem variants (and not an additional Port23 uop for memory folding) - so declare the classes separately instead of using the HWWriteResPair/BWWriteResPair helpers --- diff --git a/llvm/lib/Target/X86/X86SchedBroadwell.td b/llvm/lib/Target/X86/X86SchedBroadwell.td index 0040d0e4f2dc..9ffc4d1ea540 100644 --- a/llvm/lib/Target/X86/X86SchedBroadwell.td +++ b/llvm/lib/Target/X86/X86SchedBroadwell.td @@ -366,17 +366,21 @@ defm : BWWriteResPair; defm : BWWriteResPair; defm : X86WriteResPairUnsupported; -defm : BWWriteResPair; +defm : X86WriteRes; +defm : X86WriteRes; defm : BWWriteResPair; defm : BWWriteResPair; defm : X86WriteResPairUnsupported; -defm : BWWriteResPair; +defm : X86WriteRes; +defm : X86WriteRes; defm : BWWriteResPair; defm : BWWriteResPair; defm : X86WriteResPairUnsupported; -defm : BWWriteResPair; -defm : BWWriteResPair; +defm : X86WriteRes; +defm : X86WriteRes; +defm : X86WriteRes; +defm : X86WriteRes; defm : BWWriteResPair; defm : X86WriteResPairUnsupported; defm : BWWriteResPair; @@ -851,10 +855,7 @@ def BWWriteResGroup42 : SchedWriteRes<[BWPort1,BWPort5]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVT(T?)PS2PIrr", - "(V?)CVTSI642SDrr", - "(V?)CVTSI2SDrr", - "(V?)CVTSI2SSrr")>; +def: InstRW<[BWWriteResGroup42], (instregex "MMX_CVT(T?)PS2PIrr")>; def BWWriteResGroup43 : SchedWriteRes<[BWPort0,BWPort4,BWPort237]> { let Latency = 4; @@ -960,11 +961,7 @@ def BWWriteResGroup59 : SchedWriteRes<[BWPort0,BWPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[BWWriteResGroup59], (instrs CVTPS2PDrm, VCVTPS2PDrm, - CVTSS2SDrm, VCVTSS2SDrm, - CVTSS2SDrm_Int, VCVTSS2SDrm_Int, - VPSLLVQrm, - VPSRLVQrm)>; +def: InstRW<[BWWriteResGroup59], (instrs VPSLLVQrm, VPSRLVQrm)>; def BWWriteResGroup62 : SchedWriteRes<[BWPort6,BWPort23]> { let Latency = 6; diff --git a/llvm/lib/Target/X86/X86SchedHaswell.td b/llvm/lib/Target/X86/X86SchedHaswell.td index c0c38263b82b..5f47a7d9e26e 100644 --- a/llvm/lib/Target/X86/X86SchedHaswell.td +++ b/llvm/lib/Target/X86/X86SchedHaswell.td @@ -364,17 +364,21 @@ defm : HWWriteResPair; defm : HWWriteResPair; defm : HWWriteResPair; // Unsupported = 1 -defm : HWWriteResPair; +defm : X86WriteRes; +defm : X86WriteRes; defm : HWWriteResPair; defm : HWWriteResPair; defm : HWWriteResPair; // Unsupported = 1 -defm : HWWriteResPair; +defm : X86WriteRes; +defm : X86WriteRes; defm : HWWriteResPair; defm : HWWriteResPair; defm : HWWriteResPair; // Unsupported = 1 -defm : HWWriteResPair; -defm : HWWriteResPair; +defm : X86WriteRes; +defm : X86WriteRes; +defm : X86WriteRes; +defm : X86WriteRes; defm : HWWriteResPair; defm : HWWriteResPair; // Unsupported = 1 defm : HWWriteResPair; @@ -961,20 +965,12 @@ def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE, STRm, SYSCALL)>; -def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> { - let Latency = 6; - let NumMicroOps = 2; - let ResourceCycles = [1,1]; -} -def: InstRW<[HWWriteResGroup11], (instregex "(V?)CVTPS2PDrm")>; - def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> { let Latency = 7; let NumMicroOps = 2; let ResourceCycles = [1,1]; } def: InstRW<[HWWriteResGroup11_1], (instrs VPSLLVQrm, VPSRLVQrm)>; -def: InstRW<[HWWriteResGroup11_1], (instregex "(V?)CVTSS2SDrm")>; def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> { let Latency = 8; @@ -1346,8 +1342,6 @@ def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> { } def: InstRW<[HWWriteResGroup73], (instrs MMX_CVTPS2PIrr, MMX_CVTTPS2PIrr)>; -def: InstRW<[HWWriteResGroup73], (instregex "(V?)CVTSI(64)?2SDrr", - "(V?)CVTSI2SSrr")>; def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> { let Latency = 11;