; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; FIXME: @llvm.canonicalize doesn't support soft-float abi yet. ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh -global-isel < %s | FileCheck %s --check-prefixes=CHECK,CHECK-FP16-RV64 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh -global-isel < %s | FileCheck %s --check-prefixes=CHECK,CHECK-FP16-RV32 declare half @llvm.fcanonicalize.f16(half) declare float @llvm.fcanonicalize.f32(float) declare double @llvm.fcanonicalize.f64(double) define half @fcanonicalize_f16(half %x) { ; CHECK-LABEL: fcanonicalize_f16: ; CHECK: # %bb.0: ; CHECK-NEXT: fmin.h fa0, fa0, fa0 ; CHECK-NEXT: ret %z = call half @llvm.canonicalize.f16(half %x) ret half %z } define half @fcanonicalize_f16_nnan(half %x) { ; CHECK-LABEL: fcanonicalize_f16_nnan: ; CHECK: # %bb.0: ; CHECK-NEXT: fmin.h fa0, fa0, fa0 ; CHECK-NEXT: ret %z = call nnan half @llvm.canonicalize.f16(half %x) ret half %z } define float @fcanonicalize_f32(float %x) { ; CHECK-LABEL: fcanonicalize_f32: ; CHECK: # %bb.0: ; CHECK-NEXT: fmin.s fa0, fa0, fa0 ; CHECK-NEXT: ret %z = call float @llvm.canonicalize.f32(float %x) ret float %z } define float @fcanonicalize_f32_nnan(float %x) { ; CHECK-LABEL: fcanonicalize_f32_nnan: ; CHECK: # %bb.0: ; CHECK-NEXT: fmin.s fa0, fa0, fa0 ; CHECK-NEXT: ret %z = call nnan float @llvm.canonicalize.f32(float %x) ret float %z } define double @fcanonicalize_f64(double %x) { ; CHECK-LABEL: fcanonicalize_f64: ; CHECK: # %bb.0: ; CHECK-NEXT: fmin.d fa0, fa0, fa0 ; CHECK-NEXT: ret %z = call double @llvm.canonicalize.f64(double %x) ret double %z } define double @fcanonicalize_f64_nnan(double %x) { ; CHECK-LABEL: fcanonicalize_f64_nnan: ; CHECK: # %bb.0: ; CHECK-NEXT: fmin.d fa0, fa0, fa0 ; CHECK-NEXT: ret %z = call nnan double @llvm.canonicalize.f64(double %x) ret double %z } ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: ; CHECK-FP16-RV32: {{.*}} ; CHECK-FP16-RV64: {{.*}}