[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / CodeGen / X86 / compare-inf.ll
blob5beec4d76e22e7281cfdbf821380b9b56d58c56a
1 ; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s
3 ; Convert oeq and une to ole/oge/ule/uge when comparing with infinity
4 ; and negative infinity, because those are more efficient on x86.
6 declare void @f() nounwind
8 ; CHECK-LABEL: oeq_inff:
9 ; CHECK: ucomiss
10 ; CHECK: jb
11 define void @oeq_inff(float %x) nounwind {
12   %t0 = fcmp oeq float %x, 0x7FF0000000000000
13   br i1 %t0, label %true, label %false
15 true:
16   call void @f() nounwind
17   br label %false
19 false:
20   ret void
23 ; CHECK-LABEL: oeq_inf:
24 ; CHECK: ucomisd
25 ; CHECK: jb
26 define void @oeq_inf(double %x) nounwind {
27   %t0 = fcmp oeq double %x, 0x7FF0000000000000
28   br i1 %t0, label %true, label %false
30 true:
31   call void @f() nounwind
32   br label %false
34 false:
35   ret void
38 ; CHECK-LABEL: une_inff:
39 ; CHECK: ucomiss
40 ; CHECK: jae
41 define void @une_inff(float %x) nounwind {
42   %t0 = fcmp une float %x, 0x7FF0000000000000
43   br i1 %t0, label %true, label %false
45 true:
46   call void @f() nounwind
47   br label %false
49 false:
50   ret void
53 ; CHECK-LABEL: une_inf:
54 ; CHECK: ucomisd
55 ; CHECK: jae
56 define void @une_inf(double %x) nounwind {
57   %t0 = fcmp une double %x, 0x7FF0000000000000
58   br i1 %t0, label %true, label %false
60 true:
61   call void @f() nounwind
62   br label %false
64 false:
65   ret void
68 ; CHECK-LABEL: oeq_neg_inff:
69 ; CHECK: ucomiss
70 ; CHECK: jb
71 define void @oeq_neg_inff(float %x) nounwind {
72   %t0 = fcmp oeq float %x, 0xFFF0000000000000
73   br i1 %t0, label %true, label %false
75 true:
76   call void @f() nounwind
77   br label %false
79 false:
80   ret void
83 ; CHECK-LABEL: oeq_neg_inf:
84 ; CHECK: ucomisd
85 ; CHECK: jb
86 define void @oeq_neg_inf(double %x) nounwind {
87   %t0 = fcmp oeq double %x, 0xFFF0000000000000
88   br i1 %t0, label %true, label %false
90 true:
91   call void @f() nounwind
92   br label %false
94 false:
95   ret void
98 ; CHECK-LABEL: une_neg_inff:
99 ; CHECK: ucomiss
100 ; CHECK: jae
101 define void @une_neg_inff(float %x) nounwind {
102   %t0 = fcmp une float %x, 0xFFF0000000000000
103   br i1 %t0, label %true, label %false
105 true:
106   call void @f() nounwind
107   br label %false
109 false:
110   ret void
113 ; CHECK-LABEL: une_neg_inf:
114 ; CHECK: ucomisd
115 ; CHECK: jae
116 define void @une_neg_inf(double %x) nounwind {
117   %t0 = fcmp une double %x, 0xFFF0000000000000
118   br i1 %t0, label %true, label %false
120 true:
121   call void @f() nounwind
122   br label %false
124 false:
125   ret void