; Test that floating-point instructions that set cc are *not* used to
; eliminate *strict* compares for load complement, load negative and load
; positive
;
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s

; Load complement (sign-bit flipped).
; Test f32
define float @f1(float %a, float %b, float %f) #0 {
; CHECK-LABEL: f1:
; CHECK: ltebr
; CHECK-NEXT: ber %r14
  %neg = fneg float %f
  %cond = call i1 @llvm.experimental.constrained.fcmp.f32(
                                               float %neg, float 0.0,
                                               metadata !"oeq",
                                               metadata !"fpexcept.strict") #0
  %res = select i1 %cond, float %a, float %b
  ret float %res
}

; Test f64
define double @f2(double %a, double %b, double %f) #0 {
; CHECK-LABEL: f2:
; CHECK: ltdbr
; CHECK-NEXT: ber %r14
  %neg = fneg double %f
  %cond = call i1 @llvm.experimental.constrained.fcmp.f64(
                                               double %neg, double 0.0,
                                               metadata !"oeq",
                                               metadata !"fpexcept.strict") #0
  %res = select i1 %cond, double %a, double %b
  ret double %res
}

; Negation of floating-point absolute.
; Test f32
declare float @llvm.fabs.f32(float %f)
define float @f3(float %a, float %b, float %f) #0 {
; CHECK-LABEL: f3:
; CHECK: ltebr
; CHECK-NEXT: ber %r14
  %abs = call float @llvm.fabs.f32(float %f) #0
  %neg = fneg float %abs
  %cond = call i1 @llvm.experimental.constrained.fcmp.f32(
                                               float %neg, float 0.0,
                                               metadata !"oeq",
                                               metadata !"fpexcept.strict") #0
  %res = select i1 %cond, float %a, float %b
  ret float %res
}

; Test f64
declare double @llvm.fabs.f64(double %f)
define double @f4(double %a, double %b, double %f) #0 {
; CHECK-LABEL: f4:
; CHECK: ltdbr
; CHECK-NEXT: ber %r14
  %abs = call double @llvm.fabs.f64(double %f) #0
  %neg = fneg double %abs
  %cond = call i1 @llvm.experimental.constrained.fcmp.f64(
                                               double %neg, double 0.0,
                                               metadata !"oeq",
                                               metadata !"fpexcept.strict") #0
  %res = select i1 %cond, double %a, double %b
  ret double %res
}

; Absolute floating-point value.
; Test f32
define float @f5(float %a, float %b, float %f) #0 {
; CHECK-LABEL: f5:
; CHECK: ltebr
; CHECK-NEXT: ber %r14
  %abs = call float @llvm.fabs.f32(float %f) #0
  %cond = call i1 @llvm.experimental.constrained.fcmp.f32(
                                               float %abs, float 0.0,
                                               metadata !"oeq",
                                               metadata !"fpexcept.strict") #0
  %res = select i1 %cond, float %a, float %b
  ret float %res
}

; Test f64
define double @f6(double %a, double %b, double %f) #0 {
; CHECK-LABEL: f6:
; CHECK: ltdbr
; CHECK-NEXT: ber %r14
  %abs = call double @llvm.fabs.f64(double %f) #0
  %cond = call i1 @llvm.experimental.constrained.fcmp.f64(
                                               double %abs, double 0.0,
                                               metadata !"oeq",
                                               metadata !"fpexcept.strict") #0
  %res = select i1 %cond, double %a, double %b
  ret double %res
}

attributes #0 = { strictfp }

declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata)
declare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata)

