xref: /llvm-project/llvm/test/CodeGen/RISCV/machine-cse.ll (revision 7b0c41841eb7e1c2f56384c421918ff3fb2d9058)
140f1af47SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2c2614b31SCraig Topper; RUN: llc < %s -mtriple=riscv32 -mattr=+f,+d,+zfh -target-abi=ilp32d | \
3c2614b31SCraig Topper; RUN:   FileCheck %s --check-prefixes=RV32
4c2614b31SCraig Topper; RUN: llc < %s -mtriple=riscv64 -mattr=+f,+d,+zfh -target-abi=lp64d | \
5c2614b31SCraig Topper; RUN:   FileCheck %s --check-prefixes=RV64
640f1af47SCraig Topper
740f1af47SCraig Topper; Make sure MachineCSE can combine the adds with the operands commuted.
840f1af47SCraig Topper
91456b686SNikita Popovdefine void @commute_add_i32(i32 signext %x, i32 signext %y, ptr %p1, ptr %p2, i1 zeroext %cond) {
1040f1af47SCraig Topper; RV32-LABEL: commute_add_i32:
1140f1af47SCraig Topper; RV32:       # %bb.0:
1240f1af47SCraig Topper; RV32-NEXT:    add a0, a0, a1
1340f1af47SCraig Topper; RV32-NEXT:    sw a0, 0(a2)
1440f1af47SCraig Topper; RV32-NEXT:    beqz a4, .LBB0_2
1540f1af47SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
1640f1af47SCraig Topper; RV32-NEXT:    sw a0, 0(a2)
1740f1af47SCraig Topper; RV32-NEXT:  .LBB0_2: # %falseblock
1840f1af47SCraig Topper; RV32-NEXT:    ret
1940f1af47SCraig Topper;
2040f1af47SCraig Topper; RV64-LABEL: commute_add_i32:
2140f1af47SCraig Topper; RV64:       # %bb.0:
22d64d3c5aSNitin John Raj; RV64-NEXT:    add a0, a0, a1
2340f1af47SCraig Topper; RV64-NEXT:    sw a0, 0(a2)
2440f1af47SCraig Topper; RV64-NEXT:    beqz a4, .LBB0_2
2540f1af47SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
2640f1af47SCraig Topper; RV64-NEXT:    sw a0, 0(a2)
2740f1af47SCraig Topper; RV64-NEXT:  .LBB0_2: # %falseblock
2840f1af47SCraig Topper; RV64-NEXT:    ret
2940f1af47SCraig Topper  %a = add i32 %x, %y
301456b686SNikita Popov  store i32 %a, ptr %p1
3140f1af47SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
3240f1af47SCraig Topper
3340f1af47SCraig Toppertrueblock:
3440f1af47SCraig Topper  %b = add i32 %y, %x
351456b686SNikita Popov  store i32 %b, ptr %p1
3640f1af47SCraig Topper  br label %falseblock
3740f1af47SCraig Topper
3840f1af47SCraig Topperfalseblock:
3940f1af47SCraig Topper  ret void
4040f1af47SCraig Topper}
4140f1af47SCraig Topper
421456b686SNikita Popovdefine void @commute_add_i64(i64 %x, i64 %y, ptr %p1, ptr %p2, i1 zeroext %cond) {
4340f1af47SCraig Topper; RV32-LABEL: commute_add_i64:
4440f1af47SCraig Topper; RV32:       # %bb.0:
4540f1af47SCraig Topper; RV32-NEXT:    add a1, a1, a3
4640f1af47SCraig Topper; RV32-NEXT:    add a3, a0, a2
4740f1af47SCraig Topper; RV32-NEXT:    sltu a0, a3, a0
4840f1af47SCraig Topper; RV32-NEXT:    add a0, a1, a0
4940f1af47SCraig Topper; RV32-NEXT:    sw a3, 0(a4)
5040f1af47SCraig Topper; RV32-NEXT:    sw a0, 4(a4)
5140f1af47SCraig Topper; RV32-NEXT:    beqz a6, .LBB1_2
5240f1af47SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
5340f1af47SCraig Topper; RV32-NEXT:    sltu a0, a3, a2
5440f1af47SCraig Topper; RV32-NEXT:    add a0, a1, a0
5540f1af47SCraig Topper; RV32-NEXT:    sw a3, 0(a4)
5640f1af47SCraig Topper; RV32-NEXT:    sw a0, 4(a4)
5740f1af47SCraig Topper; RV32-NEXT:  .LBB1_2: # %falseblock
5840f1af47SCraig Topper; RV32-NEXT:    ret
5940f1af47SCraig Topper;
6040f1af47SCraig Topper; RV64-LABEL: commute_add_i64:
6140f1af47SCraig Topper; RV64:       # %bb.0:
6240f1af47SCraig Topper; RV64-NEXT:    add a0, a0, a1
6340f1af47SCraig Topper; RV64-NEXT:    sd a0, 0(a2)
6440f1af47SCraig Topper; RV64-NEXT:    beqz a4, .LBB1_2
6540f1af47SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
6640f1af47SCraig Topper; RV64-NEXT:    sd a0, 0(a2)
6740f1af47SCraig Topper; RV64-NEXT:  .LBB1_2: # %falseblock
6840f1af47SCraig Topper; RV64-NEXT:    ret
6940f1af47SCraig Topper  %a = add i64 %x, %y
701456b686SNikita Popov  store i64 %a, ptr %p1
7140f1af47SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
7240f1af47SCraig Topper
7340f1af47SCraig Toppertrueblock:
7440f1af47SCraig Topper  %b = add i64 %y, %x
751456b686SNikita Popov  store i64 %b, ptr %p1
7640f1af47SCraig Topper  br label %falseblock
7740f1af47SCraig Topper
7840f1af47SCraig Topperfalseblock:
7940f1af47SCraig Topper  ret void
8040f1af47SCraig Topper}
81c2614b31SCraig Topper
82c2614b31SCraig Topperdeclare half @llvm.fma.f16(half, half, half)
83c2614b31SCraig Topper
841456b686SNikita Popovdefine void @commute_fmadd_f16(half %x, half %y, half %z, ptr %p1, ptr %p2, i1 zeroext %cond) {
85c2614b31SCraig Topper; RV32-LABEL: commute_fmadd_f16:
86c2614b31SCraig Topper; RV32:       # %bb.0:
87*7b0c4184SCraig Topper; RV32-NEXT:    fmadd.h fa5, fa0, fa1, fa2
88*7b0c4184SCraig Topper; RV32-NEXT:    fsh fa5, 0(a0)
89c2614b31SCraig Topper; RV32-NEXT:    beqz a2, .LBB2_2
90c2614b31SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
91*7b0c4184SCraig Topper; RV32-NEXT:    fsh fa5, 0(a0)
92c2614b31SCraig Topper; RV32-NEXT:  .LBB2_2: # %falseblock
93c2614b31SCraig Topper; RV32-NEXT:    ret
94c2614b31SCraig Topper;
95c2614b31SCraig Topper; RV64-LABEL: commute_fmadd_f16:
96c2614b31SCraig Topper; RV64:       # %bb.0:
97*7b0c4184SCraig Topper; RV64-NEXT:    fmadd.h fa5, fa0, fa1, fa2
98*7b0c4184SCraig Topper; RV64-NEXT:    fsh fa5, 0(a0)
99c2614b31SCraig Topper; RV64-NEXT:    beqz a2, .LBB2_2
100c2614b31SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
101*7b0c4184SCraig Topper; RV64-NEXT:    fsh fa5, 0(a0)
102c2614b31SCraig Topper; RV64-NEXT:  .LBB2_2: # %falseblock
103c2614b31SCraig Topper; RV64-NEXT:    ret
104c2614b31SCraig Topper  %a = call half @llvm.fma.f16(half %x, half %y, half %z)
1051456b686SNikita Popov  store half %a, ptr %p1
106c2614b31SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
107c2614b31SCraig Topper
108c2614b31SCraig Toppertrueblock:
109c2614b31SCraig Topper  %b = call half @llvm.fma.f16(half %y, half %x, half %z)
1101456b686SNikita Popov  store half %b, ptr %p1
111c2614b31SCraig Topper  br label %falseblock
112c2614b31SCraig Topper
113c2614b31SCraig Topperfalseblock:
114c2614b31SCraig Topper  ret void
115c2614b31SCraig Topper}
116c2614b31SCraig Topper
117c2614b31SCraig Topperdeclare float @llvm.fma.f32(float, float, float)
118c2614b31SCraig Topper
1191456b686SNikita Popovdefine void @commute_fmadd_f32(float %x, float %y, float %z, ptr %p1, ptr %p2, i1 zeroext %cond) {
120c2614b31SCraig Topper; RV32-LABEL: commute_fmadd_f32:
121c2614b31SCraig Topper; RV32:       # %bb.0:
122*7b0c4184SCraig Topper; RV32-NEXT:    fmadd.s fa5, fa0, fa1, fa2
123*7b0c4184SCraig Topper; RV32-NEXT:    fsw fa5, 0(a0)
124c2614b31SCraig Topper; RV32-NEXT:    beqz a2, .LBB3_2
125c2614b31SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
126*7b0c4184SCraig Topper; RV32-NEXT:    fsw fa5, 0(a0)
127c2614b31SCraig Topper; RV32-NEXT:  .LBB3_2: # %falseblock
128c2614b31SCraig Topper; RV32-NEXT:    ret
129c2614b31SCraig Topper;
130c2614b31SCraig Topper; RV64-LABEL: commute_fmadd_f32:
131c2614b31SCraig Topper; RV64:       # %bb.0:
132*7b0c4184SCraig Topper; RV64-NEXT:    fmadd.s fa5, fa0, fa1, fa2
133*7b0c4184SCraig Topper; RV64-NEXT:    fsw fa5, 0(a0)
134c2614b31SCraig Topper; RV64-NEXT:    beqz a2, .LBB3_2
135c2614b31SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
136*7b0c4184SCraig Topper; RV64-NEXT:    fsw fa5, 0(a0)
137c2614b31SCraig Topper; RV64-NEXT:  .LBB3_2: # %falseblock
138c2614b31SCraig Topper; RV64-NEXT:    ret
139c2614b31SCraig Topper  %a = call float @llvm.fma.f32(float %x, float %y, float %z)
1401456b686SNikita Popov  store float %a, ptr %p1
141c2614b31SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
142c2614b31SCraig Topper
143c2614b31SCraig Toppertrueblock:
144c2614b31SCraig Topper  %b = call float @llvm.fma.f32(float %y, float %x, float %z)
1451456b686SNikita Popov  store float %b, ptr %p1
146c2614b31SCraig Topper  br label %falseblock
147c2614b31SCraig Topper
148c2614b31SCraig Topperfalseblock:
149c2614b31SCraig Topper  ret void
150c2614b31SCraig Topper}
151c2614b31SCraig Topper
152c2614b31SCraig Topperdeclare double @llvm.fma.f64(double, double, double)
153c2614b31SCraig Topper
1541456b686SNikita Popovdefine void @commute_fmadd_f64(double %x, double %y, double %z, ptr %p1, ptr %p2, i1 zeroext %cond) {
155c2614b31SCraig Topper; RV32-LABEL: commute_fmadd_f64:
156c2614b31SCraig Topper; RV32:       # %bb.0:
157*7b0c4184SCraig Topper; RV32-NEXT:    fmadd.d fa5, fa0, fa1, fa2
158*7b0c4184SCraig Topper; RV32-NEXT:    fsd fa5, 0(a0)
159c2614b31SCraig Topper; RV32-NEXT:    beqz a2, .LBB4_2
160c2614b31SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
161*7b0c4184SCraig Topper; RV32-NEXT:    fsd fa5, 0(a0)
162c2614b31SCraig Topper; RV32-NEXT:  .LBB4_2: # %falseblock
163c2614b31SCraig Topper; RV32-NEXT:    ret
164c2614b31SCraig Topper;
165c2614b31SCraig Topper; RV64-LABEL: commute_fmadd_f64:
166c2614b31SCraig Topper; RV64:       # %bb.0:
167*7b0c4184SCraig Topper; RV64-NEXT:    fmadd.d fa5, fa0, fa1, fa2
168*7b0c4184SCraig Topper; RV64-NEXT:    fsd fa5, 0(a0)
169c2614b31SCraig Topper; RV64-NEXT:    beqz a2, .LBB4_2
170c2614b31SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
171*7b0c4184SCraig Topper; RV64-NEXT:    fsd fa5, 0(a0)
172c2614b31SCraig Topper; RV64-NEXT:  .LBB4_2: # %falseblock
173c2614b31SCraig Topper; RV64-NEXT:    ret
174c2614b31SCraig Topper  %a = call double @llvm.fma.f64(double %x, double %y, double %z)
1751456b686SNikita Popov  store double %a, ptr %p1
176c2614b31SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
177c2614b31SCraig Topper
178c2614b31SCraig Toppertrueblock:
179c2614b31SCraig Topper  %b = call double @llvm.fma.f64(double %y, double %x, double %z)
1801456b686SNikita Popov  store double %b, ptr %p1
181c2614b31SCraig Topper  br label %falseblock
182c2614b31SCraig Topper
183c2614b31SCraig Topperfalseblock:
184c2614b31SCraig Topper  ret void
185c2614b31SCraig Topper}
186c2614b31SCraig Topper
1871456b686SNikita Popovdefine void @commute_fmsub_f16(half %x, half %y, half %z, ptr %p1, ptr %p2, i1 zeroext %cond) {
188c2614b31SCraig Topper; RV32-LABEL: commute_fmsub_f16:
189c2614b31SCraig Topper; RV32:       # %bb.0:
190*7b0c4184SCraig Topper; RV32-NEXT:    fmsub.h fa5, fa0, fa1, fa2
191*7b0c4184SCraig Topper; RV32-NEXT:    fsh fa5, 0(a0)
192c2614b31SCraig Topper; RV32-NEXT:    beqz a2, .LBB5_2
193c2614b31SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
194*7b0c4184SCraig Topper; RV32-NEXT:    fsh fa5, 0(a0)
195c2614b31SCraig Topper; RV32-NEXT:  .LBB5_2: # %falseblock
196c2614b31SCraig Topper; RV32-NEXT:    ret
197c2614b31SCraig Topper;
198c2614b31SCraig Topper; RV64-LABEL: commute_fmsub_f16:
199c2614b31SCraig Topper; RV64:       # %bb.0:
200*7b0c4184SCraig Topper; RV64-NEXT:    fmsub.h fa5, fa0, fa1, fa2
201*7b0c4184SCraig Topper; RV64-NEXT:    fsh fa5, 0(a0)
202c2614b31SCraig Topper; RV64-NEXT:    beqz a2, .LBB5_2
203c2614b31SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
204*7b0c4184SCraig Topper; RV64-NEXT:    fsh fa5, 0(a0)
205c2614b31SCraig Topper; RV64-NEXT:  .LBB5_2: # %falseblock
206c2614b31SCraig Topper; RV64-NEXT:    ret
207c2614b31SCraig Topper  %negz = fneg half %z
208c2614b31SCraig Topper  %a = call half @llvm.fma.f16(half %x, half %y, half %negz)
2091456b686SNikita Popov  store half %a, ptr %p1
210c2614b31SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
211c2614b31SCraig Topper
212c2614b31SCraig Toppertrueblock:
213c2614b31SCraig Topper  %negz2 = fneg half %z
214c2614b31SCraig Topper  %b = call half @llvm.fma.f16(half %y, half %x, half %negz2)
2151456b686SNikita Popov  store half %b, ptr %p1
216c2614b31SCraig Topper  br label %falseblock
217c2614b31SCraig Topper
218c2614b31SCraig Topperfalseblock:
219c2614b31SCraig Topper  ret void
220c2614b31SCraig Topper}
221c2614b31SCraig Topper
2221456b686SNikita Popovdefine void @commute_fmsub_f32(float %x, float %y, float %z, ptr %p1, ptr %p2, i1 zeroext %cond) {
223c2614b31SCraig Topper; RV32-LABEL: commute_fmsub_f32:
224c2614b31SCraig Topper; RV32:       # %bb.0:
225*7b0c4184SCraig Topper; RV32-NEXT:    fmsub.s fa5, fa0, fa1, fa2
226*7b0c4184SCraig Topper; RV32-NEXT:    fsw fa5, 0(a0)
227c2614b31SCraig Topper; RV32-NEXT:    beqz a2, .LBB6_2
228c2614b31SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
229*7b0c4184SCraig Topper; RV32-NEXT:    fsw fa5, 0(a0)
230c2614b31SCraig Topper; RV32-NEXT:  .LBB6_2: # %falseblock
231c2614b31SCraig Topper; RV32-NEXT:    ret
232c2614b31SCraig Topper;
233c2614b31SCraig Topper; RV64-LABEL: commute_fmsub_f32:
234c2614b31SCraig Topper; RV64:       # %bb.0:
235*7b0c4184SCraig Topper; RV64-NEXT:    fmsub.s fa5, fa0, fa1, fa2
236*7b0c4184SCraig Topper; RV64-NEXT:    fsw fa5, 0(a0)
237c2614b31SCraig Topper; RV64-NEXT:    beqz a2, .LBB6_2
238c2614b31SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
239*7b0c4184SCraig Topper; RV64-NEXT:    fsw fa5, 0(a0)
240c2614b31SCraig Topper; RV64-NEXT:  .LBB6_2: # %falseblock
241c2614b31SCraig Topper; RV64-NEXT:    ret
242c2614b31SCraig Topper  %negz = fneg float %z
243c2614b31SCraig Topper  %a = call float @llvm.fma.f32(float %x, float %y, float %negz)
2441456b686SNikita Popov  store float %a, ptr %p1
245c2614b31SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
246c2614b31SCraig Topper
247c2614b31SCraig Toppertrueblock:
248c2614b31SCraig Topper  %negz2 = fneg float %z
249c2614b31SCraig Topper  %b = call float @llvm.fma.f32(float %y, float %x, float %negz2)
2501456b686SNikita Popov  store float %b, ptr %p1
251c2614b31SCraig Topper  br label %falseblock
252c2614b31SCraig Topper
253c2614b31SCraig Topperfalseblock:
254c2614b31SCraig Topper  ret void
255c2614b31SCraig Topper}
256c2614b31SCraig Topper
2571456b686SNikita Popovdefine void @commute_fmsub_f64(double %x, double %y, double %z, ptr %p1, ptr %p2, i1 zeroext %cond) {
258c2614b31SCraig Topper; RV32-LABEL: commute_fmsub_f64:
259c2614b31SCraig Topper; RV32:       # %bb.0:
260*7b0c4184SCraig Topper; RV32-NEXT:    fmsub.d fa5, fa0, fa1, fa2
261*7b0c4184SCraig Topper; RV32-NEXT:    fsd fa5, 0(a0)
262c2614b31SCraig Topper; RV32-NEXT:    beqz a2, .LBB7_2
263c2614b31SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
264*7b0c4184SCraig Topper; RV32-NEXT:    fsd fa5, 0(a0)
265c2614b31SCraig Topper; RV32-NEXT:  .LBB7_2: # %falseblock
266c2614b31SCraig Topper; RV32-NEXT:    ret
267c2614b31SCraig Topper;
268c2614b31SCraig Topper; RV64-LABEL: commute_fmsub_f64:
269c2614b31SCraig Topper; RV64:       # %bb.0:
270*7b0c4184SCraig Topper; RV64-NEXT:    fmsub.d fa5, fa0, fa1, fa2
271*7b0c4184SCraig Topper; RV64-NEXT:    fsd fa5, 0(a0)
272c2614b31SCraig Topper; RV64-NEXT:    beqz a2, .LBB7_2
273c2614b31SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
274*7b0c4184SCraig Topper; RV64-NEXT:    fsd fa5, 0(a0)
275c2614b31SCraig Topper; RV64-NEXT:  .LBB7_2: # %falseblock
276c2614b31SCraig Topper; RV64-NEXT:    ret
277c2614b31SCraig Topper  %negz = fneg double %z
278c2614b31SCraig Topper  %a = call double @llvm.fma.f64(double %x, double %y, double %negz)
2791456b686SNikita Popov  store double %a, ptr %p1
280c2614b31SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
281c2614b31SCraig Topper
282c2614b31SCraig Toppertrueblock:
283c2614b31SCraig Topper  %negz2 = fneg double %z
284c2614b31SCraig Topper  %b = call double @llvm.fma.f64(double %y, double %x, double %negz2)
2851456b686SNikita Popov  store double %b, ptr %p1
286c2614b31SCraig Topper  br label %falseblock
287c2614b31SCraig Topper
288c2614b31SCraig Topperfalseblock:
289c2614b31SCraig Topper  ret void
290c2614b31SCraig Topper}
291c2614b31SCraig Topper
2921456b686SNikita Popovdefine void @commute_fnmadd_f16(half %x, half %y, half %z, ptr %p1, ptr %p2, i1 zeroext %cond) {
293c2614b31SCraig Topper; RV32-LABEL: commute_fnmadd_f16:
294c2614b31SCraig Topper; RV32:       # %bb.0:
295*7b0c4184SCraig Topper; RV32-NEXT:    fnmadd.h fa5, fa0, fa1, fa2
296*7b0c4184SCraig Topper; RV32-NEXT:    fsh fa5, 0(a0)
297c2614b31SCraig Topper; RV32-NEXT:    beqz a2, .LBB8_2
298c2614b31SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
299*7b0c4184SCraig Topper; RV32-NEXT:    fsh fa5, 0(a0)
300c2614b31SCraig Topper; RV32-NEXT:  .LBB8_2: # %falseblock
301c2614b31SCraig Topper; RV32-NEXT:    ret
302c2614b31SCraig Topper;
303c2614b31SCraig Topper; RV64-LABEL: commute_fnmadd_f16:
304c2614b31SCraig Topper; RV64:       # %bb.0:
305*7b0c4184SCraig Topper; RV64-NEXT:    fnmadd.h fa5, fa0, fa1, fa2
306*7b0c4184SCraig Topper; RV64-NEXT:    fsh fa5, 0(a0)
307c2614b31SCraig Topper; RV64-NEXT:    beqz a2, .LBB8_2
308c2614b31SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
309*7b0c4184SCraig Topper; RV64-NEXT:    fsh fa5, 0(a0)
310c2614b31SCraig Topper; RV64-NEXT:  .LBB8_2: # %falseblock
311c2614b31SCraig Topper; RV64-NEXT:    ret
312c2614b31SCraig Topper  %negx = fneg half %x
313c2614b31SCraig Topper  %negz = fneg half %z
314c2614b31SCraig Topper  %a = call half @llvm.fma.f16(half %negx, half %y, half %negz)
3151456b686SNikita Popov  store half %a, ptr %p1
316c2614b31SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
317c2614b31SCraig Topper
318c2614b31SCraig Toppertrueblock:
319c2614b31SCraig Topper  %negy = fneg half %y
320c2614b31SCraig Topper  %negz2 = fneg half %z
321c2614b31SCraig Topper  %b = call half @llvm.fma.f16(half %negy, half %x, half %negz2)
3221456b686SNikita Popov  store half %b, ptr %p1
323c2614b31SCraig Topper  br label %falseblock
324c2614b31SCraig Topper
325c2614b31SCraig Topperfalseblock:
326c2614b31SCraig Topper  ret void
327c2614b31SCraig Topper}
328c2614b31SCraig Topper
3291456b686SNikita Popovdefine void @commute_fnmadd_f32(float %x, float %y, float %z, ptr %p1, ptr %p2, i1 zeroext %cond) {
330c2614b31SCraig Topper; RV32-LABEL: commute_fnmadd_f32:
331c2614b31SCraig Topper; RV32:       # %bb.0:
332*7b0c4184SCraig Topper; RV32-NEXT:    fnmadd.s fa5, fa0, fa1, fa2
333*7b0c4184SCraig Topper; RV32-NEXT:    fsw fa5, 0(a0)
334c2614b31SCraig Topper; RV32-NEXT:    beqz a2, .LBB9_2
335c2614b31SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
336*7b0c4184SCraig Topper; RV32-NEXT:    fsw fa5, 0(a0)
337c2614b31SCraig Topper; RV32-NEXT:  .LBB9_2: # %falseblock
338c2614b31SCraig Topper; RV32-NEXT:    ret
339c2614b31SCraig Topper;
340c2614b31SCraig Topper; RV64-LABEL: commute_fnmadd_f32:
341c2614b31SCraig Topper; RV64:       # %bb.0:
342*7b0c4184SCraig Topper; RV64-NEXT:    fnmadd.s fa5, fa0, fa1, fa2
343*7b0c4184SCraig Topper; RV64-NEXT:    fsw fa5, 0(a0)
344c2614b31SCraig Topper; RV64-NEXT:    beqz a2, .LBB9_2
345c2614b31SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
346*7b0c4184SCraig Topper; RV64-NEXT:    fsw fa5, 0(a0)
347c2614b31SCraig Topper; RV64-NEXT:  .LBB9_2: # %falseblock
348c2614b31SCraig Topper; RV64-NEXT:    ret
349c2614b31SCraig Topper  %negx = fneg float %x
350c2614b31SCraig Topper  %negz = fneg float %z
351c2614b31SCraig Topper  %a = call float @llvm.fma.f32(float %negx, float %y, float %negz)
3521456b686SNikita Popov  store float %a, ptr %p1
353c2614b31SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
354c2614b31SCraig Topper
355c2614b31SCraig Toppertrueblock:
356c2614b31SCraig Topper  %negy = fneg float %y
357c2614b31SCraig Topper  %negz2 = fneg float %z
358c2614b31SCraig Topper  %b = call float @llvm.fma.f32(float %negy, float %x, float %negz2)
3591456b686SNikita Popov  store float %b, ptr %p1
360c2614b31SCraig Topper  br label %falseblock
361c2614b31SCraig Topper
362c2614b31SCraig Topperfalseblock:
363c2614b31SCraig Topper  ret void
364c2614b31SCraig Topper}
365c2614b31SCraig Topper
3661456b686SNikita Popovdefine void @commute_fnmadd_f64(double %x, double %y, double %z, ptr %p1, ptr %p2, i1 zeroext %cond) {
367c2614b31SCraig Topper; RV32-LABEL: commute_fnmadd_f64:
368c2614b31SCraig Topper; RV32:       # %bb.0:
369*7b0c4184SCraig Topper; RV32-NEXT:    fnmadd.d fa5, fa0, fa1, fa2
370*7b0c4184SCraig Topper; RV32-NEXT:    fsd fa5, 0(a0)
371c2614b31SCraig Topper; RV32-NEXT:    beqz a2, .LBB10_2
372c2614b31SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
373*7b0c4184SCraig Topper; RV32-NEXT:    fsd fa5, 0(a0)
374c2614b31SCraig Topper; RV32-NEXT:  .LBB10_2: # %falseblock
375c2614b31SCraig Topper; RV32-NEXT:    ret
376c2614b31SCraig Topper;
377c2614b31SCraig Topper; RV64-LABEL: commute_fnmadd_f64:
378c2614b31SCraig Topper; RV64:       # %bb.0:
379*7b0c4184SCraig Topper; RV64-NEXT:    fnmadd.d fa5, fa0, fa1, fa2
380*7b0c4184SCraig Topper; RV64-NEXT:    fsd fa5, 0(a0)
381c2614b31SCraig Topper; RV64-NEXT:    beqz a2, .LBB10_2
382c2614b31SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
383*7b0c4184SCraig Topper; RV64-NEXT:    fsd fa5, 0(a0)
384c2614b31SCraig Topper; RV64-NEXT:  .LBB10_2: # %falseblock
385c2614b31SCraig Topper; RV64-NEXT:    ret
386c2614b31SCraig Topper  %negx = fneg double %x
387c2614b31SCraig Topper  %negz = fneg double %z
388c2614b31SCraig Topper  %a = call double @llvm.fma.f64(double %negx, double %y, double %negz)
3891456b686SNikita Popov  store double %a, ptr %p1
390c2614b31SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
391c2614b31SCraig Topper
392c2614b31SCraig Toppertrueblock:
393c2614b31SCraig Topper  %negy = fneg double %y
394c2614b31SCraig Topper  %negz2 = fneg double %z
395c2614b31SCraig Topper  %b = call double @llvm.fma.f64(double %negy, double %x, double %negz2)
3961456b686SNikita Popov  store double %b, ptr %p1
397c2614b31SCraig Topper  br label %falseblock
398c2614b31SCraig Topper
399c2614b31SCraig Topperfalseblock:
400c2614b31SCraig Topper  ret void
401c2614b31SCraig Topper}
402c2614b31SCraig Topper
4031456b686SNikita Popovdefine void @commute_fnmsub_f16(half %x, half %y, half %z, ptr %p1, ptr %p2, i1 zeroext %cond) {
404c2614b31SCraig Topper; RV32-LABEL: commute_fnmsub_f16:
405c2614b31SCraig Topper; RV32:       # %bb.0:
406*7b0c4184SCraig Topper; RV32-NEXT:    fnmsub.h fa5, fa0, fa1, fa2
407*7b0c4184SCraig Topper; RV32-NEXT:    fsh fa5, 0(a0)
408c2614b31SCraig Topper; RV32-NEXT:    beqz a2, .LBB11_2
409c2614b31SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
410*7b0c4184SCraig Topper; RV32-NEXT:    fsh fa5, 0(a0)
411c2614b31SCraig Topper; RV32-NEXT:  .LBB11_2: # %falseblock
412c2614b31SCraig Topper; RV32-NEXT:    ret
413c2614b31SCraig Topper;
414c2614b31SCraig Topper; RV64-LABEL: commute_fnmsub_f16:
415c2614b31SCraig Topper; RV64:       # %bb.0:
416*7b0c4184SCraig Topper; RV64-NEXT:    fnmsub.h fa5, fa0, fa1, fa2
417*7b0c4184SCraig Topper; RV64-NEXT:    fsh fa5, 0(a0)
418c2614b31SCraig Topper; RV64-NEXT:    beqz a2, .LBB11_2
419c2614b31SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
420*7b0c4184SCraig Topper; RV64-NEXT:    fsh fa5, 0(a0)
421c2614b31SCraig Topper; RV64-NEXT:  .LBB11_2: # %falseblock
422c2614b31SCraig Topper; RV64-NEXT:    ret
423c2614b31SCraig Topper  %negx = fneg half %x
424c2614b31SCraig Topper  %a = call half @llvm.fma.f16(half %negx, half %y, half %z)
4251456b686SNikita Popov  store half %a, ptr %p1
426c2614b31SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
427c2614b31SCraig Topper
428c2614b31SCraig Toppertrueblock:
429c2614b31SCraig Topper  %negy = fneg half %y
430c2614b31SCraig Topper  %b = call half @llvm.fma.f16(half %negy, half %x, half %z)
4311456b686SNikita Popov  store half %b, ptr %p1
432c2614b31SCraig Topper  br label %falseblock
433c2614b31SCraig Topper
434c2614b31SCraig Topperfalseblock:
435c2614b31SCraig Topper  ret void
436c2614b31SCraig Topper}
437c2614b31SCraig Topper
4381456b686SNikita Popovdefine void @commute_fnmsub_f32(float %x, float %y, float %z, ptr %p1, ptr %p2, i1 zeroext %cond) {
439c2614b31SCraig Topper; RV32-LABEL: commute_fnmsub_f32:
440c2614b31SCraig Topper; RV32:       # %bb.0:
441*7b0c4184SCraig Topper; RV32-NEXT:    fnmsub.s fa5, fa0, fa1, fa2
442*7b0c4184SCraig Topper; RV32-NEXT:    fsw fa5, 0(a0)
443c2614b31SCraig Topper; RV32-NEXT:    beqz a2, .LBB12_2
444c2614b31SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
445*7b0c4184SCraig Topper; RV32-NEXT:    fsw fa5, 0(a0)
446c2614b31SCraig Topper; RV32-NEXT:  .LBB12_2: # %falseblock
447c2614b31SCraig Topper; RV32-NEXT:    ret
448c2614b31SCraig Topper;
449c2614b31SCraig Topper; RV64-LABEL: commute_fnmsub_f32:
450c2614b31SCraig Topper; RV64:       # %bb.0:
451*7b0c4184SCraig Topper; RV64-NEXT:    fnmsub.s fa5, fa0, fa1, fa2
452*7b0c4184SCraig Topper; RV64-NEXT:    fsw fa5, 0(a0)
453c2614b31SCraig Topper; RV64-NEXT:    beqz a2, .LBB12_2
454c2614b31SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
455*7b0c4184SCraig Topper; RV64-NEXT:    fsw fa5, 0(a0)
456c2614b31SCraig Topper; RV64-NEXT:  .LBB12_2: # %falseblock
457c2614b31SCraig Topper; RV64-NEXT:    ret
458c2614b31SCraig Topper  %negx = fneg float %x
459c2614b31SCraig Topper  %a = call float @llvm.fma.f32(float %negx, float %y, float %z)
4601456b686SNikita Popov  store float %a, ptr %p1
461c2614b31SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
462c2614b31SCraig Topper
463c2614b31SCraig Toppertrueblock:
464c2614b31SCraig Topper  %negy = fneg float %y
465c2614b31SCraig Topper  %b = call float @llvm.fma.f32(float %negy, float %x, float %z)
4661456b686SNikita Popov  store float %b, ptr %p1
467c2614b31SCraig Topper  br label %falseblock
468c2614b31SCraig Topper
469c2614b31SCraig Topperfalseblock:
470c2614b31SCraig Topper  ret void
471c2614b31SCraig Topper}
472c2614b31SCraig Topper
4731456b686SNikita Popovdefine void @commute_fnmsub_f64(double %x, double %y, double %z, ptr %p1, ptr %p2, i1 zeroext %cond) {
474c2614b31SCraig Topper; RV32-LABEL: commute_fnmsub_f64:
475c2614b31SCraig Topper; RV32:       # %bb.0:
476*7b0c4184SCraig Topper; RV32-NEXT:    fnmsub.d fa5, fa0, fa1, fa2
477*7b0c4184SCraig Topper; RV32-NEXT:    fsd fa5, 0(a0)
478c2614b31SCraig Topper; RV32-NEXT:    beqz a2, .LBB13_2
479c2614b31SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
480*7b0c4184SCraig Topper; RV32-NEXT:    fsd fa5, 0(a0)
481c2614b31SCraig Topper; RV32-NEXT:  .LBB13_2: # %falseblock
482c2614b31SCraig Topper; RV32-NEXT:    ret
483c2614b31SCraig Topper;
484c2614b31SCraig Topper; RV64-LABEL: commute_fnmsub_f64:
485c2614b31SCraig Topper; RV64:       # %bb.0:
486*7b0c4184SCraig Topper; RV64-NEXT:    fnmsub.d fa5, fa0, fa1, fa2
487*7b0c4184SCraig Topper; RV64-NEXT:    fsd fa5, 0(a0)
488c2614b31SCraig Topper; RV64-NEXT:    beqz a2, .LBB13_2
489c2614b31SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
490*7b0c4184SCraig Topper; RV64-NEXT:    fsd fa5, 0(a0)
491c2614b31SCraig Topper; RV64-NEXT:  .LBB13_2: # %falseblock
492c2614b31SCraig Topper; RV64-NEXT:    ret
493c2614b31SCraig Topper  %negx = fneg double %x
494c2614b31SCraig Topper  %a = call double @llvm.fma.f64(double %negx, double %y, double %z)
4951456b686SNikita Popov  store double %a, ptr %p1
496c2614b31SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
497c2614b31SCraig Topper
498c2614b31SCraig Toppertrueblock:
499c2614b31SCraig Topper  %negy = fneg double %y
500c2614b31SCraig Topper  %b = call double @llvm.fma.f64(double %negy, double %x, double %z)
5011456b686SNikita Popov  store double %b, ptr %p1
502c2614b31SCraig Topper  br label %falseblock
503c2614b31SCraig Topper
504c2614b31SCraig Topperfalseblock:
505c2614b31SCraig Topper  ret void
506c2614b31SCraig Topper}
50772a66358SCraig Topper
5081456b686SNikita Popovdefine void @commute_fadd_f16(half %x, half %y, ptr %p1, ptr %p2, i1 zeroext %cond) {
50972a66358SCraig Topper; RV32-LABEL: commute_fadd_f16:
51072a66358SCraig Topper; RV32:       # %bb.0:
511*7b0c4184SCraig Topper; RV32-NEXT:    fadd.h fa5, fa0, fa1
512*7b0c4184SCraig Topper; RV32-NEXT:    fsh fa5, 0(a0)
51372a66358SCraig Topper; RV32-NEXT:    beqz a2, .LBB14_2
51472a66358SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
515*7b0c4184SCraig Topper; RV32-NEXT:    fsh fa5, 0(a0)
51672a66358SCraig Topper; RV32-NEXT:  .LBB14_2: # %falseblock
51772a66358SCraig Topper; RV32-NEXT:    ret
51872a66358SCraig Topper;
51972a66358SCraig Topper; RV64-LABEL: commute_fadd_f16:
52072a66358SCraig Topper; RV64:       # %bb.0:
521*7b0c4184SCraig Topper; RV64-NEXT:    fadd.h fa5, fa0, fa1
522*7b0c4184SCraig Topper; RV64-NEXT:    fsh fa5, 0(a0)
52372a66358SCraig Topper; RV64-NEXT:    beqz a2, .LBB14_2
52472a66358SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
525*7b0c4184SCraig Topper; RV64-NEXT:    fsh fa5, 0(a0)
52672a66358SCraig Topper; RV64-NEXT:  .LBB14_2: # %falseblock
52772a66358SCraig Topper; RV64-NEXT:    ret
52872a66358SCraig Topper  %a = fadd half %x, %y
5291456b686SNikita Popov  store half %a, ptr %p1
53072a66358SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
53172a66358SCraig Topper
53272a66358SCraig Toppertrueblock:
53372a66358SCraig Topper  %b = fadd half %y, %x
5341456b686SNikita Popov  store half %b, ptr %p1
53572a66358SCraig Topper  br label %falseblock
53672a66358SCraig Topper
53772a66358SCraig Topperfalseblock:
53872a66358SCraig Topper  ret void
53972a66358SCraig Topper}
54072a66358SCraig Topper
5411456b686SNikita Popovdefine void @commute_fadd_f32(float %x, float %y, ptr %p1, ptr %p2, i1 zeroext %cond) {
54272a66358SCraig Topper; RV32-LABEL: commute_fadd_f32:
54372a66358SCraig Topper; RV32:       # %bb.0:
544*7b0c4184SCraig Topper; RV32-NEXT:    fadd.s fa5, fa0, fa1
545*7b0c4184SCraig Topper; RV32-NEXT:    fsw fa5, 0(a0)
54672a66358SCraig Topper; RV32-NEXT:    beqz a2, .LBB15_2
54772a66358SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
548*7b0c4184SCraig Topper; RV32-NEXT:    fsw fa5, 0(a0)
54972a66358SCraig Topper; RV32-NEXT:  .LBB15_2: # %falseblock
55072a66358SCraig Topper; RV32-NEXT:    ret
55172a66358SCraig Topper;
55272a66358SCraig Topper; RV64-LABEL: commute_fadd_f32:
55372a66358SCraig Topper; RV64:       # %bb.0:
554*7b0c4184SCraig Topper; RV64-NEXT:    fadd.s fa5, fa0, fa1
555*7b0c4184SCraig Topper; RV64-NEXT:    fsw fa5, 0(a0)
55672a66358SCraig Topper; RV64-NEXT:    beqz a2, .LBB15_2
55772a66358SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
558*7b0c4184SCraig Topper; RV64-NEXT:    fsw fa5, 0(a0)
55972a66358SCraig Topper; RV64-NEXT:  .LBB15_2: # %falseblock
56072a66358SCraig Topper; RV64-NEXT:    ret
56172a66358SCraig Topper  %a = fadd float %x, %y
5621456b686SNikita Popov  store float %a, ptr %p1
56372a66358SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
56472a66358SCraig Topper
56572a66358SCraig Toppertrueblock:
56672a66358SCraig Topper  %b = fadd float %y, %x
5671456b686SNikita Popov  store float %b, ptr %p1
56872a66358SCraig Topper  br label %falseblock
56972a66358SCraig Topper
57072a66358SCraig Topperfalseblock:
57172a66358SCraig Topper  ret void
57272a66358SCraig Topper}
57372a66358SCraig Topper
5741456b686SNikita Popovdefine void @commute_fadd_f64(double %x, double %y, ptr %p1, ptr %p2, i1 zeroext %cond) {
57572a66358SCraig Topper; RV32-LABEL: commute_fadd_f64:
57672a66358SCraig Topper; RV32:       # %bb.0:
577*7b0c4184SCraig Topper; RV32-NEXT:    fadd.d fa5, fa0, fa1
578*7b0c4184SCraig Topper; RV32-NEXT:    fsd fa5, 0(a0)
57972a66358SCraig Topper; RV32-NEXT:    beqz a2, .LBB16_2
58072a66358SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
581*7b0c4184SCraig Topper; RV32-NEXT:    fsd fa5, 0(a0)
58272a66358SCraig Topper; RV32-NEXT:  .LBB16_2: # %falseblock
58372a66358SCraig Topper; RV32-NEXT:    ret
58472a66358SCraig Topper;
58572a66358SCraig Topper; RV64-LABEL: commute_fadd_f64:
58672a66358SCraig Topper; RV64:       # %bb.0:
587*7b0c4184SCraig Topper; RV64-NEXT:    fadd.d fa5, fa0, fa1
588*7b0c4184SCraig Topper; RV64-NEXT:    fsd fa5, 0(a0)
58972a66358SCraig Topper; RV64-NEXT:    beqz a2, .LBB16_2
59072a66358SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
591*7b0c4184SCraig Topper; RV64-NEXT:    fsd fa5, 0(a0)
59272a66358SCraig Topper; RV64-NEXT:  .LBB16_2: # %falseblock
59372a66358SCraig Topper; RV64-NEXT:    ret
59472a66358SCraig Topper  %a = fadd double %x, %y
5951456b686SNikita Popov  store double %a, ptr %p1
59672a66358SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
59772a66358SCraig Topper
59872a66358SCraig Toppertrueblock:
59972a66358SCraig Topper  %b = fadd double %y, %x
6001456b686SNikita Popov  store double %b, ptr %p1
60172a66358SCraig Topper  br label %falseblock
60272a66358SCraig Topper
60372a66358SCraig Topperfalseblock:
60472a66358SCraig Topper  ret void
60572a66358SCraig Topper}
60672a66358SCraig Topper
6071456b686SNikita Popovdefine void @commute_feq_f16(half %x, half %y, ptr %p1, ptr %p2, i1 zeroext %cond) {
60872a66358SCraig Topper; RV32-LABEL: commute_feq_f16:
60972a66358SCraig Topper; RV32:       # %bb.0:
61072a66358SCraig Topper; RV32-NEXT:    feq.h a1, fa0, fa1
61172a66358SCraig Topper; RV32-NEXT:    sb a1, 0(a0)
61272a66358SCraig Topper; RV32-NEXT:    beqz a2, .LBB17_2
61372a66358SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
61472a66358SCraig Topper; RV32-NEXT:    sb a1, 0(a0)
61572a66358SCraig Topper; RV32-NEXT:  .LBB17_2: # %falseblock
61672a66358SCraig Topper; RV32-NEXT:    ret
61772a66358SCraig Topper;
61872a66358SCraig Topper; RV64-LABEL: commute_feq_f16:
61972a66358SCraig Topper; RV64:       # %bb.0:
62072a66358SCraig Topper; RV64-NEXT:    feq.h a1, fa0, fa1
62172a66358SCraig Topper; RV64-NEXT:    sb a1, 0(a0)
62272a66358SCraig Topper; RV64-NEXT:    beqz a2, .LBB17_2
62372a66358SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
62472a66358SCraig Topper; RV64-NEXT:    sb a1, 0(a0)
62572a66358SCraig Topper; RV64-NEXT:  .LBB17_2: # %falseblock
62672a66358SCraig Topper; RV64-NEXT:    ret
62772a66358SCraig Topper  %a = fcmp oeq half %x, %y
62872a66358SCraig Topper  %b = zext i1 %a to i8
6291456b686SNikita Popov  store i8 %b, ptr %p1
63072a66358SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
63172a66358SCraig Topper
63272a66358SCraig Toppertrueblock:
63372a66358SCraig Topper  %c = fcmp oeq half %y, %x
63472a66358SCraig Topper  %d = zext i1 %c to i8
6351456b686SNikita Popov  store i8 %d, ptr %p1
63672a66358SCraig Topper  br label %falseblock
63772a66358SCraig Topper
63872a66358SCraig Topperfalseblock:
63972a66358SCraig Topper  ret void
64072a66358SCraig Topper}
64172a66358SCraig Topper
6421456b686SNikita Popovdefine void @commute_feq_f32(float %x, float %y, ptr %p1, ptr %p2, i1 zeroext %cond) {
64372a66358SCraig Topper; RV32-LABEL: commute_feq_f32:
64472a66358SCraig Topper; RV32:       # %bb.0:
64572a66358SCraig Topper; RV32-NEXT:    feq.s a1, fa0, fa1
64672a66358SCraig Topper; RV32-NEXT:    sb a1, 0(a0)
64772a66358SCraig Topper; RV32-NEXT:    beqz a2, .LBB18_2
64872a66358SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
64972a66358SCraig Topper; RV32-NEXT:    sb a1, 0(a0)
65072a66358SCraig Topper; RV32-NEXT:  .LBB18_2: # %falseblock
65172a66358SCraig Topper; RV32-NEXT:    ret
65272a66358SCraig Topper;
65372a66358SCraig Topper; RV64-LABEL: commute_feq_f32:
65472a66358SCraig Topper; RV64:       # %bb.0:
65572a66358SCraig Topper; RV64-NEXT:    feq.s a1, fa0, fa1
65672a66358SCraig Topper; RV64-NEXT:    sb a1, 0(a0)
65772a66358SCraig Topper; RV64-NEXT:    beqz a2, .LBB18_2
65872a66358SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
65972a66358SCraig Topper; RV64-NEXT:    sb a1, 0(a0)
66072a66358SCraig Topper; RV64-NEXT:  .LBB18_2: # %falseblock
66172a66358SCraig Topper; RV64-NEXT:    ret
66272a66358SCraig Topper  %a = fcmp oeq float %x, %y
66372a66358SCraig Topper  %b = zext i1 %a to i8
6641456b686SNikita Popov  store i8 %b, ptr %p1
66572a66358SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
66672a66358SCraig Topper
66772a66358SCraig Toppertrueblock:
66872a66358SCraig Topper  %c = fcmp oeq float %y, %x
66972a66358SCraig Topper  %d = zext i1 %c to i8
6701456b686SNikita Popov  store i8 %d, ptr %p1
67172a66358SCraig Topper  br label %falseblock
67272a66358SCraig Topper
67372a66358SCraig Topperfalseblock:
67472a66358SCraig Topper  ret void
67572a66358SCraig Topper}
67672a66358SCraig Topper
6771456b686SNikita Popovdefine void @commute_feq_f64(double %x, double %y, ptr %p1, ptr %p2, i1 zeroext %cond) {
67872a66358SCraig Topper; RV32-LABEL: commute_feq_f64:
67972a66358SCraig Topper; RV32:       # %bb.0:
68072a66358SCraig Topper; RV32-NEXT:    feq.d a1, fa0, fa1
68172a66358SCraig Topper; RV32-NEXT:    sb a1, 0(a0)
68272a66358SCraig Topper; RV32-NEXT:    beqz a2, .LBB19_2
68372a66358SCraig Topper; RV32-NEXT:  # %bb.1: # %trueblock
68472a66358SCraig Topper; RV32-NEXT:    sb a1, 0(a0)
68572a66358SCraig Topper; RV32-NEXT:  .LBB19_2: # %falseblock
68672a66358SCraig Topper; RV32-NEXT:    ret
68772a66358SCraig Topper;
68872a66358SCraig Topper; RV64-LABEL: commute_feq_f64:
68972a66358SCraig Topper; RV64:       # %bb.0:
69072a66358SCraig Topper; RV64-NEXT:    feq.d a1, fa0, fa1
69172a66358SCraig Topper; RV64-NEXT:    sb a1, 0(a0)
69272a66358SCraig Topper; RV64-NEXT:    beqz a2, .LBB19_2
69372a66358SCraig Topper; RV64-NEXT:  # %bb.1: # %trueblock
69472a66358SCraig Topper; RV64-NEXT:    sb a1, 0(a0)
69572a66358SCraig Topper; RV64-NEXT:  .LBB19_2: # %falseblock
69672a66358SCraig Topper; RV64-NEXT:    ret
69772a66358SCraig Topper  %a = fcmp oeq double %x, %y
69872a66358SCraig Topper  %b = zext i1 %a to i8
6991456b686SNikita Popov  store i8 %b, ptr %p1
70072a66358SCraig Topper  br i1 %cond, label %trueblock, label %falseblock
70172a66358SCraig Topper
70272a66358SCraig Toppertrueblock:
70372a66358SCraig Topper  %c = fcmp oeq double %y, %x
70472a66358SCraig Topper  %d = zext i1 %c to i8
7051456b686SNikita Popov  store i8 %d, ptr %p1
70672a66358SCraig Topper  br label %falseblock
70772a66358SCraig Topper
70872a66358SCraig Topperfalseblock:
70972a66358SCraig Topper  ret void
71072a66358SCraig Topper}
711