forked from OSchip/llvm-project
134 lines
3.1 KiB
C
134 lines
3.1 KiB
C
// 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;
|
|
}
|