[X86] Add llvm-mca tests that show how operand latency is wrongly computed for SSE...
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Fri, 31 Aug 2018 14:12:13 +0000 (14:12 +0000)
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Fri, 31 Aug 2018 14:12:13 +0000 (14:12 +0000)
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.

llvm-svn: 341213

llvm/test/tools/llvm-mca/X86/sqrt-rsqrt-rcp-memop.s [new file with mode: 0644]

diff --git a/llvm/test/tools/llvm-mca/X86/sqrt-rsqrt-rcp-memop.s b/llvm/test/tools/llvm-mca/X86/sqrt-rsqrt-rcp-memop.s
new file mode 100644 (file)
index 0000000..92304a7
--- /dev/null
@@ -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