1# RUN: llc -march=amdgcn -mcpu=gfx900 %s -run-pass twoaddressinstruction -verify-machineinstrs -o - | FileCheck -check-prefix=GCN %s
2
3# GCN-LABEL: name: test_madmk_reg_imm_f32
4# GCN: V_MADMK_F32 killed %0.sub0, 1078523331, killed %1, implicit $mode, implicit $exec
5---
6name:            test_madmk_reg_imm_f32
7registers:
8  - { id: 0, class: vreg_64 }
9  - { id: 1, class: vgpr_32 }
10  - { id: 2, class: vgpr_32 }
11  - { id: 3, class: vgpr_32 }
12body:             |
13  bb.0:
14
15    %0 = IMPLICIT_DEF
16    %1 = COPY %0.sub1
17    %2 = V_MOV_B32_e32 1078523331, implicit $exec
18    %3 = V_MAC_F32_e32 killed %0.sub0, %2, killed %1, implicit $mode, implicit $exec
19
20...
21
22# GCN-LABEL: name: test_madmk_imm_reg_f32
23# GCN: V_MADMK_F32 killed %0.sub0, 1078523331, killed %1, implicit $mode, implicit $exec
24---
25name:            test_madmk_imm_reg_f32
26registers:
27  - { id: 0, class: vreg_64 }
28  - { id: 1, class: vgpr_32 }
29  - { id: 2, class: vgpr_32 }
30  - { id: 3, class: vgpr_32 }
31body:             |
32  bb.0:
33
34    %0 = IMPLICIT_DEF
35    %1 = COPY %0.sub1
36    %2 = V_MOV_B32_e32 1078523331, implicit $exec
37    %3 = V_MAC_F32_e32 %2, killed %0.sub0, killed %1, implicit $mode, implicit $exec
38
39...
40
41# GCN-LABEL: name: test_madak_f32
42# GCN: V_MADAK_F32 killed %0.sub0, %0.sub1, 1078523331, implicit $mode, implicit $exec
43---
44name:            test_madak_f32
45registers:
46  - { id: 0, class: vreg_64 }
47  - { id: 1, class: vgpr_32 }
48  - { id: 2, class: vgpr_32 }
49body:             |
50  bb.0:
51
52    %0 = IMPLICIT_DEF
53    %1 = V_MOV_B32_e32 1078523331, implicit $exec
54    %2 = V_MAC_F32_e32 killed %0.sub0, %0.sub1, %1, implicit $mode, implicit $exec
55
56...
57
58# GCN-LABEL: name: test_madmk_reg_imm_f16
59# GCN: V_MADMK_F16 killed %0.sub0, 1078523331, killed %1, implicit $mode, implicit $exec
60---
61name:            test_madmk_reg_imm_f16
62registers:
63  - { id: 0, class: vreg_64 }
64  - { id: 1, class: vgpr_32 }
65  - { id: 2, class: vgpr_32 }
66  - { id: 3, class: vgpr_32 }
67body:             |
68  bb.0:
69
70    %0 = IMPLICIT_DEF
71    %1 = COPY %0.sub1
72    %2 = V_MOV_B32_e32 1078523331, implicit $exec
73    %3 = V_MAC_F16_e32 killed %0.sub0, %2, killed %1, implicit $mode, implicit $exec
74
75...
76
77# GCN-LABEL: name: test_madmk_imm_reg_f16
78# GCN: V_MADMK_F16 killed %0.sub0, 1078523331, killed %1, implicit $mode, implicit $exec
79---
80name:            test_madmk_imm_reg_f16
81registers:
82  - { id: 0, class: vreg_64 }
83  - { id: 1, class: vgpr_32 }
84  - { id: 2, class: vgpr_32 }
85  - { id: 3, class: vgpr_32 }
86body:             |
87  bb.0:
88
89    %0 = IMPLICIT_DEF
90    %1 = COPY %0.sub1
91    %2 = V_MOV_B32_e32 1078523331, implicit $exec
92    %3 = V_MAC_F16_e32 %2, killed %0.sub0, killed %1, implicit $mode, implicit $exec
93
94...
95
96# GCN-LABEL: name: test_madak_f16
97# GCN: V_MADAK_F16 killed %0.sub0, %0.sub1, 1078523331, implicit $mode, implicit $exec
98---
99name:            test_madak_f16
100registers:
101  - { id: 0, class: vreg_64 }
102  - { id: 1, class: vgpr_32 }
103  - { id: 2, class: vgpr_32 }
104body:             |
105  bb.0:
106
107    %0 = IMPLICIT_DEF
108    %1 = V_MOV_B32_e32 1078523331, implicit $exec
109    %2 = V_MAC_F16_e32 killed %0.sub0, %0.sub1, %1, implicit $mode, implicit $exec
110...
111
112# Make sure constant bus restriction isn't violated if src0 is an SGPR.
113
114# GCN-LABEL: name: test_madak_sgpr_src0_f32
115# GCN: %1:vgpr_32 = V_MOV_B32_e32 1078523331, implicit $exec
116# GCN: %2:vgpr_32 = V_MAD_F32 0, killed %0, 0, %1, 0, %3:vgpr_32, 0, 0, implicit $mode, implicit $exec
117
118---
119name:            test_madak_sgpr_src0_f32
120registers:
121  - { id: 0, class: sreg_32_xm0 }
122  - { id: 1, class: vgpr_32}
123  - { id: 2, class: vgpr_32 }
124  - { id: 3, class: vgpr_32 }
125body:             |
126  bb.0:
127
128    %0 = IMPLICIT_DEF
129    %1 = V_MOV_B32_e32 1078523331, implicit $exec
130    %2 = V_MAC_F32_e32 killed %0, %1, %3, implicit $mode, implicit $exec
131
132...
133
134# This can still fold if this is an inline immediate.
135
136# GCN-LABEL: name: test_madak_inlineimm_src0_f32
137# GCN: %1:vgpr_32 = V_MADMK_F32 1073741824, 1078523331, %2:vgpr_32, implicit $mode, implicit $exec
138
139---
140name:            test_madak_inlineimm_src0_f32
141registers:
142  - { id: 0, class: vgpr_32}
143  - { id: 1, class: vgpr_32 }
144  - { id: 2, class: vgpr_32 }
145body:             |
146  bb.0:
147
148    %0 = V_MOV_B32_e32 1078523331, implicit $exec
149    %1 = V_MAC_F32_e32 1073741824, %0, %2, implicit $mode, implicit $exec
150
151...
152# Non-inline immediate uses constant bus already.
153
154# GCN-LABEL: name: test_madak_otherimm_src0_f32
155# GCN: %1:vgpr_32 = V_MAC_F32_e32 1120403456, %0, %1, implicit $mode, implicit $exec
156
157---
158name:            test_madak_otherimm_src0_f32
159registers:
160  - { id: 0, class: vgpr_32}
161  - { id: 1, class: vgpr_32 }
162  - { id: 2, class: vgpr_32 }
163body:             |
164  bb.0:
165
166    %0 = V_MOV_B32_e32 1078523331, implicit $exec
167    %1 = V_MAC_F32_e32 1120403456, %0, %2, implicit $mode, implicit $exec
168
169...
170# Non-inline immediate uses constant bus already.
171
172# GCN-LABEL: name: test_madak_other_constantlike_src0_f32
173# GCN: %1:vgpr_32 = V_MAC_F32_e32 %stack.0, %0, %1, implicit $mode, implicit $exec
174---
175name:            test_madak_other_constantlike_src0_f32
176registers:
177  - { id: 0, class: vgpr_32}
178  - { id: 1, class: vgpr_32 }
179  - { id: 2, class: vgpr_32 }
180stack:
181  - { id: 0, name: "", type: default, offset: 0, size: 128, alignment: 8,
182      callee-saved-register: '', local-offset: 0, debug-info-variable: '',
183      debug-info-expression: '', debug-info-location: '' }
184body:             |
185  bb.0:
186
187    %0 = V_MOV_B32_e32 1078523331, implicit $exec
188    %1 = V_MAC_F32_e32 %stack.0, %0, %2, implicit $mode, implicit $exec
189
190...
191
192# GCN-LABEL: name: test_madak_inline_literal_f16
193# GCN: %2:vgpr_32 = V_MADAK_F16 16384, killed %0, 49664, implicit $mode, implicit $exec
194
195---
196name:            test_madak_inline_literal_f16
197liveins:
198  - { reg: '$vgpr0', virtual-reg: '%3' }
199body:             |
200  bb.0:
201    liveins: $vgpr0
202
203    %3:vgpr_32 = COPY killed $vgpr0
204
205    %26:vgpr_32 = V_MOV_B32_e32 49664, implicit $exec
206    %28:vgpr_32 = V_MAC_F16_e32 16384, killed %3, %26, implicit $mode, implicit $exec
207    S_ENDPGM 0
208
209...
210
211