xref: /llvm-project/llvm/test/tools/llvm-mca/X86/SLM/zero-idioms.s (revision bd0801cddfc8e827f17d45a43ac8d3754e0c3124)
1# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
2# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=slm -timeline -register-file-stats -iterations=1 < %s | FileCheck %s
3
4subl  %eax, %eax
5subq  %rax, %rax
6xorl  %eax, %eax
7xorq  %rax, %rax
8
9pcmpgtb   %mm2, %mm2
10pcmpgtd   %mm2, %mm2
11# pcmpgtq   %mm2, %mm2 # invalid operand for instruction
12pcmpgtw   %mm2, %mm2
13
14pcmpgtb   %xmm2, %xmm2
15pcmpgtd   %xmm2, %xmm2
16pcmpgtq   %xmm2, %xmm2
17pcmpgtw   %xmm2, %xmm2
18
19psubb   %mm2, %mm2
20psubd   %mm2, %mm2
21psubq   %mm2, %mm2
22psubw   %mm2, %mm2
23psubb   %xmm2, %xmm2
24psubd   %xmm2, %xmm2
25psubq   %xmm2, %xmm2
26psubw   %xmm2, %xmm2
27
28psubsb   %mm2, %mm2
29psubsw   %mm2, %mm2
30psubsb   %xmm2, %xmm2
31psubsw   %xmm2, %xmm2
32
33psubusb   %mm2, %mm2
34psubusw   %mm2, %mm2
35psubusb   %xmm2, %xmm2
36psubusw   %xmm2, %xmm2
37
38andnps  %xmm0, %xmm0
39andnpd  %xmm1, %xmm1
40pandn   %mm2, %mm2
41pandn   %xmm2, %xmm2
42vpandn  %xmm3, %xmm3, %xmm3
43
44xorps  %xmm0, %xmm0
45xorpd  %xmm1, %xmm1
46pxor   %mm2, %mm2
47pxor   %xmm2, %xmm2
48
49# CHECK:      Iterations:        1
50# CHECK-NEXT: Instructions:      36
51# CHECK-NEXT: Total Cycles:      31
52# CHECK-NEXT: Total uOps:        38
53
54# CHECK:      Dispatch Width:    2
55# CHECK-NEXT: uOps Per Cycle:    1.23
56# CHECK-NEXT: IPC:               1.16
57# CHECK-NEXT: Block RThroughput: 22.5
58
59# CHECK:      Instruction Info:
60# CHECK-NEXT: [1]: #uOps
61# CHECK-NEXT: [2]: Latency
62# CHECK-NEXT: [3]: RThroughput
63# CHECK-NEXT: [4]: MayLoad
64# CHECK-NEXT: [5]: MayStore
65# CHECK-NEXT: [6]: HasSideEffects (U)
66
67# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
68# CHECK-NEXT:  1      1     0.50                        subl	%eax, %eax
69# CHECK-NEXT:  1      1     0.50                        subq	%rax, %rax
70# CHECK-NEXT:  1      1     0.50                        xorl	%eax, %eax
71# CHECK-NEXT:  1      1     0.50                        xorq	%rax, %rax
72# CHECK-NEXT:  1      1     0.50                        pcmpgtb	%mm2, %mm2
73# CHECK-NEXT:  1      1     0.50                        pcmpgtd	%mm2, %mm2
74# CHECK-NEXT:  1      1     0.50                        pcmpgtw	%mm2, %mm2
75# CHECK-NEXT:  1      1     0.50                        pcmpgtb	%xmm2, %xmm2
76# CHECK-NEXT:  1      1     0.50                        pcmpgtd	%xmm2, %xmm2
77# CHECK-NEXT:  1      5     2.00                        pcmpgtq	%xmm2, %xmm2
78# CHECK-NEXT:  1      1     0.50                        pcmpgtw	%xmm2, %xmm2
79# CHECK-NEXT:  1      1     0.50                        psubb	%mm2, %mm2
80# CHECK-NEXT:  1      1     0.50                        psubd	%mm2, %mm2
81# CHECK-NEXT:  2      4     4.00                        psubq	%mm2, %mm2
82# CHECK-NEXT:  1      1     0.50                        psubw	%mm2, %mm2
83# CHECK-NEXT:  1      1     0.50                        psubb	%xmm2, %xmm2
84# CHECK-NEXT:  1      1     0.50                        psubd	%xmm2, %xmm2
85# CHECK-NEXT:  2      4     4.00                        psubq	%xmm2, %xmm2
86# CHECK-NEXT:  1      1     0.50                        psubw	%xmm2, %xmm2
87# CHECK-NEXT:  1      1     0.50                        psubsb	%mm2, %mm2
88# CHECK-NEXT:  1      1     0.50                        psubsw	%mm2, %mm2
89# CHECK-NEXT:  1      1     0.50                        psubsb	%xmm2, %xmm2
90# CHECK-NEXT:  1      1     0.50                        psubsw	%xmm2, %xmm2
91# CHECK-NEXT:  1      1     0.50                        psubusb	%mm2, %mm2
92# CHECK-NEXT:  1      1     0.50                        psubusw	%mm2, %mm2
93# CHECK-NEXT:  1      1     0.50                        psubusb	%xmm2, %xmm2
94# CHECK-NEXT:  1      1     0.50                        psubusw	%xmm2, %xmm2
95# CHECK-NEXT:  1      1     0.50                        andnps	%xmm0, %xmm0
96# CHECK-NEXT:  1      1     0.50                        andnpd	%xmm1, %xmm1
97# CHECK-NEXT:  1      1     0.50                        pandn	%mm2, %mm2
98# CHECK-NEXT:  1      1     0.50                        pandn	%xmm2, %xmm2
99# CHECK-NEXT:  1      1     0.50                        vpandn	%xmm3, %xmm3, %xmm3
100# CHECK-NEXT:  1      1     0.50                        xorps	%xmm0, %xmm0
101# CHECK-NEXT:  1      1     0.50                        xorpd	%xmm1, %xmm1
102# CHECK-NEXT:  1      1     0.50                        pxor	%mm2, %mm2
103# CHECK-NEXT:  1      1     0.50                        pxor	%xmm2, %xmm2
104
105# CHECK:      Register File statistics:
106# CHECK-NEXT: Total number of mappings created:    35
107# CHECK-NEXT: Max number of mappings used:         16
108
109# CHECK:      Resources:
110# CHECK-NEXT: [0]   - SLMDivider
111# CHECK-NEXT: [1]   - SLMFPDivider
112# CHECK-NEXT: [2]   - SLMFPMultiplier
113# CHECK-NEXT: [3]   - SLM_FPC_RSV0
114# CHECK-NEXT: [4]   - SLM_FPC_RSV1
115# CHECK-NEXT: [5]   - SLM_IEC_RSV0
116# CHECK-NEXT: [6]   - SLM_IEC_RSV1
117# CHECK-NEXT: [7]   - SLM_MEC_RSV
118
119# CHECK:      Resource pressure per iteration:
120# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]
121# CHECK-NEXT:  -      -      -     24.00  23.00  2.00   2.00    -
122
123# CHECK:      Resource pressure by instruction:
124# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    Instructions:
125# CHECK-NEXT:  -      -      -      -      -      -     1.00    -     subl	%eax, %eax
126# CHECK-NEXT:  -      -      -      -      -      -     1.00    -     subq	%rax, %rax
127# CHECK-NEXT:  -      -      -      -      -     1.00    -      -     xorl	%eax, %eax
128# CHECK-NEXT:  -      -      -      -      -     1.00    -      -     xorq	%rax, %rax
129# CHECK-NEXT:  -      -      -      -     1.00    -      -      -     pcmpgtb	%mm2, %mm2
130# CHECK-NEXT:  -      -      -     1.00    -      -      -      -     pcmpgtd	%mm2, %mm2
131# CHECK-NEXT:  -      -      -     1.00    -      -      -      -     pcmpgtw	%mm2, %mm2
132# CHECK-NEXT:  -      -      -      -     1.00    -      -      -     pcmpgtb	%xmm2, %xmm2
133# CHECK-NEXT:  -      -      -      -     1.00    -      -      -     pcmpgtd	%xmm2, %xmm2
134# CHECK-NEXT:  -      -      -     2.00    -      -      -      -     pcmpgtq	%xmm2, %xmm2
135# CHECK-NEXT:  -      -      -      -     1.00    -      -      -     pcmpgtw	%xmm2, %xmm2
136# CHECK-NEXT:  -      -      -      -     1.00    -      -      -     psubb	%mm2, %mm2
137# CHECK-NEXT:  -      -      -      -     1.00    -      -      -     psubd	%mm2, %mm2
138# CHECK-NEXT:  -      -      -     8.00    -      -      -      -     psubq	%mm2, %mm2
139# CHECK-NEXT:  -      -      -      -     1.00    -      -      -     psubw	%mm2, %mm2
140# CHECK-NEXT:  -      -      -      -     1.00    -      -      -     psubb	%xmm2, %xmm2
141# CHECK-NEXT:  -      -      -      -     1.00    -      -      -     psubd	%xmm2, %xmm2
142# CHECK-NEXT:  -      -      -      -     8.00    -      -      -     psubq	%xmm2, %xmm2
143# CHECK-NEXT:  -      -      -     1.00    -      -      -      -     psubw	%xmm2, %xmm2
144# CHECK-NEXT:  -      -      -     1.00    -      -      -      -     psubsb	%mm2, %mm2
145# CHECK-NEXT:  -      -      -     1.00    -      -      -      -     psubsw	%mm2, %mm2
146# CHECK-NEXT:  -      -      -     1.00    -      -      -      -     psubsb	%xmm2, %xmm2
147# CHECK-NEXT:  -      -      -     1.00    -      -      -      -     psubsw	%xmm2, %xmm2
148# CHECK-NEXT:  -      -      -     1.00    -      -      -      -     psubusb	%mm2, %mm2
149# CHECK-NEXT:  -      -      -     1.00    -      -      -      -     psubusw	%mm2, %mm2
150# CHECK-NEXT:  -      -      -      -     1.00    -      -      -     psubusb	%xmm2, %xmm2
151# CHECK-NEXT:  -      -      -      -     1.00    -      -      -     psubusw	%xmm2, %xmm2
152# CHECK-NEXT:  -      -      -     1.00    -      -      -      -     andnps	%xmm0, %xmm0
153# CHECK-NEXT:  -      -      -      -     1.00    -      -      -     andnpd	%xmm1, %xmm1
154# CHECK-NEXT:  -      -      -     1.00    -      -      -      -     pandn	%mm2, %mm2
155# CHECK-NEXT:  -      -      -     1.00    -      -      -      -     pandn	%xmm2, %xmm2
156# CHECK-NEXT:  -      -      -      -     1.00    -      -      -     vpandn	%xmm3, %xmm3, %xmm3
157# CHECK-NEXT:  -      -      -     1.00    -      -      -      -     xorps	%xmm0, %xmm0
158# CHECK-NEXT:  -      -      -      -     1.00    -      -      -     xorpd	%xmm1, %xmm1
159# CHECK-NEXT:  -      -      -     1.00    -      -      -      -     pxor	%mm2, %mm2
160# CHECK-NEXT:  -      -      -      -     1.00    -      -      -     pxor	%xmm2, %xmm2
161
162# CHECK:      Timeline view:
163# CHECK-NEXT:                     0123456789          0
164# CHECK-NEXT: Index     0123456789          0123456789
165
166# CHECK:      [0,0]     DeER .    .    .    .    .    .   subl	%eax, %eax
167# CHECK-NEXT: [0,1]     D=eER.    .    .    .    .    .   subq	%rax, %rax
168# CHECK-NEXT: [0,2]     .DeER.    .    .    .    .    .   xorl	%eax, %eax
169# CHECK-NEXT: [0,3]     .D=eER    .    .    .    .    .   xorq	%rax, %rax
170# CHECK-NEXT: [0,4]     . DeER    .    .    .    .    .   pcmpgtb	%mm2, %mm2
171# CHECK-NEXT: [0,5]     . D=eER   .    .    .    .    .   pcmpgtd	%mm2, %mm2
172# CHECK-NEXT: [0,6]     .  D=eER  .    .    .    .    .   pcmpgtw	%mm2, %mm2
173# CHECK-NEXT: [0,7]     .  DeE-R  .    .    .    .    .   pcmpgtb	%xmm2, %xmm2
174# CHECK-NEXT: [0,8]     .   DeER  .    .    .    .    .   pcmpgtd	%xmm2, %xmm2
175# CHECK-NEXT: [0,9]     .   D=eeeeeER  .    .    .    .   pcmpgtq	%xmm2, %xmm2
176# CHECK-NEXT: [0,10]    .    D=====eER .    .    .    .   pcmpgtw	%xmm2, %xmm2
177# CHECK-NEXT: [0,11]    .    DeE-----R .    .    .    .   psubb	%mm2, %mm2
178# CHECK-NEXT: [0,12]    .    .DeE----R .    .    .    .   psubd	%mm2, %mm2
179# CHECK-NEXT: [0,13]    .    . DeeeeER .    .    .    .   psubq	%mm2, %mm2
180# CHECK-NEXT: [0,14]    .    .  D===eER.    .    .    .   psubw	%mm2, %mm2
181# CHECK-NEXT: [0,15]    .    .  D====eER    .    .    .   psubb	%xmm2, %xmm2
182# CHECK-NEXT: [0,16]    .    .   D====eER   .    .    .   psubd	%xmm2, %xmm2
183# CHECK-NEXT: [0,17]    .    .    D====eeeeER    .    .   psubq	%xmm2, %xmm2
184# CHECK-NEXT: [0,18]    .    .    .D=======eER   .    .   psubw	%xmm2, %xmm2
185# CHECK-NEXT: [0,19]    .    .    .D====eE---R   .    .   psubsb	%mm2, %mm2
186# CHECK-NEXT: [0,20]    .    .    . D====eE--R   .    .   psubsw	%mm2, %mm2
187# CHECK-NEXT: [0,21]    .    .    . D=======eER  .    .   psubsb	%xmm2, %xmm2
188# CHECK-NEXT: [0,22]    .    .    .  D=======eER .    .   psubsw	%xmm2, %xmm2
189# CHECK-NEXT: [0,23]    .    .    .  D====eE---R .    .   psubusb	%mm2, %mm2
190# CHECK-NEXT: [0,24]    .    .    .   D=======eER.    .   psubusw	%mm2, %mm2
191# CHECK-NEXT: [0,25]    .    .    .   D========eER    .   psubusb	%xmm2, %xmm2
192# CHECK-NEXT: [0,26]    .    .    .    D========eER   .   psubusw	%xmm2, %xmm2
193# CHECK-NEXT: [0,27]    .    .    .    D=======eE-R   .   andnps	%xmm0, %xmm0
194# CHECK-NEXT: [0,28]    .    .    .    .D========eER  .   andnpd	%xmm1, %xmm1
195# CHECK-NEXT: [0,29]    .    .    .    .D=======eE-R  .   pandn	%mm2, %mm2
196# CHECK-NEXT: [0,30]    .    .    .    . D=======eER  .   pandn	%xmm2, %xmm2
197# CHECK-NEXT: [0,31]    .    .    .    . D========eER .   vpandn	%xmm3, %xmm3, %xmm3
198# CHECK-NEXT: [0,32]    .    .    .    .  D=======eER .   xorps	%xmm0, %xmm0
199# CHECK-NEXT: [0,33]    .    .    .    .  D========eER.   xorpd	%xmm1, %xmm1
200# CHECK-NEXT: [0,34]    .    .    .    .   D=======eER.   pxor	%mm2, %mm2
201# CHECK-NEXT: [0,35]    .    .    .    .   D========eER   pxor	%xmm2, %xmm2
202
203# CHECK:      Average Wait times (based on the timeline view):
204# CHECK-NEXT: [0]: Executions
205# CHECK-NEXT: [1]: Average time spent waiting in a scheduler's queue
206# CHECK-NEXT: [2]: Average time spent waiting in a scheduler's queue while ready
207# CHECK-NEXT: [3]: Average time elapsed from WB until retire stage
208
209# CHECK:            [0]    [1]    [2]    [3]
210# CHECK-NEXT: 0.     1     1.0    1.0    0.0       subl	%eax, %eax
211# CHECK-NEXT: 1.     1     2.0    0.0    0.0       subq	%rax, %rax
212# CHECK-NEXT: 2.     1     1.0    1.0    0.0       xorl	%eax, %eax
213# CHECK-NEXT: 3.     1     2.0    0.0    0.0       xorq	%rax, %rax
214# CHECK-NEXT: 4.     1     1.0    1.0    0.0       pcmpgtb	%mm2, %mm2
215# CHECK-NEXT: 5.     1     2.0    0.0    0.0       pcmpgtd	%mm2, %mm2
216# CHECK-NEXT: 6.     1     2.0    0.0    0.0       pcmpgtw	%mm2, %mm2
217# CHECK-NEXT: 7.     1     1.0    1.0    1.0       pcmpgtb	%xmm2, %xmm2
218# CHECK-NEXT: 8.     1     1.0    0.0    0.0       pcmpgtd	%xmm2, %xmm2
219# CHECK-NEXT: 9.     1     2.0    0.0    0.0       pcmpgtq	%xmm2, %xmm2
220# CHECK-NEXT: 10.    1     6.0    0.0    0.0       pcmpgtw	%xmm2, %xmm2
221# CHECK-NEXT: 11.    1     1.0    0.0    5.0       psubb	%mm2, %mm2
222# CHECK-NEXT: 12.    1     1.0    0.0    4.0       psubd	%mm2, %mm2
223# CHECK-NEXT: 13.    1     1.0    0.0    0.0       psubq	%mm2, %mm2
224# CHECK-NEXT: 14.    1     4.0    0.0    0.0       psubw	%mm2, %mm2
225# CHECK-NEXT: 15.    1     5.0    1.0    0.0       psubb	%xmm2, %xmm2
226# CHECK-NEXT: 16.    1     5.0    0.0    0.0       psubd	%xmm2, %xmm2
227# CHECK-NEXT: 17.    1     5.0    0.0    0.0       psubq	%xmm2, %xmm2
228# CHECK-NEXT: 18.    1     8.0    0.0    0.0       psubw	%xmm2, %xmm2
229# CHECK-NEXT: 19.    1     5.0    3.0    3.0       psubsb	%mm2, %mm2
230# CHECK-NEXT: 20.    1     5.0    0.0    2.0       psubsw	%mm2, %mm2
231# CHECK-NEXT: 21.    1     8.0    0.0    0.0       psubsb	%xmm2, %xmm2
232# CHECK-NEXT: 22.    1     8.0    0.0    0.0       psubsw	%xmm2, %xmm2
233# CHECK-NEXT: 23.    1     5.0    0.0    3.0       psubusb	%mm2, %mm2
234# CHECK-NEXT: 24.    1     8.0    3.0    0.0       psubusw	%mm2, %mm2
235# CHECK-NEXT: 25.    1     9.0    1.0    0.0       psubusb	%xmm2, %xmm2
236# CHECK-NEXT: 26.    1     9.0    0.0    0.0       psubusw	%xmm2, %xmm2
237# CHECK-NEXT: 27.    1     8.0    8.0    1.0       andnps	%xmm0, %xmm0
238# CHECK-NEXT: 28.    1     9.0    9.0    0.0       andnpd	%xmm1, %xmm1
239# CHECK-NEXT: 29.    1     8.0    1.0    1.0       pandn	%mm2, %mm2
240# CHECK-NEXT: 30.    1     8.0    0.0    0.0       pandn	%xmm2, %xmm2
241# CHECK-NEXT: 31.    1     9.0    9.0    0.0       vpandn	%xmm3, %xmm3, %xmm3
242# CHECK-NEXT: 32.    1     8.0    8.0    0.0       xorps	%xmm0, %xmm0
243# CHECK-NEXT: 33.    1     9.0    9.0    0.0       xorpd	%xmm1, %xmm1
244# CHECK-NEXT: 34.    1     8.0    2.0    0.0       pxor	%mm2, %mm2
245# CHECK-NEXT: 35.    1     9.0    9.0    0.0       pxor	%xmm2, %xmm2
246# CHECK-NEXT:        1     5.1    1.9    0.6       <total>
247