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,+zfh < %s \ 3df56b55eSJun Sha (Joshua); RUN: | FileCheck %s 4eae1e28cSAlex Bradbury; RUN: llc -mtriple=riscv64 -target-abi lp64f -mattr=+zfa,+zfh < %s \ 5df56b55eSJun Sha (Joshua); RUN: | FileCheck %s 6c30c0659SCraig Topper; RUN: llc -mtriple=riscv32 -target-abi ilp32f -mattr=+zfa,+zfhmin < %s \ 7c30c0659SCraig Topper; RUN: | FileCheck %s --check-prefix=ZFHMIN 8c30c0659SCraig Topper; RUN: llc -mtriple=riscv64 -target-abi lp64f -mattr=+zfa,+zfhmin < %s \ 9c30c0659SCraig Topper; RUN: | FileCheck %s --check-prefix=ZFHMIN 10df56b55eSJun Sha (Joshua) 11df56b55eSJun Sha (Joshua)declare half @llvm.minimum.f16(half, half) 12df56b55eSJun Sha (Joshua) 13df56b55eSJun Sha (Joshua)define half @fminm_h(half %a, half %b) nounwind { 14df56b55eSJun Sha (Joshua); CHECK-LABEL: fminm_h: 15df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 16df56b55eSJun Sha (Joshua); CHECK-NEXT: fminm.h fa0, fa0, fa1 17df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 18c30c0659SCraig Topper; 19c30c0659SCraig Topper; ZFHMIN-LABEL: fminm_h: 20c30c0659SCraig Topper; ZFHMIN: # %bb.0: 21c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa5, fa1 22c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa4, fa0 23c30c0659SCraig Topper; ZFHMIN-NEXT: fminm.s fa5, fa4, fa5 24c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.h.s fa0, fa5 25c30c0659SCraig Topper; ZFHMIN-NEXT: ret 26df56b55eSJun Sha (Joshua) %1 = call half @llvm.minimum.f16(half %a, half %b) 27df56b55eSJun Sha (Joshua) ret half %1 28df56b55eSJun Sha (Joshua)} 29df56b55eSJun Sha (Joshua) 30df56b55eSJun Sha (Joshua)declare half @llvm.maximum.f16(half, half) 31df56b55eSJun Sha (Joshua) 32df56b55eSJun Sha (Joshua)define half @fmaxm_h(half %a, half %b) nounwind { 33df56b55eSJun Sha (Joshua); CHECK-LABEL: fmaxm_h: 34df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 35df56b55eSJun Sha (Joshua); CHECK-NEXT: fmaxm.h fa0, fa0, fa1 36df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 37c30c0659SCraig Topper; 38c30c0659SCraig Topper; ZFHMIN-LABEL: fmaxm_h: 39c30c0659SCraig Topper; ZFHMIN: # %bb.0: 40c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa5, fa1 41c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa4, fa0 42c30c0659SCraig Topper; ZFHMIN-NEXT: fmaxm.s fa5, fa4, fa5 43c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.h.s fa0, fa5 44c30c0659SCraig Topper; ZFHMIN-NEXT: ret 45df56b55eSJun Sha (Joshua) %1 = tail call half @llvm.maximum.f16(half %a, half %b) 46df56b55eSJun Sha (Joshua) ret half %1 47df56b55eSJun Sha (Joshua)} 48df56b55eSJun Sha (Joshua) 49df56b55eSJun Sha (Joshua)define half @fround_h_1(half %a) nounwind { 50df56b55eSJun Sha (Joshua); CHECK-LABEL: fround_h_1: 51df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 52df56b55eSJun Sha (Joshua); CHECK-NEXT: fround.h fa0, fa0, rmm 53df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 54c30c0659SCraig Topper; 55c30c0659SCraig Topper; ZFHMIN-LABEL: fround_h_1: 56c30c0659SCraig Topper; ZFHMIN: # %bb.0: 57c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa5, fa0 58c30c0659SCraig Topper; ZFHMIN-NEXT: fround.s fa5, fa5, rmm 59c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.h.s fa0, fa5 60c30c0659SCraig Topper; ZFHMIN-NEXT: ret 61df56b55eSJun Sha (Joshua) %call = tail call half @llvm.round.f16(half %a) nounwind readnone 62df56b55eSJun Sha (Joshua) ret half %call 63df56b55eSJun Sha (Joshua)} 64df56b55eSJun Sha (Joshua) 65df56b55eSJun Sha (Joshua)declare half @llvm.round.f16(half) nounwind readnone 66df56b55eSJun Sha (Joshua) 67df56b55eSJun Sha (Joshua) 68df56b55eSJun Sha (Joshua)define half @fround_h_2(half %a) nounwind { 69df56b55eSJun Sha (Joshua); CHECK-LABEL: fround_h_2: 70df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 714bbbae61SJun Sha (Joshua); CHECK-NEXT: fround.h fa0, fa0, rdn 72df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 73c30c0659SCraig Topper; 74c30c0659SCraig Topper; ZFHMIN-LABEL: fround_h_2: 75c30c0659SCraig Topper; ZFHMIN: # %bb.0: 76c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa5, fa0 77c30c0659SCraig Topper; ZFHMIN-NEXT: fround.s fa5, fa5, rdn 78c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.h.s fa0, fa5 79c30c0659SCraig Topper; ZFHMIN-NEXT: ret 80df56b55eSJun Sha (Joshua) %call = tail call half @llvm.floor.f16(half %a) nounwind readnone 81df56b55eSJun Sha (Joshua) ret half %call 82df56b55eSJun Sha (Joshua)} 83df56b55eSJun Sha (Joshua) 84df56b55eSJun Sha (Joshua)declare half @llvm.floor.f16(half) nounwind readnone 85df56b55eSJun Sha (Joshua) 86df56b55eSJun Sha (Joshua) 87df56b55eSJun Sha (Joshua)define half @fround_h_3(half %a) nounwind { 88df56b55eSJun Sha (Joshua); CHECK-LABEL: fround_h_3: 89df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 904bbbae61SJun Sha (Joshua); CHECK-NEXT: fround.h fa0, fa0, rup 91df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 92c30c0659SCraig Topper; 93c30c0659SCraig Topper; ZFHMIN-LABEL: fround_h_3: 94c30c0659SCraig Topper; ZFHMIN: # %bb.0: 95c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa5, fa0 96c30c0659SCraig Topper; ZFHMIN-NEXT: fround.s fa5, fa5, rup 97c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.h.s fa0, fa5 98c30c0659SCraig Topper; ZFHMIN-NEXT: ret 99df56b55eSJun Sha (Joshua) %call = tail call half @llvm.ceil.f16(half %a) nounwind readnone 100df56b55eSJun Sha (Joshua) ret half %call 101df56b55eSJun Sha (Joshua)} 102df56b55eSJun Sha (Joshua) 103df56b55eSJun Sha (Joshua)declare half @llvm.ceil.f16(half) nounwind readnone 104df56b55eSJun Sha (Joshua) 105df56b55eSJun Sha (Joshua) 106df56b55eSJun Sha (Joshua)define half @fround_h_4(half %a) nounwind { 107df56b55eSJun Sha (Joshua); CHECK-LABEL: fround_h_4: 108df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 109df56b55eSJun Sha (Joshua); CHECK-NEXT: fround.h fa0, fa0, rtz 110df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 111c30c0659SCraig Topper; 112c30c0659SCraig Topper; ZFHMIN-LABEL: fround_h_4: 113c30c0659SCraig Topper; ZFHMIN: # %bb.0: 114c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa5, fa0 115c30c0659SCraig Topper; ZFHMIN-NEXT: fround.s fa5, fa5, rtz 116c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.h.s fa0, fa5 117c30c0659SCraig Topper; ZFHMIN-NEXT: ret 118df56b55eSJun Sha (Joshua) %call = tail call half @llvm.trunc.f16(half %a) nounwind readnone 119df56b55eSJun Sha (Joshua) ret half %call 120df56b55eSJun Sha (Joshua)} 121df56b55eSJun Sha (Joshua) 122df56b55eSJun Sha (Joshua)declare half @llvm.trunc.f16(half) nounwind readnone 123df56b55eSJun Sha (Joshua) 124df56b55eSJun Sha (Joshua) 125df56b55eSJun Sha (Joshua)define half @fround_h_5(half %a) nounwind { 126df56b55eSJun Sha (Joshua); CHECK-LABEL: fround_h_5: 127df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 128df56b55eSJun Sha (Joshua); CHECK-NEXT: fround.h fa0, fa0 129df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 130c30c0659SCraig Topper; 131c30c0659SCraig Topper; ZFHMIN-LABEL: fround_h_5: 132c30c0659SCraig Topper; ZFHMIN: # %bb.0: 133c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa5, fa0 134c30c0659SCraig Topper; ZFHMIN-NEXT: fround.s fa5, fa5 135c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.h.s fa0, fa5 136c30c0659SCraig Topper; ZFHMIN-NEXT: ret 137df56b55eSJun Sha (Joshua) %call = tail call half @llvm.nearbyint.f16(half %a) nounwind readnone 138df56b55eSJun Sha (Joshua) ret half %call 139df56b55eSJun Sha (Joshua)} 140df56b55eSJun Sha (Joshua) 141df56b55eSJun Sha (Joshua)declare half @llvm.nearbyint.f16(half) nounwind readnone 142df56b55eSJun Sha (Joshua) 143*261d4bbbSLuke Quinndefine half @fround_h_6(half %a) nounwind { 144*261d4bbbSLuke Quinn; CHECK-LABEL: fround_h_6: 145*261d4bbbSLuke Quinn; CHECK: # %bb.0: 146*261d4bbbSLuke Quinn; CHECK-NEXT: fround.h fa0, fa0, rne 147*261d4bbbSLuke Quinn; CHECK-NEXT: ret 148*261d4bbbSLuke Quinn; 149*261d4bbbSLuke Quinn; ZFHMIN-LABEL: fround_h_6: 150*261d4bbbSLuke Quinn; ZFHMIN: # %bb.0: 151*261d4bbbSLuke Quinn; ZFHMIN-NEXT: fcvt.s.h fa5, fa0 152*261d4bbbSLuke Quinn; ZFHMIN-NEXT: fround.s fa5, fa5, rne 153*261d4bbbSLuke Quinn; ZFHMIN-NEXT: fcvt.h.s fa0, fa5 154*261d4bbbSLuke Quinn; ZFHMIN-NEXT: ret 155*261d4bbbSLuke Quinn %call = tail call half @llvm.roundeven.f16(half %a) nounwind readnone 156*261d4bbbSLuke Quinn ret half %call 157*261d4bbbSLuke Quinn} 158*261d4bbbSLuke Quinn 159*261d4bbbSLuke Quinndeclare half @llvm.roundeven.f16(half) nounwind readnone 160*261d4bbbSLuke Quinn 161df56b55eSJun Sha (Joshua) 162df56b55eSJun Sha (Joshua)define half @froundnx_h(half %a) nounwind { 163df56b55eSJun Sha (Joshua); CHECK-LABEL: froundnx_h: 164df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 165df56b55eSJun Sha (Joshua); CHECK-NEXT: froundnx.h fa0, fa0 166df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 167c30c0659SCraig Topper; 168c30c0659SCraig Topper; ZFHMIN-LABEL: froundnx_h: 169c30c0659SCraig Topper; ZFHMIN: # %bb.0: 170c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa5, fa0 171c30c0659SCraig Topper; ZFHMIN-NEXT: froundnx.s fa5, fa5 172c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.h.s fa0, fa5 173c30c0659SCraig Topper; ZFHMIN-NEXT: ret 174df56b55eSJun Sha (Joshua) %call = tail call half @llvm.rint.f16(half %a) nounwind readnone 175df56b55eSJun Sha (Joshua) ret half %call 176df56b55eSJun Sha (Joshua)} 177df56b55eSJun Sha (Joshua) 178df56b55eSJun Sha (Joshua)declare half @llvm.rint.f16(half) nounwind readnone 179df56b55eSJun Sha (Joshua) 180df56b55eSJun Sha (Joshua)declare i1 @llvm.experimental.constrained.fcmp.f16(half, half, metadata, metadata) 181df56b55eSJun Sha (Joshua) 182df56b55eSJun Sha (Joshua)define i32 @fcmp_olt_q(half %a, half %b) nounwind strictfp { 183df56b55eSJun Sha (Joshua); CHECK-LABEL: fcmp_olt_q: 184df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 185df56b55eSJun Sha (Joshua); CHECK-NEXT: fltq.h a0, fa0, fa1 186df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 187c30c0659SCraig Topper; 188c30c0659SCraig Topper; ZFHMIN-LABEL: fcmp_olt_q: 189c30c0659SCraig Topper; ZFHMIN: # %bb.0: 190c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa5, fa1 191c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa4, fa0 192c30c0659SCraig Topper; ZFHMIN-NEXT: fltq.s a0, fa4, fa5 193c30c0659SCraig Topper; ZFHMIN-NEXT: ret 194df56b55eSJun Sha (Joshua) %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"olt", metadata !"fpexcept.strict") strictfp 195df56b55eSJun Sha (Joshua) %2 = zext i1 %1 to i32 196df56b55eSJun Sha (Joshua) ret i32 %2 197df56b55eSJun Sha (Joshua)} 198df56b55eSJun Sha (Joshua) 199df56b55eSJun Sha (Joshua)define i32 @fcmp_ole_q(half %a, half %b) nounwind strictfp { 200df56b55eSJun Sha (Joshua); CHECK-LABEL: fcmp_ole_q: 201df56b55eSJun Sha (Joshua); CHECK: # %bb.0: 202df56b55eSJun Sha (Joshua); CHECK-NEXT: fleq.h a0, fa0, fa1 203df56b55eSJun Sha (Joshua); CHECK-NEXT: ret 204c30c0659SCraig Topper; 205c30c0659SCraig Topper; ZFHMIN-LABEL: fcmp_ole_q: 206c30c0659SCraig Topper; ZFHMIN: # %bb.0: 207c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa5, fa1 208c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa4, fa0 209c30c0659SCraig Topper; ZFHMIN-NEXT: fleq.s a0, fa4, fa5 210c30c0659SCraig Topper; ZFHMIN-NEXT: ret 211df56b55eSJun Sha (Joshua) %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ole", metadata !"fpexcept.strict") strictfp 212df56b55eSJun Sha (Joshua) %2 = zext i1 %1 to i32 213df56b55eSJun Sha (Joshua) ret i32 %2 214df56b55eSJun Sha (Joshua)} 2153d0a5bf7SCraig Topper 2163d0a5bf7SCraig Topperdefine i32 @fcmp_one_q(half %a, half %b) nounwind strictfp { 2173d0a5bf7SCraig Topper; CHECK-LABEL: fcmp_one_q: 2183d0a5bf7SCraig Topper; CHECK: # %bb.0: 2193d0a5bf7SCraig Topper; CHECK-NEXT: fltq.h a0, fa0, fa1 2203d0a5bf7SCraig Topper; CHECK-NEXT: fltq.h a1, fa1, fa0 2213d0a5bf7SCraig Topper; CHECK-NEXT: or a0, a1, a0 2223d0a5bf7SCraig Topper; CHECK-NEXT: ret 223c30c0659SCraig Topper; 224c30c0659SCraig Topper; ZFHMIN-LABEL: fcmp_one_q: 225c30c0659SCraig Topper; ZFHMIN: # %bb.0: 226c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa5, fa1 227c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa4, fa0 228c30c0659SCraig Topper; ZFHMIN-NEXT: fltq.s a0, fa4, fa5 229c30c0659SCraig Topper; ZFHMIN-NEXT: fltq.s a1, fa5, fa4 230c30c0659SCraig Topper; ZFHMIN-NEXT: or a0, a1, a0 231c30c0659SCraig Topper; ZFHMIN-NEXT: ret 2323d0a5bf7SCraig Topper %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"one", metadata !"fpexcept.strict") strictfp 2333d0a5bf7SCraig Topper %2 = zext i1 %1 to i32 2343d0a5bf7SCraig Topper ret i32 %2 2353d0a5bf7SCraig Topper} 2363d0a5bf7SCraig Topper 2373d0a5bf7SCraig Topperdefine i32 @fcmp_ueq_q(half %a, half %b) nounwind strictfp { 2383d0a5bf7SCraig Topper; CHECK-LABEL: fcmp_ueq_q: 2393d0a5bf7SCraig Topper; CHECK: # %bb.0: 2403d0a5bf7SCraig Topper; CHECK-NEXT: fltq.h a0, fa0, fa1 2413d0a5bf7SCraig Topper; CHECK-NEXT: fltq.h a1, fa1, fa0 2423d0a5bf7SCraig Topper; CHECK-NEXT: or a0, a1, a0 2433d0a5bf7SCraig Topper; CHECK-NEXT: xori a0, a0, 1 2443d0a5bf7SCraig Topper; CHECK-NEXT: ret 245c30c0659SCraig Topper; 246c30c0659SCraig Topper; ZFHMIN-LABEL: fcmp_ueq_q: 247c30c0659SCraig Topper; ZFHMIN: # %bb.0: 248c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa5, fa1 249c30c0659SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa4, fa0 250c30c0659SCraig Topper; ZFHMIN-NEXT: fltq.s a0, fa4, fa5 251c30c0659SCraig Topper; ZFHMIN-NEXT: fltq.s a1, fa5, fa4 252c30c0659SCraig Topper; ZFHMIN-NEXT: or a0, a1, a0 253c30c0659SCraig Topper; ZFHMIN-NEXT: xori a0, a0, 1 254c30c0659SCraig Topper; ZFHMIN-NEXT: ret 2553d0a5bf7SCraig Topper %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ueq", metadata !"fpexcept.strict") strictfp 2563d0a5bf7SCraig Topper %2 = zext i1 %1 to i32 2573d0a5bf7SCraig Topper ret i32 %2 2583d0a5bf7SCraig Topper} 259de6d7a6cSCraig Topper 260de6d7a6cSCraig Topperdefine half @fadd_neg_0p5(half %x) { 261de6d7a6cSCraig Topper; CHECK-LABEL: fadd_neg_0p5: 262de6d7a6cSCraig Topper; CHECK: # %bb.0: 263de6d7a6cSCraig Topper; CHECK-NEXT: fli.h fa5, 0.5 264de6d7a6cSCraig Topper; CHECK-NEXT: fsub.h fa0, fa0, fa5 265de6d7a6cSCraig Topper; CHECK-NEXT: ret 266de6d7a6cSCraig Topper; 267de6d7a6cSCraig Topper; ZFHMIN-LABEL: fadd_neg_0p5: 268de6d7a6cSCraig Topper; ZFHMIN: # %bb.0: 269de6d7a6cSCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa5, fa0 270de6d7a6cSCraig Topper; ZFHMIN-NEXT: fli.s fa4, 0.5 271de6d7a6cSCraig Topper; ZFHMIN-NEXT: fsub.s fa5, fa5, fa4 272de6d7a6cSCraig Topper; ZFHMIN-NEXT: fcvt.h.s fa0, fa5 273de6d7a6cSCraig Topper; ZFHMIN-NEXT: ret 274de6d7a6cSCraig Topper %a = fadd half %x, -0.5 275de6d7a6cSCraig Topper ret half %a 276de6d7a6cSCraig Topper} 277de6d7a6cSCraig Topper 278de6d7a6cSCraig Topperdefine half @fma_neg_addend(half %x, half %y) nounwind { 279de6d7a6cSCraig Topper; CHECK-LABEL: fma_neg_addend: 280de6d7a6cSCraig Topper; CHECK: # %bb.0: 281de6d7a6cSCraig Topper; CHECK-NEXT: fli.h fa5, 0.5 282de6d7a6cSCraig Topper; CHECK-NEXT: fmsub.h fa0, fa0, fa1, fa5 283de6d7a6cSCraig Topper; CHECK-NEXT: ret 284de6d7a6cSCraig Topper; 285de6d7a6cSCraig Topper; ZFHMIN-LABEL: fma_neg_addend: 286de6d7a6cSCraig Topper; ZFHMIN: # %bb.0: 287de6d7a6cSCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa5, fa1 288de6d7a6cSCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa4, fa0 289de6d7a6cSCraig Topper; ZFHMIN-NEXT: fli.s fa3, 0.5 290de6d7a6cSCraig Topper; ZFHMIN-NEXT: fmsub.s fa5, fa4, fa5, fa3 291de6d7a6cSCraig Topper; ZFHMIN-NEXT: fcvt.h.s fa0, fa5 292de6d7a6cSCraig Topper; ZFHMIN-NEXT: ret 293de6d7a6cSCraig Topper %a = call half @llvm.fma.f32(half %x, half %y, half -0.5) 294de6d7a6cSCraig Topper ret half %a 295de6d7a6cSCraig Topper} 296de6d7a6cSCraig Topper 297de6d7a6cSCraig Topperdefine half @fma_neg_multiplicand(half %x, half %y) nounwind { 298de6d7a6cSCraig Topper; CHECK-LABEL: fma_neg_multiplicand: 299de6d7a6cSCraig Topper; CHECK: # %bb.0: 300de6d7a6cSCraig Topper; CHECK-NEXT: fli.h fa5, 0.125 301de6d7a6cSCraig Topper; CHECK-NEXT: fnmsub.h fa0, fa5, fa0, fa1 302de6d7a6cSCraig Topper; CHECK-NEXT: ret 303de6d7a6cSCraig Topper; 304de6d7a6cSCraig Topper; ZFHMIN-LABEL: fma_neg_multiplicand: 305de6d7a6cSCraig Topper; ZFHMIN: # %bb.0: 306de6d7a6cSCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa5, fa1 307de6d7a6cSCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa4, fa0 308de6d7a6cSCraig Topper; ZFHMIN-NEXT: fli.s fa3, 0.125 309de6d7a6cSCraig Topper; ZFHMIN-NEXT: fnmsub.s fa5, fa3, fa4, fa5 310de6d7a6cSCraig Topper; ZFHMIN-NEXT: fcvt.h.s fa0, fa5 311de6d7a6cSCraig Topper; ZFHMIN-NEXT: ret 312de6d7a6cSCraig Topper %a = call half @llvm.fma.f32(half %x, half -0.125, half %y) 313de6d7a6cSCraig Topper ret half %a 314de6d7a6cSCraig Topper} 315de6d7a6cSCraig Topper 316de6d7a6cSCraig Topperdefine half @fma_neg_addend_multiplicand(half %x) nounwind { 317de6d7a6cSCraig Topper; CHECK-LABEL: fma_neg_addend_multiplicand: 318de6d7a6cSCraig Topper; CHECK: # %bb.0: 319de6d7a6cSCraig Topper; CHECK-NEXT: fli.h fa5, 0.25 320de6d7a6cSCraig Topper; CHECK-NEXT: fli.h fa4, 0.5 321de6d7a6cSCraig Topper; CHECK-NEXT: fnmadd.h fa0, fa4, fa0, fa5 322de6d7a6cSCraig Topper; CHECK-NEXT: ret 323de6d7a6cSCraig Topper; 324de6d7a6cSCraig Topper; ZFHMIN-LABEL: fma_neg_addend_multiplicand: 325de6d7a6cSCraig Topper; ZFHMIN: # %bb.0: 326de6d7a6cSCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa5, fa0 327de6d7a6cSCraig Topper; ZFHMIN-NEXT: fli.s fa4, 0.25 328de6d7a6cSCraig Topper; ZFHMIN-NEXT: fli.s fa3, 0.5 329de6d7a6cSCraig Topper; ZFHMIN-NEXT: fnmadd.s fa5, fa3, fa5, fa4 330de6d7a6cSCraig Topper; ZFHMIN-NEXT: fcvt.h.s fa0, fa5 331de6d7a6cSCraig Topper; ZFHMIN-NEXT: ret 332de6d7a6cSCraig Topper %a = call half @llvm.fma.f32(half %x, half -0.5, half -0.25) 333de6d7a6cSCraig Topper ret half %a 334de6d7a6cSCraig Topper} 335079f31c1SCraig Topper 336079f31c1SCraig Topperdefine half @select_loadfpimm(half %x) nounwind { 337079f31c1SCraig Topper; CHECK-LABEL: select_loadfpimm: 338079f31c1SCraig Topper; CHECK: # %bb.0: # %entry 339079f31c1SCraig Topper; CHECK-NEXT: fmv.h.x fa5, zero 340079f31c1SCraig Topper; CHECK-NEXT: fle.h a0, fa5, fa0 341079f31c1SCraig Topper; CHECK-NEXT: fli.h fa0, 0.5 342*261d4bbbSLuke Quinn; CHECK-NEXT: bnez a0, .LBB17_2 343079f31c1SCraig Topper; CHECK-NEXT: # %bb.1: 344079f31c1SCraig Topper; CHECK-NEXT: fneg.h fa0, fa0 345*261d4bbbSLuke Quinn; CHECK-NEXT: .LBB17_2: # %entry 346079f31c1SCraig Topper; CHECK-NEXT: ret 347079f31c1SCraig Topper; 348079f31c1SCraig Topper; ZFHMIN-LABEL: select_loadfpimm: 349079f31c1SCraig Topper; ZFHMIN: # %bb.0: # %entry 350079f31c1SCraig Topper; ZFHMIN-NEXT: fcvt.s.h fa5, fa0 351079f31c1SCraig Topper; ZFHMIN-NEXT: fmv.w.x fa4, zero 352079f31c1SCraig Topper; ZFHMIN-NEXT: fle.s a0, fa4, fa5 353079f31c1SCraig Topper; ZFHMIN-NEXT: xori a0, a0, 1 354079f31c1SCraig Topper; ZFHMIN-NEXT: slli a0, a0, 1 355*261d4bbbSLuke Quinn; ZFHMIN-NEXT: lui a1, %hi(.LCPI17_0) 356*261d4bbbSLuke Quinn; ZFHMIN-NEXT: addi a1, a1, %lo(.LCPI17_0) 357079f31c1SCraig Topper; ZFHMIN-NEXT: add a0, a1, a0 358079f31c1SCraig Topper; ZFHMIN-NEXT: flh fa0, 0(a0) 359079f31c1SCraig Topper; ZFHMIN-NEXT: ret 360079f31c1SCraig Topperentry: 361079f31c1SCraig Topper %cmp = fcmp ult half %x, 0.000000e+00 362079f31c1SCraig Topper %sel = select i1 %cmp, half -5.000000e-01, half 5.000000e-01 363079f31c1SCraig Topper ret half %sel 364079f31c1SCraig Topper} 365