[Clang][SME2] Fix PSEL builtin predicates (#77097)
[llvm-project.git] / clang / test / CodeGen / pragma-cx-limited-range.c
blob926da8afbee558c9428b0ed2e41605597b6e6a58
1 // RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown \
2 // RUN: -o - | FileCheck %s --check-prefix=FULL
4 // RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown \
5 // RUN: -complex-range=limited -o - | FileCheck --check-prefix=LMTD %s
7 // RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown \
8 // RUN: -fno-cx-limited-range -o - | FileCheck %s --check-prefix=FULL
10 // RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown \
11 // RUN: -complex-range=fortran -o - | FileCheck --check-prefix=FRTRN %s
13 // RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown \
14 // RUN: -fno-cx-fortran-rules -o - | FileCheck --check-prefix=FULL %s
16 _Complex float pragma_on_mul(_Complex float a, _Complex float b) {
17 #pragma STDC CX_LIMITED_RANGE ON
18 // LABEL: define {{.*}} @pragma_on_mul(
19 // FULL: fmul float
20 // FULL-NEXT: fmul float
21 // FULL-NEXT: fmul float
22 // FULL-NEXT: fmul float
23 // FULL-NEXT: fsub float
24 // FULL-NEXT: fadd float
26 // LMTD: fmul float
27 // LMTD-NEXT: fmul float
28 // LMTD-NEXT: fmul float
29 // LMTD-NEXT: fmul float
30 // LMTD-NEXT: fsub float
31 // LMTD-NEXT: fadd float
33 // FRTRN: fmul float
34 // FRTRN-NEXT: fmul float
35 // FRTRN-NEXT: fmul float
36 // FRTRN-NEXT: fmul float
37 // FRTRN-NEXT: fsub float
38 // FRTRN-NEXT: fadd float
40 return a * b;
43 _Complex float pragma_off_mul(_Complex float a, _Complex float b) {
44 #pragma STDC CX_LIMITED_RANGE OFF
45 // LABEL: define {{.*}} @pragma_off_mul(
46 // FULL: call {{.*}} @__mulsc3
48 // LMTD: call {{.*}} @__mulsc3
50 // FRTRN: call {{.*}} @__mulsc3
52 return a * b;
55 _Complex float pragma_on_div(_Complex float a, _Complex float b) {
56 #pragma STDC CX_LIMITED_RANGE ON
57 // LABEL: define {{.*}} @pragma_on_div(
58 // FULL: fmul float
59 // FULL-NEXT: fmul float
60 // FULL-NEXT: fadd float
61 // FULL-NEXT: fmul float
62 // FULL-NEXT: fmul float
63 // FULL-NEXT: fadd float
64 // FULL-NEXT: fmul float
65 // FULL-NEXT: fmul float
66 // FULL-NEXT: fsub float
67 // FULL-NEXT: fdiv float
68 // FULL: fdiv float
70 // LMTD: fmul float
71 // LMTD-NEXT: fmul float
72 // LMTD-NEXT: fadd float
73 // LMTD-NEXT: fmul float
74 // LMTD-NEXT: fmul float
75 // LMTD-NEXT: fadd float
76 // LMTD-NEXT: fmul float
77 // LMTD-NEXT: fmul float
78 // LMTD-NEXT: fsub float
79 // LMTD-NEXT: fdiv float
80 // LMTD-NEXT: fdiv float
82 // FRTRN: fmul float
83 // FRTRN-NEXT: fmul float
84 // FRTRN-NEXT: fadd float
85 // FRTRN-NEXT: fmul float
86 // FRTRN-NEXT: fmul float
87 // FRTRN-NEXT: fadd float
88 // FRTRN-NEXT: fmul float
89 // FRTRN-NEXT: fmul float
90 // FRTRN-NEXT: fsub float
91 // FRTRN-NEXT: fdiv float
92 // FRTRN-NEXT: fdiv float
94 return a / b;
97 _Complex float pragma_off_div(_Complex float a, _Complex float b) {
98 #pragma STDC CX_LIMITED_RANGE OFF
99 // LABEL: define {{.*}} @pragma_off_div(
100 // FULL: call {{.*}} @__divsc3
102 // LMTD: call {{.*}} @__divsc3
104 // FRTRN: call {{.*}} @__divsc3
106 return a / b;