xref: /llvm-project/llvm/test/CodeGen/AArch64/arm64-constrained-fcmp-no-nans-opt.ll (revision f57fb82e0f90b4c667a0d044c14d9deaa22d3a99)
1; RUN: llc < %s -mtriple=arm64-eabi -mattr=+fullfp16 -enable-no-nans-fp-math | FileCheck %s
2
3declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata)
4declare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata)
5
6; CHECK-LABEL: @f32_constrained_fcmp_ueq
7; CHECK: fcmp s0, s1
8; CHECK-NEXT: cset w0, eq
9; CHECK-NEXT: ret
10define i1 @f32_constrained_fcmp_ueq(float %a, float %b) nounwind ssp strictfp {
11  %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ueq", metadata !"fpexcept.strict")
12  ret i1 %cmp
13}
14
15; CHECK-LABEL: @f32_constrained_fcmp_une
16; CHECK: fcmp s0, s1
17; CHECK-NEXT: cset w0, ne
18; CHECK-NEXT: ret
19define i1 @f32_constrained_fcmp_une(float %a, float %b) nounwind ssp strictfp {
20  %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"une", metadata !"fpexcept.strict")
21  ret i1 %cmp
22}
23
24; CHECK-LABEL: @f32_constrained_fcmp_ugt
25; CHECK: fcmp s0, s1
26; CHECK-NEXT: cset w0, gt
27; CHECK-NEXT: ret
28define i1 @f32_constrained_fcmp_ugt(float %a, float %b) nounwind ssp strictfp {
29  %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ugt", metadata !"fpexcept.strict")
30  ret i1 %cmp
31}
32
33; CHECK-LABEL: @f32_constrained_fcmp_uge
34; CHECK: fcmp s0, s1
35; CHECK-NEXT: cset w0, ge
36; CHECK-NEXT: ret
37define i1 @f32_constrained_fcmp_uge(float %a, float %b) nounwind ssp strictfp {
38  %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"uge", metadata !"fpexcept.strict")
39  ret i1 %cmp
40}
41
42; CHECK-LABEL: @f32_constrained_fcmp_ult
43; CHECK: fcmp s0, s1
44; CHECK-NEXT: cset w0, lt
45; CHECK-NEXT: ret
46define i1 @f32_constrained_fcmp_ult(float %a, float %b) nounwind ssp strictfp {
47  %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ult", metadata !"fpexcept.strict")
48  ret i1 %cmp
49}
50
51; CHECK-LABEL: @f32_constrained_fcmp_ule
52; CHECK: fcmp s0, s1
53; CHECK-NEXT: cset w0, le
54; CHECK-NEXT: ret
55define i1 @f32_constrained_fcmp_ule(float %a, float %b) nounwind ssp strictfp {
56  %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f32(float %a, float %b, metadata !"ule", metadata !"fpexcept.strict")
57  ret i1 %cmp
58}
59
60; CHECK-LABEL: @f64_constrained_fcmp_ueq
61; CHECK: fcmp d0, d1
62; CHECK-NEXT: cset w0, eq
63; CHECK-NEXT: ret
64define i1 @f64_constrained_fcmp_ueq(double %a, double %b) nounwind ssp strictfp {
65  %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ueq", metadata !"fpexcept.strict")
66  ret i1 %cmp
67}
68
69; CHECK-LABEL: @f64_constrained_fcmp_une
70; CHECK: fcmp d0, d1
71; CHECK-NEXT: cset w0, ne
72; CHECK-NEXT: ret
73define i1 @f64_constrained_fcmp_une(double %a, double %b) nounwind ssp strictfp {
74  %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"une", metadata !"fpexcept.strict")
75  ret i1 %cmp
76}
77
78; CHECK-LABEL: @f64_constrained_fcmp_ugt
79; CHECK: fcmp d0, d1
80; CHECK-NEXT: cset w0, gt
81; CHECK-NEXT: ret
82define i1 @f64_constrained_fcmp_ugt(double %a, double %b) nounwind ssp strictfp {
83  %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ugt", metadata !"fpexcept.strict")
84  ret i1 %cmp
85}
86
87; CHECK-LABEL: @f64_constrained_fcmp_uge
88; CHECK: fcmp d0, d1
89; CHECK-NEXT: cset w0, ge
90; CHECK-NEXT: ret
91define i1 @f64_constrained_fcmp_uge(double %a, double %b) nounwind ssp strictfp {
92  %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"uge", metadata !"fpexcept.strict")
93  ret i1 %cmp
94}
95
96; CHECK-LABEL: @f64_constrained_fcmp_ult
97; CHECK: fcmp d0, d1
98; CHECK-NEXT: cset w0, lt
99; CHECK-NEXT: ret
100define i1 @f64_constrained_fcmp_ult(double %a, double %b) nounwind ssp strictfp {
101  %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ult", metadata !"fpexcept.strict")
102  ret i1 %cmp
103}
104
105; CHECK-LABEL: @f64_constrained_fcmp_ule
106; CHECK: fcmp d0, d1
107; CHECK-NEXT: cset w0, le
108; CHECK-NEXT: ret
109define i1 @f64_constrained_fcmp_ule(double %a, double %b) nounwind ssp strictfp {
110  %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ule", metadata !"fpexcept.strict")
111  ret i1 %cmp
112}
113