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=+f \ 349429783SCraig Topper; RUN: -verify-machineinstrs -target-abi=ilp32f \ 449429783SCraig Topper; RUN: | FileCheck -check-prefix=RV32IF %s 549429783SCraig Topper; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zfinx \ 649429783SCraig Topper; RUN: -verify-machineinstrs -target-abi=ilp32 \ 749429783SCraig Topper; RUN: | FileCheck -check-prefix=RV32IZFINX %s 849429783SCraig Topper; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+d \ 949429783SCraig Topper; RUN: -verify-machineinstrs -target-abi=ilp32f \ 1049429783SCraig Topper; RUN: | FileCheck -check-prefix=RV32IF %s 11*5a08acc1SAlex Bradbury; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 \ 12*5a08acc1SAlex Bradbury; RUN: -verify-machineinstrs -target-abi=ilp32 \ 13*5a08acc1SAlex Bradbury; RUN: | FileCheck -check-prefix=RV32I %s 1449429783SCraig Topper; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+f \ 1549429783SCraig Topper; RUN: -verify-machineinstrs -target-abi=lp64f \ 1649429783SCraig Topper; RUN: | FileCheck -check-prefix=RV64IF %s 1749429783SCraig Topper; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zfinx \ 1849429783SCraig Topper; RUN: -verify-machineinstrs -target-abi=lp64 \ 1949429783SCraig Topper; RUN: | FileCheck -check-prefix=RV64IZFINX %s 2049429783SCraig Topper; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+d \ 2149429783SCraig Topper; RUN: -verify-machineinstrs -target-abi=lp64d \ 2249429783SCraig Topper; RUN: | FileCheck -check-prefix=RV64IF %s 23*5a08acc1SAlex Bradbury; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 \ 24*5a08acc1SAlex Bradbury; RUN: -verify-machineinstrs -target-abi=lp64 \ 25*5a08acc1SAlex Bradbury; RUN: | FileCheck -check-prefix=RV64I %s 2649429783SCraig Topper 2749429783SCraig Topperdeclare float @llvm.minimum.f32(float, float) 2849429783SCraig Topper 2949429783SCraig Topperdefine float @fminimum_f32(float %a, float %b) nounwind { 3049429783SCraig Topper; RV32IF-LABEL: fminimum_f32: 3149429783SCraig Topper; RV32IF: # %bb.0: 3249429783SCraig Topper; RV32IF-NEXT: feq.s a0, fa0, fa0 3349429783SCraig Topper; RV32IF-NEXT: fmv.s fa5, fa1 3449429783SCraig Topper; RV32IF-NEXT: beqz a0, .LBB0_3 3549429783SCraig Topper; RV32IF-NEXT: # %bb.1: 3649429783SCraig Topper; RV32IF-NEXT: feq.s a0, fa1, fa1 3749429783SCraig Topper; RV32IF-NEXT: beqz a0, .LBB0_4 3849429783SCraig Topper; RV32IF-NEXT: .LBB0_2: 3949429783SCraig Topper; RV32IF-NEXT: fmin.s fa0, fa0, fa5 4049429783SCraig Topper; RV32IF-NEXT: ret 4149429783SCraig Topper; RV32IF-NEXT: .LBB0_3: 4249429783SCraig Topper; RV32IF-NEXT: fmv.s fa5, fa0 4349429783SCraig Topper; RV32IF-NEXT: feq.s a0, fa1, fa1 4449429783SCraig Topper; RV32IF-NEXT: bnez a0, .LBB0_2 4549429783SCraig Topper; RV32IF-NEXT: .LBB0_4: 4649429783SCraig Topper; RV32IF-NEXT: fmin.s fa0, fa1, fa5 4749429783SCraig Topper; RV32IF-NEXT: ret 4849429783SCraig Topper; 4949429783SCraig Topper; RV32IZFINX-LABEL: fminimum_f32: 5049429783SCraig Topper; RV32IZFINX: # %bb.0: 5149429783SCraig Topper; RV32IZFINX-NEXT: feq.s a3, a0, a0 5249429783SCraig Topper; RV32IZFINX-NEXT: mv a2, a1 5349429783SCraig Topper; RV32IZFINX-NEXT: beqz a3, .LBB0_3 5449429783SCraig Topper; RV32IZFINX-NEXT: # %bb.1: 5549429783SCraig Topper; RV32IZFINX-NEXT: feq.s a3, a1, a1 5649429783SCraig Topper; RV32IZFINX-NEXT: beqz a3, .LBB0_4 5749429783SCraig Topper; RV32IZFINX-NEXT: .LBB0_2: 5849429783SCraig Topper; RV32IZFINX-NEXT: fmin.s a0, a0, a2 5949429783SCraig Topper; RV32IZFINX-NEXT: ret 6049429783SCraig Topper; RV32IZFINX-NEXT: .LBB0_3: 6149429783SCraig Topper; RV32IZFINX-NEXT: mv a2, a0 6249429783SCraig Topper; RV32IZFINX-NEXT: feq.s a3, a1, a1 6349429783SCraig Topper; RV32IZFINX-NEXT: bnez a3, .LBB0_2 6449429783SCraig Topper; RV32IZFINX-NEXT: .LBB0_4: 6549429783SCraig Topper; RV32IZFINX-NEXT: fmin.s a0, a1, a2 6649429783SCraig Topper; RV32IZFINX-NEXT: ret 6749429783SCraig Topper; 68*5a08acc1SAlex Bradbury; RV32I-LABEL: fminimum_f32: 69*5a08acc1SAlex Bradbury; RV32I: # %bb.0: 70*5a08acc1SAlex Bradbury; RV32I-NEXT: addi sp, sp, -16 71*5a08acc1SAlex Bradbury; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 72*5a08acc1SAlex Bradbury; RV32I-NEXT: call fminimumf 73*5a08acc1SAlex Bradbury; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 74*5a08acc1SAlex Bradbury; RV32I-NEXT: addi sp, sp, 16 75*5a08acc1SAlex Bradbury; RV32I-NEXT: ret 76*5a08acc1SAlex Bradbury; 7749429783SCraig Topper; RV64IF-LABEL: fminimum_f32: 7849429783SCraig Topper; RV64IF: # %bb.0: 7949429783SCraig Topper; RV64IF-NEXT: feq.s a0, fa0, fa0 8049429783SCraig Topper; RV64IF-NEXT: fmv.s fa5, fa1 8149429783SCraig Topper; RV64IF-NEXT: beqz a0, .LBB0_3 8249429783SCraig Topper; RV64IF-NEXT: # %bb.1: 8349429783SCraig Topper; RV64IF-NEXT: feq.s a0, fa1, fa1 8449429783SCraig Topper; RV64IF-NEXT: beqz a0, .LBB0_4 8549429783SCraig Topper; RV64IF-NEXT: .LBB0_2: 8649429783SCraig Topper; RV64IF-NEXT: fmin.s fa0, fa0, fa5 8749429783SCraig Topper; RV64IF-NEXT: ret 8849429783SCraig Topper; RV64IF-NEXT: .LBB0_3: 8949429783SCraig Topper; RV64IF-NEXT: fmv.s fa5, fa0 9049429783SCraig Topper; RV64IF-NEXT: feq.s a0, fa1, fa1 9149429783SCraig Topper; RV64IF-NEXT: bnez a0, .LBB0_2 9249429783SCraig Topper; RV64IF-NEXT: .LBB0_4: 9349429783SCraig Topper; RV64IF-NEXT: fmin.s fa0, fa1, fa5 9449429783SCraig Topper; RV64IF-NEXT: ret 9549429783SCraig Topper; 9649429783SCraig Topper; RV64IZFINX-LABEL: fminimum_f32: 9749429783SCraig Topper; RV64IZFINX: # %bb.0: 9849429783SCraig Topper; RV64IZFINX-NEXT: feq.s a3, a0, a0 9949429783SCraig Topper; RV64IZFINX-NEXT: mv a2, a1 10049429783SCraig Topper; RV64IZFINX-NEXT: beqz a3, .LBB0_3 10149429783SCraig Topper; RV64IZFINX-NEXT: # %bb.1: 10249429783SCraig Topper; RV64IZFINX-NEXT: feq.s a3, a1, a1 10349429783SCraig Topper; RV64IZFINX-NEXT: beqz a3, .LBB0_4 10449429783SCraig Topper; RV64IZFINX-NEXT: .LBB0_2: 10549429783SCraig Topper; RV64IZFINX-NEXT: fmin.s a0, a0, a2 10649429783SCraig Topper; RV64IZFINX-NEXT: ret 10749429783SCraig Topper; RV64IZFINX-NEXT: .LBB0_3: 10849429783SCraig Topper; RV64IZFINX-NEXT: mv a2, a0 10949429783SCraig Topper; RV64IZFINX-NEXT: feq.s a3, a1, a1 11049429783SCraig Topper; RV64IZFINX-NEXT: bnez a3, .LBB0_2 11149429783SCraig Topper; RV64IZFINX-NEXT: .LBB0_4: 11249429783SCraig Topper; RV64IZFINX-NEXT: fmin.s a0, a1, a2 11349429783SCraig Topper; RV64IZFINX-NEXT: ret 114*5a08acc1SAlex Bradbury; 115*5a08acc1SAlex Bradbury; RV64I-LABEL: fminimum_f32: 116*5a08acc1SAlex Bradbury; RV64I: # %bb.0: 117*5a08acc1SAlex Bradbury; RV64I-NEXT: addi sp, sp, -16 118*5a08acc1SAlex Bradbury; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 119*5a08acc1SAlex Bradbury; RV64I-NEXT: call fminimumf 120*5a08acc1SAlex Bradbury; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 121*5a08acc1SAlex Bradbury; RV64I-NEXT: addi sp, sp, 16 122*5a08acc1SAlex Bradbury; RV64I-NEXT: ret 12349429783SCraig Topper %1 = call float @llvm.minimum.f32(float %a, float %b) 12449429783SCraig Topper ret float %1 12549429783SCraig Topper} 12649429783SCraig Topper 12749429783SCraig Topperdeclare float @llvm.maximum.f32(float, float) 12849429783SCraig Topper 12949429783SCraig Topperdefine float @fmaximum_f32(float %a, float %b) nounwind { 13049429783SCraig Topper; RV32IF-LABEL: fmaximum_f32: 13149429783SCraig Topper; RV32IF: # %bb.0: 13249429783SCraig Topper; RV32IF-NEXT: feq.s a0, fa0, fa0 13349429783SCraig Topper; RV32IF-NEXT: fmv.s fa5, fa1 13449429783SCraig Topper; RV32IF-NEXT: beqz a0, .LBB1_3 13549429783SCraig Topper; RV32IF-NEXT: # %bb.1: 13649429783SCraig Topper; RV32IF-NEXT: feq.s a0, fa1, fa1 13749429783SCraig Topper; RV32IF-NEXT: beqz a0, .LBB1_4 13849429783SCraig Topper; RV32IF-NEXT: .LBB1_2: 13949429783SCraig Topper; RV32IF-NEXT: fmax.s fa0, fa0, fa5 14049429783SCraig Topper; RV32IF-NEXT: ret 14149429783SCraig Topper; RV32IF-NEXT: .LBB1_3: 14249429783SCraig Topper; RV32IF-NEXT: fmv.s fa5, fa0 14349429783SCraig Topper; RV32IF-NEXT: feq.s a0, fa1, fa1 14449429783SCraig Topper; RV32IF-NEXT: bnez a0, .LBB1_2 14549429783SCraig Topper; RV32IF-NEXT: .LBB1_4: 14649429783SCraig Topper; RV32IF-NEXT: fmax.s fa0, fa1, fa5 14749429783SCraig Topper; RV32IF-NEXT: ret 14849429783SCraig Topper; 14949429783SCraig Topper; RV32IZFINX-LABEL: fmaximum_f32: 15049429783SCraig Topper; RV32IZFINX: # %bb.0: 15149429783SCraig Topper; RV32IZFINX-NEXT: feq.s a3, a0, a0 15249429783SCraig Topper; RV32IZFINX-NEXT: mv a2, a1 15349429783SCraig Topper; RV32IZFINX-NEXT: beqz a3, .LBB1_3 15449429783SCraig Topper; RV32IZFINX-NEXT: # %bb.1: 15549429783SCraig Topper; RV32IZFINX-NEXT: feq.s a3, a1, a1 15649429783SCraig Topper; RV32IZFINX-NEXT: beqz a3, .LBB1_4 15749429783SCraig Topper; RV32IZFINX-NEXT: .LBB1_2: 15849429783SCraig Topper; RV32IZFINX-NEXT: fmax.s a0, a0, a2 15949429783SCraig Topper; RV32IZFINX-NEXT: ret 16049429783SCraig Topper; RV32IZFINX-NEXT: .LBB1_3: 16149429783SCraig Topper; RV32IZFINX-NEXT: mv a2, a0 16249429783SCraig Topper; RV32IZFINX-NEXT: feq.s a3, a1, a1 16349429783SCraig Topper; RV32IZFINX-NEXT: bnez a3, .LBB1_2 16449429783SCraig Topper; RV32IZFINX-NEXT: .LBB1_4: 16549429783SCraig Topper; RV32IZFINX-NEXT: fmax.s a0, a1, a2 16649429783SCraig Topper; RV32IZFINX-NEXT: ret 16749429783SCraig Topper; 168*5a08acc1SAlex Bradbury; RV32I-LABEL: fmaximum_f32: 169*5a08acc1SAlex Bradbury; RV32I: # %bb.0: 170*5a08acc1SAlex Bradbury; RV32I-NEXT: addi sp, sp, -16 171*5a08acc1SAlex Bradbury; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 172*5a08acc1SAlex Bradbury; RV32I-NEXT: call fmaximumf 173*5a08acc1SAlex Bradbury; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 174*5a08acc1SAlex Bradbury; RV32I-NEXT: addi sp, sp, 16 175*5a08acc1SAlex Bradbury; RV32I-NEXT: ret 176*5a08acc1SAlex Bradbury; 17749429783SCraig Topper; RV64IF-LABEL: fmaximum_f32: 17849429783SCraig Topper; RV64IF: # %bb.0: 17949429783SCraig Topper; RV64IF-NEXT: feq.s a0, fa0, fa0 18049429783SCraig Topper; RV64IF-NEXT: fmv.s fa5, fa1 18149429783SCraig Topper; RV64IF-NEXT: beqz a0, .LBB1_3 18249429783SCraig Topper; RV64IF-NEXT: # %bb.1: 18349429783SCraig Topper; RV64IF-NEXT: feq.s a0, fa1, fa1 18449429783SCraig Topper; RV64IF-NEXT: beqz a0, .LBB1_4 18549429783SCraig Topper; RV64IF-NEXT: .LBB1_2: 18649429783SCraig Topper; RV64IF-NEXT: fmax.s fa0, fa0, fa5 18749429783SCraig Topper; RV64IF-NEXT: ret 18849429783SCraig Topper; RV64IF-NEXT: .LBB1_3: 18949429783SCraig Topper; RV64IF-NEXT: fmv.s fa5, fa0 19049429783SCraig Topper; RV64IF-NEXT: feq.s a0, fa1, fa1 19149429783SCraig Topper; RV64IF-NEXT: bnez a0, .LBB1_2 19249429783SCraig Topper; RV64IF-NEXT: .LBB1_4: 19349429783SCraig Topper; RV64IF-NEXT: fmax.s fa0, fa1, fa5 19449429783SCraig Topper; RV64IF-NEXT: ret 19549429783SCraig Topper; 19649429783SCraig Topper; RV64IZFINX-LABEL: fmaximum_f32: 19749429783SCraig Topper; RV64IZFINX: # %bb.0: 19849429783SCraig Topper; RV64IZFINX-NEXT: feq.s a3, a0, a0 19949429783SCraig Topper; RV64IZFINX-NEXT: mv a2, a1 20049429783SCraig Topper; RV64IZFINX-NEXT: beqz a3, .LBB1_3 20149429783SCraig Topper; RV64IZFINX-NEXT: # %bb.1: 20249429783SCraig Topper; RV64IZFINX-NEXT: feq.s a3, a1, a1 20349429783SCraig Topper; RV64IZFINX-NEXT: beqz a3, .LBB1_4 20449429783SCraig Topper; RV64IZFINX-NEXT: .LBB1_2: 20549429783SCraig Topper; RV64IZFINX-NEXT: fmax.s a0, a0, a2 20649429783SCraig Topper; RV64IZFINX-NEXT: ret 20749429783SCraig Topper; RV64IZFINX-NEXT: .LBB1_3: 20849429783SCraig Topper; RV64IZFINX-NEXT: mv a2, a0 20949429783SCraig Topper; RV64IZFINX-NEXT: feq.s a3, a1, a1 21049429783SCraig Topper; RV64IZFINX-NEXT: bnez a3, .LBB1_2 21149429783SCraig Topper; RV64IZFINX-NEXT: .LBB1_4: 21249429783SCraig Topper; RV64IZFINX-NEXT: fmax.s a0, a1, a2 21349429783SCraig Topper; RV64IZFINX-NEXT: ret 214*5a08acc1SAlex Bradbury; 215*5a08acc1SAlex Bradbury; RV64I-LABEL: fmaximum_f32: 216*5a08acc1SAlex Bradbury; RV64I: # %bb.0: 217*5a08acc1SAlex Bradbury; RV64I-NEXT: addi sp, sp, -16 218*5a08acc1SAlex Bradbury; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 219*5a08acc1SAlex Bradbury; RV64I-NEXT: call fmaximumf 220*5a08acc1SAlex Bradbury; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 221*5a08acc1SAlex Bradbury; RV64I-NEXT: addi sp, sp, 16 222*5a08acc1SAlex Bradbury; RV64I-NEXT: ret 22349429783SCraig Topper %1 = call float @llvm.maximum.f32(float %a, float %b) 22449429783SCraig Topper ret float %1 22549429783SCraig Topper} 226048458f9SCraig Topper 227048458f9SCraig Topperdefine float @fminimum_nnan_f32(float %a, float %b) nounwind { 228048458f9SCraig Topper; RV32IF-LABEL: fminimum_nnan_f32: 229048458f9SCraig Topper; RV32IF: # %bb.0: 230048458f9SCraig Topper; RV32IF-NEXT: fmin.s fa0, fa0, fa1 231048458f9SCraig Topper; RV32IF-NEXT: ret 232048458f9SCraig Topper; 233048458f9SCraig Topper; RV32IZFINX-LABEL: fminimum_nnan_f32: 234048458f9SCraig Topper; RV32IZFINX: # %bb.0: 235048458f9SCraig Topper; RV32IZFINX-NEXT: fmin.s a0, a0, a1 236048458f9SCraig Topper; RV32IZFINX-NEXT: ret 237048458f9SCraig Topper; 238*5a08acc1SAlex Bradbury; RV32I-LABEL: fminimum_nnan_f32: 239*5a08acc1SAlex Bradbury; RV32I: # %bb.0: 240*5a08acc1SAlex Bradbury; RV32I-NEXT: addi sp, sp, -16 241*5a08acc1SAlex Bradbury; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 242*5a08acc1SAlex Bradbury; RV32I-NEXT: call fminimumf 243*5a08acc1SAlex Bradbury; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 244*5a08acc1SAlex Bradbury; RV32I-NEXT: addi sp, sp, 16 245*5a08acc1SAlex Bradbury; RV32I-NEXT: ret 246*5a08acc1SAlex Bradbury; 247048458f9SCraig Topper; RV64IF-LABEL: fminimum_nnan_f32: 248048458f9SCraig Topper; RV64IF: # %bb.0: 249048458f9SCraig Topper; RV64IF-NEXT: fmin.s fa0, fa0, fa1 250048458f9SCraig Topper; RV64IF-NEXT: ret 251048458f9SCraig Topper; 252048458f9SCraig Topper; RV64IZFINX-LABEL: fminimum_nnan_f32: 253048458f9SCraig Topper; RV64IZFINX: # %bb.0: 254048458f9SCraig Topper; RV64IZFINX-NEXT: fmin.s a0, a0, a1 255048458f9SCraig Topper; RV64IZFINX-NEXT: ret 256*5a08acc1SAlex Bradbury; 257*5a08acc1SAlex Bradbury; RV64I-LABEL: fminimum_nnan_f32: 258*5a08acc1SAlex Bradbury; RV64I: # %bb.0: 259*5a08acc1SAlex Bradbury; RV64I-NEXT: addi sp, sp, -16 260*5a08acc1SAlex Bradbury; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 261*5a08acc1SAlex Bradbury; RV64I-NEXT: call fminimumf 262*5a08acc1SAlex Bradbury; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 263*5a08acc1SAlex Bradbury; RV64I-NEXT: addi sp, sp, 16 264*5a08acc1SAlex Bradbury; RV64I-NEXT: ret 265048458f9SCraig Topper %1 = call nnan float @llvm.minimum.f32(float %a, float %b) 266048458f9SCraig Topper ret float %1 267048458f9SCraig Topper} 268048458f9SCraig Topper 269048458f9SCraig Topperdefine float @fmaximum_nnan_f32(float %a, float %b) nounwind { 270048458f9SCraig Topper; RV32IF-LABEL: fmaximum_nnan_f32: 271048458f9SCraig Topper; RV32IF: # %bb.0: 272048458f9SCraig Topper; RV32IF-NEXT: fmax.s fa0, fa0, fa1 273048458f9SCraig Topper; RV32IF-NEXT: ret 274048458f9SCraig Topper; 275048458f9SCraig Topper; RV32IZFINX-LABEL: fmaximum_nnan_f32: 276048458f9SCraig Topper; RV32IZFINX: # %bb.0: 277048458f9SCraig Topper; RV32IZFINX-NEXT: fmax.s a0, a0, a1 278048458f9SCraig Topper; RV32IZFINX-NEXT: ret 279048458f9SCraig Topper; 280*5a08acc1SAlex Bradbury; RV32I-LABEL: fmaximum_nnan_f32: 281*5a08acc1SAlex Bradbury; RV32I: # %bb.0: 282*5a08acc1SAlex Bradbury; RV32I-NEXT: addi sp, sp, -16 283*5a08acc1SAlex Bradbury; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 284*5a08acc1SAlex Bradbury; RV32I-NEXT: call fmaximumf 285*5a08acc1SAlex Bradbury; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 286*5a08acc1SAlex Bradbury; RV32I-NEXT: addi sp, sp, 16 287*5a08acc1SAlex Bradbury; RV32I-NEXT: ret 288*5a08acc1SAlex Bradbury; 289048458f9SCraig Topper; RV64IF-LABEL: fmaximum_nnan_f32: 290048458f9SCraig Topper; RV64IF: # %bb.0: 291048458f9SCraig Topper; RV64IF-NEXT: fmax.s fa0, fa0, fa1 292048458f9SCraig Topper; RV64IF-NEXT: ret 293048458f9SCraig Topper; 294048458f9SCraig Topper; RV64IZFINX-LABEL: fmaximum_nnan_f32: 295048458f9SCraig Topper; RV64IZFINX: # %bb.0: 296048458f9SCraig Topper; RV64IZFINX-NEXT: fmax.s a0, a0, a1 297048458f9SCraig Topper; RV64IZFINX-NEXT: ret 298*5a08acc1SAlex Bradbury; 299*5a08acc1SAlex Bradbury; RV64I-LABEL: fmaximum_nnan_f32: 300*5a08acc1SAlex Bradbury; RV64I: # %bb.0: 301*5a08acc1SAlex Bradbury; RV64I-NEXT: addi sp, sp, -16 302*5a08acc1SAlex Bradbury; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 303*5a08acc1SAlex Bradbury; RV64I-NEXT: call fmaximumf 304*5a08acc1SAlex Bradbury; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 305*5a08acc1SAlex Bradbury; RV64I-NEXT: addi sp, sp, 16 306*5a08acc1SAlex Bradbury; RV64I-NEXT: ret 307048458f9SCraig Topper %1 = call nnan float @llvm.maximum.f32(float %a, float %b) 308048458f9SCraig Topper ret float %1 309048458f9SCraig Topper} 310048458f9SCraig Topper 311048458f9SCraig Topperdefine float @fminimum_nnan_attr_f32(float %a, float %b) nounwind "no-nans-fp-math"="true" { 312048458f9SCraig Topper; RV32IF-LABEL: fminimum_nnan_attr_f32: 313048458f9SCraig Topper; RV32IF: # %bb.0: 314048458f9SCraig Topper; RV32IF-NEXT: fmin.s fa0, fa0, fa1 315048458f9SCraig Topper; RV32IF-NEXT: ret 316048458f9SCraig Topper; 317048458f9SCraig Topper; RV32IZFINX-LABEL: fminimum_nnan_attr_f32: 318048458f9SCraig Topper; RV32IZFINX: # %bb.0: 319048458f9SCraig Topper; RV32IZFINX-NEXT: fmin.s a0, a0, a1 320048458f9SCraig Topper; RV32IZFINX-NEXT: ret 321048458f9SCraig Topper; 322*5a08acc1SAlex Bradbury; RV32I-LABEL: fminimum_nnan_attr_f32: 323*5a08acc1SAlex Bradbury; RV32I: # %bb.0: 324*5a08acc1SAlex Bradbury; RV32I-NEXT: addi sp, sp, -16 325*5a08acc1SAlex Bradbury; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 326*5a08acc1SAlex Bradbury; RV32I-NEXT: call fminimumf 327*5a08acc1SAlex Bradbury; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 328*5a08acc1SAlex Bradbury; RV32I-NEXT: addi sp, sp, 16 329*5a08acc1SAlex Bradbury; RV32I-NEXT: ret 330*5a08acc1SAlex Bradbury; 331048458f9SCraig Topper; RV64IF-LABEL: fminimum_nnan_attr_f32: 332048458f9SCraig Topper; RV64IF: # %bb.0: 333048458f9SCraig Topper; RV64IF-NEXT: fmin.s fa0, fa0, fa1 334048458f9SCraig Topper; RV64IF-NEXT: ret 335048458f9SCraig Topper; 336048458f9SCraig Topper; RV64IZFINX-LABEL: fminimum_nnan_attr_f32: 337048458f9SCraig Topper; RV64IZFINX: # %bb.0: 338048458f9SCraig Topper; RV64IZFINX-NEXT: fmin.s a0, a0, a1 339048458f9SCraig Topper; RV64IZFINX-NEXT: ret 340*5a08acc1SAlex Bradbury; 341*5a08acc1SAlex Bradbury; RV64I-LABEL: fminimum_nnan_attr_f32: 342*5a08acc1SAlex Bradbury; RV64I: # %bb.0: 343*5a08acc1SAlex Bradbury; RV64I-NEXT: addi sp, sp, -16 344*5a08acc1SAlex Bradbury; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 345*5a08acc1SAlex Bradbury; RV64I-NEXT: call fminimumf 346*5a08acc1SAlex Bradbury; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 347*5a08acc1SAlex Bradbury; RV64I-NEXT: addi sp, sp, 16 348*5a08acc1SAlex Bradbury; RV64I-NEXT: ret 349048458f9SCraig Topper %1 = call float @llvm.minimum.f32(float %a, float %b) 350048458f9SCraig Topper ret float %1 351048458f9SCraig Topper} 352048458f9SCraig Topper 353048458f9SCraig Topperdefine float @fminimum_nnan_op_f32(float %a, float %b) nounwind { 354048458f9SCraig Topper; RV32IF-LABEL: fminimum_nnan_op_f32: 355048458f9SCraig Topper; RV32IF: # %bb.0: 356048458f9SCraig Topper; RV32IF-NEXT: feq.s a0, fa0, fa0 357048458f9SCraig Topper; RV32IF-NEXT: bnez a0, .LBB5_2 358048458f9SCraig Topper; RV32IF-NEXT: # %bb.1: 359048458f9SCraig Topper; RV32IF-NEXT: fmin.s fa0, fa0, fa0 360048458f9SCraig Topper; RV32IF-NEXT: ret 361048458f9SCraig Topper; RV32IF-NEXT: .LBB5_2: 362048458f9SCraig Topper; RV32IF-NEXT: fadd.s fa5, fa0, fa0 363048458f9SCraig Topper; RV32IF-NEXT: fmin.s fa0, fa0, fa5 364048458f9SCraig Topper; RV32IF-NEXT: ret 365048458f9SCraig Topper; 366048458f9SCraig Topper; RV32IZFINX-LABEL: fminimum_nnan_op_f32: 367048458f9SCraig Topper; RV32IZFINX: # %bb.0: 368048458f9SCraig Topper; RV32IZFINX-NEXT: feq.s a1, a0, a0 369048458f9SCraig Topper; RV32IZFINX-NEXT: bnez a1, .LBB5_2 370048458f9SCraig Topper; RV32IZFINX-NEXT: # %bb.1: 371048458f9SCraig Topper; RV32IZFINX-NEXT: fmin.s a0, a0, a0 372048458f9SCraig Topper; RV32IZFINX-NEXT: ret 373048458f9SCraig Topper; RV32IZFINX-NEXT: .LBB5_2: 374048458f9SCraig Topper; RV32IZFINX-NEXT: fadd.s a1, a0, a0 375048458f9SCraig Topper; RV32IZFINX-NEXT: fmin.s a0, a0, a1 376048458f9SCraig Topper; RV32IZFINX-NEXT: ret 377048458f9SCraig Topper; 378*5a08acc1SAlex Bradbury; RV32I-LABEL: fminimum_nnan_op_f32: 379*5a08acc1SAlex Bradbury; RV32I: # %bb.0: 380*5a08acc1SAlex Bradbury; RV32I-NEXT: addi sp, sp, -16 381*5a08acc1SAlex Bradbury; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 382*5a08acc1SAlex Bradbury; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 383*5a08acc1SAlex Bradbury; RV32I-NEXT: mv s0, a0 384*5a08acc1SAlex Bradbury; RV32I-NEXT: mv a1, a0 385*5a08acc1SAlex Bradbury; RV32I-NEXT: call __addsf3 386*5a08acc1SAlex Bradbury; RV32I-NEXT: mv a1, a0 387*5a08acc1SAlex Bradbury; RV32I-NEXT: mv a0, s0 388*5a08acc1SAlex Bradbury; RV32I-NEXT: call fminimumf 389*5a08acc1SAlex Bradbury; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 390*5a08acc1SAlex Bradbury; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 391*5a08acc1SAlex Bradbury; RV32I-NEXT: addi sp, sp, 16 392*5a08acc1SAlex Bradbury; RV32I-NEXT: ret 393*5a08acc1SAlex Bradbury; 394048458f9SCraig Topper; RV64IF-LABEL: fminimum_nnan_op_f32: 395048458f9SCraig Topper; RV64IF: # %bb.0: 396048458f9SCraig Topper; RV64IF-NEXT: feq.s a0, fa0, fa0 397048458f9SCraig Topper; RV64IF-NEXT: bnez a0, .LBB5_2 398048458f9SCraig Topper; RV64IF-NEXT: # %bb.1: 399048458f9SCraig Topper; RV64IF-NEXT: fmin.s fa0, fa0, fa0 400048458f9SCraig Topper; RV64IF-NEXT: ret 401048458f9SCraig Topper; RV64IF-NEXT: .LBB5_2: 402048458f9SCraig Topper; RV64IF-NEXT: fadd.s fa5, fa0, fa0 403048458f9SCraig Topper; RV64IF-NEXT: fmin.s fa0, fa0, fa5 404048458f9SCraig Topper; RV64IF-NEXT: ret 405048458f9SCraig Topper; 406048458f9SCraig Topper; RV64IZFINX-LABEL: fminimum_nnan_op_f32: 407048458f9SCraig Topper; RV64IZFINX: # %bb.0: 408048458f9SCraig Topper; RV64IZFINX-NEXT: feq.s a1, a0, a0 409048458f9SCraig Topper; RV64IZFINX-NEXT: bnez a1, .LBB5_2 410048458f9SCraig Topper; RV64IZFINX-NEXT: # %bb.1: 411048458f9SCraig Topper; RV64IZFINX-NEXT: fmin.s a0, a0, a0 412048458f9SCraig Topper; RV64IZFINX-NEXT: ret 413048458f9SCraig Topper; RV64IZFINX-NEXT: .LBB5_2: 414048458f9SCraig Topper; RV64IZFINX-NEXT: fadd.s a1, a0, a0 415048458f9SCraig Topper; RV64IZFINX-NEXT: fmin.s a0, a0, a1 416048458f9SCraig Topper; RV64IZFINX-NEXT: ret 417*5a08acc1SAlex Bradbury; 418*5a08acc1SAlex Bradbury; RV64I-LABEL: fminimum_nnan_op_f32: 419*5a08acc1SAlex Bradbury; RV64I: # %bb.0: 420*5a08acc1SAlex Bradbury; RV64I-NEXT: addi sp, sp, -16 421*5a08acc1SAlex Bradbury; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 422*5a08acc1SAlex Bradbury; RV64I-NEXT: sd s0, 0(sp) # 8-byte Folded Spill 423*5a08acc1SAlex Bradbury; RV64I-NEXT: mv s0, a0 424*5a08acc1SAlex Bradbury; RV64I-NEXT: mv a1, a0 425*5a08acc1SAlex Bradbury; RV64I-NEXT: call __addsf3 426*5a08acc1SAlex Bradbury; RV64I-NEXT: mv a1, a0 427*5a08acc1SAlex Bradbury; RV64I-NEXT: mv a0, s0 428*5a08acc1SAlex Bradbury; RV64I-NEXT: call fminimumf 429*5a08acc1SAlex Bradbury; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 430*5a08acc1SAlex Bradbury; RV64I-NEXT: ld s0, 0(sp) # 8-byte Folded Reload 431*5a08acc1SAlex Bradbury; RV64I-NEXT: addi sp, sp, 16 432*5a08acc1SAlex Bradbury; RV64I-NEXT: ret 433048458f9SCraig Topper %c = fadd nnan float %a, %a 434048458f9SCraig Topper %1 = call float @llvm.minimum.f32(float %a, float %c) 435048458f9SCraig Topper ret float %1 436048458f9SCraig Topper} 437048458f9SCraig Topper 438048458f9SCraig Topperdefine float @fmaximum_nnan_op_f32(float %a, float %b) nounwind { 439048458f9SCraig Topper; RV32IF-LABEL: fmaximum_nnan_op_f32: 440048458f9SCraig Topper; RV32IF: # %bb.0: 441048458f9SCraig Topper; RV32IF-NEXT: fadd.s fa5, fa0, fa1 442048458f9SCraig Topper; RV32IF-NEXT: fsub.s fa4, fa0, fa1 443048458f9SCraig Topper; RV32IF-NEXT: fmax.s fa0, fa5, fa4 444048458f9SCraig Topper; RV32IF-NEXT: ret 445048458f9SCraig Topper; 446048458f9SCraig Topper; RV32IZFINX-LABEL: fmaximum_nnan_op_f32: 447048458f9SCraig Topper; RV32IZFINX: # %bb.0: 448048458f9SCraig Topper; RV32IZFINX-NEXT: fadd.s a2, a0, a1 449048458f9SCraig Topper; RV32IZFINX-NEXT: fsub.s a0, a0, a1 450048458f9SCraig Topper; RV32IZFINX-NEXT: fmax.s a0, a2, a0 451048458f9SCraig Topper; RV32IZFINX-NEXT: ret 452048458f9SCraig Topper; 453*5a08acc1SAlex Bradbury; RV32I-LABEL: fmaximum_nnan_op_f32: 454*5a08acc1SAlex Bradbury; RV32I: # %bb.0: 455*5a08acc1SAlex Bradbury; RV32I-NEXT: addi sp, sp, -16 456*5a08acc1SAlex Bradbury; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 457*5a08acc1SAlex Bradbury; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill 458*5a08acc1SAlex Bradbury; RV32I-NEXT: sw s1, 4(sp) # 4-byte Folded Spill 459*5a08acc1SAlex Bradbury; RV32I-NEXT: sw s2, 0(sp) # 4-byte Folded Spill 460*5a08acc1SAlex Bradbury; RV32I-NEXT: mv s0, a1 461*5a08acc1SAlex Bradbury; RV32I-NEXT: mv s1, a0 462*5a08acc1SAlex Bradbury; RV32I-NEXT: call __addsf3 463*5a08acc1SAlex Bradbury; RV32I-NEXT: mv s2, a0 464*5a08acc1SAlex Bradbury; RV32I-NEXT: mv a0, s1 465*5a08acc1SAlex Bradbury; RV32I-NEXT: mv a1, s0 466*5a08acc1SAlex Bradbury; RV32I-NEXT: call __subsf3 467*5a08acc1SAlex Bradbury; RV32I-NEXT: mv a1, a0 468*5a08acc1SAlex Bradbury; RV32I-NEXT: mv a0, s2 469*5a08acc1SAlex Bradbury; RV32I-NEXT: call fmaximumf 470*5a08acc1SAlex Bradbury; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 471*5a08acc1SAlex Bradbury; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload 472*5a08acc1SAlex Bradbury; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload 473*5a08acc1SAlex Bradbury; RV32I-NEXT: lw s2, 0(sp) # 4-byte Folded Reload 474*5a08acc1SAlex Bradbury; RV32I-NEXT: addi sp, sp, 16 475*5a08acc1SAlex Bradbury; RV32I-NEXT: ret 476*5a08acc1SAlex Bradbury; 477048458f9SCraig Topper; RV64IF-LABEL: fmaximum_nnan_op_f32: 478048458f9SCraig Topper; RV64IF: # %bb.0: 479048458f9SCraig Topper; RV64IF-NEXT: fadd.s fa5, fa0, fa1 480048458f9SCraig Topper; RV64IF-NEXT: fsub.s fa4, fa0, fa1 481048458f9SCraig Topper; RV64IF-NEXT: fmax.s fa0, fa5, fa4 482048458f9SCraig Topper; RV64IF-NEXT: ret 483048458f9SCraig Topper; 484048458f9SCraig Topper; RV64IZFINX-LABEL: fmaximum_nnan_op_f32: 485048458f9SCraig Topper; RV64IZFINX: # %bb.0: 486048458f9SCraig Topper; RV64IZFINX-NEXT: fadd.s a2, a0, a1 487048458f9SCraig Topper; RV64IZFINX-NEXT: fsub.s a0, a0, a1 488048458f9SCraig Topper; RV64IZFINX-NEXT: fmax.s a0, a2, a0 489048458f9SCraig Topper; RV64IZFINX-NEXT: ret 490*5a08acc1SAlex Bradbury; 491*5a08acc1SAlex Bradbury; RV64I-LABEL: fmaximum_nnan_op_f32: 492*5a08acc1SAlex Bradbury; RV64I: # %bb.0: 493*5a08acc1SAlex Bradbury; RV64I-NEXT: addi sp, sp, -32 494*5a08acc1SAlex Bradbury; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill 495*5a08acc1SAlex Bradbury; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill 496*5a08acc1SAlex Bradbury; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill 497*5a08acc1SAlex Bradbury; RV64I-NEXT: sd s2, 0(sp) # 8-byte Folded Spill 498*5a08acc1SAlex Bradbury; RV64I-NEXT: mv s0, a1 499*5a08acc1SAlex Bradbury; RV64I-NEXT: mv s1, a0 500*5a08acc1SAlex Bradbury; RV64I-NEXT: call __addsf3 501*5a08acc1SAlex Bradbury; RV64I-NEXT: mv s2, a0 502*5a08acc1SAlex Bradbury; RV64I-NEXT: mv a0, s1 503*5a08acc1SAlex Bradbury; RV64I-NEXT: mv a1, s0 504*5a08acc1SAlex Bradbury; RV64I-NEXT: call __subsf3 505*5a08acc1SAlex Bradbury; RV64I-NEXT: mv a1, a0 506*5a08acc1SAlex Bradbury; RV64I-NEXT: mv a0, s2 507*5a08acc1SAlex Bradbury; RV64I-NEXT: call fmaximumf 508*5a08acc1SAlex Bradbury; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload 509*5a08acc1SAlex Bradbury; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload 510*5a08acc1SAlex Bradbury; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload 511*5a08acc1SAlex Bradbury; RV64I-NEXT: ld s2, 0(sp) # 8-byte Folded Reload 512*5a08acc1SAlex Bradbury; RV64I-NEXT: addi sp, sp, 32 513*5a08acc1SAlex Bradbury; RV64I-NEXT: ret 514048458f9SCraig Topper %c = fadd nnan float %a, %b 515048458f9SCraig Topper %d = fsub nnan float %a, %b 516048458f9SCraig Topper %1 = call float @llvm.maximum.f32(float %c, float %d) 517048458f9SCraig Topper ret float %1 518048458f9SCraig Topper} 519