From: Simon Pilgrim Date: Wed, 2 May 2018 19:26:14 +0000 (+0000) Subject: [X86][SNB] Fix scheduling of MMX integer multiply instructions. X-Git-Tag: llvmorg-7.0.0-rc1~6902 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=350c22c587353f0d34cb585e49b512af10f03ed7;p=platform%2Fupstream%2Fllvm.git [X86][SNB] Fix scheduling of MMX integer multiply instructions. The entries were being bound to the wrong class. llvm-svn: 331388 --- diff --git a/llvm/lib/Target/X86/X86SchedSandyBridge.td b/llvm/lib/Target/X86/X86SchedSandyBridge.td index 8923eb1..cf15ccd 100644 --- a/llvm/lib/Target/X86/X86SchedSandyBridge.td +++ b/llvm/lib/Target/X86/X86SchedSandyBridge.td @@ -1247,14 +1247,14 @@ def SBWriteResGroup89_2 : SchedWriteRes<[SBPort0,SBPort23]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SBWriteResGroup89], (instregex "MMX_PMADDUBSWrm", - "MMX_PMADDWDirm", - "MMX_PMULHRSWrm", - "MMX_PMULHUWirm", - "MMX_PMULHWirm", - "MMX_PMULLWirm", - "MMX_PMULUDQirm", - "MMX_PSADBWirm")>; +def: InstRW<[SBWriteResGroup89_2], (instregex "MMX_PMADDUBSWrm", + "MMX_PMADDWDirm", + "MMX_PMULHRSWrm", + "MMX_PMULHUWirm", + "MMX_PMULHWirm", + "MMX_PMULLWirm", + "MMX_PMULUDQirm", + "MMX_PSADBWirm")>; def SBWriteResGroup90 : SchedWriteRes<[SBPort1,SBPort23]> { let Latency = 9; diff --git a/llvm/test/CodeGen/X86/mmx-schedule.ll b/llvm/test/CodeGen/X86/mmx-schedule.ll index c08dc0e..3556a79 100644 --- a/llvm/test/CodeGen/X86/mmx-schedule.ll +++ b/llvm/test/CodeGen/X86/mmx-schedule.ll @@ -3591,7 +3591,7 @@ define i64 @test_pmaddwd(x86_mmx %a0, x86_mmx %a1, x86_mmx* %a2) optsize { ; GENERIC-LABEL: test_pmaddwd: ; GENERIC: # %bb.0: ; GENERIC-NEXT: pmaddwd %mm1, %mm0 # sched: [5:1.00] -; GENERIC-NEXT: pmaddwd (%rdi), %mm0 # sched: [11:1.00] +; GENERIC-NEXT: pmaddwd (%rdi), %mm0 # sched: [10:1.00] ; GENERIC-NEXT: movq %mm0, %rax # sched: [1:0.33] ; GENERIC-NEXT: retq # sched: [1:1.00] ; @@ -3612,7 +3612,7 @@ define i64 @test_pmaddwd(x86_mmx %a0, x86_mmx %a1, x86_mmx* %a2) optsize { ; SANDY-LABEL: test_pmaddwd: ; SANDY: # %bb.0: ; SANDY-NEXT: pmaddwd %mm1, %mm0 # sched: [5:1.00] -; SANDY-NEXT: pmaddwd (%rdi), %mm0 # sched: [11:1.00] +; SANDY-NEXT: pmaddwd (%rdi), %mm0 # sched: [10:1.00] ; SANDY-NEXT: movq %mm0, %rax # sched: [1:0.33] ; SANDY-NEXT: retq # sched: [1:1.00] ; @@ -3669,7 +3669,7 @@ define i64 @test_pmaddubsw(x86_mmx %a0, x86_mmx %a1, x86_mmx* %a2) optsize { ; GENERIC-LABEL: test_pmaddubsw: ; GENERIC: # %bb.0: ; GENERIC-NEXT: pmaddubsw %mm1, %mm0 # sched: [5:1.00] -; GENERIC-NEXT: pmaddubsw (%rdi), %mm0 # sched: [11:1.00] +; GENERIC-NEXT: pmaddubsw (%rdi), %mm0 # sched: [10:1.00] ; GENERIC-NEXT: movq %mm0, %rax # sched: [1:0.33] ; GENERIC-NEXT: retq # sched: [1:1.00] ; @@ -3690,7 +3690,7 @@ define i64 @test_pmaddubsw(x86_mmx %a0, x86_mmx %a1, x86_mmx* %a2) optsize { ; SANDY-LABEL: test_pmaddubsw: ; SANDY: # %bb.0: ; SANDY-NEXT: pmaddubsw %mm1, %mm0 # sched: [5:1.00] -; SANDY-NEXT: pmaddubsw (%rdi), %mm0 # sched: [11:1.00] +; SANDY-NEXT: pmaddubsw (%rdi), %mm0 # sched: [10:1.00] ; SANDY-NEXT: movq %mm0, %rax # sched: [1:0.33] ; SANDY-NEXT: retq # sched: [1:1.00] ; @@ -4114,7 +4114,7 @@ define i64 @test_pmulhrsw(x86_mmx %a0, x86_mmx %a1, x86_mmx* %a2) optsize { ; GENERIC-LABEL: test_pmulhrsw: ; GENERIC: # %bb.0: ; GENERIC-NEXT: pmulhrsw %mm1, %mm0 # sched: [5:1.00] -; GENERIC-NEXT: pmulhrsw (%rdi), %mm0 # sched: [11:1.00] +; GENERIC-NEXT: pmulhrsw (%rdi), %mm0 # sched: [10:1.00] ; GENERIC-NEXT: movq %mm0, %rax # sched: [1:0.33] ; GENERIC-NEXT: retq # sched: [1:1.00] ; @@ -4135,7 +4135,7 @@ define i64 @test_pmulhrsw(x86_mmx %a0, x86_mmx %a1, x86_mmx* %a2) optsize { ; SANDY-LABEL: test_pmulhrsw: ; SANDY: # %bb.0: ; SANDY-NEXT: pmulhrsw %mm1, %mm0 # sched: [5:1.00] -; SANDY-NEXT: pmulhrsw (%rdi), %mm0 # sched: [11:1.00] +; SANDY-NEXT: pmulhrsw (%rdi), %mm0 # sched: [10:1.00] ; SANDY-NEXT: movq %mm0, %rax # sched: [1:0.33] ; SANDY-NEXT: retq # sched: [1:1.00] ; @@ -4192,7 +4192,7 @@ define i64 @test_pmulhw(x86_mmx %a0, x86_mmx %a1, x86_mmx* %a2) optsize { ; GENERIC-LABEL: test_pmulhw: ; GENERIC: # %bb.0: ; GENERIC-NEXT: pmulhw %mm1, %mm0 # sched: [5:1.00] -; GENERIC-NEXT: pmulhw (%rdi), %mm0 # sched: [11:1.00] +; GENERIC-NEXT: pmulhw (%rdi), %mm0 # sched: [10:1.00] ; GENERIC-NEXT: movq %mm0, %rax # sched: [1:0.33] ; GENERIC-NEXT: retq # sched: [1:1.00] ; @@ -4213,7 +4213,7 @@ define i64 @test_pmulhw(x86_mmx %a0, x86_mmx %a1, x86_mmx* %a2) optsize { ; SANDY-LABEL: test_pmulhw: ; SANDY: # %bb.0: ; SANDY-NEXT: pmulhw %mm1, %mm0 # sched: [5:1.00] -; SANDY-NEXT: pmulhw (%rdi), %mm0 # sched: [11:1.00] +; SANDY-NEXT: pmulhw (%rdi), %mm0 # sched: [10:1.00] ; SANDY-NEXT: movq %mm0, %rax # sched: [1:0.33] ; SANDY-NEXT: retq # sched: [1:1.00] ; @@ -4270,7 +4270,7 @@ define i64 @test_pmulhuw(x86_mmx %a0, x86_mmx %a1, x86_mmx* %a2) optsize { ; GENERIC-LABEL: test_pmulhuw: ; GENERIC: # %bb.0: ; GENERIC-NEXT: pmulhuw %mm1, %mm0 # sched: [5:1.00] -; GENERIC-NEXT: pmulhuw (%rdi), %mm0 # sched: [11:1.00] +; GENERIC-NEXT: pmulhuw (%rdi), %mm0 # sched: [10:1.00] ; GENERIC-NEXT: movq %mm0, %rax # sched: [1:0.33] ; GENERIC-NEXT: retq # sched: [1:1.00] ; @@ -4291,7 +4291,7 @@ define i64 @test_pmulhuw(x86_mmx %a0, x86_mmx %a1, x86_mmx* %a2) optsize { ; SANDY-LABEL: test_pmulhuw: ; SANDY: # %bb.0: ; SANDY-NEXT: pmulhuw %mm1, %mm0 # sched: [5:1.00] -; SANDY-NEXT: pmulhuw (%rdi), %mm0 # sched: [11:1.00] +; SANDY-NEXT: pmulhuw (%rdi), %mm0 # sched: [10:1.00] ; SANDY-NEXT: movq %mm0, %rax # sched: [1:0.33] ; SANDY-NEXT: retq # sched: [1:1.00] ; @@ -4348,7 +4348,7 @@ define i64 @test_pmullw(x86_mmx %a0, x86_mmx %a1, x86_mmx* %a2) optsize { ; GENERIC-LABEL: test_pmullw: ; GENERIC: # %bb.0: ; GENERIC-NEXT: pmullw %mm1, %mm0 # sched: [5:1.00] -; GENERIC-NEXT: pmullw (%rdi), %mm0 # sched: [11:1.00] +; GENERIC-NEXT: pmullw (%rdi), %mm0 # sched: [10:1.00] ; GENERIC-NEXT: movq %mm0, %rax # sched: [1:0.33] ; GENERIC-NEXT: retq # sched: [1:1.00] ; @@ -4369,7 +4369,7 @@ define i64 @test_pmullw(x86_mmx %a0, x86_mmx %a1, x86_mmx* %a2) optsize { ; SANDY-LABEL: test_pmullw: ; SANDY: # %bb.0: ; SANDY-NEXT: pmullw %mm1, %mm0 # sched: [5:1.00] -; SANDY-NEXT: pmullw (%rdi), %mm0 # sched: [11:1.00] +; SANDY-NEXT: pmullw (%rdi), %mm0 # sched: [10:1.00] ; SANDY-NEXT: movq %mm0, %rax # sched: [1:0.33] ; SANDY-NEXT: retq # sched: [1:1.00] ; @@ -4426,7 +4426,7 @@ define i64 @test_pmuludq(x86_mmx %a0, x86_mmx %a1, x86_mmx* %a2) optsize { ; GENERIC-LABEL: test_pmuludq: ; GENERIC: # %bb.0: ; GENERIC-NEXT: pmuludq %mm1, %mm0 # sched: [5:1.00] -; GENERIC-NEXT: pmuludq (%rdi), %mm0 # sched: [11:1.00] +; GENERIC-NEXT: pmuludq (%rdi), %mm0 # sched: [10:1.00] ; GENERIC-NEXT: movq %mm0, %rax # sched: [1:0.33] ; GENERIC-NEXT: retq # sched: [1:1.00] ; @@ -4447,7 +4447,7 @@ define i64 @test_pmuludq(x86_mmx %a0, x86_mmx %a1, x86_mmx* %a2) optsize { ; SANDY-LABEL: test_pmuludq: ; SANDY: # %bb.0: ; SANDY-NEXT: pmuludq %mm1, %mm0 # sched: [5:1.00] -; SANDY-NEXT: pmuludq (%rdi), %mm0 # sched: [11:1.00] +; SANDY-NEXT: pmuludq (%rdi), %mm0 # sched: [10:1.00] ; SANDY-NEXT: movq %mm0, %rax # sched: [1:0.33] ; SANDY-NEXT: retq # sched: [1:1.00] ; @@ -4582,7 +4582,7 @@ define i64 @test_psadbw(x86_mmx %a0, x86_mmx %a1, x86_mmx* %a2) optsize { ; GENERIC-LABEL: test_psadbw: ; GENERIC: # %bb.0: ; GENERIC-NEXT: psadbw %mm1, %mm0 # sched: [5:1.00] -; GENERIC-NEXT: psadbw (%rdi), %mm0 # sched: [11:1.00] +; GENERIC-NEXT: psadbw (%rdi), %mm0 # sched: [10:1.00] ; GENERIC-NEXT: movq %mm0, %rax # sched: [1:0.33] ; GENERIC-NEXT: retq # sched: [1:1.00] ; @@ -4603,7 +4603,7 @@ define i64 @test_psadbw(x86_mmx %a0, x86_mmx %a1, x86_mmx* %a2) optsize { ; SANDY-LABEL: test_psadbw: ; SANDY: # %bb.0: ; SANDY-NEXT: psadbw %mm1, %mm0 # sched: [5:1.00] -; SANDY-NEXT: psadbw (%rdi), %mm0 # sched: [11:1.00] +; SANDY-NEXT: psadbw (%rdi), %mm0 # sched: [10:1.00] ; SANDY-NEXT: movq %mm0, %rax # sched: [1:0.33] ; SANDY-NEXT: retq # sched: [1:1.00] ; diff --git a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-mmx.s b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-mmx.s index 1453d94..99668b0 100644 --- a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-mmx.s +++ b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-mmx.s @@ -210,11 +210,11 @@ pxor (%rax), %mm2 # CHECK-NEXT: 1 3 1.00 pcmpgtw %mm0, %mm2 # CHECK-NEXT: 2 8 1.00 * pcmpgtw (%rax), %mm2 # CHECK-NEXT: 1 5 1.00 pmaddwd %mm0, %mm2 -# CHECK-NEXT: 2 11 1.00 * pmaddwd (%rax), %mm2 +# CHECK-NEXT: 2 10 1.00 * pmaddwd (%rax), %mm2 # CHECK-NEXT: 1 5 1.00 pmulhw %mm0, %mm2 -# CHECK-NEXT: 2 11 1.00 * pmulhw (%rax), %mm2 +# CHECK-NEXT: 2 10 1.00 * pmulhw (%rax), %mm2 # CHECK-NEXT: 1 5 1.00 pmullw %mm0, %mm2 -# CHECK-NEXT: 2 11 1.00 * pmullw (%rax), %mm2 +# CHECK-NEXT: 2 10 1.00 * pmullw (%rax), %mm2 # CHECK-NEXT: 1 1 0.33 por %mm0, %mm2 # CHECK-NEXT: 2 6 0.50 * por (%rax), %mm2 # CHECK-NEXT: 1 1 1.00 pslld $1, %mm2 diff --git a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse1.s b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse1.s index 46e1b47..0cd4eb9 100644 --- a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse1.s +++ b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse1.s @@ -281,13 +281,13 @@ xorps (%rax), %xmm2 # CHECK-NEXT: 2 8 1.00 * pminub (%rax), %mm2 # CHECK-NEXT: 1 2 1.00 pmovmskb %xmm0, %ecx # CHECK-NEXT: 1 5 1.00 pmulhuw %mm0, %mm2 -# CHECK-NEXT: 2 11 1.00 * pmulhuw (%rax), %mm2 +# CHECK-NEXT: 2 10 1.00 * pmulhuw (%rax), %mm2 # CHECK-NEXT: 1 5 0.50 * * prefetcht0 (%rax) # CHECK-NEXT: 1 5 0.50 * * prefetcht1 (%rax) # CHECK-NEXT: 1 5 0.50 * * prefetcht2 (%rax) # CHECK-NEXT: 1 5 0.50 * * prefetchnta (%rax) # CHECK-NEXT: 1 5 1.00 psadbw %mm0, %mm2 -# CHECK-NEXT: 2 11 1.00 * psadbw (%rax), %mm2 +# CHECK-NEXT: 2 10 1.00 * psadbw (%rax), %mm2 # CHECK-NEXT: 1 1 1.00 pshufw $1, %mm0, %mm2 # CHECK-NEXT: 2 6 1.00 * pshufw $1, (%rax), %mm2 # CHECK-NEXT: 1 5 1.00 rcpps %xmm0, %xmm2 diff --git a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse2.s b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse2.s index f8ca0cc..ab7d138 100644 --- a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse2.s +++ b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse2.s @@ -573,7 +573,7 @@ xorpd (%rax), %xmm2 # CHECK-NEXT: 1 5 1.00 pmullw %xmm0, %xmm2 # CHECK-NEXT: 2 11 1.00 * pmullw (%rax), %xmm2 # CHECK-NEXT: 1 5 1.00 pmuludq %mm0, %mm2 -# CHECK-NEXT: 2 11 1.00 * pmuludq (%rax), %mm2 +# CHECK-NEXT: 2 10 1.00 * pmuludq (%rax), %mm2 # CHECK-NEXT: 1 5 1.00 pmuludq %xmm0, %xmm2 # CHECK-NEXT: 2 11 1.00 * pmuludq (%rax), %xmm2 # CHECK-NEXT: 1 1 0.33 por %xmm0, %xmm2 diff --git a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-ssse3.s b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-ssse3.s index 63b1892..7486d8e 100644 --- a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-ssse3.s +++ b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-ssse3.s @@ -147,11 +147,11 @@ psignw (%rax), %xmm2 # CHECK-NEXT: 3 3 1.50 phsubw %xmm0, %xmm2 # CHECK-NEXT: 4 9 1.50 * phsubw (%rax), %xmm2 # CHECK-NEXT: 1 5 1.00 pmaddubsw %mm0, %mm2 -# CHECK-NEXT: 2 11 1.00 * pmaddubsw (%rax), %mm2 +# CHECK-NEXT: 2 10 1.00 * pmaddubsw (%rax), %mm2 # CHECK-NEXT: 1 5 1.00 pmaddubsw %xmm0, %xmm2 # CHECK-NEXT: 2 11 1.00 * pmaddubsw (%rax), %xmm2 # CHECK-NEXT: 1 5 1.00 pmulhrsw %mm0, %mm2 -# CHECK-NEXT: 2 11 1.00 * pmulhrsw (%rax), %mm2 +# CHECK-NEXT: 2 10 1.00 * pmulhrsw (%rax), %mm2 # CHECK-NEXT: 1 5 1.00 pmulhrsw %xmm0, %xmm2 # CHECK-NEXT: 2 11 1.00 * pmulhrsw (%rax), %xmm2 # CHECK-NEXT: 1 1 0.50 pshufb %mm0, %mm2