1df56b55eSJun Sha (Joshua); NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2eae1e28cSAlex Bradbury; RUN: llc -mtriple=riscv32 -target-abi ilp32f -mattr=+zfa < %s \ 3df56b55eSJun Sha (Joshua); RUN: | FileCheck %s 4eae1e28cSAlex Bradbury; RUN: llc -mtriple=riscv64 -target-abi lp64f -mattr=+zfa < %s \ 5df56b55eSJun Sha (Joshua); RUN: | FileCheck %s 6df56b55eSJun Sha (Joshua) 7ada26414SJun Sha (Joshua)define float @loadfpimm1() { 8ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm1: 9ada26414SJun Sha (Joshua); CHECK: # %bb.0: 10c2bcb21cSCraig Topper; CHECK-NEXT: fli.s fa0, 0.0625 11ada26414SJun Sha (Joshua); CHECK-NEXT: ret 12ada26414SJun Sha (Joshua) ret float 0.0625 13ada26414SJun Sha (Joshua)} 14ada26414SJun Sha (Joshua) 15ada26414SJun Sha (Joshua)define float @loadfpimm2() { 16ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm2: 17ada26414SJun Sha (Joshua); CHECK: # %bb.0: 18c2bcb21cSCraig Topper; CHECK-NEXT: fli.s fa0, 0.75 19ada26414SJun Sha (Joshua); CHECK-NEXT: ret 20ada26414SJun Sha (Joshua) ret float 0.75 21ada26414SJun Sha (Joshua)} 22ada26414SJun Sha (Joshua) 23ada26414SJun Sha (Joshua)define float @loadfpimm3() { 24ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm3: 25ada26414SJun Sha (Joshua); CHECK: # %bb.0: 26c2bcb21cSCraig Topper; CHECK-NEXT: fli.s fa0, 1.25 27ada26414SJun Sha (Joshua); CHECK-NEXT: ret 28ada26414SJun Sha (Joshua) ret float 1.25 29ada26414SJun Sha (Joshua)} 30ada26414SJun Sha (Joshua) 31ada26414SJun Sha (Joshua)define float @loadfpimm4() { 32ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm4: 33ada26414SJun Sha (Joshua); CHECK: # %bb.0: 34c2bcb21cSCraig Topper; CHECK-NEXT: fli.s fa0, 3.0 35ada26414SJun Sha (Joshua); CHECK-NEXT: ret 36ada26414SJun Sha (Joshua) ret float 3.0 37ada26414SJun Sha (Joshua)} 38ada26414SJun Sha (Joshua) 39ada26414SJun Sha (Joshua)define float @loadfpimm5() { 40ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm5: 41ada26414SJun Sha (Joshua); CHECK: # %bb.0: 42c2bcb21cSCraig Topper; CHECK-NEXT: fli.s fa0, 256.0 43ada26414SJun Sha (Joshua); CHECK-NEXT: ret 44ada26414SJun Sha (Joshua) ret float 256.0 45ada26414SJun Sha (Joshua)} 46ada26414SJun Sha (Joshua) 47ada26414SJun Sha (Joshua)define float @loadfpimm6() { 48ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm6: 49ada26414SJun Sha (Joshua); CHECK: # %bb.0: 50ada26414SJun Sha (Joshua); CHECK-NEXT: fli.s fa0, inf 51ada26414SJun Sha (Joshua); CHECK-NEXT: ret 52ada26414SJun Sha (Joshua) ret float 0x7FF0000000000000 53ada26414SJun Sha (Joshua)} 54ada26414SJun Sha (Joshua) 55ada26414SJun Sha (Joshua)define float @loadfpimm7() { 56ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm7: 57ada26414SJun Sha (Joshua); CHECK: # %bb.0: 58ada26414SJun Sha (Joshua); CHECK-NEXT: fli.s fa0, nan 59ada26414SJun Sha (Joshua); CHECK-NEXT: ret 60ada26414SJun Sha (Joshua) ret float 0x7FF8000000000000 61ada26414SJun Sha (Joshua)} 62ada26414SJun Sha (Joshua) 63ada26414SJun Sha (Joshua)define float @loadfpimm8() { 64ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm8: 65ada26414SJun Sha (Joshua); CHECK: # %bb.0: 66ada26414SJun Sha (Joshua); CHECK-NEXT: fli.s fa0, min 67ada26414SJun Sha (Joshua); CHECK-NEXT: ret 68ada26414SJun Sha (Joshua) ret float 0x3810000000000000 69ada26414SJun Sha (Joshua)} 70ada26414SJun Sha (Joshua) 71ada26414SJun Sha (Joshua)define float @loadfpimm9() { 72ada26414SJun Sha (Joshua); CHECK-LABEL: loadfpimm9: 73ada26414SJun Sha (Joshua); CHECK: # %bb.0: 74ada26414SJun Sha (Joshua); CHECK-NEXT: lui a0, 276464 75ada26414SJun Sha (Joshua); CHECK-NEXT: fmv.w.x fa0, a0 76ada26414SJun Sha (Joshua); CHECK-NEXT: ret 77ada26414SJun Sha (Joshua) ret float 255.0 78ada26414SJun Sha (Joshua)} 79ada26414SJun Sha (Joshua) 8073516b35SCraig Topper; This is the f16 minimum value. Make sure we don't use fli.s. 81f2c1b1a7SCraig Topperdefine float @loadfpimm10() { 82f2c1b1a7SCraig Topper; CHECK-LABEL: loadfpimm10: 83f2c1b1a7SCraig Topper; CHECK: # %bb.0: 8473516b35SCraig Topper; CHECK-NEXT: lui a0, 231424 8573516b35SCraig Topper; CHECK-NEXT: fmv.w.x fa0, a0 86f2c1b1a7SCraig Topper; CHECK-NEXT: ret 87f2c1b1a7SCraig Topper ret float 0.00006103515625 88f2c1b1a7SCraig Topper} 89f2c1b1a7SCraig Topper 90451255b2SAlex Bradburydefine float @loadfpimm11() { 91451255b2SAlex Bradbury; CHECK-LABEL: loadfpimm11: 92451255b2SAlex Bradbury; CHECK: # %bb.0: 93451255b2SAlex Bradbury; CHECK-NEXT: fli.s fa0, -1.0 94451255b2SAlex Bradbury; CHECK-NEXT: ret 95451255b2SAlex Bradbury ret float -1.0 96451255b2SAlex Bradbury} 97451255b2SAlex Bradbury 9887f67175SMin-Yih Hsu; Ensure fli isn't directly used for negated versions of numbers in the fli 99451255b2SAlex Bradbury; table. 100451255b2SAlex Bradburydefine float @loadfpimm12() { 101451255b2SAlex Bradbury; CHECK-LABEL: loadfpimm12: 102451255b2SAlex Bradbury; CHECK: # %bb.0: 10387f67175SMin-Yih Hsu; CHECK-NEXT: fli.s fa5, 2.0 10487f67175SMin-Yih Hsu; CHECK-NEXT: fneg.s fa0, fa5 105451255b2SAlex Bradbury; CHECK-NEXT: ret 106451255b2SAlex Bradbury ret float -2.0 107451255b2SAlex Bradbury} 108451255b2SAlex Bradbury 10987f67175SMin-Yih Hsu; Ensure fli isn't directly used for negative min normal value. 110be0cbe91SCraig Topperdefine float @loadfpimm13() { 111be0cbe91SCraig Topper; CHECK-LABEL: loadfpimm13: 112be0cbe91SCraig Topper; CHECK: # %bb.0: 11387f67175SMin-Yih Hsu; CHECK-NEXT: fli.s fa5, min 11487f67175SMin-Yih Hsu; CHECK-NEXT: fneg.s fa0, fa5 115be0cbe91SCraig Topper; CHECK-NEXT: ret 116be0cbe91SCraig Topper ret float 0xb810000000000000 117be0cbe91SCraig Topper} 118be0cbe91SCraig Topper 119df56b55eSJun Sha (Joshua)declare float @llvm.minimum.f32(float, float) 120df56b55eSJun Sha (Joshua) 121df56b55eSJun Sha (Joshua)define float @fminm_s(float %a, float %b) nounwind { 122df56b55eSJun Sha (Joshua); CHECK-LABEL: fminm_s: 123df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 124df56b55eSJun Sha (Joshua); CHECK-NEXT: fminm.s fa0, fa0, fa1 125df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 126df56b55eSJun Sha (Joshua) %1 = call float @llvm.minimum.f32(float %a, float %b) 127df56b55eSJun Sha (Joshua) ret float %1 128df56b55eSJun Sha (Joshua)} 129df56b55eSJun Sha (Joshua) 130df56b55eSJun Sha (Joshua)declare float @llvm.maximum.f32(float, float) 131df56b55eSJun Sha (Joshua) 132df56b55eSJun Sha (Joshua)define float @fmaxm_s(float %a, float %b) nounwind { 133df56b55eSJun Sha (Joshua); CHECK-LABEL: fmaxm_s: 134df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 135df56b55eSJun Sha (Joshua); CHECK-NEXT: fmaxm.s fa0, fa0, fa1 136df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 137df56b55eSJun Sha (Joshua) %1 = call float @llvm.maximum.f32(float %a, float %b) 138df56b55eSJun Sha (Joshua) ret float %1 139df56b55eSJun Sha (Joshua)} 140df56b55eSJun Sha (Joshua) 141df56b55eSJun Sha (Joshua) 142df56b55eSJun Sha (Joshua)define float @fround_s_1(float %a) nounwind { 143df56b55eSJun Sha (Joshua); CHECK-LABEL: fround_s_1: 144df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 145df56b55eSJun Sha (Joshua); CHECK-NEXT: fround.s fa0, fa0, rmm 146df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 147df56b55eSJun Sha (Joshua) %call = tail call float @roundf(float %a) nounwind readnone 148df56b55eSJun Sha (Joshua) ret float %call 149df56b55eSJun Sha (Joshua)} 150df56b55eSJun Sha (Joshua) 151df56b55eSJun Sha (Joshua)declare float @roundf(float) nounwind readnone 152df56b55eSJun Sha (Joshua) 153df56b55eSJun Sha (Joshua) 154df56b55eSJun Sha (Joshua)define float @fround_s_2(float %a) nounwind { 155df56b55eSJun Sha (Joshua); CHECK-LABEL: fround_s_2: 156df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 1574bbbae61SJun Sha (Joshua); CHECK-NEXT: fround.s fa0, fa0, rdn 158df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 159df56b55eSJun Sha (Joshua) %call = tail call float @floorf(float %a) nounwind readnone 160df56b55eSJun Sha (Joshua) ret float %call 161df56b55eSJun Sha (Joshua)} 162df56b55eSJun Sha (Joshua) 163df56b55eSJun Sha (Joshua)declare float @floorf(float) nounwind readnone 164df56b55eSJun Sha (Joshua) 165df56b55eSJun Sha (Joshua) 166df56b55eSJun Sha (Joshua)define float @fround_s_3(float %a) nounwind { 167df56b55eSJun Sha (Joshua); CHECK-LABEL: fround_s_3: 168df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 1694bbbae61SJun Sha (Joshua); CHECK-NEXT: fround.s fa0, fa0, rup 170df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 171df56b55eSJun Sha (Joshua) %call = tail call float @ceilf(float %a) nounwind readnone 172df56b55eSJun Sha (Joshua) ret float %call 173df56b55eSJun Sha (Joshua)} 174df56b55eSJun Sha (Joshua) 175df56b55eSJun Sha (Joshua)declare float @ceilf(float) nounwind readnone 176df56b55eSJun Sha (Joshua) 177df56b55eSJun Sha (Joshua) 178df56b55eSJun Sha (Joshua)define float @fround_s_4(float %a) nounwind { 179df56b55eSJun Sha (Joshua); CHECK-LABEL: fround_s_4: 180df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 181df56b55eSJun Sha (Joshua); CHECK-NEXT: fround.s fa0, fa0, rtz 182df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 183df56b55eSJun Sha (Joshua) %call = tail call float @truncf(float %a) nounwind readnone 184df56b55eSJun Sha (Joshua) ret float %call 185df56b55eSJun Sha (Joshua)} 186df56b55eSJun Sha (Joshua) 187df56b55eSJun Sha (Joshua)declare float @truncf(float) nounwind readnone 188df56b55eSJun Sha (Joshua) 189df56b55eSJun Sha (Joshua) 190df56b55eSJun Sha (Joshua)define float @fround_s_5(float %a) nounwind { 191df56b55eSJun Sha (Joshua); CHECK-LABEL: fround_s_5: 192df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 193df56b55eSJun Sha (Joshua); CHECK-NEXT: fround.s fa0, fa0 194df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 195df56b55eSJun Sha (Joshua) %call = tail call float @nearbyintf(float %a) nounwind readnone 196df56b55eSJun Sha (Joshua) ret float %call 197df56b55eSJun Sha (Joshua)} 198df56b55eSJun Sha (Joshua) 199df56b55eSJun Sha (Joshua)declare float @nearbyintf(float) nounwind readnone 200df56b55eSJun Sha (Joshua) 201*261d4bbbSLuke Quinndefine float @fround_s_6(float %a) nounwind { 202*261d4bbbSLuke Quinn; CHECK-LABEL: fround_s_6: 203*261d4bbbSLuke Quinn; CHECK: # %bb.0: 204*261d4bbbSLuke Quinn; CHECK-NEXT: fround.s fa0, fa0, rne 205*261d4bbbSLuke Quinn; CHECK-NEXT: ret 206*261d4bbbSLuke Quinn %call = tail call float @llvm.roundeven.f32(float %a) nounwind readnone 207*261d4bbbSLuke Quinn ret float %call 208*261d4bbbSLuke Quinn} 209*261d4bbbSLuke Quinn 210*261d4bbbSLuke Quinndeclare float @llvm.roundeven.f32(float) nounwind readnone 211*261d4bbbSLuke Quinn 212df56b55eSJun Sha (Joshua) 213df56b55eSJun Sha (Joshua)define float @froundnx_s(float %a) nounwind { 214df56b55eSJun Sha (Joshua); CHECK-LABEL: froundnx_s: 215df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 216df56b55eSJun Sha (Joshua); CHECK-NEXT: froundnx.s fa0, fa0 217df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 218df56b55eSJun Sha (Joshua) %call = tail call float @rintf(float %a) nounwind readnone 219df56b55eSJun Sha (Joshua) ret float %call 220df56b55eSJun Sha (Joshua)} 221df56b55eSJun Sha (Joshua) 222df56b55eSJun Sha (Joshua)declare float @rintf(float) nounwind readnone 223df56b55eSJun Sha (Joshua) 224df56b55eSJun Sha (Joshua)declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata) 225df56b55eSJun Sha (Joshua) 226df56b55eSJun Sha (Joshua)define i32 @fcmp_olt_q(float %a, float %b) nounwind strictfp { 227df56b55eSJun Sha (Joshua); CHECK-LABEL: fcmp_olt_q: 228df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 229df56b55eSJun Sha (Joshua); CHECK-NEXT: fltq.s a0, fa0, fa1 230df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 231df56b55eSJun Sha (Joshua) %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"olt", metadata !"fpexcept.strict") strictfp 232df56b55eSJun Sha (Joshua) %2 = zext i1 %1 to i32 233df56b55eSJun Sha (Joshua) ret i32 %2 234df56b55eSJun Sha (Joshua)} 235df56b55eSJun Sha (Joshua) 236df56b55eSJun Sha (Joshua)define i32 @fcmp_ole_q(float %a, float %b) nounwind strictfp { 237df56b55eSJun Sha (Joshua); CHECK-LABEL: fcmp_ole_q: 238df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 239df56b55eSJun Sha (Joshua); CHECK-NEXT: fleq.s a0, fa0, fa1 240df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 241df56b55eSJun Sha (Joshua) %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ole", metadata !"fpexcept.strict") strictfp 242df56b55eSJun Sha (Joshua) %2 = zext i1 %1 to i32 243df56b55eSJun Sha (Joshua) ret i32 %2 244df56b55eSJun Sha (Joshua)} 2453d0a5bf7SCraig Topper 2463d0a5bf7SCraig Topperdefine i32 @fcmp_one_q(float %a, float %b) nounwind strictfp { 2473d0a5bf7SCraig Topper; CHECK-LABEL: fcmp_one_q: 2483d0a5bf7SCraig Topper; CHECK: # %bb.0: 2493d0a5bf7SCraig Topper; CHECK-NEXT: fltq.s a0, fa0, fa1 2503d0a5bf7SCraig Topper; CHECK-NEXT: fltq.s a1, fa1, fa0 2513d0a5bf7SCraig Topper; CHECK-NEXT: or a0, a1, a0 2523d0a5bf7SCraig Topper; CHECK-NEXT: ret 2533d0a5bf7SCraig Topper %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"one", metadata !"fpexcept.strict") strictfp 2543d0a5bf7SCraig Topper %2 = zext i1 %1 to i32 2553d0a5bf7SCraig Topper ret i32 %2 2563d0a5bf7SCraig Topper} 2573d0a5bf7SCraig Topper 2583d0a5bf7SCraig Topperdefine i32 @fcmp_ueq_q(float %a, float %b) nounwind strictfp { 2593d0a5bf7SCraig Topper; CHECK-LABEL: fcmp_ueq_q: 2603d0a5bf7SCraig Topper; CHECK: # %bb.0: 2613d0a5bf7SCraig Topper; CHECK-NEXT: fltq.s a0, fa0, fa1 2623d0a5bf7SCraig Topper; CHECK-NEXT: fltq.s a1, fa1, fa0 2633d0a5bf7SCraig Topper; CHECK-NEXT: or a0, a1, a0 2643d0a5bf7SCraig Topper; CHECK-NEXT: xori a0, a0, 1 2653d0a5bf7SCraig Topper; CHECK-NEXT: ret 2663d0a5bf7SCraig Topper %1 = call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2673d0a5bf7SCraig Topper %2 = zext i1 %1 to i32 2683d0a5bf7SCraig Topper ret i32 %2 2693d0a5bf7SCraig Topper} 270101cf0b8SCraig Topper 271101cf0b8SCraig Topperdeclare void @foo(float, float) 272101cf0b8SCraig Topper 273101cf0b8SCraig Topper; Make sure we use two fli instructions instead of copying. 274101cf0b8SCraig Topperdefine void @fli_remat() { 275101cf0b8SCraig Topper; CHECK-LABEL: fli_remat: 276101cf0b8SCraig Topper; CHECK: # %bb.0: 277101cf0b8SCraig Topper; CHECK-NEXT: fli.s fa0, 1.0 278101cf0b8SCraig Topper; CHECK-NEXT: fli.s fa1, 1.0 279eabaee0cSFangrui Song; CHECK-NEXT: tail foo 280101cf0b8SCraig Topper tail call void @foo(float 1.000000e+00, float 1.000000e+00) 281101cf0b8SCraig Topper ret void 282101cf0b8SCraig Topper} 283de6d7a6cSCraig Topper 284de6d7a6cSCraig Topperdefine float @fadd_neg_0p5(float %x) { 285de6d7a6cSCraig Topper; CHECK-LABEL: fadd_neg_0p5: 286de6d7a6cSCraig Topper; CHECK: # %bb.0: 287de6d7a6cSCraig Topper; CHECK-NEXT: fli.s fa5, 0.5 288de6d7a6cSCraig Topper; CHECK-NEXT: fsub.s fa0, fa0, fa5 289de6d7a6cSCraig Topper; CHECK-NEXT: ret 290de6d7a6cSCraig Topper %a = fadd float %x, -0.5 291de6d7a6cSCraig Topper ret float %a 292de6d7a6cSCraig Topper} 293de6d7a6cSCraig Topper 294de6d7a6cSCraig Topperdefine float @fma_neg_addend(float %x, float %y) nounwind { 295de6d7a6cSCraig Topper; CHECK-LABEL: fma_neg_addend: 296de6d7a6cSCraig Topper; CHECK: # %bb.0: 297de6d7a6cSCraig Topper; CHECK-NEXT: fli.s fa5, 0.5 298de6d7a6cSCraig Topper; CHECK-NEXT: fmsub.s fa0, fa0, fa1, fa5 299de6d7a6cSCraig Topper; CHECK-NEXT: ret 300de6d7a6cSCraig Topper %a = call float @llvm.fma.f32(float %x, float %y, float -0.5) 301de6d7a6cSCraig Topper ret float %a 302de6d7a6cSCraig Topper} 303de6d7a6cSCraig Topper 304de6d7a6cSCraig Topperdefine float @fma_neg_multiplicand(float %x, float %y) nounwind { 305de6d7a6cSCraig Topper; CHECK-LABEL: fma_neg_multiplicand: 306de6d7a6cSCraig Topper; CHECK: # %bb.0: 307de6d7a6cSCraig Topper; CHECK-NEXT: fli.s fa5, 0.125 308de6d7a6cSCraig Topper; CHECK-NEXT: fnmsub.s fa0, fa5, fa0, fa1 309de6d7a6cSCraig Topper; CHECK-NEXT: ret 310de6d7a6cSCraig Topper %a = call float @llvm.fma.f32(float %x, float -0.125, float %y) 311de6d7a6cSCraig Topper ret float %a 312de6d7a6cSCraig Topper} 313de6d7a6cSCraig Topper 314de6d7a6cSCraig Topperdefine float @fma_neg_addend_multiplicand(float %x) nounwind { 315de6d7a6cSCraig Topper; CHECK-LABEL: fma_neg_addend_multiplicand: 316de6d7a6cSCraig Topper; CHECK: # %bb.0: 317de6d7a6cSCraig Topper; CHECK-NEXT: fli.s fa5, 0.25 318de6d7a6cSCraig Topper; CHECK-NEXT: fli.s fa4, 0.5 319de6d7a6cSCraig Topper; CHECK-NEXT: fnmadd.s fa0, fa4, fa0, fa5 320de6d7a6cSCraig Topper; CHECK-NEXT: ret 321de6d7a6cSCraig Topper %a = call float @llvm.fma.f32(float %x, float -0.5, float -0.25) 322de6d7a6cSCraig Topper ret float %a 323de6d7a6cSCraig Topper} 324079f31c1SCraig Topper 325079f31c1SCraig Topperdefine float @select_loadfpimm(float %x) nounwind { 326079f31c1SCraig Topper; CHECK-LABEL: select_loadfpimm: 327079f31c1SCraig Topper; CHECK: # %bb.0: # %entry 328079f31c1SCraig Topper; CHECK-NEXT: fmv.w.x fa5, zero 329079f31c1SCraig Topper; CHECK-NEXT: fle.s a0, fa5, fa0 330079f31c1SCraig Topper; CHECK-NEXT: fli.s fa0, 0.5 331*261d4bbbSLuke Quinn; CHECK-NEXT: bnez a0, .LBB31_2 332079f31c1SCraig Topper; CHECK-NEXT: # %bb.1: 333079f31c1SCraig Topper; CHECK-NEXT: fneg.s fa0, fa0 334*261d4bbbSLuke Quinn; CHECK-NEXT: .LBB31_2: # %entry 335079f31c1SCraig Topper; CHECK-NEXT: ret 336079f31c1SCraig Topperentry: 337079f31c1SCraig Topper %cmp = fcmp ult float %x, 0.000000e+00 338079f31c1SCraig Topper %sel = select i1 %cmp, float -5.000000e-01, float 5.000000e-01 339079f31c1SCraig Topper ret float %sel 340079f31c1SCraig Topper} 341