xref: /llvm-project/llvm/test/tools/llvm-mca/X86/SkylakeClient/mulx-same-regs.s (revision 4a5b191703978a56ff6dcbae0e0bcb6b8933adfc)
1# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
2# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake -timeline -iterations=2 < %s | FileCheck %s
3
4# PR51495: If the two destination registers are the same, the destination will
5# contain teh high half of the multiplication result.
6
7# LLVM-MCA-BEGIN
8mulxl %eax, %eax, %eax
9# LLVM-MCA-END
10
11# LLVM-MCA-BEGIN
12mulxq %rax, %rax, %rax
13# LLVM-MCA-END
14
15# CHECK:      [0] Code Region
16
17# CHECK:      Iterations:        2
18# CHECK-NEXT: Instructions:      2
19# CHECK-NEXT: Total Cycles:      11
20# CHECK-NEXT: Total uOps:        8
21
22# CHECK:      Dispatch Width:    6
23# CHECK-NEXT: uOps Per Cycle:    0.73
24# CHECK-NEXT: IPC:               0.18
25# CHECK-NEXT: Block RThroughput: 1.0
26
27# CHECK:      Instruction Info:
28# CHECK-NEXT: [1]: #uOps
29# CHECK-NEXT: [2]: Latency
30# CHECK-NEXT: [3]: RThroughput
31# CHECK-NEXT: [4]: MayLoad
32# CHECK-NEXT: [5]: MayStore
33# CHECK-NEXT: [6]: HasSideEffects (U)
34
35# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
36# CHECK-NEXT:  4      4     1.00                        mulxl	%eax, %eax, %eax
37
38# CHECK:      Resources:
39# CHECK-NEXT: [0]   - SKLDivider
40# CHECK-NEXT: [1]   - SKLFPDivider
41# CHECK-NEXT: [2]   - SKLPort0
42# CHECK-NEXT: [3]   - SKLPort1
43# CHECK-NEXT: [4]   - SKLPort2
44# CHECK-NEXT: [5]   - SKLPort3
45# CHECK-NEXT: [6]   - SKLPort4
46# CHECK-NEXT: [7]   - SKLPort5
47# CHECK-NEXT: [8]   - SKLPort6
48# CHECK-NEXT: [9]   - SKLPort7
49
50# CHECK:      Resource pressure per iteration:
51# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
52# CHECK-NEXT:  -      -     0.50   1.00    -      -      -     0.50   1.00    -
53
54# CHECK:      Resource pressure by instruction:
55# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    Instructions:
56# CHECK-NEXT:  -      -     0.50   1.00    -      -      -     0.50   1.00    -     mulxl	%eax, %eax, %eax
57
58# CHECK:      Timeline view:
59# CHECK-NEXT:                     0
60# CHECK-NEXT: Index     0123456789
61
62# CHECK:      [0,0]     DeeeeER   .   mulxl	%eax, %eax, %eax
63# CHECK-NEXT: [1,0]     .D===eeeeER   mulxl	%eax, %eax, %eax
64
65# CHECK:      Average Wait times (based on the timeline view):
66# CHECK-NEXT: [0]: Executions
67# CHECK-NEXT: [1]: Average time spent waiting in a scheduler's queue
68# CHECK-NEXT: [2]: Average time spent waiting in a scheduler's queue while ready
69# CHECK-NEXT: [3]: Average time elapsed from WB until retire stage
70
71# CHECK:            [0]    [1]    [2]    [3]
72# CHECK-NEXT: 0.     2     2.5    0.5    0.0       mulxl	%eax, %eax, %eax
73
74# CHECK:      [1] Code Region
75
76# CHECK:      Iterations:        2
77# CHECK-NEXT: Instructions:      2
78# CHECK-NEXT: Total Cycles:      11
79# CHECK-NEXT: Total uOps:        6
80
81# CHECK:      Dispatch Width:    6
82# CHECK-NEXT: uOps Per Cycle:    0.55
83# CHECK-NEXT: IPC:               0.18
84# CHECK-NEXT: Block RThroughput: 1.0
85
86# CHECK:      Instruction Info:
87# CHECK-NEXT: [1]: #uOps
88# CHECK-NEXT: [2]: Latency
89# CHECK-NEXT: [3]: RThroughput
90# CHECK-NEXT: [4]: MayLoad
91# CHECK-NEXT: [5]: MayStore
92# CHECK-NEXT: [6]: HasSideEffects (U)
93
94# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
95# CHECK-NEXT:  3      4     1.00                        mulxq	%rax, %rax, %rax
96
97# CHECK:      Resources:
98# CHECK-NEXT: [0]   - SKLDivider
99# CHECK-NEXT: [1]   - SKLFPDivider
100# CHECK-NEXT: [2]   - SKLPort0
101# CHECK-NEXT: [3]   - SKLPort1
102# CHECK-NEXT: [4]   - SKLPort2
103# CHECK-NEXT: [5]   - SKLPort3
104# CHECK-NEXT: [6]   - SKLPort4
105# CHECK-NEXT: [7]   - SKLPort5
106# CHECK-NEXT: [8]   - SKLPort6
107# CHECK-NEXT: [9]   - SKLPort7
108
109# CHECK:      Resource pressure per iteration:
110# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
111# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -
112
113# CHECK:      Resource pressure by instruction:
114# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    Instructions:
115# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -     mulxq	%rax, %rax, %rax
116
117# CHECK:      Timeline view:
118# CHECK-NEXT:                     0
119# CHECK-NEXT: Index     0123456789
120
121# CHECK:      [0,0]     DeeeeER   .   mulxq	%rax, %rax, %rax
122# CHECK-NEXT: [1,0]     D====eeeeER   mulxq	%rax, %rax, %rax
123
124# CHECK:      Average Wait times (based on the timeline view):
125# CHECK-NEXT: [0]: Executions
126# CHECK-NEXT: [1]: Average time spent waiting in a scheduler's queue
127# CHECK-NEXT: [2]: Average time spent waiting in a scheduler's queue while ready
128# CHECK-NEXT: [3]: Average time elapsed from WB until retire stage
129
130# CHECK:            [0]    [1]    [2]    [3]
131# CHECK-NEXT: 0.     2     3.0    0.5    0.0       mulxq	%rax, %rax, %rax
132