// RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown -target-feature +avx512fp16 -o - | FileCheck %s --check-prefix=X86

_Float16 _Complex add_half_rr(_Float16 a, _Float16 b) {
  // X86-LABEL: @add_half_rr(
  // X86: fadd
  // X86-NOT: fadd
  // X86: ret
  return a + b;
}
_Float16 _Complex add_half_cr(_Float16 _Complex a, _Float16 b) {
  // X86-LABEL: @add_half_cr(
  // X86: fadd
  // X86-NOT: fadd
  // X86: ret
  return a + b;
}
_Float16 _Complex add_half_rc(_Float16 a, _Float16 _Complex b) {
  // X86-LABEL: @add_half_rc(
  // X86: fadd
  // X86-NOT: fadd
  // X86: ret
  return a + b;
}
_Float16 _Complex add_half_cc(_Float16 _Complex a, _Float16 _Complex b) {
  // X86-LABEL: @add_half_cc(
  // X86: fadd
  // X86: fadd
  // X86-NOT: fadd
  // X86: ret
  return a + b;
}

_Float16 _Complex sub_half_rr(_Float16 a, _Float16 b) {
  // X86-LABEL: @sub_half_rr(
  // X86: fsub
  // X86-NOT: fsub
  // X86: ret
  return a - b;
}
_Float16 _Complex sub_half_cr(_Float16 _Complex a, _Float16 b) {
  // X86-LABEL: @sub_half_cr(
  // X86: fsub
  // X86-NOT: fsub
  // X86: ret
  return a - b;
}
_Float16 _Complex sub_half_rc(_Float16 a, _Float16 _Complex b) {
  // X86-LABEL: @sub_half_rc(
  // X86: fsub
  // X86: fneg
  // X86-NOT: fsub
  // X86: ret
  return a - b;
}
_Float16 _Complex sub_half_cc(_Float16 _Complex a, _Float16 _Complex b) {
  // X86-LABEL: @sub_half_cc(
  // X86: fsub
  // X86: fsub
  // X86-NOT: fsub
  // X86: ret
  return a - b;
}

_Float16 _Complex mul_half_rr(_Float16 a, _Float16 b) {
  // X86-LABEL: @mul_half_rr(
  // X86: fmul
  // X86-NOT: fmul
  // X86: ret
  return a * b;
}
_Float16 _Complex mul_half_cr(_Float16 _Complex a, _Float16 b) {
  // X86-LABEL: @mul_half_cr(
  // X86: fmul
  // X86: fmul
  // X86-NOT: fmul
  // X86: ret
  return a * b;
}
_Float16 _Complex mul_half_rc(_Float16 a, _Float16 _Complex b) {
  // X86-LABEL: @mul_half_rc(
  // X86: fmul
  // X86: fmul
  // X86-NOT: fmul
  // X86: ret
  return a * b;
}
_Float16 _Complex mul_half_cc(_Float16 _Complex a, _Float16 _Complex b) {
  // X86-LABEL: @mul_half_cc(
  // X86: %[[AC:[^ ]+]] = fmul
  // X86: %[[BD:[^ ]+]] = fmul
  // X86: %[[AD:[^ ]+]] = fmul
  // X86: %[[BC:[^ ]+]] = fmul
  // X86: %[[RR:[^ ]+]] = fsub half %[[AC]], %[[BD]]
  // X86: %[[RI:[^ ]+]] = fadd half
  // X86-DAG: %[[AD]]
  // X86-DAG: ,
  // X86-DAG: %[[BC]]
  // X86: fcmp uno half %[[RR]]
  // X86: fcmp uno half %[[RI]]
  // X86: call {{.*}} @__mulhc3(
  // X86: ret
  return a * b;
}

_Float16 _Complex div_half_rr(_Float16 a, _Float16 b) {
  // X86-LABEL: @div_half_rr(
  // X86: fdiv
  // X86-NOT: fdiv
  // X86: ret
  return a / b;
}
_Float16 _Complex div_half_cr(_Float16 _Complex a, _Float16 b) {
  // X86-LABEL: @div_half_cr(
  // X86: fdiv
  // X86: fdiv
  // X86-NOT: fdiv
  // X86: ret
  return a / b;
}
_Float16 _Complex div_half_rc(_Float16 a, _Float16 _Complex b) {
  // X86-LABEL: @div_half_rc(
  // X86-NOT: fdiv
  // X86: call {{.*}} @__divhc3(
  // X86: ret
  return a / b;
}
_Float16 _Complex div_half_cc(_Float16 _Complex a, _Float16 _Complex b) {
  // X86-LABEL: @div_half_cc(
  // X86-NOT: fdiv
  // X86: call {{.*}} @__divhc3(
  // X86: ret
  return a / b;
}
