1 // RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown -target-feature +avx512fp16 -o - | FileCheck %s --check-prefix=X86
2 // RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown -o - | FileCheck %s --check-prefix=X86
3
add_half_rr(_Float16 a,_Float16 b)4 _Float16 _Complex add_half_rr(_Float16 a, _Float16 b) {
5 // X86-LABEL: @add_half_rr(
6 // X86: fadd
7 // X86-NOT: fadd
8 // X86: ret
9 return a + b;
10 }
add_half_cr(_Float16 _Complex a,_Float16 b)11 _Float16 _Complex add_half_cr(_Float16 _Complex a, _Float16 b) {
12 // X86-LABEL: @add_half_cr(
13 // X86: fadd
14 // X86-NOT: fadd
15 // X86: ret
16 return a + b;
17 }
add_half_rc(_Float16 a,_Float16 _Complex b)18 _Float16 _Complex add_half_rc(_Float16 a, _Float16 _Complex b) {
19 // X86-LABEL: @add_half_rc(
20 // X86: fadd
21 // X86-NOT: fadd
22 // X86: ret
23 return a + b;
24 }
add_half_cc(_Float16 _Complex a,_Float16 _Complex b)25 _Float16 _Complex add_half_cc(_Float16 _Complex a, _Float16 _Complex b) {
26 // X86-LABEL: @add_half_cc(
27 // X86: fadd
28 // X86: fadd
29 // X86-NOT: fadd
30 // X86: ret
31 return a + b;
32 }
33
sub_half_rr(_Float16 a,_Float16 b)34 _Float16 _Complex sub_half_rr(_Float16 a, _Float16 b) {
35 // X86-LABEL: @sub_half_rr(
36 // X86: fsub
37 // X86-NOT: fsub
38 // X86: ret
39 return a - b;
40 }
sub_half_cr(_Float16 _Complex a,_Float16 b)41 _Float16 _Complex sub_half_cr(_Float16 _Complex a, _Float16 b) {
42 // X86-LABEL: @sub_half_cr(
43 // X86: fsub
44 // X86-NOT: fsub
45 // X86: ret
46 return a - b;
47 }
sub_half_rc(_Float16 a,_Float16 _Complex b)48 _Float16 _Complex sub_half_rc(_Float16 a, _Float16 _Complex b) {
49 // X86-LABEL: @sub_half_rc(
50 // X86: fsub
51 // X86: fneg
52 // X86-NOT: fsub
53 // X86: ret
54 return a - b;
55 }
sub_half_cc(_Float16 _Complex a,_Float16 _Complex b)56 _Float16 _Complex sub_half_cc(_Float16 _Complex a, _Float16 _Complex b) {
57 // X86-LABEL: @sub_half_cc(
58 // X86: fsub
59 // X86: fsub
60 // X86-NOT: fsub
61 // X86: ret
62 return a - b;
63 }
64
mul_half_rr(_Float16 a,_Float16 b)65 _Float16 _Complex mul_half_rr(_Float16 a, _Float16 b) {
66 // X86-LABEL: @mul_half_rr(
67 // X86: fmul
68 // X86-NOT: fmul
69 // X86: ret
70 return a * b;
71 }
mul_half_cr(_Float16 _Complex a,_Float16 b)72 _Float16 _Complex mul_half_cr(_Float16 _Complex a, _Float16 b) {
73 // X86-LABEL: @mul_half_cr(
74 // X86: fmul
75 // X86: fmul
76 // X86-NOT: fmul
77 // X86: ret
78 return a * b;
79 }
mul_half_rc(_Float16 a,_Float16 _Complex b)80 _Float16 _Complex mul_half_rc(_Float16 a, _Float16 _Complex b) {
81 // X86-LABEL: @mul_half_rc(
82 // X86: fmul
83 // X86: fmul
84 // X86-NOT: fmul
85 // X86: ret
86 return a * b;
87 }
mul_half_cc(_Float16 _Complex a,_Float16 _Complex b)88 _Float16 _Complex mul_half_cc(_Float16 _Complex a, _Float16 _Complex b) {
89 // X86-LABEL: @mul_half_cc(
90 // X86: %[[AC:[^ ]+]] = fmul
91 // X86: %[[BD:[^ ]+]] = fmul
92 // X86: %[[AD:[^ ]+]] = fmul
93 // X86: %[[BC:[^ ]+]] = fmul
94 // X86: %[[RR:[^ ]+]] = fsub half %[[AC]], %[[BD]]
95 // X86: %[[RI:[^ ]+]] = fadd half
96 // X86-DAG: %[[AD]]
97 // X86-DAG: ,
98 // X86-DAG: %[[BC]]
99 // X86: fcmp uno half %[[RR]]
100 // X86: fcmp uno half %[[RI]]
101 // X86: call {{.*}} @__mulhc3(
102 // X86: ret
103 return a * b;
104 }
105
div_half_rr(_Float16 a,_Float16 b)106 _Float16 _Complex div_half_rr(_Float16 a, _Float16 b) {
107 // X86-LABEL: @div_half_rr(
108 // X86: fdiv
109 // X86-NOT: fdiv
110 // X86: ret
111 return a / b;
112 }
div_half_cr(_Float16 _Complex a,_Float16 b)113 _Float16 _Complex div_half_cr(_Float16 _Complex a, _Float16 b) {
114 // X86-LABEL: @div_half_cr(
115 // X86: fdiv
116 // X86: fdiv
117 // X86-NOT: fdiv
118 // X86: ret
119 return a / b;
120 }
div_half_rc(_Float16 a,_Float16 _Complex b)121 _Float16 _Complex div_half_rc(_Float16 a, _Float16 _Complex b) {
122 // X86-LABEL: @div_half_rc(
123 // X86-NOT: fdiv
124 // X86: call {{.*}} @__divhc3(
125 // X86: ret
126 return a / b;
127 }
div_half_cc(_Float16 _Complex a,_Float16 _Complex b)128 _Float16 _Complex div_half_cc(_Float16 _Complex a, _Float16 _Complex b) {
129 // X86-LABEL: @div_half_cc(
130 // X86-NOT: fdiv
131 // X86: call {{.*}} @__divhc3(
132 // X86: ret
133 return a / b;
134 }
135