; Test all condition-code masks that are relevant for floating-point
; comparisons.
;
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s

define void @f1(float *%src, float %target) {
; CHECK-LABEL: f1:
; CHECK: .cfi_startproc
; CHECK: .L[[LABEL:.*]]:
; CHECK: ceb %f0, 0(%r2)
; CHECK-NEXT: je .L[[LABEL]]
  br label %loop
loop:
  %val = load volatile float, float *%src
  %cond = fcmp oeq float %target, %val
  br i1 %cond, label %loop, label %exit
exit:
  ret void
}

define void @f2(float *%src, float %target) {
; CHECK-LABEL: f2:
; CHECK: .cfi_startproc
; CHECK: .L[[LABEL:.*]]:
; CHECK: ceb %f0, 0(%r2)
; CHECK-NEXT: jlh .L[[LABEL]]
  br label %loop
loop:
  %val = load volatile float, float *%src
  %cond = fcmp one float %target, %val
  br i1 %cond, label %loop, label %exit
exit:
  ret void
}

define void @f3(float *%src, float %target) {
; CHECK-LABEL: f3:
; CHECK: .cfi_startproc
; CHECK: .L[[LABEL:.*]]:
; CHECK: ceb %f0, 0(%r2)
; CHECK-NEXT: jle .L[[LABEL]]
  br label %loop
loop:
  %val = load volatile float, float *%src
  %cond = fcmp ole float %target, %val
  br i1 %cond, label %loop, label %exit
exit:
  ret void
}

define void @f4(float *%src, float %target) {
; CHECK-LABEL: f4:
; CHECK: .cfi_startproc
; CHECK: .L[[LABEL:.*]]:
; CHECK: ceb %f0, 0(%r2)
; CHECK-NEXT: jl .L[[LABEL]]
  br label %loop
loop:
  %val = load volatile float, float *%src
  %cond = fcmp olt float %target, %val
  br i1 %cond, label %loop, label %exit
exit:
  ret void
}

define void @f5(float *%src, float %target) {
; CHECK-LABEL: f5:
; CHECK: .cfi_startproc
; CHECK: .L[[LABEL:.*]]:
; CHECK: ceb %f0, 0(%r2)
; CHECK-NEXT: jh .L[[LABEL]]
  br label %loop
loop:
  %val = load volatile float, float *%src
  %cond = fcmp ogt float %target, %val
  br i1 %cond, label %loop, label %exit
exit:
  ret void
}

define void @f6(float *%src, float %target) {
; CHECK-LABEL: f6:
; CHECK: .cfi_startproc
; CHECK: .L[[LABEL:.*]]:
; CHECK: ceb %f0, 0(%r2)
; CHECK-NEXT: jhe .L[[LABEL]]
  br label %loop
loop:
  %val = load volatile float, float *%src
  %cond = fcmp oge float %target, %val
  br i1 %cond, label %loop, label %exit
exit:
  ret void
}

define void @f7(float *%src, float %target) {
; CHECK-LABEL: f7:
; CHECK: .cfi_startproc
; CHECK: .L[[LABEL:.*]]:
; CHECK: ceb %f0, 0(%r2)
; CHECK-NEXT: jnlh .L[[LABEL]]
  br label %loop
loop:
  %val = load volatile float, float *%src
  %cond = fcmp ueq float %target, %val
  br i1 %cond, label %loop, label %exit
exit:
  ret void
}

define void @f8(float *%src, float %target) {
; CHECK-LABEL: f8:
; CHECK: .cfi_startproc
; CHECK: .L[[LABEL:.*]]:
; CHECK: ceb %f0, 0(%r2)
; CHECK-NEXT: jne .L[[LABEL]]
  br label %loop
loop:
  %val = load volatile float, float *%src
  %cond = fcmp une float %target, %val
  br i1 %cond, label %loop, label %exit
exit:
  ret void
}

define void @f9(float *%src, float %target) {
; CHECK-LABEL: f9:
; CHECK: .cfi_startproc
; CHECK: .L[[LABEL:.*]]:
; CHECK: ceb %f0, 0(%r2)
; CHECK-NEXT: jnh .L[[LABEL]]
  br label %loop
loop:
  %val = load volatile float, float *%src
  %cond = fcmp ule float %target, %val
  br i1 %cond, label %loop, label %exit
exit:
  ret void
}

define void @f10(float *%src, float %target) {
; CHECK-LABEL: f10:
; CHECK: .cfi_startproc
; CHECK: .L[[LABEL:.*]]:
; CHECK: ceb %f0, 0(%r2)
; CHECK-NEXT: jnhe .L[[LABEL]]
  br label %loop
loop:
  %val = load volatile float, float *%src
  %cond = fcmp ult float %target, %val
  br i1 %cond, label %loop, label %exit
exit:
  ret void
}

define void @f11(float *%src, float %target) {
; CHECK-LABEL: f11:
; CHECK: .cfi_startproc
; CHECK: .L[[LABEL:.*]]:
; CHECK: ceb %f0, 0(%r2)
; CHECK-NEXT: jnle .L[[LABEL]]
  br label %loop
loop:
  %val = load volatile float, float *%src
  %cond = fcmp ugt float %target, %val
  br i1 %cond, label %loop, label %exit
exit:
  ret void
}

define void @f12(float *%src, float %target) {
; CHECK-LABEL: f12:
; CHECK: .cfi_startproc
; CHECK: .L[[LABEL:.*]]:
; CHECK: ceb %f0, 0(%r2)
; CHECK-NEXT: jnl .L[[LABEL]]
  br label %loop
loop:
  %val = load volatile float, float *%src
  %cond = fcmp uge float %target, %val
  br i1 %cond, label %loop, label %exit
exit:
  ret void
}

; "jno" == "jump if no overflow", which corresponds to "jump if ordered"
; rather than "jump if not ordered" after a floating-point comparison.
define void @f13(float *%src, float %target) {
; CHECK-LABEL: f13:
; CHECK: .cfi_startproc
; CHECK: .L[[LABEL:.*]]:
; CHECK: ceb %f0, 0(%r2)
; CHECK-NEXT: jno .L[[LABEL]]
  br label %loop
loop:
  %val = load volatile float, float *%src
  %cond = fcmp ord float %target, %val
  br i1 %cond, label %loop, label %exit
exit:
  ret void
}

; "jo" == "jump if overflow", which corresponds to "jump if not ordered"
; rather than "jump if ordered" after a floating-point comparison.
define void @f14(float *%src, float %target) {
; CHECK-LABEL: f14:
; CHECK: .cfi_startproc
; CHECK: .L[[LABEL:.*]]:
; CHECK: ceb %f0, 0(%r2)
; CHECK-NEXT: jo .L[[LABEL]]
  br label %loop
loop:
  %val = load volatile float, float *%src
  %cond = fcmp uno float %target, %val
  br i1 %cond, label %loop, label %exit
exit:
  ret void
}
