blob: bd425ec292f96460a26dee057aa2622973549ebe [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
; RUN: llc -mtriple=mips64el-linux-gnu -mcpu=mips64r6 -stop-after=finalize-isel < %s | FileCheck %s
; Non-strict rint is selected with nofpexcept; strict rint keeps its FP
; exception semantics.
define float @rint_f32(float %x) {
; CHECK-LABEL: name: rint_f32
; CHECK: bb.0 (%ir-block.0):
; CHECK-NEXT: liveins: $f12
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[COPY:%[0-9]+]]:fgr32 = COPY $f12
; CHECK-NEXT: [[RINT_S:%[0-9]+]]:fgr32 = nofpexcept RINT_S [[COPY]], implicit $fcr31
; CHECK-NEXT: $f0 = COPY [[RINT_S]]
; CHECK-NEXT: RetRA implicit $f0
%r = call float @llvm.rint.f32(float %x)
ret float %r
}
define double @rint_f64(double %x) {
; CHECK-LABEL: name: rint_f64
; CHECK: bb.0 (%ir-block.0):
; CHECK-NEXT: liveins: $d12_64
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[COPY:%[0-9]+]]:fgr64 = COPY $d12_64
; CHECK-NEXT: [[RINT_D:%[0-9]+]]:fgr64 = nofpexcept RINT_D [[COPY]], implicit $fcr31
; CHECK-NEXT: $d0_64 = COPY [[RINT_D]]
; CHECK-NEXT: RetRA implicit $d0_64
%r = call double @llvm.rint.f64(double %x)
ret double %r
}
define float @strict_rint_f32(float %x) #0 {
; CHECK-LABEL: name: strict_rint_f32
; CHECK: bb.0 (%ir-block.0):
; CHECK-NEXT: liveins: $f12
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[COPY:%[0-9]+]]:fgr32 = COPY $f12
; CHECK-NEXT: [[RINT_S:%[0-9]+]]:fgr32 = RINT_S [[COPY]], implicit $fcr31
; CHECK-NEXT: $f0 = COPY [[RINT_S]]
; CHECK-NEXT: RetRA implicit $f0
%r = call float @llvm.experimental.constrained.rint.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
ret float %r
}
define double @strict_rint_f64(double %x) #0 {
; CHECK-LABEL: name: strict_rint_f64
; CHECK: bb.0 (%ir-block.0):
; CHECK-NEXT: liveins: $d12_64
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[COPY:%[0-9]+]]:fgr64 = COPY $d12_64
; CHECK-NEXT: [[RINT_D:%[0-9]+]]:fgr64 = RINT_D [[COPY]], implicit $fcr31
; CHECK-NEXT: $d0_64 = COPY [[RINT_D]]
; CHECK-NEXT: RetRA implicit $d0_64
%r = call double @llvm.experimental.constrained.rint.f64(double %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
ret double %r
}
attributes #0 = { strictfp }