1# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
2# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -instruction-tables < %s | FileCheck %s
3
4vpopcntd    %xmm1, %xmm0
5vpopcntd    (%rdi), %xmm0
6vpopcntd    (%rdi){1to4}, %xmm0
7
8vpopcntd    %xmm1, %xmm0 {%k1}
9vpopcntd    (%rdi), %xmm0 {%k1}
10vpopcntd    (%rdi){1to4}, %xmm0 {%k1}
11
12vpopcntd    %xmm1, %xmm0 {%k1} {z}
13vpopcntd    (%rdi), %xmm0 {%k1} {z}
14vpopcntd    (%rdi){1to4}, %xmm0 {%k1} {z}
15
16vpopcntd    %ymm1, %ymm0
17vpopcntd    (%rdi), %ymm0
18vpopcntd    (%rdi){1to8}, %ymm0
19
20vpopcntd    %ymm1, %ymm0 {%k1}
21vpopcntd    (%rdi), %ymm0 {%k1}
22vpopcntd    (%rdi){1to8}, %ymm0 {%k1}
23
24vpopcntd    %ymm1, %ymm0 {%k1} {z}
25vpopcntd    (%rdi), %ymm0 {%k1} {z}
26vpopcntd    (%rdi){1to8}, %ymm0 {%k1} {z}
27
28vpopcntq    %xmm1, %xmm0
29vpopcntq    (%rdi), %xmm0
30vpopcntq    (%rdi){1to2}, %xmm0
31
32vpopcntq    %xmm1, %xmm0 {%k1}
33vpopcntq    (%rdi), %xmm0 {%k1}
34vpopcntq    (%rdi){1to2}, %xmm0 {%k1}
35
36vpopcntq    %xmm1, %xmm0 {%k1} {z}
37vpopcntq    (%rdi), %xmm0 {%k1} {z}
38vpopcntq    (%rdi){1to2}, %xmm0 {%k1} {z}
39
40vpopcntq    %ymm1, %ymm0
41vpopcntq    (%rdi), %ymm0
42vpopcntq    (%rdi){1to4}, %ymm0
43
44vpopcntq    %ymm1, %ymm0 {%k1}
45vpopcntq    (%rdi), %ymm0 {%k1}
46vpopcntq    (%rdi){1to4}, %ymm0 {%k1}
47
48vpopcntq    %ymm1, %ymm0 {%k1} {z}
49vpopcntq    (%rdi), %ymm0 {%k1} {z}
50vpopcntq    (%rdi){1to4}, %ymm0 {%k1} {z}
51
52# CHECK:      Instruction Info:
53# CHECK-NEXT: [1]: #uOps
54# CHECK-NEXT: [2]: Latency
55# CHECK-NEXT: [3]: RThroughput
56# CHECK-NEXT: [4]: MayLoad
57# CHECK-NEXT: [5]: MayStore
58# CHECK-NEXT: [6]: HasSideEffects (U)
59
60# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
61# CHECK-NEXT:  1      1     0.50                        vpopcntd	%xmm1, %xmm0
62# CHECK-NEXT:  2      7     0.50    *                   vpopcntd	(%rdi), %xmm0
63# CHECK-NEXT:  2      7     0.50    *                   vpopcntd	(%rdi){1to4}, %xmm0
64# CHECK-NEXT:  1      1     0.50                        vpopcntd	%xmm1, %xmm0 {%k1}
65# CHECK-NEXT:  2      7     0.50    *                   vpopcntd	(%rdi), %xmm0 {%k1}
66# CHECK-NEXT:  2      7     0.50    *                   vpopcntd	(%rdi){1to4}, %xmm0 {%k1}
67# CHECK-NEXT:  1      1     0.50                        vpopcntd	%xmm1, %xmm0 {%k1} {z}
68# CHECK-NEXT:  2      7     0.50    *                   vpopcntd	(%rdi), %xmm0 {%k1} {z}
69# CHECK-NEXT:  2      7     0.50    *                   vpopcntd	(%rdi){1to4}, %xmm0 {%k1} {z}
70# CHECK-NEXT:  1      1     0.50                        vpopcntd	%ymm1, %ymm0
71# CHECK-NEXT:  2      8     0.50    *                   vpopcntd	(%rdi), %ymm0
72# CHECK-NEXT:  2      8     0.50    *                   vpopcntd	(%rdi){1to8}, %ymm0
73# CHECK-NEXT:  1      1     0.50                        vpopcntd	%ymm1, %ymm0 {%k1}
74# CHECK-NEXT:  2      8     0.50    *                   vpopcntd	(%rdi), %ymm0 {%k1}
75# CHECK-NEXT:  2      8     0.50    *                   vpopcntd	(%rdi){1to8}, %ymm0 {%k1}
76# CHECK-NEXT:  1      1     0.50                        vpopcntd	%ymm1, %ymm0 {%k1} {z}
77# CHECK-NEXT:  2      8     0.50    *                   vpopcntd	(%rdi), %ymm0 {%k1} {z}
78# CHECK-NEXT:  2      8     0.50    *                   vpopcntd	(%rdi){1to8}, %ymm0 {%k1} {z}
79# CHECK-NEXT:  1      1     0.50                        vpopcntq	%xmm1, %xmm0
80# CHECK-NEXT:  2      7     0.50    *                   vpopcntq	(%rdi), %xmm0
81# CHECK-NEXT:  2      7     0.50    *                   vpopcntq	(%rdi){1to2}, %xmm0
82# CHECK-NEXT:  1      1     0.50                        vpopcntq	%xmm1, %xmm0 {%k1}
83# CHECK-NEXT:  2      7     0.50    *                   vpopcntq	(%rdi), %xmm0 {%k1}
84# CHECK-NEXT:  2      7     0.50    *                   vpopcntq	(%rdi){1to2}, %xmm0 {%k1}
85# CHECK-NEXT:  1      1     0.50                        vpopcntq	%xmm1, %xmm0 {%k1} {z}
86# CHECK-NEXT:  2      7     0.50    *                   vpopcntq	(%rdi), %xmm0 {%k1} {z}
87# CHECK-NEXT:  2      7     0.50    *                   vpopcntq	(%rdi){1to2}, %xmm0 {%k1} {z}
88# CHECK-NEXT:  1      1     0.50                        vpopcntq	%ymm1, %ymm0
89# CHECK-NEXT:  2      8     0.50    *                   vpopcntq	(%rdi), %ymm0
90# CHECK-NEXT:  2      8     0.50    *                   vpopcntq	(%rdi){1to4}, %ymm0
91# CHECK-NEXT:  1      1     0.50                        vpopcntq	%ymm1, %ymm0 {%k1}
92# CHECK-NEXT:  2      8     0.50    *                   vpopcntq	(%rdi), %ymm0 {%k1}
93# CHECK-NEXT:  2      8     0.50    *                   vpopcntq	(%rdi){1to4}, %ymm0 {%k1}
94# CHECK-NEXT:  1      1     0.50                        vpopcntq	%ymm1, %ymm0 {%k1} {z}
95# CHECK-NEXT:  2      8     0.50    *                   vpopcntq	(%rdi), %ymm0 {%k1} {z}
96# CHECK-NEXT:  2      8     0.50    *                   vpopcntq	(%rdi){1to4}, %ymm0 {%k1} {z}
97
98# CHECK:      Resources:
99# CHECK-NEXT: [0]   - SBDivider
100# CHECK-NEXT: [1]   - SBFPDivider
101# CHECK-NEXT: [2]   - SBPort0
102# CHECK-NEXT: [3]   - SBPort1
103# CHECK-NEXT: [4]   - SBPort4
104# CHECK-NEXT: [5]   - SBPort5
105# CHECK-NEXT: [6.0] - SBPort23
106# CHECK-NEXT: [6.1] - SBPort23
107
108# CHECK:      Resource pressure per iteration:
109# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]
110# CHECK-NEXT:  -      -      -     18.00   -     18.00  12.00  12.00
111
112# CHECK:      Resource pressure by instruction:
113# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]  Instructions:
114# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -     vpopcntd	%xmm1, %xmm0
115# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntd	(%rdi), %xmm0
116# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntd	(%rdi){1to4}, %xmm0
117# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -     vpopcntd	%xmm1, %xmm0 {%k1}
118# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntd	(%rdi), %xmm0 {%k1}
119# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntd	(%rdi){1to4}, %xmm0 {%k1}
120# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -     vpopcntd	%xmm1, %xmm0 {%k1} {z}
121# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntd	(%rdi), %xmm0 {%k1} {z}
122# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntd	(%rdi){1to4}, %xmm0 {%k1} {z}
123# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -     vpopcntd	%ymm1, %ymm0
124# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntd	(%rdi), %ymm0
125# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntd	(%rdi){1to8}, %ymm0
126# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -     vpopcntd	%ymm1, %ymm0 {%k1}
127# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntd	(%rdi), %ymm0 {%k1}
128# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntd	(%rdi){1to8}, %ymm0 {%k1}
129# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -     vpopcntd	%ymm1, %ymm0 {%k1} {z}
130# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntd	(%rdi), %ymm0 {%k1} {z}
131# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntd	(%rdi){1to8}, %ymm0 {%k1} {z}
132# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -     vpopcntq	%xmm1, %xmm0
133# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntq	(%rdi), %xmm0
134# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntq	(%rdi){1to2}, %xmm0
135# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -     vpopcntq	%xmm1, %xmm0 {%k1}
136# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntq	(%rdi), %xmm0 {%k1}
137# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntq	(%rdi){1to2}, %xmm0 {%k1}
138# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -     vpopcntq	%xmm1, %xmm0 {%k1} {z}
139# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntq	(%rdi), %xmm0 {%k1} {z}
140# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntq	(%rdi){1to2}, %xmm0 {%k1} {z}
141# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -     vpopcntq	%ymm1, %ymm0
142# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntq	(%rdi), %ymm0
143# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntq	(%rdi){1to4}, %ymm0
144# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -     vpopcntq	%ymm1, %ymm0 {%k1}
145# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntq	(%rdi), %ymm0 {%k1}
146# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntq	(%rdi){1to4}, %ymm0 {%k1}
147# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -     vpopcntq	%ymm1, %ymm0 {%k1} {z}
148# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntq	(%rdi), %ymm0 {%k1} {z}
149# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50   vpopcntq	(%rdi){1to4}, %ymm0 {%k1} {z}
150