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