xref: /llvm-project/llvm/test/CodeGen/AMDGPU/fold-operands-scalar-fmac.mir (revision 9e9907f1cfa424366fba58d9520f9305b537cec9)
1ecfdc23dSMirko Brkušanin# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2*9e9907f1SFangrui Song# RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -verify-machineinstrs -run-pass=si-fold-operands  %s -o - | FileCheck %s
3ecfdc23dSMirko Brkušanin
4ecfdc23dSMirko Brkušanin---
5ecfdc23dSMirko Brkušaninname:            fmac_fold_inlinable_src0_to_fmamk
6ecfdc23dSMirko BrkušanintracksRegLiveness: true
7ecfdc23dSMirko Brkušaninbody:             |
8ecfdc23dSMirko Brkušanin  bb.0:
9ecfdc23dSMirko Brkušanin    liveins: $sgpr0, $sgpr1
10ecfdc23dSMirko Brkušanin
11ecfdc23dSMirko Brkušanin    ; CHECK-LABEL: name: fmac_fold_inlinable_src0_to_fmamk
12ecfdc23dSMirko Brkušanin    ; CHECK: liveins: $sgpr0, $sgpr1
13ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: {{  $}}
14ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
15ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
16ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAMK_F32 [[COPY]], 1056964608, [[COPY1]], implicit $mode
17ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: $sgpr0 = COPY %fma
18ecfdc23dSMirko Brkušanin    %0:sreg_32 = COPY $sgpr0
19ecfdc23dSMirko Brkušanin    %1:sreg_32 = COPY $sgpr1
20ecfdc23dSMirko Brkušanin    %inlinable:sreg_32 = S_MOV_B32 1056964608
21ecfdc23dSMirko Brkušanin    %fma:sreg_32 = nofpexcept S_FMAC_F32 %inlinable, %0, %1, implicit $mode
22ecfdc23dSMirko Brkušanin    $sgpr0 = COPY %fma
23ecfdc23dSMirko Brkušanin...
24ecfdc23dSMirko Brkušanin---
25ecfdc23dSMirko Brkušaninname:            fmac_fold_inlinable_src1_to_fmamk
26ecfdc23dSMirko BrkušanintracksRegLiveness: true
27ecfdc23dSMirko Brkušaninbody:             |
28ecfdc23dSMirko Brkušanin  bb.0:
29ecfdc23dSMirko Brkušanin    liveins: $sgpr0, $sgpr1
30ecfdc23dSMirko Brkušanin
31ecfdc23dSMirko Brkušanin    ; CHECK-LABEL: name: fmac_fold_inlinable_src1_to_fmamk
32ecfdc23dSMirko Brkušanin    ; CHECK: liveins: $sgpr0, $sgpr1
33ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: {{  $}}
34ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
35ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
36ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAMK_F32 [[COPY]], 1056964608, [[COPY1]], implicit $mode
37ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: $sgpr0 = COPY %fma
38ecfdc23dSMirko Brkušanin    %0:sreg_32 = COPY $sgpr0
39ecfdc23dSMirko Brkušanin    %1:sreg_32 = COPY $sgpr1
40ecfdc23dSMirko Brkušanin    %inlinable:sreg_32 = S_MOV_B32 1056964608
41ecfdc23dSMirko Brkušanin    %fma:sreg_32 = nofpexcept S_FMAC_F32 %0, %inlinable, %1, implicit $mode
42ecfdc23dSMirko Brkušanin    $sgpr0 = COPY %fma
43ecfdc23dSMirko Brkušanin...
44ecfdc23dSMirko Brkušanin---
45ecfdc23dSMirko Brkušaninname:            fmac_fold_inlinable_src2_to_fmaak
46ecfdc23dSMirko BrkušanintracksRegLiveness: true
47ecfdc23dSMirko Brkušaninbody:             |
48ecfdc23dSMirko Brkušanin  bb.0:
49ecfdc23dSMirko Brkušanin    liveins: $sgpr0, $sgpr1
50ecfdc23dSMirko Brkušanin
51ecfdc23dSMirko Brkušanin    ; CHECK-LABEL: name: fmac_fold_inlinable_src2_to_fmaak
52ecfdc23dSMirko Brkušanin    ; CHECK: liveins: $sgpr0, $sgpr1
53ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: {{  $}}
54ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
55ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
56ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAAK_F32 [[COPY]], [[COPY1]], 1056964608, implicit $mode
57ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: $sgpr0 = COPY %fma
58ecfdc23dSMirko Brkušanin    %0:sreg_32 = COPY $sgpr0
59ecfdc23dSMirko Brkušanin    %1:sreg_32 = COPY $sgpr1
60ecfdc23dSMirko Brkušanin    %inlinable:sreg_32 = S_MOV_B32 1056964608
61ecfdc23dSMirko Brkušanin    %fma:sreg_32 = nofpexcept S_FMAC_F32 %0, %1, %inlinable, implicit $mode
62ecfdc23dSMirko Brkušanin    $sgpr0 = COPY %fma
63ecfdc23dSMirko Brkušanin...
64ecfdc23dSMirko Brkušanin---
65ecfdc23dSMirko Brkušaninname:            fmac_fold_noninlinable_src0_to_fmamk
66ecfdc23dSMirko BrkušanintracksRegLiveness: true
67ecfdc23dSMirko Brkušaninbody:             |
68ecfdc23dSMirko Brkušanin  bb.0:
69ecfdc23dSMirko Brkušanin    liveins: $sgpr0, $sgpr1
70ecfdc23dSMirko Brkušanin
71ecfdc23dSMirko Brkušanin    ; CHECK-LABEL: name: fmac_fold_noninlinable_src0_to_fmamk
72ecfdc23dSMirko Brkušanin    ; CHECK: liveins: $sgpr0, $sgpr1
73ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: {{  $}}
74ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
75ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
76ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAMK_F32 [[COPY]], 1234567890, [[COPY1]], implicit $mode
77ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: $sgpr0 = COPY %fma
78ecfdc23dSMirko Brkušanin    %0:sreg_32 = COPY $sgpr0
79ecfdc23dSMirko Brkušanin    %1:sreg_32 = COPY $sgpr1
80ecfdc23dSMirko Brkušanin    %noninlinable:sreg_32 = S_MOV_B32 1234567890
81ecfdc23dSMirko Brkušanin    %fma:sreg_32 = nofpexcept S_FMAC_F32 %noninlinable, %0, %1, implicit $mode
82ecfdc23dSMirko Brkušanin    $sgpr0 = COPY %fma
83ecfdc23dSMirko Brkušanin...
84ecfdc23dSMirko Brkušanin---
85ecfdc23dSMirko Brkušaninname:            fmac_fold_noninlinable_src1_to_fmamk
86ecfdc23dSMirko BrkušanintracksRegLiveness: true
87ecfdc23dSMirko Brkušaninbody:             |
88ecfdc23dSMirko Brkušanin  bb.0:
89ecfdc23dSMirko Brkušanin    liveins: $sgpr0, $sgpr1
90ecfdc23dSMirko Brkušanin
91ecfdc23dSMirko Brkušanin    ; CHECK-LABEL: name: fmac_fold_noninlinable_src1_to_fmamk
92ecfdc23dSMirko Brkušanin    ; CHECK: liveins: $sgpr0, $sgpr1
93ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: {{  $}}
94ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
95ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
96ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAMK_F32 [[COPY]], 1234567890, [[COPY1]], implicit $mode
97ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: $sgpr0 = COPY %fma
98ecfdc23dSMirko Brkušanin    %0:sreg_32 = COPY $sgpr0
99ecfdc23dSMirko Brkušanin    %1:sreg_32 = COPY $sgpr1
100ecfdc23dSMirko Brkušanin    %noninlinable:sreg_32 = S_MOV_B32 1234567890
101ecfdc23dSMirko Brkušanin    %fma:sreg_32 = nofpexcept S_FMAC_F32 %0, %noninlinable, %1, implicit $mode
102ecfdc23dSMirko Brkušanin    $sgpr0 = COPY %fma
103ecfdc23dSMirko Brkušanin...
104ecfdc23dSMirko Brkušanin---
105ecfdc23dSMirko Brkušaninname:            fmac_fold_noninlinable_src2_to_fmaak
106ecfdc23dSMirko BrkušanintracksRegLiveness: true
107ecfdc23dSMirko Brkušaninbody:             |
108ecfdc23dSMirko Brkušanin  bb.0:
109ecfdc23dSMirko Brkušanin    liveins: $sgpr0, $sgpr1
110ecfdc23dSMirko Brkušanin
111ecfdc23dSMirko Brkušanin    ; CHECK-LABEL: name: fmac_fold_noninlinable_src2_to_fmaak
112ecfdc23dSMirko Brkušanin    ; CHECK: liveins: $sgpr0, $sgpr1
113ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: {{  $}}
114ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
115ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
116ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAAK_F32 [[COPY]], [[COPY1]], 1234567890, implicit $mode
117ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: $sgpr0 = COPY %fma
118ecfdc23dSMirko Brkušanin    %0:sreg_32 = COPY $sgpr0
119ecfdc23dSMirko Brkušanin    %1:sreg_32 = COPY $sgpr1
120ecfdc23dSMirko Brkušanin    %noninlinable:sreg_32 = S_MOV_B32 1234567890
121ecfdc23dSMirko Brkušanin    %fma:sreg_32 = nofpexcept S_FMAC_F32 %0, %1, %noninlinable, implicit $mode
122ecfdc23dSMirko Brkušanin    $sgpr0 = COPY %fma
123ecfdc23dSMirko Brkušanin...
124ecfdc23dSMirko Brkušanin
125ecfdc23dSMirko Brkušanin---
126ecfdc23dSMirko Brkušaninname:            fmac_fold_inlinable_src2_to_fmaak_noninlinable_src0_to_fmamk
127ecfdc23dSMirko BrkušanintracksRegLiveness: true
128ecfdc23dSMirko Brkušaninbody:             |
129ecfdc23dSMirko Brkušanin  bb.0:
130ecfdc23dSMirko Brkušanin    liveins: $sgpr0
131ecfdc23dSMirko Brkušanin
132ecfdc23dSMirko Brkušanin    ; CHECK-LABEL: name: fmac_fold_inlinable_src2_to_fmaak_noninlinable_src0_to_fmamk
133ecfdc23dSMirko Brkušanin    ; CHECK: liveins: $sgpr0
134ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: {{  $}}
135ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
136ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAMK_F32 [[COPY]], 1234567890, 1056964608, implicit $mode
137ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: $sgpr0 = COPY %fma
138ecfdc23dSMirko Brkušanin    %0:sreg_32 = COPY $sgpr0
139ecfdc23dSMirko Brkušanin    %inlinable:sreg_32 = S_MOV_B32 1056964608
140ecfdc23dSMirko Brkušanin    %noninlinable:sreg_32 = S_MOV_B32 1234567890
141ecfdc23dSMirko Brkušanin    %fma:sreg_32 = nofpexcept S_FMAC_F32 %noninlinable, %0, %inlinable, implicit $mode
142ecfdc23dSMirko Brkušanin    $sgpr0 = COPY %fma
143ecfdc23dSMirko Brkušanin...
144ecfdc23dSMirko Brkušanin---
145ecfdc23dSMirko Brkušaninname:            fmac_fold_inlinable_src2_to_fmaak_noninlinable_src1_to_fmamk
146ecfdc23dSMirko BrkušanintracksRegLiveness: true
147ecfdc23dSMirko Brkušaninbody:             |
148ecfdc23dSMirko Brkušanin  bb.0:
149ecfdc23dSMirko Brkušanin    liveins: $sgpr0
150ecfdc23dSMirko Brkušanin
151ecfdc23dSMirko Brkušanin    ; CHECK-LABEL: name: fmac_fold_inlinable_src2_to_fmaak_noninlinable_src1_to_fmamk
152ecfdc23dSMirko Brkušanin    ; CHECK: liveins: $sgpr0
153ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: {{  $}}
154ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
155ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAMK_F32 [[COPY]], 1234567890, 1056964608, implicit $mode
156ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: $sgpr0 = COPY %fma
157ecfdc23dSMirko Brkušanin    %0:sreg_32 = COPY $sgpr0
158ecfdc23dSMirko Brkušanin    %inlinable:sreg_32 = S_MOV_B32 1056964608
159ecfdc23dSMirko Brkušanin    %noninlinable:sreg_32 = S_MOV_B32 1234567890
160ecfdc23dSMirko Brkušanin    %fma:sreg_32 = nofpexcept S_FMAC_F32 %0, %noninlinable, %inlinable, implicit $mode
161ecfdc23dSMirko Brkušanin    $sgpr0 = COPY %fma
162ecfdc23dSMirko Brkušanin...
163ecfdc23dSMirko Brkušanin---
164ecfdc23dSMirko Brkušaninname:            fmac_fold_noninlinable_src2_to_fmaak_inlinable_src1
165ecfdc23dSMirko BrkušanintracksRegLiveness: true
166ecfdc23dSMirko Brkušaninbody:             |
167ecfdc23dSMirko Brkušanin  bb.0:
168ecfdc23dSMirko Brkušanin    liveins: $sgpr0
169ecfdc23dSMirko Brkušanin
170ecfdc23dSMirko Brkušanin    ; CHECK-LABEL: name: fmac_fold_noninlinable_src2_to_fmaak_inlinable_src1
171ecfdc23dSMirko Brkušanin    ; CHECK: liveins: $sgpr0
172ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: {{  $}}
173ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
174ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAAK_F32 [[COPY]], 1056964608, 1234567890, implicit $mode
175ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: $sgpr0 = COPY %fma
176ecfdc23dSMirko Brkušanin    %0:sreg_32 = COPY $sgpr0
177ecfdc23dSMirko Brkušanin    %noninlinable:sreg_32 = S_MOV_B32 1234567890
178ecfdc23dSMirko Brkušanin    %inlinable:sreg_32 = S_MOV_B32 1056964608
179ecfdc23dSMirko Brkušanin    %fma:sreg_32 = nofpexcept S_FMAC_F32 %0, %inlinable, %noninlinable, implicit $mode
180ecfdc23dSMirko Brkušanin    $sgpr0 = COPY %fma
181ecfdc23dSMirko Brkušanin...
182ecfdc23dSMirko Brkušanin---
183ecfdc23dSMirko Brkušaninname:            fmac_fold_noninlinable_src2_to_fmaak_dont_fold_other_noninlinable
184ecfdc23dSMirko BrkušanintracksRegLiveness: true
185ecfdc23dSMirko Brkušaninbody:             |
186ecfdc23dSMirko Brkušanin  bb.0:
187ecfdc23dSMirko Brkušanin    liveins: $sgpr0
188ecfdc23dSMirko Brkušanin
189ecfdc23dSMirko Brkušanin    ; CHECK-LABEL: name: fmac_fold_noninlinable_src2_to_fmaak_dont_fold_other_noninlinable
190ecfdc23dSMirko Brkušanin    ; CHECK: liveins: $sgpr0
191ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: {{  $}}
192ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
193ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: %noninlinable2:sreg_32 = S_MOV_B32 1234567891
194ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAAK_F32 [[COPY]], %noninlinable2, 1234567890, implicit $mode
195ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: $sgpr0 = COPY %fma
196ecfdc23dSMirko Brkušanin    %0:sreg_32 = COPY $sgpr0
197ecfdc23dSMirko Brkušanin    %noninlinable:sreg_32 = S_MOV_B32 1234567890
198ecfdc23dSMirko Brkušanin    %noninlinable2:sreg_32 = S_MOV_B32 1234567891
199ecfdc23dSMirko Brkušanin    %fma:sreg_32 = nofpexcept S_FMAC_F32 %0, %noninlinable2, %noninlinable, implicit $mode
200ecfdc23dSMirko Brkušanin    $sgpr0 = COPY %fma
201ecfdc23dSMirko Brkušanin...
202ecfdc23dSMirko Brkušanin---
203ecfdc23dSMirko Brkušaninname:            fmac_fold_inlinable_src1_to_fmamk_noninlinable_src2_to_fmaak
204ecfdc23dSMirko BrkušanintracksRegLiveness: true
205ecfdc23dSMirko Brkušaninbody:             |
206ecfdc23dSMirko Brkušanin  bb.0:
207ecfdc23dSMirko Brkušanin    liveins: $sgpr0
208ecfdc23dSMirko Brkušanin
209ecfdc23dSMirko Brkušanin    ; CHECK-LABEL: name: fmac_fold_inlinable_src1_to_fmamk_noninlinable_src2_to_fmaak
210ecfdc23dSMirko Brkušanin    ; CHECK: liveins: $sgpr0
211ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: {{  $}}
212ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
213ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAAK_F32 [[COPY]], 1056964608, 1234567890, implicit $mode
214ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: $sgpr0 = COPY %fma
215ecfdc23dSMirko Brkušanin    %0:sreg_32 = COPY $sgpr0
216ecfdc23dSMirko Brkušanin    %inlinable:sreg_32 = S_MOV_B32 1056964608
217ecfdc23dSMirko Brkušanin    %noninlinable:sreg_32 = S_MOV_B32 1234567890
218ecfdc23dSMirko Brkušanin    %fma:sreg_32 = nofpexcept S_FMAC_F32 %0, %inlinable, %noninlinable, implicit $mode
219ecfdc23dSMirko Brkušanin    $sgpr0 = COPY %fma
220ecfdc23dSMirko Brkušanin...
221ecfdc23dSMirko Brkušanin---
222ecfdc23dSMirko Brkušaninname:            fmac_fold_same_noninlinable_src0_and_src1_to_fmamk
223ecfdc23dSMirko BrkušanintracksRegLiveness: true
224ecfdc23dSMirko Brkušaninbody:             |
225ecfdc23dSMirko Brkušanin  bb.0:
226ecfdc23dSMirko Brkušanin    liveins: $sgpr0
227ecfdc23dSMirko Brkušanin
228ecfdc23dSMirko Brkušanin    ; CHECK-LABEL: name: fmac_fold_same_noninlinable_src0_and_src1_to_fmamk
229ecfdc23dSMirko Brkušanin    ; CHECK: liveins: $sgpr0
230ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: {{  $}}
231ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
232ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAMK_F32 1234567890, 1234567890, [[COPY]], implicit $mode
233ecfdc23dSMirko Brkušanin    ; CHECK-NEXT: $sgpr0 = COPY %fma
234ecfdc23dSMirko Brkušanin    %0:sreg_32 = COPY $sgpr0
235ecfdc23dSMirko Brkušanin    %noninlinable:sreg_32 = S_MOV_B32 1234567890
236ecfdc23dSMirko Brkušanin    %fma:sreg_32 = nofpexcept S_FMAC_F32 %noninlinable, %noninlinable, %0, implicit $mode
237ecfdc23dSMirko Brkušanin    $sgpr0 = COPY %fma
238ecfdc23dSMirko Brkušanin...
239