xref: /llvm-project/llvm/test/Transforms/CodeGenPrepare/X86/fpclass-test.ll (revision 38a44bdc93db5b00310230f6542df39017b9a41b)
1*38a44bdcSYingwei Zheng; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2*38a44bdcSYingwei Zheng; RUN: opt -codegenprepare -S -mtriple=x86_64-unknown-unknown < %s | FileCheck %s
3*38a44bdcSYingwei Zheng
4*38a44bdcSYingwei Zhengdefine i1 @test_is_inf_or_nan(double %arg) {
5*38a44bdcSYingwei Zheng; CHECK-LABEL: define i1 @test_is_inf_or_nan(
6*38a44bdcSYingwei Zheng; CHECK-SAME: double [[ARG:%.*]]) {
7*38a44bdcSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f64(double [[ARG]], i32 519)
8*38a44bdcSYingwei Zheng; CHECK-NEXT:    ret i1 [[TMP1]]
9*38a44bdcSYingwei Zheng;
10*38a44bdcSYingwei Zheng  %abs = tail call double @llvm.fabs.f64(double %arg)
11*38a44bdcSYingwei Zheng  %ret = fcmp ueq double %abs, 0x7FF0000000000000
12*38a44bdcSYingwei Zheng  ret i1 %ret
13*38a44bdcSYingwei Zheng}
14*38a44bdcSYingwei Zheng
15*38a44bdcSYingwei Zhengdefine i1 @test_is_not_inf_or_nan(double %arg) {
16*38a44bdcSYingwei Zheng; CHECK-LABEL: define i1 @test_is_not_inf_or_nan(
17*38a44bdcSYingwei Zheng; CHECK-SAME: double [[ARG:%.*]]) {
18*38a44bdcSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f64(double [[ARG]], i32 504)
19*38a44bdcSYingwei Zheng; CHECK-NEXT:    ret i1 [[TMP1]]
20*38a44bdcSYingwei Zheng;
21*38a44bdcSYingwei Zheng  %abs = tail call double @llvm.fabs.f64(double %arg)
22*38a44bdcSYingwei Zheng  %ret = fcmp one double %abs, 0x7FF0000000000000
23*38a44bdcSYingwei Zheng  ret i1 %ret
24*38a44bdcSYingwei Zheng}
25*38a44bdcSYingwei Zheng
26*38a44bdcSYingwei Zhengdefine i1 @test_is_inf(double %arg) {
27*38a44bdcSYingwei Zheng; CHECK-LABEL: define i1 @test_is_inf(
28*38a44bdcSYingwei Zheng; CHECK-SAME: double [[ARG:%.*]]) {
29*38a44bdcSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f64(double [[ARG]], i32 516)
30*38a44bdcSYingwei Zheng; CHECK-NEXT:    ret i1 [[TMP1]]
31*38a44bdcSYingwei Zheng;
32*38a44bdcSYingwei Zheng  %abs = tail call double @llvm.fabs.f64(double %arg)
33*38a44bdcSYingwei Zheng  %ret = fcmp oeq double %abs, 0x7FF0000000000000
34*38a44bdcSYingwei Zheng  ret i1 %ret
35*38a44bdcSYingwei Zheng}
36*38a44bdcSYingwei Zheng
37*38a44bdcSYingwei Zhengdefine i1 @test_is_not_inf(double %arg) {
38*38a44bdcSYingwei Zheng; CHECK-LABEL: define i1 @test_is_not_inf(
39*38a44bdcSYingwei Zheng; CHECK-SAME: double [[ARG:%.*]]) {
40*38a44bdcSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f64(double [[ARG]], i32 507)
41*38a44bdcSYingwei Zheng; CHECK-NEXT:    ret i1 [[TMP1]]
42*38a44bdcSYingwei Zheng;
43*38a44bdcSYingwei Zheng  %abs = tail call double @llvm.fabs.f64(double %arg)
44*38a44bdcSYingwei Zheng  %ret = fcmp une double %abs, 0x7FF0000000000000
45*38a44bdcSYingwei Zheng  ret i1 %ret
46*38a44bdcSYingwei Zheng}
47*38a44bdcSYingwei Zheng
48*38a44bdcSYingwei Zhengdefine <4 x i1> @test_vec_is_inf_or_nan(<4 x double> %arg) {
49*38a44bdcSYingwei Zheng; CHECK-LABEL: define <4 x i1> @test_vec_is_inf_or_nan(
50*38a44bdcSYingwei Zheng; CHECK-SAME: <4 x double> [[ARG:%.*]]) {
51*38a44bdcSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.is.fpclass.v4f64(<4 x double> [[ARG]], i32 519)
52*38a44bdcSYingwei Zheng; CHECK-NEXT:    ret <4 x i1> [[TMP1]]
53*38a44bdcSYingwei Zheng;
54*38a44bdcSYingwei Zheng  %abs = tail call <4 x double> @llvm.fabs.v4f64(<4 x double> %arg)
55*38a44bdcSYingwei Zheng  %ret = fcmp ueq <4 x double> %abs, splat (double 0x7FF0000000000000)
56*38a44bdcSYingwei Zheng  ret <4 x i1> %ret
57*38a44bdcSYingwei Zheng}
58*38a44bdcSYingwei Zheng
59*38a44bdcSYingwei Zhengdefine <4 x i1> @test_vec_is_not_inf_or_nan(<4 x double> %arg) {
60*38a44bdcSYingwei Zheng; CHECK-LABEL: define <4 x i1> @test_vec_is_not_inf_or_nan(
61*38a44bdcSYingwei Zheng; CHECK-SAME: <4 x double> [[ARG:%.*]]) {
62*38a44bdcSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.is.fpclass.v4f64(<4 x double> [[ARG]], i32 504)
63*38a44bdcSYingwei Zheng; CHECK-NEXT:    ret <4 x i1> [[TMP1]]
64*38a44bdcSYingwei Zheng;
65*38a44bdcSYingwei Zheng  %abs = tail call <4 x double> @llvm.fabs.v4f64(<4 x double> %arg)
66*38a44bdcSYingwei Zheng  %ret = fcmp one <4 x double> %abs, splat (double 0x7FF0000000000000)
67*38a44bdcSYingwei Zheng  ret <4 x i1> %ret
68*38a44bdcSYingwei Zheng}
69*38a44bdcSYingwei Zheng
70*38a44bdcSYingwei Zhengdefine <4 x i1> @test_vec_is_inf(<4 x double> %arg) {
71*38a44bdcSYingwei Zheng; CHECK-LABEL: define <4 x i1> @test_vec_is_inf(
72*38a44bdcSYingwei Zheng; CHECK-SAME: <4 x double> [[ARG:%.*]]) {
73*38a44bdcSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.is.fpclass.v4f64(<4 x double> [[ARG]], i32 516)
74*38a44bdcSYingwei Zheng; CHECK-NEXT:    ret <4 x i1> [[TMP1]]
75*38a44bdcSYingwei Zheng;
76*38a44bdcSYingwei Zheng  %abs = tail call <4 x double> @llvm.fabs.v4f64(<4 x double> %arg)
77*38a44bdcSYingwei Zheng  %ret = fcmp oeq <4 x double> %abs, splat (double 0x7FF0000000000000)
78*38a44bdcSYingwei Zheng  ret <4 x i1> %ret
79*38a44bdcSYingwei Zheng}
80*38a44bdcSYingwei Zheng
81*38a44bdcSYingwei Zhengdefine <4 x i1> @test_vec_is_not_inf(<4 x double> %arg) {
82*38a44bdcSYingwei Zheng; CHECK-LABEL: define <4 x i1> @test_vec_is_not_inf(
83*38a44bdcSYingwei Zheng; CHECK-SAME: <4 x double> [[ARG:%.*]]) {
84*38a44bdcSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i1> @llvm.is.fpclass.v4f64(<4 x double> [[ARG]], i32 507)
85*38a44bdcSYingwei Zheng; CHECK-NEXT:    ret <4 x i1> [[TMP1]]
86*38a44bdcSYingwei Zheng;
87*38a44bdcSYingwei Zheng  %abs = tail call <4 x double> @llvm.fabs.v4f64(<4 x double> %arg)
88*38a44bdcSYingwei Zheng  %ret = fcmp une <4 x double> %abs, splat (double 0x7FF0000000000000)
89*38a44bdcSYingwei Zheng  ret <4 x i1> %ret
90*38a44bdcSYingwei Zheng}
91*38a44bdcSYingwei Zheng
92*38a44bdcSYingwei Zhengdefine i1 @test_fp128_is_inf_or_nan(fp128 %arg) {
93*38a44bdcSYingwei Zheng; CHECK-LABEL: define i1 @test_fp128_is_inf_or_nan(
94*38a44bdcSYingwei Zheng; CHECK-SAME: fp128 [[ARG:%.*]]) {
95*38a44bdcSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f128(fp128 [[ARG]], i32 519)
96*38a44bdcSYingwei Zheng; CHECK-NEXT:    ret i1 [[TMP1]]
97*38a44bdcSYingwei Zheng;
98*38a44bdcSYingwei Zheng  %abs = tail call fp128 @llvm.fabs.f128(fp128 %arg)
99*38a44bdcSYingwei Zheng  %ret = fcmp ueq fp128 %abs, 0xL00000000000000007FFF000000000000
100*38a44bdcSYingwei Zheng  ret i1 %ret
101*38a44bdcSYingwei Zheng}
102*38a44bdcSYingwei Zheng
103*38a44bdcSYingwei Zhengdefine i1 @test_fp128_is_not_inf_or_nan(fp128 %arg) {
104*38a44bdcSYingwei Zheng; CHECK-LABEL: define i1 @test_fp128_is_not_inf_or_nan(
105*38a44bdcSYingwei Zheng; CHECK-SAME: fp128 [[ARG:%.*]]) {
106*38a44bdcSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f128(fp128 [[ARG]], i32 504)
107*38a44bdcSYingwei Zheng; CHECK-NEXT:    ret i1 [[TMP1]]
108*38a44bdcSYingwei Zheng;
109*38a44bdcSYingwei Zheng  %abs = tail call fp128 @llvm.fabs.f128(fp128 %arg)
110*38a44bdcSYingwei Zheng  %ret = fcmp one fp128 %abs, 0xL00000000000000007FFF000000000000
111*38a44bdcSYingwei Zheng  ret i1 %ret
112*38a44bdcSYingwei Zheng}
113*38a44bdcSYingwei Zheng
114*38a44bdcSYingwei Zhengdefine i1 @test_fp128_is_inf(fp128 %arg) {
115*38a44bdcSYingwei Zheng; CHECK-LABEL: define i1 @test_fp128_is_inf(
116*38a44bdcSYingwei Zheng; CHECK-SAME: fp128 [[ARG:%.*]]) {
117*38a44bdcSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f128(fp128 [[ARG]], i32 516)
118*38a44bdcSYingwei Zheng; CHECK-NEXT:    ret i1 [[TMP1]]
119*38a44bdcSYingwei Zheng;
120*38a44bdcSYingwei Zheng  %abs = tail call fp128 @llvm.fabs.f128(fp128 %arg)
121*38a44bdcSYingwei Zheng  %ret = fcmp oeq fp128 %abs, 0xL00000000000000007FFF000000000000
122*38a44bdcSYingwei Zheng  ret i1 %ret
123*38a44bdcSYingwei Zheng}
124*38a44bdcSYingwei Zheng
125*38a44bdcSYingwei Zhengdefine i1 @test_fp128_is_not_inf(fp128 %arg) {
126*38a44bdcSYingwei Zheng; CHECK-LABEL: define i1 @test_fp128_is_not_inf(
127*38a44bdcSYingwei Zheng; CHECK-SAME: fp128 [[ARG:%.*]]) {
128*38a44bdcSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f128(fp128 [[ARG]], i32 507)
129*38a44bdcSYingwei Zheng; CHECK-NEXT:    ret i1 [[TMP1]]
130*38a44bdcSYingwei Zheng;
131*38a44bdcSYingwei Zheng  %abs = tail call fp128 @llvm.fabs.f128(fp128 %arg)
132*38a44bdcSYingwei Zheng  %ret = fcmp une fp128 %abs, 0xL00000000000000007FFF000000000000
133*38a44bdcSYingwei Zheng  ret i1 %ret
134*38a44bdcSYingwei Zheng}
135*38a44bdcSYingwei Zheng
136*38a44bdcSYingwei Zhengdefine i1 @test_x86_fp80_is_inf_or_nan(x86_fp80 %arg) {
137*38a44bdcSYingwei Zheng; CHECK-LABEL: define i1 @test_x86_fp80_is_inf_or_nan(
138*38a44bdcSYingwei Zheng; CHECK-SAME: x86_fp80 [[ARG:%.*]]) {
139*38a44bdcSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f80(x86_fp80 [[ARG]], i32 519)
140*38a44bdcSYingwei Zheng; CHECK-NEXT:    ret i1 [[TMP1]]
141*38a44bdcSYingwei Zheng;
142*38a44bdcSYingwei Zheng  %abs = tail call x86_fp80 @llvm.fabs.f80(x86_fp80 %arg)
143*38a44bdcSYingwei Zheng  %ret = fcmp ueq x86_fp80 %abs, 0xK7FFF8000000000000000
144*38a44bdcSYingwei Zheng  ret i1 %ret
145*38a44bdcSYingwei Zheng}
146*38a44bdcSYingwei Zheng
147*38a44bdcSYingwei Zhengdefine i1 @test_x86_fp80_is_not_inf_or_nan(x86_fp80 %arg) {
148*38a44bdcSYingwei Zheng; CHECK-LABEL: define i1 @test_x86_fp80_is_not_inf_or_nan(
149*38a44bdcSYingwei Zheng; CHECK-SAME: x86_fp80 [[ARG:%.*]]) {
150*38a44bdcSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f80(x86_fp80 [[ARG]], i32 504)
151*38a44bdcSYingwei Zheng; CHECK-NEXT:    ret i1 [[TMP1]]
152*38a44bdcSYingwei Zheng;
153*38a44bdcSYingwei Zheng  %abs = tail call x86_fp80 @llvm.fabs.f80(x86_fp80 %arg)
154*38a44bdcSYingwei Zheng  %ret = fcmp one x86_fp80 %abs, 0xK7FFF8000000000000000
155*38a44bdcSYingwei Zheng  ret i1 %ret
156*38a44bdcSYingwei Zheng}
157*38a44bdcSYingwei Zheng
158*38a44bdcSYingwei Zhengdefine i1 @test_x86_fp80_is_inf(x86_fp80 %arg) {
159*38a44bdcSYingwei Zheng; CHECK-LABEL: define i1 @test_x86_fp80_is_inf(
160*38a44bdcSYingwei Zheng; CHECK-SAME: x86_fp80 [[ARG:%.*]]) {
161*38a44bdcSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f80(x86_fp80 [[ARG]], i32 516)
162*38a44bdcSYingwei Zheng; CHECK-NEXT:    ret i1 [[TMP1]]
163*38a44bdcSYingwei Zheng;
164*38a44bdcSYingwei Zheng  %abs = tail call x86_fp80 @llvm.fabs.f80(x86_fp80 %arg)
165*38a44bdcSYingwei Zheng  %ret = fcmp oeq x86_fp80 %abs, 0xK7FFF8000000000000000
166*38a44bdcSYingwei Zheng  ret i1 %ret
167*38a44bdcSYingwei Zheng}
168*38a44bdcSYingwei Zheng
169*38a44bdcSYingwei Zhengdefine i1 @test_x86_fp80_is_not_inf(x86_fp80 %arg) {
170*38a44bdcSYingwei Zheng; CHECK-LABEL: define i1 @test_x86_fp80_is_not_inf(
171*38a44bdcSYingwei Zheng; CHECK-SAME: x86_fp80 [[ARG:%.*]]) {
172*38a44bdcSYingwei Zheng; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f80(x86_fp80 [[ARG]], i32 507)
173*38a44bdcSYingwei Zheng; CHECK-NEXT:    ret i1 [[TMP1]]
174*38a44bdcSYingwei Zheng;
175*38a44bdcSYingwei Zheng  %abs = tail call x86_fp80 @llvm.fabs.f80(x86_fp80 %arg)
176*38a44bdcSYingwei Zheng  %ret = fcmp une x86_fp80 %abs, 0xK7FFF8000000000000000
177*38a44bdcSYingwei Zheng  ret i1 %ret
178*38a44bdcSYingwei Zheng}
179