]> granicus.if.org Git - llvm/commitdiff
[X86][BtVer2] X86ISD::VPERMILPV has local forwarding disabled
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Tue, 22 Jan 2019 13:13:57 +0000 (13:13 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Tue, 22 Jan 2019 13:13:57 +0000 (13:13 +0000)
Similar to horizontal ops on D56777, the vpermilpd/vpermilps variable mask ops has local forwarding disabled, adding +1cy to the use latency for the result.

Differential Revision: https://reviews.llvm.org/D57022

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351815 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ScheduleBtVer2.td
test/CodeGen/X86/avx-schedule.ll
test/tools/llvm-mca/X86/BtVer2/resources-avx1.s

index e81f8445b3ec238e5c8e8b01b8055ce85e3f26eb..cc997522db980e31b0ad68db27150ba5d305dbf3 100644 (file)
@@ -400,8 +400,8 @@ defm : X86WriteResPairUnsupported<WriteFTestZ>;
 defm : JWriteResFpuPair<WriteFShuffle,    [JFPU01, JFPX],  1>;
 defm : JWriteResYMMPair<WriteFShuffleY,   [JFPU01, JFPX],  1, [2, 2], 2>;
 defm : X86WriteResPairUnsupported<WriteFShuffleZ>;
-defm : JWriteResFpuPair<WriteFVarShuffle, [JFPU01, JFPX],  2, [1, 4], 3>;
-defm : JWriteResYMMPair<WriteFVarShuffleY,[JFPU01, JFPX],  3, [2, 6], 6>;
+defm : JWriteResFpuPair<WriteFVarShuffle, [JFPU01, JFPX],  3, [1, 4], 3>; // +1cy latency.
+defm : JWriteResYMMPair<WriteFVarShuffleY,[JFPU01, JFPX],  4, [2, 6], 6>; // +1cy latency.
 defm : X86WriteResPairUnsupported<WriteFVarShuffleZ>;
 defm : JWriteResFpuPair<WriteFBlend,      [JFPU01, JFPX],  1>;
 defm : JWriteResYMMPair<WriteFBlendY,     [JFPU01, JFPX],  1, [2, 2], 2>;
index 6818ea06732ef775f3d8d2baa6867d55fe013d39..caf4c979e2ecda7bb9d2ad2e9f91b41a48c465b5 100644 (file)
@@ -4258,8 +4258,8 @@ define <2 x double> @test_permilvarpd(<2 x double> %a0, <2 x i64> %a1, <2 x i64>
 ;
 ; BTVER2-LABEL: test_permilvarpd:
 ; BTVER2:       # %bb.0:
-; BTVER2-NEXT:    vpermilpd %xmm1, %xmm0, %xmm0 # sched: [2:2.00]
-; BTVER2-NEXT:    vpermilpd (%rdi), %xmm0, %xmm0 # sched: [7:2.00]
+; BTVER2-NEXT:    vpermilpd %xmm1, %xmm0, %xmm0 # sched: [3:2.00]
+; BTVER2-NEXT:    vpermilpd (%rdi), %xmm0, %xmm0 # sched: [8:2.00]
 ; BTVER2-NEXT:    retq # sched: [4:1.00]
 ;
 ; ZNVER1-LABEL: test_permilvarpd:
@@ -4319,8 +4319,8 @@ define <4 x double> @test_permilvarpd_ymm(<4 x double> %a0, <4 x i64> %a1, <4 x
 ;
 ; BTVER2-LABEL: test_permilvarpd_ymm:
 ; BTVER2:       # %bb.0:
-; BTVER2-NEXT:    vpermilpd %ymm1, %ymm0, %ymm0 # sched: [3:3.00]
-; BTVER2-NEXT:    vpermilpd (%rdi), %ymm0, %ymm0 # sched: [8:3.00]
+; BTVER2-NEXT:    vpermilpd %ymm1, %ymm0, %ymm0 # sched: [4:3.00]
+; BTVER2-NEXT:    vpermilpd (%rdi), %ymm0, %ymm0 # sched: [9:3.00]
 ; BTVER2-NEXT:    retq # sched: [4:1.00]
 ;
 ; ZNVER1-LABEL: test_permilvarpd_ymm:
@@ -4380,8 +4380,8 @@ define <4 x float> @test_permilvarps(<4 x float> %a0, <4 x i32> %a1, <4 x i32> *
 ;
 ; BTVER2-LABEL: test_permilvarps:
 ; BTVER2:       # %bb.0:
-; BTVER2-NEXT:    vpermilps %xmm1, %xmm0, %xmm0 # sched: [2:2.00]
-; BTVER2-NEXT:    vpermilps (%rdi), %xmm0, %xmm0 # sched: [7:2.00]
+; BTVER2-NEXT:    vpermilps %xmm1, %xmm0, %xmm0 # sched: [3:2.00]
+; BTVER2-NEXT:    vpermilps (%rdi), %xmm0, %xmm0 # sched: [8:2.00]
 ; BTVER2-NEXT:    retq # sched: [4:1.00]
 ;
 ; ZNVER1-LABEL: test_permilvarps:
@@ -4441,8 +4441,8 @@ define <8 x float> @test_permilvarps_ymm(<8 x float> %a0, <8 x i32> %a1, <8 x i3
 ;
 ; BTVER2-LABEL: test_permilvarps_ymm:
 ; BTVER2:       # %bb.0:
-; BTVER2-NEXT:    vpermilps %ymm1, %ymm0, %ymm0 # sched: [3:3.00]
-; BTVER2-NEXT:    vpermilps (%rdi), %ymm0, %ymm0 # sched: [8:3.00]
+; BTVER2-NEXT:    vpermilps %ymm1, %ymm0, %ymm0 # sched: [4:3.00]
+; BTVER2-NEXT:    vpermilps (%rdi), %ymm0, %ymm0 # sched: [9:3.00]
 ; BTVER2-NEXT:    retq # sched: [4:1.00]
 ;
 ; ZNVER1-LABEL: test_permilvarps_ymm:
index 36507b37aebcfcdbdc957ccb6bff25c832e1f2f8..e893dd815697c4dcc9f2103e237fb060ef062b8f 100644 (file)
@@ -1433,20 +1433,20 @@ vzeroupper
 # CHECK-NEXT:  2      6     1.00    *                   vperm2f128     $1, (%rax), %ymm1, %ymm2
 # CHECK-NEXT:  1      1     0.50                        vpermilpd      $1, %xmm0, %xmm2
 # CHECK-NEXT:  1      6     1.00    *                   vpermilpd      $1, (%rax), %xmm2
-# CHECK-NEXT:  3      2     2.00                        vpermilpd      %xmm0, %xmm1, %xmm2
-# CHECK-NEXT:  3      7     2.00    *                   vpermilpd      (%rax), %xmm1, %xmm2
+# CHECK-NEXT:  3      3     2.00                        vpermilpd      %xmm0, %xmm1, %xmm2
+# CHECK-NEXT:  3      8     2.00    *                   vpermilpd      (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  2      1     1.00                        vpermilpd      $1, %ymm0, %ymm2
 # CHECK-NEXT:  2      6     2.00    *                   vpermilpd      $1, (%rax), %ymm2
-# CHECK-NEXT:  6      3     3.00                        vpermilpd      %ymm0, %ymm1, %ymm2
-# CHECK-NEXT:  6      8     3.00    *                   vpermilpd      (%rax), %ymm1, %ymm2
+# CHECK-NEXT:  6      4     3.00                        vpermilpd      %ymm0, %ymm1, %ymm2
+# CHECK-NEXT:  6      9     3.00    *                   vpermilpd      (%rax), %ymm1, %ymm2
 # CHECK-NEXT:  1      1     0.50                        vpermilps      $1, %xmm0, %xmm2
 # CHECK-NEXT:  1      6     1.00    *                   vpermilps      $1, (%rax), %xmm2
-# CHECK-NEXT:  3      2     2.00                        vpermilps      %xmm0, %xmm1, %xmm2
-# CHECK-NEXT:  3      7     2.00    *                   vpermilps      (%rax), %xmm1, %xmm2
+# CHECK-NEXT:  3      3     2.00                        vpermilps      %xmm0, %xmm1, %xmm2
+# CHECK-NEXT:  3      8     2.00    *                   vpermilps      (%rax), %xmm1, %xmm2
 # CHECK-NEXT:  2      1     1.00                        vpermilps      $1, %ymm0, %ymm2
 # CHECK-NEXT:  2      6     2.00    *                   vpermilps      $1, (%rax), %ymm2
-# CHECK-NEXT:  6      3     3.00                        vpermilps      %ymm0, %ymm1, %ymm2
-# CHECK-NEXT:  6      8     3.00    *                   vpermilps      (%rax), %ymm1, %ymm2
+# CHECK-NEXT:  6      4     3.00                        vpermilps      %ymm0, %ymm1, %ymm2
+# CHECK-NEXT:  6      9     3.00    *                   vpermilps      (%rax), %ymm1, %ymm2
 # CHECK-NEXT:  1      3     1.00                        vpextrb        $1, %xmm0, %ecx
 # CHECK-NEXT:  1      3     1.00           *            vpextrb        $1, %xmm0, (%rax)
 # CHECK-NEXT:  1      3     1.00                        vpextrd        $1, %xmm0, %ecx