diff --git a/llvm/lib/Target/X86/X86ScheduleBdVer2.td b/llvm/lib/Target/X86/X86ScheduleBdVer2.td --- a/llvm/lib/Target/X86/X86ScheduleBdVer2.td +++ b/llvm/lib/Target/X86/X86ScheduleBdVer2.td @@ -1173,17 +1173,23 @@ defm : PdWriteResYMMPair; defm : X86WriteResPairUnsupported; -defm : PdWriteResXMMPair; -defm : PdWriteResXMMPair; +defm : PdWriteResXMMPair; +defm : PdWriteResXMMPair; defm : X86WriteResPairUnsupported; defm : X86WriteResPairUnsupported; -def PdWriteVPPERM : SchedWriteRes<[PdFPU01, PdFPMAL]> { +def PdWriteVPPERM : SchedWriteRes<[PdFPU1, PdFPXBR]> { let Latency = 2; - let ResourceCycles = [1, 3]; + let ResourceCycles = [1, 1]; } def : InstRW<[PdWriteVPPERM], (instrs VPPERMrrr, VPPERMrrr_REV)>; +def PdWriteVPPERMLd : SchedWriteRes<[PdFPU1, PdFPXBR, PdLoad]> { + let Latency = 7; + let ResourceCycles = [1, 1, 3]; +} +def : InstRW<[PdWriteVPPERMLd], (instrs VPPERMrrm, VPPERMrmr)>; + defm : PdWriteResXMMPair; defm : X86WriteResPairUnsupported; defm : X86WriteResPairUnsupported; diff --git a/llvm/test/tools/llvm-mca/X86/BdVer2/resources-avx1.s b/llvm/test/tools/llvm-mca/X86/BdVer2/resources-avx1.s --- a/llvm/test/tools/llvm-mca/X86/BdVer2/resources-avx1.s +++ b/llvm/test/tools/llvm-mca/X86/BdVer2/resources-avx1.s @@ -1548,7 +1548,7 @@ # CHECK-NEXT: 1 7 1.50 * vpor (%rax), %xmm1, %xmm2 # CHECK-NEXT: 2 4 1.00 vpsadbw %xmm0, %xmm1, %xmm2 # CHECK-NEXT: 2 9 1.50 * vpsadbw (%rax), %xmm1, %xmm2 -# CHECK-NEXT: 1 3 1.50 vpshufb %xmm0, %xmm1, %xmm2 +# CHECK-NEXT: 1 3 1.00 vpshufb %xmm0, %xmm1, %xmm2 # CHECK-NEXT: 1 8 1.50 * vpshufb (%rax), %xmm1, %xmm2 # CHECK-NEXT: 1 2 1.00 vpshufd $1, %xmm0, %xmm2 # CHECK-NEXT: 1 7 1.50 * vpshufd $1, (%rax), %xmm2 @@ -1749,7 +1749,7 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0.0] [0.1] [1] [2] [3] [4] [5] [6] [7.0] [7.1] [8.0] [8.1] [9] [10] [11] [12] [13] [14] [15] [16.0] [16.1] [17] [18] -# CHECK-NEXT: 545.50 545.50 - - - 56.00 - 80.00 1126.50 1126.50 267.00 267.00 54.00 110.00 436.50 342.50 76.50 76.50 - 495.50 495.50 - 100.00 +# CHECK-NEXT: 545.50 545.50 - - - 56.00 - 80.00 1126.50 1126.50 264.00 264.00 54.00 110.00 435.50 343.50 76.50 76.50 2.00 495.50 495.50 - 100.00 # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0.0] [0.1] [1] [2] [3] [4] [5] [6] [7.0] [7.1] [8.0] [8.1] [9] [10] [11] [12] [13] [14] [15] [16.0] [16.1] [17] [18] Instructions: @@ -2271,8 +2271,8 @@ # CHECK-NEXT: 1.50 1.50 - - - - - - - - 1.00 1.00 - - 0.50 0.50 - - - 1.50 1.50 - - vpor (%rax), %xmm1, %xmm2 # CHECK-NEXT: - - - - - - - - - - 1.00 1.00 - - 0.50 0.50 - - - - - - - vpsadbw %xmm0, %xmm1, %xmm2 # CHECK-NEXT: 1.50 1.50 - - - - - - - - 1.00 1.00 - - 0.50 0.50 - - - 1.50 1.50 - - vpsadbw (%rax), %xmm1, %xmm2 -# CHECK-NEXT: - - - - - - - - - - 1.50 1.50 - - 0.50 0.50 - - - - - - - vpshufb %xmm0, %xmm1, %xmm2 -# CHECK-NEXT: 1.50 1.50 - - - - - - - - 1.50 1.50 - - 0.50 0.50 - - - 1.50 1.50 - - vpshufb (%rax), %xmm1, %xmm2 +# CHECK-NEXT: - - - - - - - - - - - - - - - 1.00 - - 1.00 - - - - vpshufb %xmm0, %xmm1, %xmm2 +# CHECK-NEXT: 1.50 1.50 - - - - - - - - - - - - - 1.00 - - 1.00 1.50 1.50 - - vpshufb (%rax), %xmm1, %xmm2 # CHECK-NEXT: - - - - - - - - - - 1.00 1.00 - - 0.50 0.50 - - - - - - - vpshufd $1, %xmm0, %xmm2 # CHECK-NEXT: 1.50 1.50 - - - - - - - - 1.00 1.00 - - 0.50 0.50 - - - 1.50 1.50 - - vpshufd $1, (%rax), %xmm2 # CHECK-NEXT: - - - - - - - - - - 1.00 1.00 - - 0.50 0.50 - - - - - - - vpshufhw $1, %xmm0, %xmm2 diff --git a/llvm/test/tools/llvm-mca/X86/BdVer2/resources-ssse3.s b/llvm/test/tools/llvm-mca/X86/BdVer2/resources-ssse3.s --- a/llvm/test/tools/llvm-mca/X86/BdVer2/resources-ssse3.s +++ b/llvm/test/tools/llvm-mca/X86/BdVer2/resources-ssse3.s @@ -156,7 +156,7 @@ # CHECK-NEXT: 1 9 1.50 * pmulhrsw (%rax), %xmm2 # CHECK-NEXT: 1 3 1.00 pshufb %mm0, %mm2 # CHECK-NEXT: 1 8 1.50 * pshufb (%rax), %mm2 -# CHECK-NEXT: 1 3 1.50 pshufb %xmm0, %xmm2 +# CHECK-NEXT: 1 3 1.00 pshufb %xmm0, %xmm2 # CHECK-NEXT: 1 8 1.50 * pshufb (%rax), %xmm2 # CHECK-NEXT: 1 2 0.50 psignb %mm0, %mm2 # CHECK-NEXT: 1 7 1.50 * psignb (%rax), %mm2 @@ -198,7 +198,7 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0.0] [0.1] [1] [2] [3] [4] [5] [6] [7.0] [7.1] [8.0] [8.1] [9] [10] [11] [12] [13] [14] [15] [16.0] [16.1] [17] [18] -# CHECK-NEXT: 48.00 48.00 - - - - - - - - 75.00 75.00 8.00 - 36.00 28.00 - - - 48.00 48.00 - - +# CHECK-NEXT: 48.00 48.00 - - - - - - - - 70.00 70.00 8.00 - 34.00 30.00 - - 4.00 48.00 48.00 - - # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0.0] [0.1] [1] [2] [3] [4] [5] [6] [7.0] [7.1] [8.0] [8.1] [9] [10] [11] [12] [13] [14] [15] [16.0] [16.1] [17] [18] Instructions: @@ -250,10 +250,10 @@ # CHECK-NEXT: 1.50 1.50 - - - - - - - - - - 1.00 - 1.00 - - - - 1.50 1.50 - - pmulhrsw (%rax), %mm2 # CHECK-NEXT: - - - - - - - - - - - - 1.00 - 1.00 - - - - - - - - pmulhrsw %xmm0, %xmm2 # CHECK-NEXT: 1.50 1.50 - - - - - - - - - - 1.00 - 1.00 - - - - 1.50 1.50 - - pmulhrsw (%rax), %xmm2 -# CHECK-NEXT: - - - - - - - - - - 1.00 1.00 - - 0.50 0.50 - - - - - - - pshufb %mm0, %mm2 -# CHECK-NEXT: 1.50 1.50 - - - - - - - - 1.00 1.00 - - 0.50 0.50 - - - 1.50 1.50 - - pshufb (%rax), %mm2 -# CHECK-NEXT: - - - - - - - - - - 1.50 1.50 - - 0.50 0.50 - - - - - - - pshufb %xmm0, %xmm2 -# CHECK-NEXT: 1.50 1.50 - - - - - - - - 1.50 1.50 - - 0.50 0.50 - - - 1.50 1.50 - - pshufb (%rax), %xmm2 +# CHECK-NEXT: - - - - - - - - - - - - - - - 1.00 - - 1.00 - - - - pshufb %mm0, %mm2 +# CHECK-NEXT: 1.50 1.50 - - - - - - - - - - - - - 1.00 - - 1.00 1.50 1.50 - - pshufb (%rax), %mm2 +# CHECK-NEXT: - - - - - - - - - - - - - - - 1.00 - - 1.00 - - - - pshufb %xmm0, %xmm2 +# CHECK-NEXT: 1.50 1.50 - - - - - - - - - - - - - 1.00 - - 1.00 1.50 1.50 - - pshufb (%rax), %xmm2 # CHECK-NEXT: - - - - - - - - - - 0.50 0.50 - - 0.50 0.50 - - - - - - - psignb %mm0, %mm2 # CHECK-NEXT: 1.50 1.50 - - - - - - - - 0.50 0.50 - - 0.50 0.50 - - - 1.50 1.50 - - psignb (%rax), %mm2 # CHECK-NEXT: - - - - - - - - - - 1.00 1.00 - - 0.50 0.50 - - - - - - - psignb %xmm0, %xmm2 diff --git a/llvm/test/tools/llvm-mca/X86/BdVer2/resources-xop.s b/llvm/test/tools/llvm-mca/X86/BdVer2/resources-xop.s --- a/llvm/test/tools/llvm-mca/X86/BdVer2/resources-xop.s +++ b/llvm/test/tools/llvm-mca/X86/BdVer2/resources-xop.s @@ -321,9 +321,9 @@ # CHECK-NEXT: 1 9 1.50 * vpmadcsswd %xmm0, (%rax), %xmm1, %xmm3 # CHECK-NEXT: 1 4 1.00 vpmadcswd %xmm0, %xmm1, %xmm2, %xmm3 # CHECK-NEXT: 1 9 1.50 * vpmadcswd %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: 1 2 1.50 vpperm %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 1 8 1.50 * vpperm (%rax), %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 1 8 1.50 * vpperm %xmm0, (%rax), %xmm1, %xmm3 +# CHECK-NEXT: 1 2 1.00 vpperm %xmm0, %xmm1, %xmm2, %xmm3 +# CHECK-NEXT: 1 7 1.50 * vpperm (%rax), %xmm0, %xmm1, %xmm3 +# CHECK-NEXT: 1 7 1.50 * vpperm %xmm0, (%rax), %xmm1, %xmm3 # CHECK-NEXT: 1 3 1.00 vprotb %xmm0, %xmm1, %xmm3 # CHECK-NEXT: 1 8 1.50 * vprotb (%rax), %xmm0, %xmm3 # CHECK-NEXT: 1 8 1.50 * vprotb %xmm0, (%rax), %xmm3 @@ -396,7 +396,7 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0.0] [0.1] [1] [2] [3] [4] [5] [6] [7.0] [7.1] [8.0] [8.1] [9] [10] [11] [12] [13] [14] [15] [16.0] [16.1] [17] [18] -# CHECK-NEXT: 115.50 115.50 - - - - - - 18.00 18.00 109.50 109.50 32.00 12.00 94.50 108.50 - - - 115.50 115.50 - - +# CHECK-NEXT: 115.50 115.50 - - - - - - 18.00 18.00 105.00 105.00 32.00 12.00 93.00 110.00 - - 3.00 115.50 115.50 - - # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0.0] [0.1] [1] [2] [3] [4] [5] [6] [7.0] [7.1] [8.0] [8.1] [9] [10] [11] [12] [13] [14] [15] [16.0] [16.1] [17] [18] Instructions: @@ -500,9 +500,9 @@ # CHECK-NEXT: 1.50 1.50 - - - - - - - - - - 1.00 - 1.00 - - - - 1.50 1.50 - - vpmadcsswd %xmm0, (%rax), %xmm1, %xmm3 # CHECK-NEXT: - - - - - - - - - - - - 1.00 - 1.00 - - - - - - - - vpmadcswd %xmm0, %xmm1, %xmm2, %xmm3 # CHECK-NEXT: 1.50 1.50 - - - - - - - - - - 1.00 - 1.00 - - - - 1.50 1.50 - - vpmadcswd %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: - - - - - - - - - - 1.50 1.50 - - 0.50 0.50 - - - - - - - vpperm %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 1.50 1.50 - - - - - - - - 1.50 1.50 - - 0.50 0.50 - - - 1.50 1.50 - - vpperm (%rax), %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 1.50 1.50 - - - - - - - - 1.50 1.50 - - 0.50 0.50 - - - 1.50 1.50 - - vpperm %xmm0, (%rax), %xmm1, %xmm3 +# CHECK-NEXT: - - - - - - - - - - - - - - - 1.00 - - 1.00 - - - - vpperm %xmm0, %xmm1, %xmm2, %xmm3 +# CHECK-NEXT: 1.50 1.50 - - - - - - - - - - - - - 1.00 - - 1.00 1.50 1.50 - - vpperm (%rax), %xmm0, %xmm1, %xmm3 +# CHECK-NEXT: 1.50 1.50 - - - - - - - - - - - - - 1.00 - - 1.00 1.50 1.50 - - vpperm %xmm0, (%rax), %xmm1, %xmm3 # CHECK-NEXT: - - - - - - - - - - 1.00 1.00 - - 0.50 0.50 - - - - - - - vprotb %xmm0, %xmm1, %xmm3 # CHECK-NEXT: 1.50 1.50 - - - - - - - - 1.00 1.00 - - 0.50 0.50 - - - 1.50 1.50 - - vprotb (%rax), %xmm0, %xmm3 # CHECK-NEXT: 1.50 1.50 - - - - - - - - 1.00 1.00 - - 0.50 0.50 - - - 1.50 1.50 - - vprotb %xmm0, (%rax), %xmm3