[MCA][X86] Add test coverage for XSAVE instructions
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Sun, 20 Nov 2022 13:56:04 +0000 (13:56 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sun, 20 Nov 2022 13:56:04 +0000 (13:56 +0000)
13 files changed:
llvm/test/tools/llvm-mca/X86/AlderlakeP/resources-xsave.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/BdVer2/resources-xsave.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Broadwell/resources-xsave.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/BtVer2/resources-xsave.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Generic/resources-xsave.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Haswell/resources-xsave.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/IceLakeServer/resources-xsave.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SandyBridge/resources-xsave.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-xsave.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-xsave.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Znver1/resources-xsave.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Znver2/resources-xsave.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Znver3/resources-xsave.s [new file with mode: 0644]

diff --git a/llvm/test/tools/llvm-mca/X86/AlderlakeP/resources-xsave.s b/llvm/test/tools/llvm-mca/X86/AlderlakeP/resources-xsave.s
new file mode 100644 (file)
index 0000000..1d1104d
--- /dev/null
@@ -0,0 +1,54 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=alderlake -instruction-tables < %s | FileCheck %s
+
+xgetbv
+
+xrstor  (%rax)
+
+xrstors (%rax)
+
+xsave   (%rax)
+
+xsetbv
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects (U)
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
+# CHECK-NEXT:  23     4     5.00                  U     xgetbv
+# CHECK-NEXT:  31     37    8.00    *      *      U     xrstor (%rax)
+# CHECK-NEXT:  31     37    8.00    *      *      U     xrstors        (%rax)
+# CHECK-NEXT:  140    42    33.50   *      *      U     xsave  (%rax)
+# CHECK-NEXT:  54     5     10.80   *      *      U     xsetbv
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - ADLPPort00
+# CHECK-NEXT: [1]   - ADLPPort01
+# CHECK-NEXT: [2]   - ADLPPort02
+# CHECK-NEXT: [3]   - ADLPPort03
+# CHECK-NEXT: [4]   - ADLPPort04
+# CHECK-NEXT: [5]   - ADLPPort05
+# CHECK-NEXT: [6]   - ADLPPort06
+# CHECK-NEXT: [7]   - ADLPPort07
+# CHECK-NEXT: [8]   - ADLPPort08
+# CHECK-NEXT: [9]   - ADLPPort09
+# CHECK-NEXT: [10]  - ADLPPort10
+# CHECK-NEXT: [11]  - ADLPPort11
+# CHECK-NEXT: [12]  - ADLPPortInvalid
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]   [12]
+# CHECK-NEXT: 72.00  71.67  2.33   2.33   0.50   53.83  67.17  0.50   0.50   0.50   6.33   1.33    -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]   [12]   Instructions:
+# CHECK-NEXT: 6.40   6.40    -      -      -     2.40   6.40    -      -      -     1.40    -      -     xgetbv
+# CHECK-NEXT: 5.25   6.25   0.50   0.50    -     5.25   13.25   -      -      -      -      -      -     xrstor        (%rax)
+# CHECK-NEXT: 5.25   6.25   0.50   0.50    -     5.25   13.25   -      -      -      -      -      -     xrstors       (%rax)
+# CHECK-NEXT: 41.50  38.50  1.33   1.33   0.50   32.00  22.00  0.50   0.50   0.50    -     1.33    -     xsave (%rax)
+# CHECK-NEXT: 13.60  14.27   -      -      -     8.93   12.27   -      -      -     4.93    -      -     xsetbv
diff --git a/llvm/test/tools/llvm-mca/X86/BdVer2/resources-xsave.s b/llvm/test/tools/llvm-mca/X86/BdVer2/resources-xsave.s
new file mode 100644 (file)
index 0000000..7ae7b0d
--- /dev/null
@@ -0,0 +1,64 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=bdver2 -instruction-tables < %s | FileCheck %s
+
+xgetbv
+
+xrstor  (%rax)
+
+xrstors (%rax)
+
+xsave   (%rax)
+
+xsetbv
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects (U)
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
+# CHECK-NEXT:  1      100   0.50                  U     xgetbv
+# CHECK-NEXT:  1      100   0.50    *      *      U     xrstor (%rax)
+# CHECK-NEXT:  1      100   0.50    *      *      U     xrstors        (%rax)
+# CHECK-NEXT:  1      100   0.50    *      *      U     xsave  (%rax)
+# CHECK-NEXT:  1      100   0.50    *      *      U     xsetbv
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0.0] - PdAGLU01
+# CHECK-NEXT: [0.1] - PdAGLU01
+# CHECK-NEXT: [1]   - PdBranch
+# CHECK-NEXT: [2]   - PdCount
+# CHECK-NEXT: [3]   - PdDiv
+# CHECK-NEXT: [4]   - PdEX0
+# CHECK-NEXT: [5]   - PdEX1
+# CHECK-NEXT: [6]   - PdFPCVT
+# CHECK-NEXT: [7.0] - PdFPFMA
+# CHECK-NEXT: [7.1] - PdFPFMA
+# CHECK-NEXT: [8.0] - PdFPMAL
+# CHECK-NEXT: [8.1] - PdFPMAL
+# CHECK-NEXT: [9]   - PdFPMMA
+# CHECK-NEXT: [10]  - PdFPSTO
+# CHECK-NEXT: [11]  - PdFPU0
+# CHECK-NEXT: [12]  - PdFPU1
+# CHECK-NEXT: [13]  - PdFPU2
+# CHECK-NEXT: [14]  - PdFPU3
+# CHECK-NEXT: [15]  - PdFPXBR
+# CHECK-NEXT: [16.0] - PdLoad
+# CHECK-NEXT: [16.1] - PdLoad
+# CHECK-NEXT: [17]  - PdMul
+# CHECK-NEXT: [18]  - PdStore
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0.0]  [0.1]  [1]    [2]    [3]    [4]    [5]    [6]    [7.0]  [7.1]  [8.0]  [8.1]  [9]    [10]   [11]   [12]   [13]   [14]   [15]   [16.0] [16.1] [17]   [18]
+# CHECK-NEXT:  -      -      -      -      -     2.50   2.50    -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0.0]  [0.1]  [1]    [2]    [3]    [4]    [5]    [6]    [7.0]  [7.1]  [8.0]  [8.1]  [9]    [10]   [11]   [12]   [13]   [14]   [15]   [16.0] [16.1] [17]   [18]   Instructions:
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -     xgetbv
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -     xrstor  (%rax)
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -     xrstors (%rax)
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -     xsave   (%rax)
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -     xsetbv
diff --git a/llvm/test/tools/llvm-mca/X86/Broadwell/resources-xsave.s b/llvm/test/tools/llvm-mca/X86/Broadwell/resources-xsave.s
new file mode 100644 (file)
index 0000000..410029a
--- /dev/null
@@ -0,0 +1,51 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=broadwell -instruction-tables < %s | FileCheck %s
+
+xgetbv
+
+xrstor  (%rax)
+
+xrstors (%rax)
+
+xsave   (%rax)
+
+xsetbv
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects (U)
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
+# CHECK-NEXT:  2      2     0.50                  U     xgetbv
+# CHECK-NEXT:  19     23    4.50    *      *      U     xrstor (%rax)
+# CHECK-NEXT:  19     23    4.50    *      *      U     xrstors        (%rax)
+# CHECK-NEXT:  28     30    6.25    *      *      U     xsave  (%rax)
+# CHECK-NEXT:  5      5     1.25    *      *      U     xsetbv
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - BWDivider
+# CHECK-NEXT: [1]   - BWFPDivider
+# CHECK-NEXT: [2]   - BWPort0
+# CHECK-NEXT: [3]   - BWPort1
+# CHECK-NEXT: [4]   - BWPort2
+# CHECK-NEXT: [5]   - BWPort3
+# CHECK-NEXT: [6]   - BWPort4
+# CHECK-NEXT: [7]   - BWPort5
+# CHECK-NEXT: [8]   - BWPort6
+# CHECK-NEXT: [9]   - BWPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     14.25  13.75  1.83   1.83   1.00   13.75  26.25  0.33
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    Instructions:
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     0.50   0.50    -     xgetbv
+# CHECK-NEXT:  -      -     3.75   3.75   0.50   0.50    -     3.75   6.75    -     xrstor     (%rax)
+# CHECK-NEXT:  -      -     3.75   3.75   0.50   0.50    -     3.75   6.75    -     xrstors    (%rax)
+# CHECK-NEXT:  -      -     4.75   4.75   0.83   0.83   1.00   4.75   10.75  0.33   xsave      (%rax)
+# CHECK-NEXT:  -      -     1.50   1.00    -      -      -     1.00   1.50    -     xsetbv
diff --git a/llvm/test/tools/llvm-mca/X86/BtVer2/resources-xsave.s b/llvm/test/tools/llvm-mca/X86/BtVer2/resources-xsave.s
new file mode 100644 (file)
index 0000000..8b6215b
--- /dev/null
@@ -0,0 +1,55 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -instruction-tables < %s | FileCheck %s
+
+xgetbv
+
+xrstor  (%rax)
+
+xrstors (%rax)
+
+xsave   (%rax)
+
+xsetbv
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects (U)
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
+# CHECK-NEXT:  1      100   0.50                  U     xgetbv
+# CHECK-NEXT:  1      100   0.50    *      *      U     xrstor (%rax)
+# CHECK-NEXT:  1      100   0.50    *      *      U     xrstors        (%rax)
+# CHECK-NEXT:  1      100   0.50    *      *      U     xsave  (%rax)
+# CHECK-NEXT:  1      100   0.50    *      *      U     xsetbv
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - JALU0
+# CHECK-NEXT: [1]   - JALU1
+# CHECK-NEXT: [2]   - JDiv
+# CHECK-NEXT: [3]   - JFPA
+# CHECK-NEXT: [4]   - JFPM
+# CHECK-NEXT: [5]   - JFPU0
+# CHECK-NEXT: [6]   - JFPU1
+# CHECK-NEXT: [7]   - JLAGU
+# CHECK-NEXT: [8]   - JMul
+# CHECK-NEXT: [9]   - JSAGU
+# CHECK-NEXT: [10]  - JSTC
+# CHECK-NEXT: [11]  - JVALU0
+# CHECK-NEXT: [12]  - JVALU1
+# CHECK-NEXT: [13]  - JVIMUL
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]   [12]   [13]
+# CHECK-NEXT: 2.50   2.50    -      -      -      -      -      -      -      -      -      -      -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]   [12]   [13]   Instructions:
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     xgetbv
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     xrstor (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     xrstors        (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     xsave  (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     xsetbv
diff --git a/llvm/test/tools/llvm-mca/X86/Generic/resources-xsave.s b/llvm/test/tools/llvm-mca/X86/Generic/resources-xsave.s
new file mode 100644 (file)
index 0000000..f797f03
--- /dev/null
@@ -0,0 +1,49 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -instruction-tables < %s | FileCheck %s
+
+xgetbv
+
+xrstor  (%rax)
+
+xrstors (%rax)
+
+xsave   (%rax)
+
+xsetbv
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects (U)
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
+# CHECK-NEXT:  1      100   0.33                  U     xgetbv
+# CHECK-NEXT:  1      100   0.33    *      *      U     xrstor (%rax)
+# CHECK-NEXT:  1      100   0.33    *      *      U     xrstors        (%rax)
+# CHECK-NEXT:  1      100   0.33    *      *      U     xsave  (%rax)
+# CHECK-NEXT:  1      100   0.33    *      *      U     xsetbv
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - SBDivider
+# CHECK-NEXT: [1]   - SBFPDivider
+# CHECK-NEXT: [2]   - SBPort0
+# CHECK-NEXT: [3]   - SBPort1
+# CHECK-NEXT: [4]   - SBPort4
+# CHECK-NEXT: [5]   - SBPort5
+# CHECK-NEXT: [6.0] - SBPort23
+# CHECK-NEXT: [6.1] - SBPort23
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]
+# CHECK-NEXT:  -      -     1.67   1.67    -     1.67    -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]  Instructions:
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -     xgetbv
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -     xrstor   (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -     xrstors  (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -     xsave    (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -     xsetbv
diff --git a/llvm/test/tools/llvm-mca/X86/Haswell/resources-xsave.s b/llvm/test/tools/llvm-mca/X86/Haswell/resources-xsave.s
new file mode 100644 (file)
index 0000000..b46e25e
--- /dev/null
@@ -0,0 +1,51 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=haswell -instruction-tables < %s | FileCheck %s
+
+xgetbv
+
+xrstor  (%rax)
+
+xrstors (%rax)
+
+xsave   (%rax)
+
+xsetbv
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects (U)
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
+# CHECK-NEXT:  2      2     0.50                  U     xgetbv
+# CHECK-NEXT:  19     23    4.50    *      *      U     xrstor (%rax)
+# CHECK-NEXT:  19     23    4.50    *      *      U     xrstors        (%rax)
+# CHECK-NEXT:  28     31    6.25    *      *      U     xsave  (%rax)
+# CHECK-NEXT:  5      5     1.25    *      *      U     xsetbv
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - HWDivider
+# CHECK-NEXT: [1]   - HWFPDivider
+# CHECK-NEXT: [2]   - HWPort0
+# CHECK-NEXT: [3]   - HWPort1
+# CHECK-NEXT: [4]   - HWPort2
+# CHECK-NEXT: [5]   - HWPort3
+# CHECK-NEXT: [6]   - HWPort4
+# CHECK-NEXT: [7]   - HWPort5
+# CHECK-NEXT: [8]   - HWPort6
+# CHECK-NEXT: [9]   - HWPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     14.25  13.75  1.83   1.83   1.00   13.75  26.25  0.33
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    Instructions:
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     0.50   0.50    -     xgetbv
+# CHECK-NEXT:  -      -     3.75   3.75   0.50   0.50    -     3.75   6.75    -     xrstor     (%rax)
+# CHECK-NEXT:  -      -     3.75   3.75   0.50   0.50    -     3.75   6.75    -     xrstors    (%rax)
+# CHECK-NEXT:  -      -     4.75   4.75   0.83   0.83   1.00   4.75   10.75  0.33   xsave      (%rax)
+# CHECK-NEXT:  -      -     1.50   1.00    -      -      -     1.00   1.50    -     xsetbv
diff --git a/llvm/test/tools/llvm-mca/X86/IceLakeServer/resources-xsave.s b/llvm/test/tools/llvm-mca/X86/IceLakeServer/resources-xsave.s
new file mode 100644 (file)
index 0000000..db11b45
--- /dev/null
@@ -0,0 +1,53 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=icelake-server -instruction-tables < %s | FileCheck %s
+
+xgetbv
+
+xrstor  (%rax)
+
+xrstors (%rax)
+
+xsave   (%rax)
+
+xsetbv
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects (U)
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
+# CHECK-NEXT:  2      2     0.50                  U     xgetbv
+# CHECK-NEXT:  31     37    8.00    *      *      U     xrstor (%rax)
+# CHECK-NEXT:  31     37    8.00    *      *      U     xrstors        (%rax)
+# CHECK-NEXT:  40     42    11.00   *      *      U     xsave  (%rax)
+# CHECK-NEXT:  5      5     1.25    *      *      U     xsetbv
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - ICXDivider
+# CHECK-NEXT: [1]   - ICXFPDivider
+# CHECK-NEXT: [2]   - ICXPort0
+# CHECK-NEXT: [3]   - ICXPort1
+# CHECK-NEXT: [4]   - ICXPort2
+# CHECK-NEXT: [5]   - ICXPort3
+# CHECK-NEXT: [6]   - ICXPort4
+# CHECK-NEXT: [7]   - ICXPort5
+# CHECK-NEXT: [8]   - ICXPort6
+# CHECK-NEXT: [9]   - ICXPort7
+# CHECK-NEXT: [10]  - ICXPort8
+# CHECK-NEXT: [11]  - ICXPort9
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]
+# CHECK-NEXT:  -      -     19.00  20.50  1.83   1.83   1.00   18.50  46.00  0.33    -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]   Instructions:
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     0.50   0.50    -      -      -     xgetbv
+# CHECK-NEXT:  -      -     5.25   6.25   0.50   0.50    -     5.25   13.25   -      -      -     xrstor       (%rax)
+# CHECK-NEXT:  -      -     5.25   6.25   0.50   0.50    -     5.25   13.25   -      -      -     xrstors      (%rax)
+# CHECK-NEXT:  -      -     6.50   6.50   0.83   0.83   1.00   6.50   17.50  0.33    -      -     xsave        (%rax)
+# CHECK-NEXT:  -      -     1.50   1.00    -      -      -     1.00   1.50    -      -      -     xsetbv
diff --git a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-xsave.s b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-xsave.s
new file mode 100644 (file)
index 0000000..c97d983
--- /dev/null
@@ -0,0 +1,49 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=sandybridge -instruction-tables < %s | FileCheck %s
+
+xgetbv
+
+xrstor  (%rax)
+
+xrstors (%rax)
+
+xsave   (%rax)
+
+xsetbv
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects (U)
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
+# CHECK-NEXT:  1      100   0.33                  U     xgetbv
+# CHECK-NEXT:  1      100   0.33    *      *      U     xrstor (%rax)
+# CHECK-NEXT:  1      100   0.33    *      *      U     xrstors        (%rax)
+# CHECK-NEXT:  1      100   0.33    *      *      U     xsave  (%rax)
+# CHECK-NEXT:  1      100   0.33    *      *      U     xsetbv
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - SBDivider
+# CHECK-NEXT: [1]   - SBFPDivider
+# CHECK-NEXT: [2]   - SBPort0
+# CHECK-NEXT: [3]   - SBPort1
+# CHECK-NEXT: [4]   - SBPort4
+# CHECK-NEXT: [5]   - SBPort5
+# CHECK-NEXT: [6.0] - SBPort23
+# CHECK-NEXT: [6.1] - SBPort23
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]
+# CHECK-NEXT:  -      -     1.67   1.67    -     1.67    -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]  Instructions:
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -     xgetbv
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -     xrstor   (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -     xrstors  (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -     xsave    (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -     xsetbv
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-xsave.s b/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-xsave.s
new file mode 100644 (file)
index 0000000..1f3ec2e
--- /dev/null
@@ -0,0 +1,51 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake -instruction-tables < %s | FileCheck %s
+
+xgetbv
+
+xrstor  (%rax)
+
+xrstors (%rax)
+
+xsave   (%rax)
+
+xsetbv
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects (U)
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
+# CHECK-NEXT:  2      2     0.50                  U     xgetbv
+# CHECK-NEXT:  31     37    8.00    *      *      U     xrstor (%rax)
+# CHECK-NEXT:  31     37    8.00    *      *      U     xrstors        (%rax)
+# CHECK-NEXT:  40     42    11.00   *      *      U     xsave  (%rax)
+# CHECK-NEXT:  5      5     1.25    *      *      U     xsetbv
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - SKLDivider
+# CHECK-NEXT: [1]   - SKLFPDivider
+# CHECK-NEXT: [2]   - SKLPort0
+# CHECK-NEXT: [3]   - SKLPort1
+# CHECK-NEXT: [4]   - SKLPort2
+# CHECK-NEXT: [5]   - SKLPort3
+# CHECK-NEXT: [6]   - SKLPort4
+# CHECK-NEXT: [7]   - SKLPort5
+# CHECK-NEXT: [8]   - SKLPort6
+# CHECK-NEXT: [9]   - SKLPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     19.00  20.50  1.83   1.83   1.00   18.50  46.00  0.33
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    Instructions:
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     0.50   0.50    -     xgetbv
+# CHECK-NEXT:  -      -     5.25   6.25   0.50   0.50    -     5.25   13.25   -     xrstor     (%rax)
+# CHECK-NEXT:  -      -     5.25   6.25   0.50   0.50    -     5.25   13.25   -     xrstors    (%rax)
+# CHECK-NEXT:  -      -     6.50   6.50   0.83   0.83   1.00   6.50   17.50  0.33   xsave      (%rax)
+# CHECK-NEXT:  -      -     1.50   1.00    -      -      -     1.00   1.50    -     xsetbv
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-xsave.s b/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-xsave.s
new file mode 100644 (file)
index 0000000..3611b44
--- /dev/null
@@ -0,0 +1,51 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake-avx512 -instruction-tables < %s | FileCheck %s
+
+xgetbv
+
+xrstor  (%rax)
+
+xrstors (%rax)
+
+xsave   (%rax)
+
+xsetbv
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects (U)
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
+# CHECK-NEXT:  2      2     0.50                  U     xgetbv
+# CHECK-NEXT:  31     37    8.00    *      *      U     xrstor (%rax)
+# CHECK-NEXT:  31     37    8.00    *      *      U     xrstors        (%rax)
+# CHECK-NEXT:  40     42    11.00   *      *      U     xsave  (%rax)
+# CHECK-NEXT:  5      5     1.25    *      *      U     xsetbv
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - SKXDivider
+# CHECK-NEXT: [1]   - SKXFPDivider
+# CHECK-NEXT: [2]   - SKXPort0
+# CHECK-NEXT: [3]   - SKXPort1
+# CHECK-NEXT: [4]   - SKXPort2
+# CHECK-NEXT: [5]   - SKXPort3
+# CHECK-NEXT: [6]   - SKXPort4
+# CHECK-NEXT: [7]   - SKXPort5
+# CHECK-NEXT: [8]   - SKXPort6
+# CHECK-NEXT: [9]   - SKXPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     19.00  20.50  1.83   1.83   1.00   18.50  46.00  0.33
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    Instructions:
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     0.50   0.50    -     xgetbv
+# CHECK-NEXT:  -      -     5.25   6.25   0.50   0.50    -     5.25   13.25   -     xrstor     (%rax)
+# CHECK-NEXT:  -      -     5.25   6.25   0.50   0.50    -     5.25   13.25   -     xrstors    (%rax)
+# CHECK-NEXT:  -      -     6.50   6.50   0.83   0.83   1.00   6.50   17.50  0.33   xsave      (%rax)
+# CHECK-NEXT:  -      -     1.50   1.00    -      -      -     1.00   1.50    -     xsetbv
diff --git a/llvm/test/tools/llvm-mca/X86/Znver1/resources-xsave.s b/llvm/test/tools/llvm-mca/X86/Znver1/resources-xsave.s
new file mode 100644 (file)
index 0000000..d290783
--- /dev/null
@@ -0,0 +1,53 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=znver1 -instruction-tables < %s | FileCheck %s
+
+xgetbv
+
+xrstor  (%rax)
+
+xrstors (%rax)
+
+xsave   (%rax)
+
+xsetbv
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects (U)
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
+# CHECK-NEXT:  1      100   0.25                  U     xgetbv
+# CHECK-NEXT:  1      100   0.25    *      *      U     xrstor (%rax)
+# CHECK-NEXT:  1      100   0.25    *      *      U     xrstors        (%rax)
+# CHECK-NEXT:  1      100   0.25    *      *      U     xsave  (%rax)
+# CHECK-NEXT:  1      100   0.25    *      *      U     xsetbv
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - ZnAGU0
+# CHECK-NEXT: [1]   - ZnAGU1
+# CHECK-NEXT: [2]   - ZnALU0
+# CHECK-NEXT: [3]   - ZnALU1
+# CHECK-NEXT: [4]   - ZnALU2
+# CHECK-NEXT: [5]   - ZnALU3
+# CHECK-NEXT: [6]   - ZnDivider
+# CHECK-NEXT: [7]   - ZnFPU0
+# CHECK-NEXT: [8]   - ZnFPU1
+# CHECK-NEXT: [9]   - ZnFPU2
+# CHECK-NEXT: [10]  - ZnFPU3
+# CHECK-NEXT: [11]  - ZnMultiplier
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]   Instructions:
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     xgetbv
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     xrstor       (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     xrstors      (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     xsave        (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -     xsetbv
diff --git a/llvm/test/tools/llvm-mca/X86/Znver2/resources-xsave.s b/llvm/test/tools/llvm-mca/X86/Znver2/resources-xsave.s
new file mode 100644 (file)
index 0000000..0937781
--- /dev/null
@@ -0,0 +1,54 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=znver2 -instruction-tables < %s | FileCheck %s
+
+xgetbv
+
+xrstor  (%rax)
+
+xrstors (%rax)
+
+xsave   (%rax)
+
+xsetbv
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects (U)
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
+# CHECK-NEXT:  1      100   0.25                  U     xgetbv
+# CHECK-NEXT:  1      100   0.25    *      *      U     xrstor (%rax)
+# CHECK-NEXT:  1      100   0.25    *      *      U     xrstors        (%rax)
+# CHECK-NEXT:  1      100   0.25    *      *      U     xsave  (%rax)
+# CHECK-NEXT:  1      100   0.25    *      *      U     xsetbv
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - Zn2AGU0
+# CHECK-NEXT: [1]   - Zn2AGU1
+# CHECK-NEXT: [2]   - Zn2AGU2
+# CHECK-NEXT: [3]   - Zn2ALU0
+# CHECK-NEXT: [4]   - Zn2ALU1
+# CHECK-NEXT: [5]   - Zn2ALU2
+# CHECK-NEXT: [6]   - Zn2ALU3
+# CHECK-NEXT: [7]   - Zn2Divider
+# CHECK-NEXT: [8]   - Zn2FPU0
+# CHECK-NEXT: [9]   - Zn2FPU1
+# CHECK-NEXT: [10]  - Zn2FPU2
+# CHECK-NEXT: [11]  - Zn2FPU3
+# CHECK-NEXT: [12]  - Zn2Multiplier
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]   [12]
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]   [12]   Instructions:
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -      -     xgetbv
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -      -     xrstor        (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -      -     xrstors       (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -      -     xsave (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -      -     xsetbv
diff --git a/llvm/test/tools/llvm-mca/X86/Znver3/resources-xsave.s b/llvm/test/tools/llvm-mca/X86/Znver3/resources-xsave.s
new file mode 100644 (file)
index 0000000..819361c
--- /dev/null
@@ -0,0 +1,64 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=znver3 -instruction-tables < %s | FileCheck %s
+
+xgetbv
+
+xrstor  (%rax)
+
+xrstors (%rax)
+
+xsave   (%rax)
+
+xsetbv
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects (U)
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
+# CHECK-NEXT:  100    100   25.00                 U     xgetbv
+# CHECK-NEXT:  100    100   25.00   *      *      U     xrstor (%rax)
+# CHECK-NEXT:  100    100   25.00   *      *      U     xrstors        (%rax)
+# CHECK-NEXT:  100    100   25.00   *      *      U     xsave  (%rax)
+# CHECK-NEXT:  100    100   25.00   *      *      U     xsetbv
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0]   - Zn3AGU0
+# CHECK-NEXT: [1]   - Zn3AGU1
+# CHECK-NEXT: [2]   - Zn3AGU2
+# CHECK-NEXT: [3]   - Zn3ALU0
+# CHECK-NEXT: [4]   - Zn3ALU1
+# CHECK-NEXT: [5]   - Zn3ALU2
+# CHECK-NEXT: [6]   - Zn3ALU3
+# CHECK-NEXT: [7]   - Zn3BRU1
+# CHECK-NEXT: [8]   - Zn3FPP0
+# CHECK-NEXT: [9]   - Zn3FPP1
+# CHECK-NEXT: [10]  - Zn3FPP2
+# CHECK-NEXT: [11]  - Zn3FPP3
+# CHECK-NEXT: [12.0] - Zn3FPP45
+# CHECK-NEXT: [12.1] - Zn3FPP45
+# CHECK-NEXT: [13]  - Zn3FPSt
+# CHECK-NEXT: [14.0] - Zn3LSU
+# CHECK-NEXT: [14.1] - Zn3LSU
+# CHECK-NEXT: [14.2] - Zn3LSU
+# CHECK-NEXT: [15.0] - Zn3Load
+# CHECK-NEXT: [15.1] - Zn3Load
+# CHECK-NEXT: [15.2] - Zn3Load
+# CHECK-NEXT: [16.0] - Zn3Store
+# CHECK-NEXT: [16.1] - Zn3Store
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]   [12.0] [12.1] [13]   [14.0] [14.1] [14.2] [15.0] [15.1] [15.2] [16.0] [16.1]
+# CHECK-NEXT:  -      -      -     125.00 125.00 125.00 125.00  -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]   [12.0] [12.1] [13]   [14.0] [14.1] [14.2] [15.0] [15.1] [15.2] [16.0] [16.1] Instructions:
+# CHECK-NEXT:  -      -      -     25.00  25.00  25.00  25.00   -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -     xgetbv
+# CHECK-NEXT:  -      -      -     25.00  25.00  25.00  25.00   -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -     xrstor  (%rax)
+# CHECK-NEXT:  -      -      -     25.00  25.00  25.00  25.00   -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -     xrstors (%rax)
+# CHECK-NEXT:  -      -      -     25.00  25.00  25.00  25.00   -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -     xsave   (%rax)
+# CHECK-NEXT:  -      -      -     25.00  25.00  25.00  25.00   -      -      -      -      -      -      -      -      -      -      -      -      -      -      -      -     xsetbv