blob: 3994f24d15cded89e22a6badf7cb3148fb947592 [file] [log] [blame]
JF Bastienda06bce2015-08-11 21:02:46 +00001; RUN: llc < %s -asm-verbose=false | FileCheck %s
2
3; Test that basic 32-bit floating-point comparison operations assemble as
4; expected.
5
Dan Gohmandde8dce2015-08-19 20:30:20 +00006target datalayout = "e-p:32:32-i64:64-n32:64-S128"
JF Bastienda06bce2015-08-11 21:02:46 +00007target triple = "wasm32-unknown-unknown"
8
Dan Gohmane51c0582015-10-06 00:27:55 +00009; CHECK-LABEL: ord_f32:
10; CHECK-NEXT: .param f32{{$}}
11; CHECK-NEXT: .param f32{{$}}
12; CHECK-NEXT: .result i32{{$}}
13; CHECK-NEXT: @0{{$}}
14; CHECK-NEXT: set_local @2, pop{{$}}
15; CHECK-NEXT: @1{{$}}
16; CHECK-NEXT: set_local @3, pop{{$}}
17; CHECK-NEXT: eq @3, @3{{$}}
18; CHECK-NEXT: set_local @4, pop{{$}}
19; CHECK-NEXT: eq @2, @2{{$}}
20; CHECK-NEXT: set_local @5, pop{{$}}
21; CHECK-NEXT: and @5, @4{{$}}
22; CHECK-NEXT: set_local @6, pop{{$}}
23; CHECK-NEXT: return @6{{$}}
JF Bastien71d29ac2015-08-12 17:53:29 +000024define i32 @ord_f32(float %x, float %y) {
25 %a = fcmp ord float %x, %y
26 %b = zext i1 %a to i32
27 ret i32 %b
28}
29
Dan Gohmane51c0582015-10-06 00:27:55 +000030; CHECK-LABEL: uno_f32:
31; CHECK-NEXT: .param f32{{$}}
32; CHECK-NEXT: .param f32{{$}}
33; CHECK-NEXT: .result i32{{$}}
34; CHECK-NEXT: @0{{$}}
35; CHECK-NEXT: set_local @2, pop{{$}}
36; CHECK-NEXT: @1{{$}}
37; CHECK-NEXT: set_local @3, pop{{$}}
38; CHECK-NEXT: ne @3, @3{{$}}
39; CHECK-NEXT: set_local @4, pop{{$}}
40; CHECK-NEXT: ne @2, @2{{$}}
41; CHECK-NEXT: set_local @5, pop{{$}}
42; CHECK-NEXT: ior @5, @4{{$}}
43; CHECK-NEXT: set_local @6, pop{{$}}
44; CHECK-NEXT: return @6{{$}}
JF Bastien71d29ac2015-08-12 17:53:29 +000045define i32 @uno_f32(float %x, float %y) {
46 %a = fcmp uno float %x, %y
47 %b = zext i1 %a to i32
48 ret i32 %b
49}
JF Bastienda06bce2015-08-11 21:02:46 +000050
Dan Gohmane51c0582015-10-06 00:27:55 +000051; CHECK-LABEL: oeq_f32:
52; CHECK-NEXT: .param f32{{$}}
53; CHECK-NEXT: .param f32{{$}}
54; CHECK-NEXT: .result i32{{$}}
55; CHECK-NEXT: @1{{$}}
56; CHECK-NEXT: set_local @2, pop{{$}}
57; CHECK-NEXT: @0{{$}}
58; CHECK-NEXT: set_local @3, pop{{$}}
59; CHECK-NEXT: eq @3, @2{{$}}
60; CHECK-NEXT: set_local @4, pop{{$}}
61; CHECK-NEXT: return @4{{$}}
JF Bastienda06bce2015-08-11 21:02:46 +000062define i32 @oeq_f32(float %x, float %y) {
63 %a = fcmp oeq float %x, %y
64 %b = zext i1 %a to i32
65 ret i32 %b
66}
67
Dan Gohmane51c0582015-10-06 00:27:55 +000068; CHECK-LABEL: une_f32:
69; CHECK: ne @3, @2{{$}}
70; CHECK-NEXT: set_local @4, pop{{$}}
JF Bastienda06bce2015-08-11 21:02:46 +000071define i32 @une_f32(float %x, float %y) {
72 %a = fcmp une float %x, %y
73 %b = zext i1 %a to i32
74 ret i32 %b
75}
76
Dan Gohmane51c0582015-10-06 00:27:55 +000077; CHECK-LABEL: olt_f32:
78; CHECK: lt @3, @2{{$}}
79; CHECK-NEXT: set_local @4, pop{{$}}
JF Bastienda06bce2015-08-11 21:02:46 +000080define i32 @olt_f32(float %x, float %y) {
81 %a = fcmp olt float %x, %y
82 %b = zext i1 %a to i32
83 ret i32 %b
84}
85
Dan Gohmane51c0582015-10-06 00:27:55 +000086; CHECK-LABEL: ole_f32:
87; CHECK: le @3, @2{{$}}
88; CHECK-NEXT: set_local @4, pop{{$}}
JF Bastienda06bce2015-08-11 21:02:46 +000089define i32 @ole_f32(float %x, float %y) {
90 %a = fcmp ole float %x, %y
91 %b = zext i1 %a to i32
92 ret i32 %b
93}
94
Dan Gohmane51c0582015-10-06 00:27:55 +000095; CHECK-LABEL: ogt_f32:
96; CHECK: gt @3, @2{{$}}
97; CHECK-NEXT: set_local @4, pop{{$}}
JF Bastienda06bce2015-08-11 21:02:46 +000098define i32 @ogt_f32(float %x, float %y) {
99 %a = fcmp ogt float %x, %y
100 %b = zext i1 %a to i32
101 ret i32 %b
102}
103
Dan Gohmane51c0582015-10-06 00:27:55 +0000104; CHECK-LABEL: oge_f32:
105; CHECK: ge @3, @2{{$}}
106; CHECK-NEXT: set_local @4, pop{{$}}
JF Bastienda06bce2015-08-11 21:02:46 +0000107define i32 @oge_f32(float %x, float %y) {
108 %a = fcmp oge float %x, %y
109 %b = zext i1 %a to i32
110 ret i32 %b
111}
112
JF Bastien71d29ac2015-08-12 17:53:29 +0000113; Expanded comparisons, which also check for NaN.
114
Dan Gohmane51c0582015-10-06 00:27:55 +0000115; CHECK-LABEL: ueq_f32:
116; CHECK-NEXT: .param f32{{$}}
117; CHECK-NEXT: .param f32{{$}}
118; CHECK-NEXT: .result i32{{$}}
119; CHECK-NEXT: @1{{$}}
120; CHECK-NEXT: set_local @2, pop{{$}}
121; CHECK-NEXT: @0{{$}}
122; CHECK-NEXT: set_local @3, pop{{$}}
123; CHECK-NEXT: eq @3, @2{{$}}
124; CHECK-NEXT: set_local @4, pop{{$}}
125; CHECK-NEXT: ne @2, @2{{$}}
126; CHECK-NEXT: set_local @5, pop{{$}}
127; CHECK-NEXT: ne @3, @3{{$}}
128; CHECK-NEXT: set_local @6, pop{{$}}
129; CHECK-NEXT: ior @6, @5{{$}}
130; CHECK-NEXT: set_local @7, pop{{$}}
131; CHECK-NEXT: ior @4, @7{{$}}
132; CHECK-NEXT: set_local @8, pop{{$}}
133; CHECK-NEXT: return @8{{$}}
JF Bastien71d29ac2015-08-12 17:53:29 +0000134define i32 @ueq_f32(float %x, float %y) {
135 %a = fcmp ueq float %x, %y
136 %b = zext i1 %a to i32
137 ret i32 %b
138}
139
Dan Gohmane51c0582015-10-06 00:27:55 +0000140; CHECK-LABEL: one_f32:
141; CHECK: ne @3, @2{{$}}
142; CHECK-NEXT: set_local @4, pop{{$}}
JF Bastien71d29ac2015-08-12 17:53:29 +0000143define i32 @one_f32(float %x, float %y) {
144 %a = fcmp one float %x, %y
145 %b = zext i1 %a to i32
146 ret i32 %b
147}
148
Dan Gohmane51c0582015-10-06 00:27:55 +0000149; CHECK-LABEL: ult_f32:
150; CHECK: lt @3, @2{{$}}
151; CHECK-NEXT: set_local @4, pop{{$}}
JF Bastien71d29ac2015-08-12 17:53:29 +0000152define i32 @ult_f32(float %x, float %y) {
153 %a = fcmp ult float %x, %y
154 %b = zext i1 %a to i32
155 ret i32 %b
156}
157
Dan Gohmane51c0582015-10-06 00:27:55 +0000158; CHECK-LABEL: ule_f32:
159; CHECK: le @3, @2{{$}}
160; CHECK-NEXT: set_local @4, pop{{$}}
JF Bastien71d29ac2015-08-12 17:53:29 +0000161define i32 @ule_f32(float %x, float %y) {
162 %a = fcmp ule float %x, %y
163 %b = zext i1 %a to i32
164 ret i32 %b
165}
166
Dan Gohmane51c0582015-10-06 00:27:55 +0000167; CHECK-LABEL: ugt_f32:
168; CHECK: gt @3, @2{{$}}
169; CHECK-NEXT: set_local @4, pop{{$}}
JF Bastien71d29ac2015-08-12 17:53:29 +0000170define i32 @ugt_f32(float %x, float %y) {
171 %a = fcmp ugt float %x, %y
172 %b = zext i1 %a to i32
173 ret i32 %b
174}
175
Dan Gohmane51c0582015-10-06 00:27:55 +0000176; CHECK-LABEL: uge_f32:
177; CHECK: ge @3, @2{{$}}
178; CHECK-NEXT: set_local @4, pop{{$}}
JF Bastien71d29ac2015-08-12 17:53:29 +0000179define i32 @uge_f32(float %x, float %y) {
180 %a = fcmp uge float %x, %y
181 %b = zext i1 %a to i32
182 ret i32 %b
183}