xref: /llvm-project/llvm/test/CodeGen/RISCV/double-maximum-minimum.ll (revision 576d81baa5cf1801bae0fd05892be34acde33c6a)
149429783SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
249429783SCraig Topper; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+d \
349429783SCraig Topper; RUN:   -verify-machineinstrs -target-abi=ilp32d \
449429783SCraig Topper; RUN:   | FileCheck -check-prefixes=CHECKIFD,RV32IFD %s
549429783SCraig Topper; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+d \
649429783SCraig Topper; RUN:   -verify-machineinstrs -target-abi=lp64d \
749429783SCraig Topper; RUN:   | FileCheck -check-prefixes=CHECKIFD,RV64IFD %s
849429783SCraig Topper; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zdinx \
949429783SCraig Topper; RUN:   -verify-machineinstrs -target-abi=ilp32 \
1049429783SCraig Topper; RUN:   | FileCheck -check-prefix=RV32IZFINXZDINX %s
1149429783SCraig Topper; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zdinx \
1249429783SCraig Topper; RUN:   -verify-machineinstrs -target-abi=lp64 \
1349429783SCraig Topper; RUN:   | FileCheck -check-prefix=RV64IZFINXZDINX %s
1449429783SCraig Topper
1549429783SCraig Topperdeclare double @llvm.minimum.f64(double, double)
1649429783SCraig Topper
1749429783SCraig Topperdefine double @fminimum_f64(double %a, double %b) nounwind {
1849429783SCraig Topper; CHECKIFD-LABEL: fminimum_f64:
1949429783SCraig Topper; CHECKIFD:       # %bb.0:
2049429783SCraig Topper; CHECKIFD-NEXT:    feq.d a0, fa0, fa0
2149429783SCraig Topper; CHECKIFD-NEXT:    fmv.d fa5, fa1
2249429783SCraig Topper; CHECKIFD-NEXT:    beqz a0, .LBB0_3
2349429783SCraig Topper; CHECKIFD-NEXT:  # %bb.1:
2449429783SCraig Topper; CHECKIFD-NEXT:    feq.d a0, fa1, fa1
2549429783SCraig Topper; CHECKIFD-NEXT:    beqz a0, .LBB0_4
2649429783SCraig Topper; CHECKIFD-NEXT:  .LBB0_2:
2749429783SCraig Topper; CHECKIFD-NEXT:    fmin.d fa0, fa0, fa5
2849429783SCraig Topper; CHECKIFD-NEXT:    ret
2949429783SCraig Topper; CHECKIFD-NEXT:  .LBB0_3:
3049429783SCraig Topper; CHECKIFD-NEXT:    fmv.d fa5, fa0
3149429783SCraig Topper; CHECKIFD-NEXT:    feq.d a0, fa1, fa1
3249429783SCraig Topper; CHECKIFD-NEXT:    bnez a0, .LBB0_2
3349429783SCraig Topper; CHECKIFD-NEXT:  .LBB0_4:
3449429783SCraig Topper; CHECKIFD-NEXT:    fmin.d fa0, fa1, fa5
3549429783SCraig Topper; CHECKIFD-NEXT:    ret
3649429783SCraig Topper;
3749429783SCraig Topper; RV32IZFINXZDINX-LABEL: fminimum_f64:
3849429783SCraig Topper; RV32IZFINXZDINX:       # %bb.0:
3949429783SCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d a6, a0, a0
4049429783SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a4, a2
41116eb323SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a5, a3
42*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    beqz a6, .LBB0_3
4349429783SCraig Topper; RV32IZFINXZDINX-NEXT:  # %bb.1:
44*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d a6, a2, a2
45*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    beqz a6, .LBB0_4
46*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:  .LBB0_2:
47*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    fmin.d a0, a0, a4
48*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    ret
49*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:  .LBB0_3:
5049429783SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a4, a0
51116eb323SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a5, a1
5249429783SCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d a6, a2, a2
53*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    bnez a6, .LBB0_2
54*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:  .LBB0_4:
5549429783SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a0, a2
56116eb323SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a1, a3
5749429783SCraig Topper; RV32IZFINXZDINX-NEXT:    fmin.d a0, a0, a4
5849429783SCraig Topper; RV32IZFINXZDINX-NEXT:    ret
5949429783SCraig Topper;
6049429783SCraig Topper; RV64IZFINXZDINX-LABEL: fminimum_f64:
6149429783SCraig Topper; RV64IZFINXZDINX:       # %bb.0:
6249429783SCraig Topper; RV64IZFINXZDINX-NEXT:    feq.d a3, a0, a0
6349429783SCraig Topper; RV64IZFINXZDINX-NEXT:    mv a2, a1
6449429783SCraig Topper; RV64IZFINXZDINX-NEXT:    beqz a3, .LBB0_3
6549429783SCraig Topper; RV64IZFINXZDINX-NEXT:  # %bb.1:
6649429783SCraig Topper; RV64IZFINXZDINX-NEXT:    feq.d a3, a1, a1
6749429783SCraig Topper; RV64IZFINXZDINX-NEXT:    beqz a3, .LBB0_4
6849429783SCraig Topper; RV64IZFINXZDINX-NEXT:  .LBB0_2:
6949429783SCraig Topper; RV64IZFINXZDINX-NEXT:    fmin.d a0, a0, a2
7049429783SCraig Topper; RV64IZFINXZDINX-NEXT:    ret
7149429783SCraig Topper; RV64IZFINXZDINX-NEXT:  .LBB0_3:
7249429783SCraig Topper; RV64IZFINXZDINX-NEXT:    mv a2, a0
7349429783SCraig Topper; RV64IZFINXZDINX-NEXT:    feq.d a3, a1, a1
7449429783SCraig Topper; RV64IZFINXZDINX-NEXT:    bnez a3, .LBB0_2
7549429783SCraig Topper; RV64IZFINXZDINX-NEXT:  .LBB0_4:
7649429783SCraig Topper; RV64IZFINXZDINX-NEXT:    fmin.d a0, a1, a2
7749429783SCraig Topper; RV64IZFINXZDINX-NEXT:    ret
7849429783SCraig Topper  %1 = call double @llvm.minimum.f64(double %a, double %b)
7949429783SCraig Topper  ret double %1
8049429783SCraig Topper}
8149429783SCraig Topper
8249429783SCraig Topperdeclare double @llvm.maximum.f64(double, double)
8349429783SCraig Topper
8449429783SCraig Topperdefine double @fmaximum_f64(double %a, double %b) nounwind {
8549429783SCraig Topper; CHECKIFD-LABEL: fmaximum_f64:
8649429783SCraig Topper; CHECKIFD:       # %bb.0:
8749429783SCraig Topper; CHECKIFD-NEXT:    feq.d a0, fa0, fa0
8849429783SCraig Topper; CHECKIFD-NEXT:    fmv.d fa5, fa1
8949429783SCraig Topper; CHECKIFD-NEXT:    beqz a0, .LBB1_3
9049429783SCraig Topper; CHECKIFD-NEXT:  # %bb.1:
9149429783SCraig Topper; CHECKIFD-NEXT:    feq.d a0, fa1, fa1
9249429783SCraig Topper; CHECKIFD-NEXT:    beqz a0, .LBB1_4
9349429783SCraig Topper; CHECKIFD-NEXT:  .LBB1_2:
9449429783SCraig Topper; CHECKIFD-NEXT:    fmax.d fa0, fa0, fa5
9549429783SCraig Topper; CHECKIFD-NEXT:    ret
9649429783SCraig Topper; CHECKIFD-NEXT:  .LBB1_3:
9749429783SCraig Topper; CHECKIFD-NEXT:    fmv.d fa5, fa0
9849429783SCraig Topper; CHECKIFD-NEXT:    feq.d a0, fa1, fa1
9949429783SCraig Topper; CHECKIFD-NEXT:    bnez a0, .LBB1_2
10049429783SCraig Topper; CHECKIFD-NEXT:  .LBB1_4:
10149429783SCraig Topper; CHECKIFD-NEXT:    fmax.d fa0, fa1, fa5
10249429783SCraig Topper; CHECKIFD-NEXT:    ret
10349429783SCraig Topper;
10449429783SCraig Topper; RV32IZFINXZDINX-LABEL: fmaximum_f64:
10549429783SCraig Topper; RV32IZFINXZDINX:       # %bb.0:
10649429783SCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d a6, a0, a0
10749429783SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a4, a2
108116eb323SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a5, a3
109*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    beqz a6, .LBB1_3
11049429783SCraig Topper; RV32IZFINXZDINX-NEXT:  # %bb.1:
111*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d a6, a2, a2
112*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    beqz a6, .LBB1_4
113*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:  .LBB1_2:
114*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    fmax.d a0, a0, a4
115*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    ret
116*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:  .LBB1_3:
11749429783SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a4, a0
118116eb323SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a5, a1
11949429783SCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d a6, a2, a2
120*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    bnez a6, .LBB1_2
121*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:  .LBB1_4:
12249429783SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a0, a2
123116eb323SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a1, a3
12449429783SCraig Topper; RV32IZFINXZDINX-NEXT:    fmax.d a0, a0, a4
12549429783SCraig Topper; RV32IZFINXZDINX-NEXT:    ret
12649429783SCraig Topper;
12749429783SCraig Topper; RV64IZFINXZDINX-LABEL: fmaximum_f64:
12849429783SCraig Topper; RV64IZFINXZDINX:       # %bb.0:
12949429783SCraig Topper; RV64IZFINXZDINX-NEXT:    feq.d a3, a0, a0
13049429783SCraig Topper; RV64IZFINXZDINX-NEXT:    mv a2, a1
13149429783SCraig Topper; RV64IZFINXZDINX-NEXT:    beqz a3, .LBB1_3
13249429783SCraig Topper; RV64IZFINXZDINX-NEXT:  # %bb.1:
13349429783SCraig Topper; RV64IZFINXZDINX-NEXT:    feq.d a3, a1, a1
13449429783SCraig Topper; RV64IZFINXZDINX-NEXT:    beqz a3, .LBB1_4
13549429783SCraig Topper; RV64IZFINXZDINX-NEXT:  .LBB1_2:
13649429783SCraig Topper; RV64IZFINXZDINX-NEXT:    fmax.d a0, a0, a2
13749429783SCraig Topper; RV64IZFINXZDINX-NEXT:    ret
13849429783SCraig Topper; RV64IZFINXZDINX-NEXT:  .LBB1_3:
13949429783SCraig Topper; RV64IZFINXZDINX-NEXT:    mv a2, a0
14049429783SCraig Topper; RV64IZFINXZDINX-NEXT:    feq.d a3, a1, a1
14149429783SCraig Topper; RV64IZFINXZDINX-NEXT:    bnez a3, .LBB1_2
14249429783SCraig Topper; RV64IZFINXZDINX-NEXT:  .LBB1_4:
14349429783SCraig Topper; RV64IZFINXZDINX-NEXT:    fmax.d a0, a1, a2
14449429783SCraig Topper; RV64IZFINXZDINX-NEXT:    ret
14549429783SCraig Topper  %1 = call double @llvm.maximum.f64(double %a, double %b)
14649429783SCraig Topper  ret double %1
14749429783SCraig Topper}
148048458f9SCraig Topper
149048458f9SCraig Topperdefine double @fminimum_nnan_f64(double %a, double %b) nounwind {
150048458f9SCraig Topper; CHECKIFD-LABEL: fminimum_nnan_f64:
151048458f9SCraig Topper; CHECKIFD:       # %bb.0:
152048458f9SCraig Topper; CHECKIFD-NEXT:    fmin.d fa0, fa0, fa1
153048458f9SCraig Topper; CHECKIFD-NEXT:    ret
154048458f9SCraig Topper;
155048458f9SCraig Topper; RV32IZFINXZDINX-LABEL: fminimum_nnan_f64:
156048458f9SCraig Topper; RV32IZFINXZDINX:       # %bb.0:
157048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:    fmin.d a0, a0, a2
158048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:    ret
159048458f9SCraig Topper;
160048458f9SCraig Topper; RV64IZFINXZDINX-LABEL: fminimum_nnan_f64:
161048458f9SCraig Topper; RV64IZFINXZDINX:       # %bb.0:
162048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    fmin.d a0, a0, a1
163048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    ret
164048458f9SCraig Topper  %1 = call nnan double @llvm.minimum.f64(double %a, double %b)
165048458f9SCraig Topper  ret double %1
166048458f9SCraig Topper}
167048458f9SCraig Topper
168048458f9SCraig Topperdefine double @fmaximum_nnan_f64(double %a, double %b) nounwind {
169048458f9SCraig Topper; CHECKIFD-LABEL: fmaximum_nnan_f64:
170048458f9SCraig Topper; CHECKIFD:       # %bb.0:
171048458f9SCraig Topper; CHECKIFD-NEXT:    feq.d a0, fa0, fa0
172048458f9SCraig Topper; CHECKIFD-NEXT:    fmv.d fa5, fa1
173048458f9SCraig Topper; CHECKIFD-NEXT:    beqz a0, .LBB3_3
174048458f9SCraig Topper; CHECKIFD-NEXT:  # %bb.1:
175048458f9SCraig Topper; CHECKIFD-NEXT:    feq.d a0, fa1, fa1
176048458f9SCraig Topper; CHECKIFD-NEXT:    beqz a0, .LBB3_4
177048458f9SCraig Topper; CHECKIFD-NEXT:  .LBB3_2:
178048458f9SCraig Topper; CHECKIFD-NEXT:    fmin.d fa0, fa0, fa5
179048458f9SCraig Topper; CHECKIFD-NEXT:    ret
180048458f9SCraig Topper; CHECKIFD-NEXT:  .LBB3_3:
181048458f9SCraig Topper; CHECKIFD-NEXT:    fmv.d fa5, fa0
182048458f9SCraig Topper; CHECKIFD-NEXT:    feq.d a0, fa1, fa1
183048458f9SCraig Topper; CHECKIFD-NEXT:    bnez a0, .LBB3_2
184048458f9SCraig Topper; CHECKIFD-NEXT:  .LBB3_4:
185048458f9SCraig Topper; CHECKIFD-NEXT:    fmin.d fa0, fa1, fa5
186048458f9SCraig Topper; CHECKIFD-NEXT:    ret
187048458f9SCraig Topper;
188048458f9SCraig Topper; RV32IZFINXZDINX-LABEL: fmaximum_nnan_f64:
189048458f9SCraig Topper; RV32IZFINXZDINX:       # %bb.0:
190048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d a6, a0, a0
191048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a4, a2
192116eb323SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a5, a3
193*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    beqz a6, .LBB3_3
194048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:  # %bb.1:
195*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d a6, a2, a2
196*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    beqz a6, .LBB3_4
197*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:  .LBB3_2:
198*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    fmin.d a0, a0, a4
199*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    ret
200*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:  .LBB3_3:
201048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a4, a0
202116eb323SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a5, a1
203048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d a6, a2, a2
204*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    bnez a6, .LBB3_2
205*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:  .LBB3_4:
206048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a0, a2
207116eb323SCraig Topper; RV32IZFINXZDINX-NEXT:    mv a1, a3
208048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:    fmin.d a0, a0, a4
209048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:    ret
210048458f9SCraig Topper;
211048458f9SCraig Topper; RV64IZFINXZDINX-LABEL: fmaximum_nnan_f64:
212048458f9SCraig Topper; RV64IZFINXZDINX:       # %bb.0:
213048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    feq.d a3, a0, a0
214048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    mv a2, a1
215048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    beqz a3, .LBB3_3
216048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:  # %bb.1:
217048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    feq.d a3, a1, a1
218048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    beqz a3, .LBB3_4
219048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:  .LBB3_2:
220048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    fmin.d a0, a0, a2
221048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    ret
222048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:  .LBB3_3:
223048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    mv a2, a0
224048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    feq.d a3, a1, a1
225048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    bnez a3, .LBB3_2
226048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:  .LBB3_4:
227048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    fmin.d a0, a1, a2
228048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    ret
229048458f9SCraig Topper  %1 = call double @llvm.minimum.f64(double %a, double %b)
230048458f9SCraig Topper  ret double %1
231048458f9SCraig Topper}
232048458f9SCraig Topper
233048458f9SCraig Topperdefine double @fminimum_nnan_op_f64(double %a, double %b) nounwind {
234048458f9SCraig Topper; CHECKIFD-LABEL: fminimum_nnan_op_f64:
235048458f9SCraig Topper; CHECKIFD:       # %bb.0:
236048458f9SCraig Topper; CHECKIFD-NEXT:    feq.d a0, fa1, fa1
237048458f9SCraig Topper; CHECKIFD-NEXT:    bnez a0, .LBB4_2
238048458f9SCraig Topper; CHECKIFD-NEXT:  # %bb.1:
239048458f9SCraig Topper; CHECKIFD-NEXT:    fmin.d fa0, fa1, fa1
240048458f9SCraig Topper; CHECKIFD-NEXT:    ret
241048458f9SCraig Topper; CHECKIFD-NEXT:  .LBB4_2:
242048458f9SCraig Topper; CHECKIFD-NEXT:    fadd.d fa5, fa0, fa0
243048458f9SCraig Topper; CHECKIFD-NEXT:    fmin.d fa0, fa5, fa1
244048458f9SCraig Topper; CHECKIFD-NEXT:    ret
245048458f9SCraig Topper;
246048458f9SCraig Topper; RV32IZFINXZDINX-LABEL: fminimum_nnan_op_f64:
247048458f9SCraig Topper; RV32IZFINXZDINX:       # %bb.0:
248*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    feq.d a4, a2, a2
249*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    bnez a4, .LBB4_2
250048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:  # %bb.1:
251*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    fmin.d a0, a2, a2
252*576d81baSCraig Topper; RV32IZFINXZDINX-NEXT:    ret
253048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:  .LBB4_2:
254048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:    fadd.d a0, a0, a0
255048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:    fmin.d a0, a0, a2
256048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:    ret
257048458f9SCraig Topper;
258048458f9SCraig Topper; RV64IZFINXZDINX-LABEL: fminimum_nnan_op_f64:
259048458f9SCraig Topper; RV64IZFINXZDINX:       # %bb.0:
260048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    feq.d a2, a1, a1
261048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    bnez a2, .LBB4_2
262048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:  # %bb.1:
263048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    fmin.d a0, a1, a1
264048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    ret
265048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:  .LBB4_2:
266048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    fadd.d a0, a0, a0
267048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    fmin.d a0, a0, a1
268048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    ret
269048458f9SCraig Topper  %c = fadd nnan double %a, %a
270048458f9SCraig Topper  %1 = call double @llvm.minimum.f64(double %c, double %b)
271048458f9SCraig Topper  ret double %1
272048458f9SCraig Topper}
273048458f9SCraig Topper
274048458f9SCraig Topperdefine double @fmaximum_nnan_op_f64(double %a, double %b) nounwind {
275048458f9SCraig Topper; CHECKIFD-LABEL: fmaximum_nnan_op_f64:
276048458f9SCraig Topper; CHECKIFD:       # %bb.0:
277048458f9SCraig Topper; CHECKIFD-NEXT:    fadd.d fa5, fa0, fa1
278048458f9SCraig Topper; CHECKIFD-NEXT:    fsub.d fa4, fa0, fa1
279048458f9SCraig Topper; CHECKIFD-NEXT:    fmax.d fa0, fa5, fa4
280048458f9SCraig Topper; CHECKIFD-NEXT:    ret
281048458f9SCraig Topper;
282048458f9SCraig Topper; RV32IZFINXZDINX-LABEL: fmaximum_nnan_op_f64:
283048458f9SCraig Topper; RV32IZFINXZDINX:       # %bb.0:
284048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:    fadd.d a4, a0, a2
285048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:    fsub.d a0, a0, a2
286048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:    fmax.d a0, a4, a0
287048458f9SCraig Topper; RV32IZFINXZDINX-NEXT:    ret
288048458f9SCraig Topper;
289048458f9SCraig Topper; RV64IZFINXZDINX-LABEL: fmaximum_nnan_op_f64:
290048458f9SCraig Topper; RV64IZFINXZDINX:       # %bb.0:
291048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    fadd.d a2, a0, a1
292048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    fsub.d a0, a0, a1
293048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    fmax.d a0, a2, a0
294048458f9SCraig Topper; RV64IZFINXZDINX-NEXT:    ret
295048458f9SCraig Topper  %c = fadd nnan double %a, %b
296048458f9SCraig Topper  %d = fsub nnan double %a, %b
297048458f9SCraig Topper  %1 = call double @llvm.maximum.f64(double %c, double %d)
298048458f9SCraig Topper  ret double %1
299048458f9SCraig Topper}
300048458f9SCraig Topper
30149429783SCraig Topper;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
30249429783SCraig Topper; RV32IFD: {{.*}}
30349429783SCraig Topper; RV64IFD: {{.*}}
304