diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-03-23 14:27:26 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-03-23 14:27:26 +0000 |
| commit | 8619962c733e1ce5c4becc4b8bf6bd4a62b46f78 (patch) | |
| tree | 4f24ec36ad1bddbfa08b7c03e1060da07314f71c | |
| parent | a0c5f3eff172f515ab579193fa4099e9141ef46b (diff) | |
| download | bcm5719-llvm-8619962c733e1ce5c4becc4b8bf6bd4a62b46f78.tar.gz bcm5719-llvm-8619962c733e1ce5c4becc4b8bf6bd4a62b46f78.zip | |
[X86][Btver2] Cleanup SSE42 PCMPISTR/PCMPESTR string instructions to correctly use JFPU1 scheduler pipe followed by JLAGU/JSAGU/JFPA/JVALU function units
Fixes throughput to match Agner/Fam16h-SoG as well.
llvm-svn: 328318
| -rw-r--r-- | llvm/lib/Target/X86/X86ScheduleBtVer2.td | 10 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/sse42-schedule.ll | 8 | ||||
| -rw-r--r-- | llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse42.s | 18 |
3 files changed, 18 insertions, 18 deletions
diff --git a/llvm/lib/Target/X86/X86ScheduleBtVer2.td b/llvm/lib/Target/X86/X86ScheduleBtVer2.td index f4289803c88..47a4d67d39d 100644 --- a/llvm/lib/Target/X86/X86ScheduleBtVer2.td +++ b/llvm/lib/Target/X86/X86ScheduleBtVer2.td @@ -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. diff --git a/llvm/test/CodeGen/X86/sse42-schedule.ll b/llvm/test/CodeGen/X86/sse42-schedule.ll index bbf8acc123c..b728bbfd68a 100644 --- a/llvm/test/CodeGen/X86/sse42-schedule.ll +++ b/llvm/test/CodeGen/X86/sse42-schedule.ll @@ -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: diff --git a/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse42.s b/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse42.s index 153377c3215..15188d3ad3c 100644 --- a/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse42.s +++ b/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse42.s @@ -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 |

