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:
7 ; CHECK-NEXT: ucomiss %xmm0, %xmm1
9 ; CHECK-NEXT: ucomiss %xmm2, %xmm3
10 ; CHECK-NEXT: setae %al
11 ; CHECK-NEXT: andb %cl, %al
13 %f1 = fcmp olt float %w, %x
14 %f2 = fcmp ole float %y, %z
19 define i1 @oge_oeq_or_f32(float %w, float %x, float %y, float %z) {
20 ; CHECK-LABEL: oge_oeq_or_f32:
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
30 %f1 = fcmp oge float %w, %x
31 %f2 = fcmp oeq float %y, %z
36 define i1 @ord_one_xor_f32(float %w, float %x, float %y, float %z) {
37 ; CHECK-LABEL: ord_one_xor_f32:
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
45 %f1 = fcmp ord float %w, %x
46 %f2 = fcmp one float %y, %z
51 define i1 @une_ugt_and_f64(double %w, double %x, double %y, double %z) {
52 ; CHECK-LABEL: une_ugt_and_f64:
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
62 %f1 = fcmp une double %w, %x
63 %f2 = fcmp ugt double %y, %z
68 define i1 @ult_uge_or_f64(double %w, double %x, double %y, double %z) {
69 ; CHECK-LABEL: ult_uge_or_f64:
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
77 %f1 = fcmp ult double %w, %x
78 %f2 = fcmp uge double %y, %z
83 define i1 @une_uno_xor_f64(double %w, double %x, double %y, double %z) {
84 ; CHECK-LABEL: une_uno_xor_f64:
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
94 %f1 = fcmp une double %w, %x
95 %f2 = fcmp uno double %y, %z
100 define i1 @olt_olt_and_f32_f64(float %w, float %x, double %y, double %z) {
101 ; CHECK-LABEL: olt_olt_and_f32_f64:
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
109 %f1 = fcmp olt float %w, %x
110 %f2 = fcmp olt double %y, %z
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:
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
127 %f1 = fcmp une double %w, %x
129 %f2 = fcmp uno double %y, %z
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:
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
146 %f1 = fcmp une double %w, %x
147 %f2 = fcmp uno double %y, %z