1# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
2# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=znver3 -timeline -timeline-max-iterations=2 -register-file-stats -iterations=1000 < %s | FileCheck %s
3
4# LLVM-MCA-BEGIN
5pcmpeqb %mm0, %mm0
6paddb %mm0, %mm0
7# LLVM-MCA-END
8
9# LLVM-MCA-BEGIN
10pcmpeqw %mm0, %mm0
11paddw %mm0, %mm0
12# LLVM-MCA-END
13
14# LLVM-MCA-BEGIN
15pcmpeqd %mm0, %mm0
16paddd %mm0, %mm0
17# LLVM-MCA-END
18
19# CHECK:      [0] Code Region
20
21# CHECK:      Iterations:        1000
22# CHECK-NEXT: Instructions:      2000
23# CHECK-NEXT: Total Cycles:      504
24# CHECK-NEXT: Total uOps:        2000
25
26# CHECK:      Dispatch Width:    6
27# CHECK-NEXT: uOps Per Cycle:    3.97
28# CHECK-NEXT: IPC:               3.97
29# CHECK-NEXT: Block RThroughput: 0.5
30
31# CHECK:      Instruction Info:
32# CHECK-NEXT: [1]: #uOps
33# CHECK-NEXT: [2]: Latency
34# CHECK-NEXT: [3]: RThroughput
35# CHECK-NEXT: [4]: MayLoad
36# CHECK-NEXT: [5]: MayStore
37# CHECK-NEXT: [6]: HasSideEffects (U)
38
39# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
40# CHECK-NEXT:  1      1     0.25                        pcmpeqb	%mm0, %mm0
41# CHECK-NEXT:  1      1     0.25                        paddb	%mm0, %mm0
42
43# CHECK:      Register File statistics:
44# CHECK-NEXT: Total number of mappings created:    2000
45# CHECK-NEXT: Max number of mappings used:         74
46
47# CHECK:      *  Register File #1 -- Zn3FpPRF:
48# CHECK-NEXT:    Number of physical registers:     160
49# CHECK-NEXT:    Total number of mappings created: 2000
50# CHECK-NEXT:    Max number of mappings used:      74
51
52# CHECK:      *  Register File #2 -- Zn3IntegerPRF:
53# CHECK-NEXT:    Number of physical registers:     192
54# CHECK-NEXT:    Total number of mappings created: 0
55# CHECK-NEXT:    Max number of mappings used:      0
56
57# CHECK:      Resources:
58# CHECK-NEXT: [0]   - Zn3AGU0
59# CHECK-NEXT: [1]   - Zn3AGU1
60# CHECK-NEXT: [2]   - Zn3AGU2
61# CHECK-NEXT: [3]   - Zn3ALU0
62# CHECK-NEXT: [4]   - Zn3ALU1
63# CHECK-NEXT: [5]   - Zn3ALU2
64# CHECK-NEXT: [6]   - Zn3ALU3
65# CHECK-NEXT: [7]   - Zn3BRU1
66# CHECK-NEXT: [8]   - Zn3FPP0
67# CHECK-NEXT: [9]   - Zn3FPP1
68# CHECK-NEXT: [10]  - Zn3FPP2
69# CHECK-NEXT: [11]  - Zn3FPP3
70# CHECK-NEXT: [12.0] - Zn3FPP45
71# CHECK-NEXT: [12.1] - Zn3FPP45
72# CHECK-NEXT: [13]  - Zn3FPSt
73# CHECK-NEXT: [14.0] - Zn3LSU
74# CHECK-NEXT: [14.1] - Zn3LSU
75# CHECK-NEXT: [14.2] - Zn3LSU
76# CHECK-NEXT: [15.0] - Zn3Load
77# CHECK-NEXT: [15.1] - Zn3Load
78# CHECK-NEXT: [15.2] - Zn3Load
79# CHECK-NEXT: [16.0] - Zn3Store
80# CHECK-NEXT: [16.1] - Zn3Store
81
82# CHECK:      Resource pressure per iteration:
83# 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]
84# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   0.50   0.50    -      -      -      -      -      -      -      -      -      -      -
85
86# CHECK:      Resource pressure by instruction:
87# 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:
88# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.25   0.25   0.50    -      -      -      -      -      -      -      -      -      -      -      -     pcmpeqb	%mm0, %mm0
89# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.25   0.25    -     0.50    -      -      -      -      -      -      -      -      -      -      -     paddb	%mm0, %mm0
90
91# CHECK:      Timeline view:
92# CHECK-NEXT: Index     01234
93
94# CHECK:      [0,0]     DeER.   pcmpeqb	%mm0, %mm0
95# CHECK-NEXT: [0,1]     D=eER   paddb	%mm0, %mm0
96# CHECK-NEXT: [1,0]     DeE-R   pcmpeqb	%mm0, %mm0
97# CHECK-NEXT: [1,1]     D=eER   paddb	%mm0, %mm0
98
99# CHECK:      Average Wait times (based on the timeline view):
100# CHECK-NEXT: [0]: Executions
101# CHECK-NEXT: [1]: Average time spent waiting in a scheduler's queue
102# CHECK-NEXT: [2]: Average time spent waiting in a scheduler's queue while ready
103# CHECK-NEXT: [3]: Average time elapsed from WB until retire stage
104
105# CHECK:            [0]    [1]    [2]    [3]
106# CHECK-NEXT: 0.     2     1.0    1.0    0.5       pcmpeqb	%mm0, %mm0
107# CHECK-NEXT: 1.     2     2.0    0.0    0.0       paddb	%mm0, %mm0
108# CHECK-NEXT:        2     1.5    0.5    0.3       <total>
109
110# CHECK:      [1] Code Region
111
112# CHECK:      Iterations:        1000
113# CHECK-NEXT: Instructions:      2000
114# CHECK-NEXT: Total Cycles:      504
115# CHECK-NEXT: Total uOps:        2000
116
117# CHECK:      Dispatch Width:    6
118# CHECK-NEXT: uOps Per Cycle:    3.97
119# CHECK-NEXT: IPC:               3.97
120# CHECK-NEXT: Block RThroughput: 0.5
121
122# CHECK:      Instruction Info:
123# CHECK-NEXT: [1]: #uOps
124# CHECK-NEXT: [2]: Latency
125# CHECK-NEXT: [3]: RThroughput
126# CHECK-NEXT: [4]: MayLoad
127# CHECK-NEXT: [5]: MayStore
128# CHECK-NEXT: [6]: HasSideEffects (U)
129
130# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
131# CHECK-NEXT:  1      1     0.25                        pcmpeqw	%mm0, %mm0
132# CHECK-NEXT:  1      1     0.25                        paddw	%mm0, %mm0
133
134# CHECK:      Register File statistics:
135# CHECK-NEXT: Total number of mappings created:    2000
136# CHECK-NEXT: Max number of mappings used:         74
137
138# CHECK:      *  Register File #1 -- Zn3FpPRF:
139# CHECK-NEXT:    Number of physical registers:     160
140# CHECK-NEXT:    Total number of mappings created: 2000
141# CHECK-NEXT:    Max number of mappings used:      74
142
143# CHECK:      *  Register File #2 -- Zn3IntegerPRF:
144# CHECK-NEXT:    Number of physical registers:     192
145# CHECK-NEXT:    Total number of mappings created: 0
146# CHECK-NEXT:    Max number of mappings used:      0
147
148# CHECK:      Resources:
149# CHECK-NEXT: [0]   - Zn3AGU0
150# CHECK-NEXT: [1]   - Zn3AGU1
151# CHECK-NEXT: [2]   - Zn3AGU2
152# CHECK-NEXT: [3]   - Zn3ALU0
153# CHECK-NEXT: [4]   - Zn3ALU1
154# CHECK-NEXT: [5]   - Zn3ALU2
155# CHECK-NEXT: [6]   - Zn3ALU3
156# CHECK-NEXT: [7]   - Zn3BRU1
157# CHECK-NEXT: [8]   - Zn3FPP0
158# CHECK-NEXT: [9]   - Zn3FPP1
159# CHECK-NEXT: [10]  - Zn3FPP2
160# CHECK-NEXT: [11]  - Zn3FPP3
161# CHECK-NEXT: [12.0] - Zn3FPP45
162# CHECK-NEXT: [12.1] - Zn3FPP45
163# CHECK-NEXT: [13]  - Zn3FPSt
164# CHECK-NEXT: [14.0] - Zn3LSU
165# CHECK-NEXT: [14.1] - Zn3LSU
166# CHECK-NEXT: [14.2] - Zn3LSU
167# CHECK-NEXT: [15.0] - Zn3Load
168# CHECK-NEXT: [15.1] - Zn3Load
169# CHECK-NEXT: [15.2] - Zn3Load
170# CHECK-NEXT: [16.0] - Zn3Store
171# CHECK-NEXT: [16.1] - Zn3Store
172
173# CHECK:      Resource pressure per iteration:
174# 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]
175# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   0.50   0.50    -      -      -      -      -      -      -      -      -      -      -
176
177# CHECK:      Resource pressure by instruction:
178# 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:
179# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.25   0.25   0.50    -      -      -      -      -      -      -      -      -      -      -      -     pcmpeqw	%mm0, %mm0
180# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.25   0.25    -     0.50    -      -      -      -      -      -      -      -      -      -      -     paddw	%mm0, %mm0
181
182# CHECK:      Timeline view:
183# CHECK-NEXT: Index     01234
184
185# CHECK:      [0,0]     DeER.   pcmpeqw	%mm0, %mm0
186# CHECK-NEXT: [0,1]     D=eER   paddw	%mm0, %mm0
187# CHECK-NEXT: [1,0]     DeE-R   pcmpeqw	%mm0, %mm0
188# CHECK-NEXT: [1,1]     D=eER   paddw	%mm0, %mm0
189
190# CHECK:      Average Wait times (based on the timeline view):
191# CHECK-NEXT: [0]: Executions
192# CHECK-NEXT: [1]: Average time spent waiting in a scheduler's queue
193# CHECK-NEXT: [2]: Average time spent waiting in a scheduler's queue while ready
194# CHECK-NEXT: [3]: Average time elapsed from WB until retire stage
195
196# CHECK:            [0]    [1]    [2]    [3]
197# CHECK-NEXT: 0.     2     1.0    1.0    0.5       pcmpeqw	%mm0, %mm0
198# CHECK-NEXT: 1.     2     2.0    0.0    0.0       paddw	%mm0, %mm0
199# CHECK-NEXT:        2     1.5    0.5    0.3       <total>
200
201# CHECK:      [2] Code Region
202
203# CHECK:      Iterations:        1000
204# CHECK-NEXT: Instructions:      2000
205# CHECK-NEXT: Total Cycles:      504
206# CHECK-NEXT: Total uOps:        2000
207
208# CHECK:      Dispatch Width:    6
209# CHECK-NEXT: uOps Per Cycle:    3.97
210# CHECK-NEXT: IPC:               3.97
211# CHECK-NEXT: Block RThroughput: 0.5
212
213# CHECK:      Instruction Info:
214# CHECK-NEXT: [1]: #uOps
215# CHECK-NEXT: [2]: Latency
216# CHECK-NEXT: [3]: RThroughput
217# CHECK-NEXT: [4]: MayLoad
218# CHECK-NEXT: [5]: MayStore
219# CHECK-NEXT: [6]: HasSideEffects (U)
220
221# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
222# CHECK-NEXT:  1      1     0.25                        pcmpeqd	%mm0, %mm0
223# CHECK-NEXT:  1      1     0.25                        paddd	%mm0, %mm0
224
225# CHECK:      Register File statistics:
226# CHECK-NEXT: Total number of mappings created:    2000
227# CHECK-NEXT: Max number of mappings used:         74
228
229# CHECK:      *  Register File #1 -- Zn3FpPRF:
230# CHECK-NEXT:    Number of physical registers:     160
231# CHECK-NEXT:    Total number of mappings created: 2000
232# CHECK-NEXT:    Max number of mappings used:      74
233
234# CHECK:      *  Register File #2 -- Zn3IntegerPRF:
235# CHECK-NEXT:    Number of physical registers:     192
236# CHECK-NEXT:    Total number of mappings created: 0
237# CHECK-NEXT:    Max number of mappings used:      0
238
239# CHECK:      Resources:
240# CHECK-NEXT: [0]   - Zn3AGU0
241# CHECK-NEXT: [1]   - Zn3AGU1
242# CHECK-NEXT: [2]   - Zn3AGU2
243# CHECK-NEXT: [3]   - Zn3ALU0
244# CHECK-NEXT: [4]   - Zn3ALU1
245# CHECK-NEXT: [5]   - Zn3ALU2
246# CHECK-NEXT: [6]   - Zn3ALU3
247# CHECK-NEXT: [7]   - Zn3BRU1
248# CHECK-NEXT: [8]   - Zn3FPP0
249# CHECK-NEXT: [9]   - Zn3FPP1
250# CHECK-NEXT: [10]  - Zn3FPP2
251# CHECK-NEXT: [11]  - Zn3FPP3
252# CHECK-NEXT: [12.0] - Zn3FPP45
253# CHECK-NEXT: [12.1] - Zn3FPP45
254# CHECK-NEXT: [13]  - Zn3FPSt
255# CHECK-NEXT: [14.0] - Zn3LSU
256# CHECK-NEXT: [14.1] - Zn3LSU
257# CHECK-NEXT: [14.2] - Zn3LSU
258# CHECK-NEXT: [15.0] - Zn3Load
259# CHECK-NEXT: [15.1] - Zn3Load
260# CHECK-NEXT: [15.2] - Zn3Load
261# CHECK-NEXT: [16.0] - Zn3Store
262# CHECK-NEXT: [16.1] - Zn3Store
263
264# CHECK:      Resource pressure per iteration:
265# 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]
266# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   0.50   0.50    -      -      -      -      -      -      -      -      -      -      -
267
268# CHECK:      Resource pressure by instruction:
269# 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:
270# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.25   0.25   0.50    -      -      -      -      -      -      -      -      -      -      -      -     pcmpeqd	%mm0, %mm0
271# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.25   0.25    -     0.50    -      -      -      -      -      -      -      -      -      -      -     paddd	%mm0, %mm0
272
273# CHECK:      Timeline view:
274# CHECK-NEXT: Index     01234
275
276# CHECK:      [0,0]     DeER.   pcmpeqd	%mm0, %mm0
277# CHECK-NEXT: [0,1]     D=eER   paddd	%mm0, %mm0
278# CHECK-NEXT: [1,0]     DeE-R   pcmpeqd	%mm0, %mm0
279# CHECK-NEXT: [1,1]     D=eER   paddd	%mm0, %mm0
280
281# CHECK:      Average Wait times (based on the timeline view):
282# CHECK-NEXT: [0]: Executions
283# CHECK-NEXT: [1]: Average time spent waiting in a scheduler's queue
284# CHECK-NEXT: [2]: Average time spent waiting in a scheduler's queue while ready
285# CHECK-NEXT: [3]: Average time elapsed from WB until retire stage
286
287# CHECK:            [0]    [1]    [2]    [3]
288# CHECK-NEXT: 0.     2     1.0    1.0    0.5       pcmpeqd	%mm0, %mm0
289# CHECK-NEXT: 1.     2     2.0    0.0    0.0       paddd	%mm0, %mm0
290# CHECK-NEXT:        2     1.5    0.5    0.3       <total>
291