[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / X86 / fcmp-logic.ll
blob54f7183ef333724f3282c8ec93565d160065377d
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s
4 define i1 @olt_ole_and_f32(float %w, float %x, float %y, float %z) {
5 ; CHECK-LABEL: olt_ole_and_f32:
6 ; CHECK:       # %bb.0:
7 ; CHECK-NEXT:    ucomiss %xmm0, %xmm1
8 ; CHECK-NEXT:    seta %cl
9 ; CHECK-NEXT:    ucomiss %xmm2, %xmm3
10 ; CHECK-NEXT:    setae %al
11 ; CHECK-NEXT:    andb %cl, %al
12 ; CHECK-NEXT:    retq
13   %f1 = fcmp olt float %w, %x
14   %f2 = fcmp ole float %y, %z
15   %r = and i1 %f1, %f2
16   ret i1 %r
19 define i1 @oge_oeq_or_f32(float %w, float %x, float %y, float %z) {
20 ; CHECK-LABEL: oge_oeq_or_f32:
21 ; CHECK:       # %bb.0:
22 ; CHECK-NEXT:    ucomiss %xmm1, %xmm0
23 ; CHECK-NEXT:    setae %cl
24 ; CHECK-NEXT:    ucomiss %xmm3, %xmm2
25 ; CHECK-NEXT:    setnp %dl
26 ; CHECK-NEXT:    sete %al
27 ; CHECK-NEXT:    andb %dl, %al
28 ; CHECK-NEXT:    orb %cl, %al
29 ; CHECK-NEXT:    retq
30   %f1 = fcmp oge float %w, %x
31   %f2 = fcmp oeq float %y, %z
32   %r = or i1 %f1, %f2
33   ret i1 %r
36 define i1 @ord_one_xor_f32(float %w, float %x, float %y, float %z) {
37 ; CHECK-LABEL: ord_one_xor_f32:
38 ; CHECK:       # %bb.0:
39 ; CHECK-NEXT:    ucomiss %xmm1, %xmm0
40 ; CHECK-NEXT:    setnp %cl
41 ; CHECK-NEXT:    ucomiss %xmm3, %xmm2
42 ; CHECK-NEXT:    setne %al
43 ; CHECK-NEXT:    xorb %cl, %al
44 ; CHECK-NEXT:    retq
45   %f1 = fcmp ord float %w, %x
46   %f2 = fcmp one float %y, %z
47   %r = xor i1 %f1, %f2
48   ret i1 %r
51 define i1 @une_ugt_and_f64(double %w, double %x, double %y, double %z) {
52 ; CHECK-LABEL: une_ugt_and_f64:
53 ; CHECK:       # %bb.0:
54 ; CHECK-NEXT:    ucomisd %xmm1, %xmm0
55 ; CHECK-NEXT:    setp %al
56 ; CHECK-NEXT:    setne %cl
57 ; CHECK-NEXT:    orb %al, %cl
58 ; CHECK-NEXT:    ucomisd %xmm2, %xmm3
59 ; CHECK-NEXT:    setb %al
60 ; CHECK-NEXT:    andb %cl, %al
61 ; CHECK-NEXT:    retq
62   %f1 = fcmp une double %w, %x
63   %f2 = fcmp ugt double %y, %z
64   %r = and i1 %f1, %f2
65   ret i1 %r
68 define i1 @ult_uge_or_f64(double %w, double %x, double %y, double %z) {
69 ; CHECK-LABEL: ult_uge_or_f64:
70 ; CHECK:       # %bb.0:
71 ; CHECK-NEXT:    ucomisd %xmm1, %xmm0
72 ; CHECK-NEXT:    setb %cl
73 ; CHECK-NEXT:    ucomisd %xmm2, %xmm3
74 ; CHECK-NEXT:    setbe %al
75 ; CHECK-NEXT:    orb %cl, %al
76 ; CHECK-NEXT:    retq
77   %f1 = fcmp ult double %w, %x
78   %f2 = fcmp uge double %y, %z
79   %r = or i1 %f1, %f2
80   ret i1 %r
83 define i1 @une_uno_xor_f64(double %w, double %x, double %y, double %z) {
84 ; CHECK-LABEL: une_uno_xor_f64:
85 ; CHECK:       # %bb.0:
86 ; CHECK-NEXT:    ucomisd %xmm1, %xmm0
87 ; CHECK-NEXT:    setp %al
88 ; CHECK-NEXT:    setne %cl
89 ; CHECK-NEXT:    orb %al, %cl
90 ; CHECK-NEXT:    ucomisd %xmm3, %xmm2
91 ; CHECK-NEXT:    setp %al
92 ; CHECK-NEXT:    xorb %cl, %al
93 ; CHECK-NEXT:    retq
94   %f1 = fcmp une double %w, %x
95   %f2 = fcmp uno double %y, %z
96   %r = xor i1 %f1, %f2
97   ret i1 %r
100 define i1 @olt_olt_and_f32_f64(float %w, float %x, double %y, double %z) {
101 ; CHECK-LABEL: olt_olt_and_f32_f64:
102 ; CHECK:       # %bb.0:
103 ; CHECK-NEXT:    ucomiss %xmm0, %xmm1
104 ; CHECK-NEXT:    seta %cl
105 ; CHECK-NEXT:    ucomisd %xmm2, %xmm3
106 ; CHECK-NEXT:    seta %al
107 ; CHECK-NEXT:    andb %cl, %al
108 ; CHECK-NEXT:    retq
109   %f1 = fcmp olt float %w, %x
110   %f2 = fcmp olt double %y, %z
111   %r = and i1 %f1, %f2
112   ret i1 %r
115 define i1 @une_uno_xor_f64_use1(double %w, double %x, double %y, double %z, i1* %p) {
116 ; CHECK-LABEL: une_uno_xor_f64_use1:
117 ; CHECK:       # %bb.0:
118 ; CHECK-NEXT:    ucomisd %xmm1, %xmm0
119 ; CHECK-NEXT:    setp %al
120 ; CHECK-NEXT:    setne %cl
121 ; CHECK-NEXT:    orb %al, %cl
122 ; CHECK-NEXT:    movb %cl, (%rdi)
123 ; CHECK-NEXT:    ucomisd %xmm3, %xmm2
124 ; CHECK-NEXT:    setp %al
125 ; CHECK-NEXT:    xorb %cl, %al
126 ; CHECK-NEXT:    retq
127   %f1 = fcmp une double %w, %x
128   store i1 %f1, i1* %p
129   %f2 = fcmp uno double %y, %z
130   %r = xor i1 %f1, %f2
131   ret i1 %r
134 define i1 @une_uno_xor_f64_use2(double %w, double %x, double %y, double %z, i1* %p) {
135 ; CHECK-LABEL: une_uno_xor_f64_use2:
136 ; CHECK:       # %bb.0:
137 ; CHECK-NEXT:    ucomisd %xmm1, %xmm0
138 ; CHECK-NEXT:    setp %al
139 ; CHECK-NEXT:    setne %cl
140 ; CHECK-NEXT:    orb %al, %cl
141 ; CHECK-NEXT:    ucomisd %xmm3, %xmm2
142 ; CHECK-NEXT:    setp %al
143 ; CHECK-NEXT:    setp (%rdi)
144 ; CHECK-NEXT:    xorb %cl, %al
145 ; CHECK-NEXT:    retq
146   %f1 = fcmp une double %w, %x
147   %f2 = fcmp uno double %y, %z
148   store i1 %f2, i1* %p
149   %r = xor i1 %f1, %f2
150   ret i1 %r