[X86][Btver2] Cleanup SSE42 PCMPISTR/PCMPESTR string instructions to correctly use...
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Fri, 23 Mar 2018 14:27:26 +0000 (14:27 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Fri, 23 Mar 2018 14:27:26 +0000 (14:27 +0000)
Fixes throughput to match Agner/Fam16h-SoG as well.

llvm-svn: 328318

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

index f4289803c889b22276e7da78dc397f26145d437b..47a4d67d39de609a7d6c188db78fb649c1714bf2 100644 (file)
@@ -343,13 +343,13 @@ defm : JWriteResFpuPair<WriteVarVecShift, [JFPU01, JVALU], 1>; // NOTE: Doesn't
 
 ////////////////////////////////////////////////////////////////////////////////
 // SSE42 String instructions.
-// FIXME: approximate latencies + pipe dependencies
+// FIXME: Latency+i
 ////////////////////////////////////////////////////////////////////////////////
 
-defm : JWriteResFpuPair<WritePCmpIStrI, [JFPU1, JFPU0], 7, [2, 2], 3>;
-defm : JWriteResFpuPair<WritePCmpIStrM, [JFPU1, JFPU0], 8, [2, 2], 3>;
-defm : JWriteResFpuPair<WritePCmpEStrI, [JFPU1, JLAGU, JFPU01, JFPU1, JFPU0], 14, [5, 5, 5, 5, 5], 9>;
-defm : JWriteResFpuPair<WritePCmpEStrM, [JFPU1, JLAGU, JFPU01, JFPU1, JFPU0], 14, [5, 5, 5, 5, 5], 9>;
+defm : JWriteResFpuPair<WritePCmpIStrI, [JFPU1, JVALU1, JFPA], 7, [1, 2, 1], 3>;
+defm : JWriteResFpuPair<WritePCmpIStrM, [JFPU1, JVALU1, JFPA], 8, [1, 2, 1], 3>;
+defm : JWriteResFpuPair<WritePCmpEStrI, [JFPU1, JSAGU, JLAGU, JVALU, JVALU1, JFPA], 14, [1, 2, 2, 6, 4, 1], 9>;
+defm : JWriteResFpuPair<WritePCmpEStrM, [JFPU1, JSAGU, JLAGU, JVALU, JVALU1, JFPA], 14, [1, 2, 2, 6, 4, 1], 9>;
 
 ////////////////////////////////////////////////////////////////////////////////
 // AES Instructions.
index bbf8acc123c46aa23b5591a7412190a6d4b0ebf5..b728bbfd68ada9a4c6683867e2ba868f867826fc 100644 (file)
@@ -456,11 +456,11 @@ define i32 @test_pcmpestri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
 ; BTVER2:       # %bb.0:
 ; BTVER2-NEXT:    movl $7, %eax # sched: [1:0.50]
 ; BTVER2-NEXT:    movl $7, %edx # sched: [1:0.50]
-; BTVER2-NEXT:    vpcmpestri $7, %xmm1, %xmm0 # sched: [14:10.00]
+; BTVER2-NEXT:    vpcmpestri $7, %xmm1, %xmm0 # sched: [14:5.00]
 ; BTVER2-NEXT:    movl $7, %eax # sched: [1:0.50]
 ; BTVER2-NEXT:    movl $7, %edx # sched: [1:0.50]
 ; BTVER2-NEXT:    movl %ecx, %esi # sched: [1:0.50]
-; BTVER2-NEXT:    vpcmpestri $7, (%rdi), %xmm0 # sched: [19:10.00]
+; BTVER2-NEXT:    vpcmpestri $7, (%rdi), %xmm0 # sched: [19:5.00]
 ; BTVER2-NEXT:    # kill: def $ecx killed $ecx def $rcx
 ; BTVER2-NEXT:    leal (%rcx,%rsi), %eax # sched: [1:0.50]
 ; BTVER2-NEXT:    retq # sched: [4:1.00]
@@ -560,10 +560,10 @@ define <16 x i8> @test_pcmpestrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
 ; BTVER2:       # %bb.0:
 ; BTVER2-NEXT:    movl $7, %eax # sched: [1:0.50]
 ; BTVER2-NEXT:    movl $7, %edx # sched: [1:0.50]
-; BTVER2-NEXT:    vpcmpestrm $7, %xmm1, %xmm0 # sched: [14:10.00]
+; BTVER2-NEXT:    vpcmpestrm $7, %xmm1, %xmm0 # sched: [14:5.00]
 ; BTVER2-NEXT:    movl $7, %eax # sched: [1:0.50]
 ; BTVER2-NEXT:    movl $7, %edx # sched: [1:0.50]
-; BTVER2-NEXT:    vpcmpestrm $7, (%rdi), %xmm0 # sched: [19:10.00]
+; BTVER2-NEXT:    vpcmpestrm $7, (%rdi), %xmm0 # sched: [19:5.00]
 ; BTVER2-NEXT:    retq # sched: [4:1.00]
 ;
 ; ZNVER1-LABEL: test_pcmpestrm:
index 153377c32150825719bc4074b6151a8895c91bec..15188d3ad3cc50739b120503f29c030a56b23f2b 100644 (file)
@@ -58,13 +58,13 @@ pcmpgtq     (%rax), %xmm2
 # CHECK-NEXT: 4.00    -      -      -      -      -      -     1.00    -      -      -      -      -      -            crc32b  (%rax), %rcx
 # CHECK-NEXT:  -     4.00    -      -      -      -      -      -      -      -      -      -      -      -            crc32q  %rax, %rcx
 # CHECK-NEXT: 4.00    -      -      -      -      -      -     1.00    -      -      -      -      -      -            crc32q  (%rax), %rcx
-# CHECK-NEXT:  -      -      -      -      -     5.00   10.00  5.00    -      -      -      -      -      -            pcmpestri       $1, %xmm0, %xmm2
-# CHECK-NEXT:  -      -      -      -      -     5.00   10.00  6.00    -      -      -      -      -      -            pcmpestri       $1, (%rax), %xmm2
-# CHECK-NEXT:  -      -      -      -      -     5.00   10.00  5.00    -      -      -      -      -      -            pcmpestrm       $1, %xmm0, %xmm2
-# CHECK-NEXT:  -      -      -      -      -     5.00   10.00  6.00    -      -      -      -      -      -            pcmpestrm       $1, (%rax), %xmm2
-# CHECK-NEXT:  -      -      -      -      -     2.00   2.00    -      -      -      -      -      -      -            pcmpistri       $1, %xmm0, %xmm2
-# CHECK-NEXT:  -      -      -      -      -     2.00   2.00   1.00    -      -      -      -      -      -            pcmpistri       $1, (%rax), %xmm2
-# CHECK-NEXT:  -      -      -      -      -     2.00   2.00    -      -      -      -      -      -      -            pcmpistrm       $1, %xmm0, %xmm2
-# CHECK-NEXT:  -      -      -      -      -     2.00   2.00   1.00    -      -      -      -      -      -            pcmpistrm       $1, (%rax), %xmm2
-# CHECK-NEXT:  -      -      -      -      -      -     1.00    -      -      -      -      -     1.00    -            pcmpgtq %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     1.00   2.00    -     2.00    -     6.00   4.00    -            pcmpestri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     1.00   3.00    -     2.00    -     6.00   4.00    -            pcmpestri       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     1.00   2.00    -     2.00    -     6.00   4.00    -            pcmpestrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     1.00   3.00    -     2.00    -     6.00   4.00    -            pcmpestrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     1.00    -      -      -      -      -     2.00    -            pcmpistri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     1.00   1.00    -      -      -      -     2.00    -            pcmpistri       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     1.00    -      -      -      -      -     2.00    -            pcmpistrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     1.00   1.00    -      -      -      -     2.00    -            pcmpistrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      -      -      -     1.00    -      -            pcmpgtq %xmm0, %xmm2
 # CHECK-NEXT:  -      -      -      -      -     1.00    -     1.00    -      -      -     1.00    -      -            pcmpgtq (%rax), %xmm2