Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / CodeGenPrepare / AArch64 / fpclass-test.ll
blob63ab22e96ad2adc0029587c8ebdfd31606577b4f
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2 ; RUN: opt -codegenprepare -S -mtriple=aarch64 < %s | FileCheck %s
4 define i1 @test_is_inf_or_nan(double %arg) {
5 ; CHECK-LABEL: define i1 @test_is_inf_or_nan(
6 ; CHECK-SAME: double [[ARG:%.*]]) {
7 ; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f64(double [[ARG]], i32 519)
8 ; CHECK-NEXT:    ret i1 [[TMP1]]
10   %abs = tail call double @llvm.fabs.f64(double %arg)
11   %ret = fcmp ueq double %abs, 0x7FF0000000000000
12   ret i1 %ret
15 define i1 @test_is_not_inf_or_nan(double %arg) {
16 ; CHECK-LABEL: define i1 @test_is_not_inf_or_nan(
17 ; CHECK-SAME: double [[ARG:%.*]]) {
18 ; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f64(double [[ARG]], i32 504)
19 ; CHECK-NEXT:    ret i1 [[TMP1]]
21   %abs = tail call double @llvm.fabs.f64(double %arg)
22   %ret = fcmp one double %abs, 0x7FF0000000000000
23   ret i1 %ret
26 define i1 @test_is_inf(double %arg) {
27 ; CHECK-LABEL: define i1 @test_is_inf(
28 ; CHECK-SAME: double [[ARG:%.*]]) {
29 ; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f64(double [[ARG]], i32 516)
30 ; CHECK-NEXT:    ret i1 [[TMP1]]
32   %abs = tail call double @llvm.fabs.f64(double %arg)
33   %ret = fcmp oeq double %abs, 0x7FF0000000000000
34   ret i1 %ret
37 define i1 @test_is_not_inf(double %arg) {
38 ; CHECK-LABEL: define i1 @test_is_not_inf(
39 ; CHECK-SAME: double [[ARG:%.*]]) {
40 ; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f64(double [[ARG]], i32 507)
41 ; CHECK-NEXT:    ret i1 [[TMP1]]
43   %abs = tail call double @llvm.fabs.f64(double %arg)
44   %ret = fcmp une double %abs, 0x7FF0000000000000
45   ret i1 %ret
48 define <vscale x 2 x i1> @test_vec_is_inf_or_nan(<vscale x 2 x double> %arg) {
49 ; CHECK-LABEL: define <vscale x 2 x i1> @test_vec_is_inf_or_nan(
50 ; CHECK-SAME: <vscale x 2 x double> [[ARG:%.*]]) {
51 ; CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 2 x i1> @llvm.is.fpclass.nxv2f64(<vscale x 2 x double> [[ARG]], i32 519)
52 ; CHECK-NEXT:    ret <vscale x 2 x i1> [[TMP1]]
54   %abs = tail call <vscale x 2 x double> @llvm.fabs.nxv2f64(<vscale x 2 x double> %arg)
55   %ret = fcmp ueq <vscale x 2 x double> %abs, splat (double 0x7FF0000000000000)
56   ret <vscale x 2 x i1> %ret
59 define <vscale x 2 x i1> @test_vec_is_not_inf_or_nan(<vscale x 2 x double> %arg) {
60 ; CHECK-LABEL: define <vscale x 2 x i1> @test_vec_is_not_inf_or_nan(
61 ; CHECK-SAME: <vscale x 2 x double> [[ARG:%.*]]) {
62 ; CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 2 x i1> @llvm.is.fpclass.nxv2f64(<vscale x 2 x double> [[ARG]], i32 504)
63 ; CHECK-NEXT:    ret <vscale x 2 x i1> [[TMP1]]
65   %abs = tail call <vscale x 2 x double> @llvm.fabs.nxv2f64(<vscale x 2 x double> %arg)
66   %ret = fcmp one <vscale x 2 x double> %abs, splat (double 0x7FF0000000000000)
67   ret <vscale x 2 x i1> %ret
70 define <vscale x 2 x i1> @test_vec_is_inf(<vscale x 2 x double> %arg) {
71 ; CHECK-LABEL: define <vscale x 2 x i1> @test_vec_is_inf(
72 ; CHECK-SAME: <vscale x 2 x double> [[ARG:%.*]]) {
73 ; CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 2 x i1> @llvm.is.fpclass.nxv2f64(<vscale x 2 x double> [[ARG]], i32 516)
74 ; CHECK-NEXT:    ret <vscale x 2 x i1> [[TMP1]]
76   %abs = tail call <vscale x 2 x double> @llvm.fabs.nxv2f64(<vscale x 2 x double> %arg)
77   %ret = fcmp oeq <vscale x 2 x double> %abs, splat (double 0x7FF0000000000000)
78   ret <vscale x 2 x i1> %ret
81 define <vscale x 2 x i1> @test_vec_is_not_inf(<vscale x 2 x double> %arg) {
82 ; CHECK-LABEL: define <vscale x 2 x i1> @test_vec_is_not_inf(
83 ; CHECK-SAME: <vscale x 2 x double> [[ARG:%.*]]) {
84 ; CHECK-NEXT:    [[TMP1:%.*]] = call <vscale x 2 x i1> @llvm.is.fpclass.nxv2f64(<vscale x 2 x double> [[ARG]], i32 507)
85 ; CHECK-NEXT:    ret <vscale x 2 x i1> [[TMP1]]
87   %abs = tail call <vscale x 2 x double> @llvm.fabs.nxv2f64(<vscale x 2 x double> %arg)
88   %ret = fcmp une <vscale x 2 x double> %abs, splat (double 0x7FF0000000000000)
89   ret <vscale x 2 x i1> %ret
92 define i1 @test_fp128_is_inf_or_nan(fp128 %arg) {
93 ; CHECK-LABEL: define i1 @test_fp128_is_inf_or_nan(
94 ; CHECK-SAME: fp128 [[ARG:%.*]]) {
95 ; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f128(fp128 [[ARG]], i32 519)
96 ; CHECK-NEXT:    ret i1 [[TMP1]]
98   %abs = tail call fp128 @llvm.fabs.f128(fp128 %arg)
99   %ret = fcmp ueq fp128 %abs, 0xL00000000000000007FFF000000000000
100   ret i1 %ret
103 define i1 @test_fp128_is_not_inf_or_nan(fp128 %arg) {
104 ; CHECK-LABEL: define i1 @test_fp128_is_not_inf_or_nan(
105 ; CHECK-SAME: fp128 [[ARG:%.*]]) {
106 ; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f128(fp128 [[ARG]], i32 504)
107 ; CHECK-NEXT:    ret i1 [[TMP1]]
109   %abs = tail call fp128 @llvm.fabs.f128(fp128 %arg)
110   %ret = fcmp one fp128 %abs, 0xL00000000000000007FFF000000000000
111   ret i1 %ret
114 define i1 @test_fp128_is_inf(fp128 %arg) {
115 ; CHECK-LABEL: define i1 @test_fp128_is_inf(
116 ; CHECK-SAME: fp128 [[ARG:%.*]]) {
117 ; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f128(fp128 [[ARG]], i32 516)
118 ; CHECK-NEXT:    ret i1 [[TMP1]]
120   %abs = tail call fp128 @llvm.fabs.f128(fp128 %arg)
121   %ret = fcmp oeq fp128 %abs, 0xL00000000000000007FFF000000000000
122   ret i1 %ret
125 define i1 @test_fp128_is_not_inf(fp128 %arg) {
126 ; CHECK-LABEL: define i1 @test_fp128_is_not_inf(
127 ; CHECK-SAME: fp128 [[ARG:%.*]]) {
128 ; CHECK-NEXT:    [[TMP1:%.*]] = call i1 @llvm.is.fpclass.f128(fp128 [[ARG]], i32 507)
129 ; CHECK-NEXT:    ret i1 [[TMP1]]
131   %abs = tail call fp128 @llvm.fabs.f128(fp128 %arg)
132   %ret = fcmp une fp128 %abs, 0xL00000000000000007FFF000000000000
133   ret i1 %ret