Mercurial > hg > CbC > CbC_llvm
comparison clang/test/CodeGen/complex-math.c @ 207:2e18cbf3894f
LLVM12
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 08 Jun 2021 06:07:14 +0900 |
parents | 0572611fdcc8 |
children | c4bab56944e8 |
comparison
equal
deleted
inserted
replaced
173:0572611fdcc8 | 207:2e18cbf3894f |
---|---|
3 // RUN: %clang_cc1 %s -O0 -fno-experimental-new-pass-manager -emit-llvm -triple i686-unknown-unknown -o - | FileCheck %s --check-prefix=X86 | 3 // RUN: %clang_cc1 %s -O0 -fno-experimental-new-pass-manager -emit-llvm -triple i686-unknown-unknown -o - | FileCheck %s --check-prefix=X86 |
4 // RUN: %clang_cc1 %s -O0 -fno-experimental-new-pass-manager -emit-llvm -triple powerpc-unknown-unknown -o - | FileCheck %s --check-prefix=PPC | 4 // RUN: %clang_cc1 %s -O0 -fno-experimental-new-pass-manager -emit-llvm -triple powerpc-unknown-unknown -o - | FileCheck %s --check-prefix=PPC |
5 // RUN: %clang_cc1 %s -O0 -fno-experimental-new-pass-manager -emit-llvm -triple armv7-none-linux-gnueabi -o - | FileCheck %s --check-prefix=ARM | 5 // RUN: %clang_cc1 %s -O0 -fno-experimental-new-pass-manager -emit-llvm -triple armv7-none-linux-gnueabi -o - | FileCheck %s --check-prefix=ARM |
6 // RUN: %clang_cc1 %s -O0 -fno-experimental-new-pass-manager -emit-llvm -triple armv7-none-linux-gnueabihf -o - | FileCheck %s --check-prefix=ARMHF | 6 // RUN: %clang_cc1 %s -O0 -fno-experimental-new-pass-manager -emit-llvm -triple armv7-none-linux-gnueabihf -o - | FileCheck %s --check-prefix=ARMHF |
7 // RUN: %clang_cc1 %s -O0 -fno-experimental-new-pass-manager -emit-llvm -triple thumbv7k-apple-watchos2.0 -o - -target-abi aapcs16 | FileCheck %s --check-prefix=ARM7K | 7 // RUN: %clang_cc1 %s -O0 -fno-experimental-new-pass-manager -emit-llvm -triple thumbv7k-apple-watchos2.0 -o - -target-abi aapcs16 | FileCheck %s --check-prefix=ARM7K |
8 // RUN: %clang_cc1 %s -O0 -fno-experimental-new-pass-manager -emit-llvm -triple aarch64-unknown-unknown -ffast-math -o - | FileCheck %s --check-prefix=AARCH64-FASTMATH | 8 // RUN: %clang_cc1 %s -O0 -fno-experimental-new-pass-manager -emit-llvm -triple aarch64-unknown-unknown -ffast-math -ffp-contract=fast -o - | FileCheck %s --check-prefix=AARCH64-FASTMATH |
9 // RUN: %clang_cc1 %s -O0 -fno-experimental-new-pass-manager -emit-llvm -triple spir -o - | FileCheck %s --check-prefix=SPIR | |
9 | 10 |
10 float _Complex add_float_rr(float a, float b) { | 11 float _Complex add_float_rr(float a, float b) { |
11 // X86-LABEL: @add_float_rr( | 12 // X86-LABEL: @add_float_rr( |
12 // X86: fadd | 13 // X86: fadd |
13 // X86-NOT: fadd | 14 // X86-NOT: fadd |
105 // X86-DAG: %[[BC]] | 106 // X86-DAG: %[[BC]] |
106 // X86: fcmp uno float %[[RR]] | 107 // X86: fcmp uno float %[[RR]] |
107 // X86: fcmp uno float %[[RI]] | 108 // X86: fcmp uno float %[[RI]] |
108 // X86: call {{.*}} @__mulsc3( | 109 // X86: call {{.*}} @__mulsc3( |
109 // X86: ret | 110 // X86: ret |
111 // SPIR: call spir_func {{.*}} @__mulsc3( | |
110 return a * b; | 112 return a * b; |
111 } | 113 } |
112 | 114 |
113 float _Complex div_float_rr(float a, float b) { | 115 float _Complex div_float_rr(float a, float b) { |
114 // X86-LABEL: @div_float_rr( | 116 // X86-LABEL: @div_float_rr( |
128 float _Complex div_float_rc(float a, float _Complex b) { | 130 float _Complex div_float_rc(float a, float _Complex b) { |
129 // X86-LABEL: @div_float_rc( | 131 // X86-LABEL: @div_float_rc( |
130 // X86-NOT: fdiv | 132 // X86-NOT: fdiv |
131 // X86: call {{.*}} @__divsc3( | 133 // X86: call {{.*}} @__divsc3( |
132 // X86: ret | 134 // X86: ret |
135 | |
136 // SPIR: call spir_func {{.*}} @__divsc3( | |
133 | 137 |
134 // a / b = (A+iB) / (C+iD) = ((AC+BD)/(CC+DD)) + i((BC-AD)/(CC+DD)) | 138 // a / b = (A+iB) / (C+iD) = ((AC+BD)/(CC+DD)) + i((BC-AD)/(CC+DD)) |
135 // AARCH64-FASTMATH-LABEL: @div_float_rc(float %a, [2 x float] %b.coerce) | 139 // AARCH64-FASTMATH-LABEL: @div_float_rc(float %a, [2 x float] %b.coerce) |
136 // A = a | 140 // A = a |
137 // B = 0 | 141 // B = 0 |
155 float _Complex div_float_cc(float _Complex a, float _Complex b) { | 159 float _Complex div_float_cc(float _Complex a, float _Complex b) { |
156 // X86-LABEL: @div_float_cc( | 160 // X86-LABEL: @div_float_cc( |
157 // X86-NOT: fdiv | 161 // X86-NOT: fdiv |
158 // X86: call {{.*}} @__divsc3( | 162 // X86: call {{.*}} @__divsc3( |
159 // X86: ret | 163 // X86: ret |
164 | |
165 // SPIR: call spir_func {{.*}} @__divsc3( | |
160 | 166 |
161 // a / b = (A+iB) / (C+iD) = ((AC+BD)/(CC+DD)) + i((BC-AD)/(CC+DD)) | 167 // a / b = (A+iB) / (C+iD) = ((AC+BD)/(CC+DD)) + i((BC-AD)/(CC+DD)) |
162 // AARCH64-FASTMATH-LABEL: @div_float_cc([2 x float] %a.coerce, [2 x float] %b.coerce) | 168 // AARCH64-FASTMATH-LABEL: @div_float_cc([2 x float] %a.coerce, [2 x float] %b.coerce) |
163 // | 169 // |
164 // AARCH64-FASTMATH: [[AC:%.*]] = fmul fast float | 170 // AARCH64-FASTMATH: [[AC:%.*]] = fmul fast float |
276 // X86-DAG: %[[BC]] | 282 // X86-DAG: %[[BC]] |
277 // X86: fcmp uno double %[[RR]] | 283 // X86: fcmp uno double %[[RR]] |
278 // X86: fcmp uno double %[[RI]] | 284 // X86: fcmp uno double %[[RI]] |
279 // X86: call {{.*}} @__muldc3( | 285 // X86: call {{.*}} @__muldc3( |
280 // X86: ret | 286 // X86: ret |
287 | |
288 // SPIR: call spir_func {{.*}} @__muldc3( | |
281 return a * b; | 289 return a * b; |
282 } | 290 } |
283 | 291 |
284 double _Complex div_double_rr(double a, double b) { | 292 double _Complex div_double_rr(double a, double b) { |
285 // X86-LABEL: @div_double_rr( | 293 // X86-LABEL: @div_double_rr( |
299 double _Complex div_double_rc(double a, double _Complex b) { | 307 double _Complex div_double_rc(double a, double _Complex b) { |
300 // X86-LABEL: @div_double_rc( | 308 // X86-LABEL: @div_double_rc( |
301 // X86-NOT: fdiv | 309 // X86-NOT: fdiv |
302 // X86: call {{.*}} @__divdc3( | 310 // X86: call {{.*}} @__divdc3( |
303 // X86: ret | 311 // X86: ret |
312 | |
313 // SPIR: call spir_func {{.*}} @__divdc3( | |
304 | 314 |
305 // a / b = (A+iB) / (C+iD) = ((AC+BD)/(CC+DD)) + i((BC-AD)/(CC+DD)) | 315 // a / b = (A+iB) / (C+iD) = ((AC+BD)/(CC+DD)) + i((BC-AD)/(CC+DD)) |
306 // AARCH64-FASTMATH-LABEL: @div_double_rc(double %a, [2 x double] %b.coerce) | 316 // AARCH64-FASTMATH-LABEL: @div_double_rc(double %a, [2 x double] %b.coerce) |
307 // A = a | 317 // A = a |
308 // B = 0 | 318 // B = 0 |
326 double _Complex div_double_cc(double _Complex a, double _Complex b) { | 336 double _Complex div_double_cc(double _Complex a, double _Complex b) { |
327 // X86-LABEL: @div_double_cc( | 337 // X86-LABEL: @div_double_cc( |
328 // X86-NOT: fdiv | 338 // X86-NOT: fdiv |
329 // X86: call {{.*}} @__divdc3( | 339 // X86: call {{.*}} @__divdc3( |
330 // X86: ret | 340 // X86: ret |
341 | |
342 // SPIR: call spir_func {{.*}} @__divdc3( | |
331 | 343 |
332 // a / b = (A+iB) / (C+iD) = ((AC+BD)/(CC+DD)) + i((BC-AD)/(CC+DD)) | 344 // a / b = (A+iB) / (C+iD) = ((AC+BD)/(CC+DD)) + i((BC-AD)/(CC+DD)) |
333 // AARCH64-FASTMATH-LABEL: @div_double_cc([2 x double] %a.coerce, [2 x double] %b.coerce) | 345 // AARCH64-FASTMATH-LABEL: @div_double_cc([2 x double] %a.coerce, [2 x double] %b.coerce) |
334 // | 346 // |
335 // AARCH64-FASTMATH: [[AC:%.*]] = fmul fast double | 347 // AARCH64-FASTMATH: [[AC:%.*]] = fmul fast double |
461 // PPC-DAG: %[[BC]] | 473 // PPC-DAG: %[[BC]] |
462 // PPC: fcmp uno ppc_fp128 %[[RR]] | 474 // PPC: fcmp uno ppc_fp128 %[[RR]] |
463 // PPC: fcmp uno ppc_fp128 %[[RI]] | 475 // PPC: fcmp uno ppc_fp128 %[[RI]] |
464 // PPC: call {{.*}} @__multc3( | 476 // PPC: call {{.*}} @__multc3( |
465 // PPC: ret | 477 // PPC: ret |
478 // SPIR: call spir_func {{.*}} @__muldc3( | |
466 return a * b; | 479 return a * b; |
467 } | 480 } |
468 | 481 |
469 long double _Complex div_long_double_rr(long double a, long double b) { | 482 long double _Complex div_long_double_rr(long double a, long double b) { |
470 // X86-LABEL: @div_long_double_rr( | 483 // X86-LABEL: @div_long_double_rr( |
488 // X86: ret | 501 // X86: ret |
489 // PPC-LABEL: @div_long_double_rc( | 502 // PPC-LABEL: @div_long_double_rc( |
490 // PPC-NOT: fdiv | 503 // PPC-NOT: fdiv |
491 // PPC: call {{.*}} @__divtc3( | 504 // PPC: call {{.*}} @__divtc3( |
492 // PPC: ret | 505 // PPC: ret |
506 // SPIR: call spir_func {{.*}} @__divdc3( | |
493 | 507 |
494 // a / b = (A+iB) / (C+iD) = ((AC+BD)/(CC+DD)) + i((BC-AD)/(CC+DD)) | 508 // a / b = (A+iB) / (C+iD) = ((AC+BD)/(CC+DD)) + i((BC-AD)/(CC+DD)) |
495 // AARCH64-FASTMATH-LABEL: @div_long_double_rc(fp128 %a, [2 x fp128] %b.coerce) | 509 // AARCH64-FASTMATH-LABEL: @div_long_double_rc(fp128 %a, [2 x fp128] %b.coerce) |
496 // A = a | 510 // A = a |
497 // B = 0 | 511 // B = 0 |
519 // X86: ret | 533 // X86: ret |
520 // PPC-LABEL: @div_long_double_cc( | 534 // PPC-LABEL: @div_long_double_cc( |
521 // PPC-NOT: fdiv | 535 // PPC-NOT: fdiv |
522 // PPC: call {{.*}} @__divtc3( | 536 // PPC: call {{.*}} @__divtc3( |
523 // PPC: ret | 537 // PPC: ret |
538 // SPIR: call spir_func {{.*}} @__divdc3( | |
524 | 539 |
525 // a / b = (A+iB) / (C+iD) = ((AC+BD)/(CC+DD)) + i((BC-AD)/(CC+DD)) | 540 // a / b = (A+iB) / (C+iD) = ((AC+BD)/(CC+DD)) + i((BC-AD)/(CC+DD)) |
526 // AARCH64-FASTMATH-LABEL: @div_long_double_cc([2 x fp128] %a.coerce, [2 x fp128] %b.coerce) | 541 // AARCH64-FASTMATH-LABEL: @div_long_double_cc([2 x fp128] %a.coerce, [2 x fp128] %b.coerce) |
527 // | 542 // |
528 // AARCH64-FASTMATH: [[AC:%.*]] = fmul fast fp128 | 543 // AARCH64-FASTMATH: [[AC:%.*]] = fmul fast fp128 |
601 // use the base AAPCS. | 616 // use the base AAPCS. |
602 | 617 |
603 // ARM-LABEL: @foo( | 618 // ARM-LABEL: @foo( |
604 // ARM: call void @__muldc3 | 619 // ARM: call void @__muldc3 |
605 | 620 |
621 // SPIR: call spir_func void @__muldc3 | |
622 | |
606 // ARMHF-LABEL: @foo( | 623 // ARMHF-LABEL: @foo( |
607 // ARMHF: call { double, double } @__muldc3 | 624 // ARMHF: call { double, double } @__muldc3 |
608 | 625 |
609 // ARM7K-LABEL: @foo( | 626 // ARM7K-LABEL: @foo( |
610 // ARM7K: call { double, double } @__muldc3 | 627 // ARM7K: call { double, double } @__muldc3 |