[llvm] r341213 - [X86] Add llvm-mca tests that show how operand latency is wrongly computed for SSE sqrtss/sd and rcpss.
Andrea Di Biagio via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 31 07:12:14 PDT 2018
Author: adibiagio
Date: Fri Aug 31 07:12:13 2018
New Revision: 341213
URL: http://llvm.org/viewvc/llvm-project?rev=341213&view=rev
Log:
[X86] Add llvm-mca tests that show how operand latency is wrongly computed for SSE sqrtss/sd and rcpss.
According to the timeline view, sqrtss/sd/rcpss start executing before the load
address for the memory operand is available.
This problem is caused by the presence of a ReadAfterLd (a ReadAdvance). Those
unary operations should not specify a ReadAdvance at all.
Added:
llvm/trunk/test/tools/llvm-mca/X86/sqrt-rsqrt-rcp-memop.s
Added: llvm/trunk/test/tools/llvm-mca/X86/sqrt-rsqrt-rcp-memop.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mca/X86/sqrt-rsqrt-rcp-memop.s?rev=341213&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-mca/X86/sqrt-rsqrt-rcp-memop.s (added)
+++ llvm/trunk/test/tools/llvm-mca/X86/sqrt-rsqrt-rcp-memop.s Fri Aug 31 07:12:13 2018
@@ -0,0 +1,206 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -iterations=1 -all-views=false -timeline < %s | FileCheck %s -check-prefix=ALL -check-prefix=BTVER2
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=znver1 -iterations=1 -all-views=false -timeline < %s | FileCheck %s -check-prefix=ALL -check-prefix=ZNVER1
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=haswell -iterations=1 -all-views=false -timeline < %s | FileCheck %s -check-prefix=ALL -check-prefix=HASWELL
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=broadwell -iterations=1 -all-views=false -timeline < %s | FileCheck %s -check-prefix=ALL -check-prefix=BROADWELL
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake -iterations=1 -all-views=false -timeline < %s | FileCheck %s -check-prefix=ALL -check-prefix=SKYLAKE
+
+#LLVM-MCA-BEGIN test_sqrtss
+leaq 8(%rsp, %rdi, 2), %rax
+sqrtss (%rax), %xmm1
+#LLVM-MCA-END
+
+#LLVM-MCA-BEGIN test_sqrtsd
+leaq 8(%rsp, %rdi, 2), %rax
+sqrtsd (%rax), %xmm1
+#LLVM-MCA-END
+
+#LLVM-MCA-BEGIN test_rsqrtss
+leaq 8(%rsp, %rdi, 2), %rax
+rsqrtss (%rax), %xmm1
+#LLVM-MCA-END
+
+#LLVM-MCA-BEGIN test_rcp
+leaq 8(%rsp, %rdi, 2), %rax
+rcpss (%rax), %xmm1
+#LLVM-MCA-END
+
+# ALL: [0] Code Region - test_sqrtss
+
+# ALL: Timeline view:
+
+# BROADWELL-NEXT: 012345678
+# BROADWELL-NEXT: Index 0123456789
+
+# BTVER2-NEXT: 0123456789
+# BTVER2-NEXT: Index 0123456789 012345678
+
+# HASWELL-NEXT: 012345678
+# HASWELL-NEXT: Index 0123456789
+
+# SKYLAKE-NEXT: 0123456789
+# SKYLAKE-NEXT: Index 0123456789
+
+# ZNVER1-NEXT: 0123456789
+# ZNVER1-NEXT: Index 0123456789 0123456789
+
+# ZNVER1: [0,0] DeER . . . . . . leaq 8(%rsp,%rdi,2), %rax
+# ZNVER1-NEXT: [0,1] DeeeeeeeeeeeeeeeeeeeeeeeeeeeER sqrtss (%rax), %xmm1
+
+# SKYLAKE: [0,0] DeER . . . . leaq 8(%rsp,%rdi,2), %rax
+# SKYLAKE-NEXT: [0,1] DeeeeeeeeeeeeeeeeeER sqrtss (%rax), %xmm1
+
+# BROADWELL: [0,0] DeER . . . . leaq 8(%rsp,%rdi,2), %rax
+# BROADWELL-NEXT: [0,1] DeeeeeeeeeeeeeeeeER sqrtss (%rax), %xmm1
+
+# HASWELL: [0,0] DeER . . . . leaq 8(%rsp,%rdi,2), %rax
+# HASWELL-NEXT: [0,1] DeeeeeeeeeeeeeeeeER sqrtss (%rax), %xmm1
+
+# BTVER2: [0,0] DeeER. . . . . . leaq 8(%rsp,%rdi,2), %rax
+# BTVER2-NEXT: [0,1] DeeeeeeeeeeeeeeeeeeeeeeeeeeER sqrtss (%rax), %xmm1
+
+# ALL: Average Wait times (based on the timeline view):
+# ALL-NEXT: [0]: Executions
+# ALL-NEXT: [1]: Average time spent waiting in a scheduler's queue
+# ALL-NEXT: [2]: Average time spent waiting in a scheduler's queue while ready
+# ALL-NEXT: [3]: Average time elapsed from WB until retire stage
+
+# ALL: [0] [1] [2] [3]
+# ALL-NEXT: 0. 1 1.0 1.0 0.0 leaq 8(%rsp,%rdi,2), %rax
+# ALL-NEXT: 1. 1 1.0 0.0 0.0 sqrtss (%rax), %xmm1
+
+# ALL: [1] Code Region - test_sqrtsd
+
+# ALL: Timeline view:
+
+# BROADWELL-NEXT: 0123456789
+# BROADWELL-NEXT: Index 0123456789 0123
+
+# BTVER2-NEXT: 0123456789 01234
+# BTVER2-NEXT: Index 0123456789 0123456789
+
+# HASWELL-NEXT: 0123456789
+# HASWELL-NEXT: Index 0123456789 0123
+
+# SKYLAKE-NEXT: 0123456789
+# SKYLAKE-NEXT: Index 0123456789 012345
+
+# ZNVER1-NEXT: 0123456789
+# ZNVER1-NEXT: Index 0123456789 0123456789
+
+# ZNVER1: [0,0] DeER . . . . . . leaq 8(%rsp,%rdi,2), %rax
+# ZNVER1-NEXT: [0,1] DeeeeeeeeeeeeeeeeeeeeeeeeeeeER sqrtsd (%rax), %xmm1
+
+# SKYLAKE: [0,0] DeER . . . . . leaq 8(%rsp,%rdi,2), %rax
+# SKYLAKE-NEXT: [0,1] DeeeeeeeeeeeeeeeeeeeeeeeER sqrtsd (%rax), %xmm1
+
+# BROADWELL: [0,0] DeER . . . . . leaq 8(%rsp,%rdi,2), %rax
+# BROADWELL-NEXT: [0,1] DeeeeeeeeeeeeeeeeeeeeeER sqrtsd (%rax), %xmm1
+
+# HASWELL: [0,0] DeER . . . . . leaq 8(%rsp,%rdi,2), %rax
+# HASWELL-NEXT: [0,1] DeeeeeeeeeeeeeeeeeeeeeER sqrtsd (%rax), %xmm1
+
+# BTVER2: [0,0] DeeER. . . . . . . leaq 8(%rsp,%rdi,2), %rax
+# BTVER2-NEXT: [0,1] DeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeER sqrtsd (%rax), %xmm1
+
+# ALL: Average Wait times (based on the timeline view):
+# ALL-NEXT: [0]: Executions
+# ALL-NEXT: [1]: Average time spent waiting in a scheduler's queue
+# ALL-NEXT: [2]: Average time spent waiting in a scheduler's queue while ready
+# ALL-NEXT: [3]: Average time elapsed from WB until retire stage
+
+# ALL: [0] [1] [2] [3]
+# ALL-NEXT: 0. 1 1.0 1.0 0.0 leaq 8(%rsp,%rdi,2), %rax
+# ALL-NEXT: 1. 1 1.0 0.0 0.0 sqrtsd (%rax), %xmm1
+
+# ALL: [2] Code Region - test_rsqrtss
+
+# SKYLAKE: Timeline view:
+# SKYLAKE-NEXT: 01
+# SKYLAKE-NEXT: Index 0123456789
+
+# BROADWELL: Timeline view:
+# BROADWELL-NEXT: 012
+# BROADWELL-NEXT: Index 0123456789
+
+# HASWELL: Timeline view:
+# HASWELL-NEXT: 012
+# HASWELL-NEXT: Index 0123456789
+
+# ZNVER1: Timeline view:
+# ZNVER1-NEXT: 01234
+# ZNVER1-NEXT: Index 0123456789
+
+# BTVER2: Timeline view:
+# BTVER2-NEXT: Index 0123456789
+
+# ZNVER1: [0,0] DeER . . . leaq 8(%rsp,%rdi,2), %rax
+# ZNVER1-NEXT: [0,1] DeeeeeeeeeeeeER rsqrtss (%rax), %xmm1
+
+# BROADWELL: [0,0] DeER . . . leaq 8(%rsp,%rdi,2), %rax
+# BROADWELL-NEXT: [0,1] DeeeeeeeeeeER rsqrtss (%rax), %xmm1
+
+# HASWELL: [0,0] DeER . . . leaq 8(%rsp,%rdi,2), %rax
+# HASWELL-NEXT: [0,1] DeeeeeeeeeeER rsqrtss (%rax), %xmm1
+
+# SKYLAKE: [0,0] DeER . .. leaq 8(%rsp,%rdi,2), %rax
+# SKYLAKE-NEXT: [0,1] DeeeeeeeeeER rsqrtss (%rax), %xmm1
+
+# BTVER2: [0,0] DeeER. . leaq 8(%rsp,%rdi,2), %rax
+# BTVER2-NEXT: [0,1] DeeeeeeeER rsqrtss (%rax), %xmm1
+
+# ALL: Average Wait times (based on the timeline view):
+# ALL-NEXT: [0]: Executions
+# ALL-NEXT: [1]: Average time spent waiting in a scheduler's queue
+# ALL-NEXT: [2]: Average time spent waiting in a scheduler's queue while ready
+# ALL-NEXT: [3]: Average time elapsed from WB until retire stage
+
+# ALL: [0] [1] [2] [3]
+# ALL-NEXT: 0. 1 1.0 1.0 0.0 leaq 8(%rsp,%rdi,2), %rax
+# ALL-NEXT: 1. 1 1.0 0.0 0.0 rsqrtss (%rax), %xmm1
+
+# ALL: [3] Code Region - test_rcp
+
+# SKYLAKE: Timeline view:
+# SKYLAKE-NEXT: 01
+# SKYLAKE-NEXT: Index 0123456789
+
+# BROADWELL: Timeline view:
+# BROADWELL-NEXT: 012
+# BROADWELL-NEXT: Index 0123456789
+
+# HASWELL: Timeline view:
+# HASWELL-NEXT: 012
+# HASWELL-NEXT: Index 0123456789
+
+# ZNVER1: Timeline view:
+# ZNVER1-NEXT: 01234
+# ZNVER1-NEXT: Index 0123456789
+
+# BTVER2: Timeline view:
+# BTVER2-NEXT: Index 0123456789
+
+# ZNVER1: [0,0] DeER . . . leaq 8(%rsp,%rdi,2), %rax
+# ZNVER1-NEXT: [0,1] DeeeeeeeeeeeeER rcpss (%rax), %xmm1
+
+# BROADWELL: [0,0] DeER . . . leaq 8(%rsp,%rdi,2), %rax
+# BROADWELL-NEXT: [0,1] DeeeeeeeeeeER rcpss (%rax), %xmm1
+
+# HASWELL: [0,0] DeER . . . leaq 8(%rsp,%rdi,2), %rax
+# HASWELL-NEXT: [0,1] DeeeeeeeeeeER rcpss (%rax), %xmm1
+
+# SKYLAKE: [0,0] DeER . .. leaq 8(%rsp,%rdi,2), %rax
+# SKYLAKE-NEXT: [0,1] DeeeeeeeeeER rcpss (%rax), %xmm1
+
+# BTVER2: [0,0] DeeER. . leaq 8(%rsp,%rdi,2), %rax
+# BTVER2-NEXT: [0,1] DeeeeeeeER rcpss (%rax), %xmm1
+
+# ALL: Average Wait times (based on the timeline view):
+# ALL-NEXT: [0]: Executions
+# ALL-NEXT: [1]: Average time spent waiting in a scheduler's queue
+# ALL-NEXT: [2]: Average time spent waiting in a scheduler's queue while ready
+# ALL-NEXT: [3]: Average time elapsed from WB until retire stage
+
+# ALL: [0] [1] [2] [3]
+# ALL-NEXT: 0. 1 1.0 1.0 0.0 leaq 8(%rsp,%rdi,2), %rax
+# ALL-NEXT: 1. 1 1.0 0.0 0.0 rcpss (%rax), %xmm1
More information about the llvm-commits
mailing list