[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