blob: 838c2f73fb910c3b91d540a10fae6f7ef53a4b63 [file] [log] [blame]
Chad Rosier1de1b542012-06-06 01:38:32 +00001; RUN: opt < %s -instcombine -S | FileCheck %s
Evan Cheng67786cc2008-10-14 17:15:11 +00002
3define zeroext i8 @t1(float %x, float %y) nounwind {
4 %a = fcmp ueq float %x, %y
5 %b = fcmp ord float %x, %y
6 %c = and i1 %a, %b
7 %retval = zext i1 %c to i8
8 ret i8 %retval
Chad Rosier1de1b542012-06-06 01:38:32 +00009; CHECK: t1
10; CHECK: fcmp oeq float %x, %y
11; CHECK-NOT: fcmp ueq float %x, %y
12; CHECK-NOT: fcmp ord float %x, %y
13; CHECK-NOW: and
Evan Cheng67786cc2008-10-14 17:15:11 +000014}
15
16define zeroext i8 @t2(float %x, float %y) nounwind {
17 %a = fcmp olt float %x, %y
18 %b = fcmp ord float %x, %y
19 %c = and i1 %a, %b
20 %retval = zext i1 %c to i8
21 ret i8 %retval
Chad Rosier1de1b542012-06-06 01:38:32 +000022; CHECK: t2
23; CHECK: fcmp olt float %x, %y
Chad Rosier1de1b542012-06-06 01:38:32 +000024; CHECK-NOT: fcmp ord float %x, %y
25; CHECK-NOT: and
Evan Cheng67786cc2008-10-14 17:15:11 +000026}
27
28define zeroext i8 @t3(float %x, float %y) nounwind {
29 %a = fcmp oge float %x, %y
30 %b = fcmp uno float %x, %y
31 %c = and i1 %a, %b
32 %retval = zext i1 %c to i8
33 ret i8 %retval
Chad Rosier1de1b542012-06-06 01:38:32 +000034; CHECK: t3
35; CHECK: ret i8 0
Evan Cheng67786cc2008-10-14 17:15:11 +000036}
Evan Chengce707522008-10-14 18:13:38 +000037
38define zeroext i8 @t4(float %x, float %y) nounwind {
39 %a = fcmp one float %y, %x
40 %b = fcmp ord float %x, %y
41 %c = and i1 %a, %b
42 %retval = zext i1 %c to i8
43 ret i8 %retval
Chad Rosier1de1b542012-06-06 01:38:32 +000044; CHECK: t4
45; CHECK: fcmp one float %y, %x
Chad Rosier1de1b542012-06-06 01:38:32 +000046; CHECK-NOT: fcmp ord float %x, %y
47; CHECK-NOT: and
Evan Chengce707522008-10-14 18:13:38 +000048}
Chad Rosier280e5df2012-06-06 02:12:17 +000049
50define zeroext i8 @t5(float %x, float %y) nounwind {
51 %a = fcmp ord float %x, %y
52 %b = fcmp uno float %x, %y
53 %c = and i1 %a, %b
54 %retval = zext i1 %c to i8
55 ret i8 %retval
56; CHECK: t5
57; CHECK: ret i8 0
58}
Chad Rosierfaa38942012-06-06 17:22:40 +000059
60define zeroext i8 @t6(float %x, float %y) nounwind {
61 %a = fcmp uno float %x, %y
62 %b = fcmp ord float %x, %y
63 %c = and i1 %a, %b
64 %retval = zext i1 %c to i8
65 ret i8 %retval
66; CHECK: t6
67; CHECK: ret i8 0
68}
Manman Renc2bc2d12012-06-14 05:57:42 +000069
70define zeroext i8 @t7(float %x, float %y) nounwind {
71 %a = fcmp uno float %x, %y
72 %b = fcmp ult float %x, %y
73 %c = and i1 %a, %b
74 %retval = zext i1 %c to i8
75 ret i8 %retval
76; CHECK: t7
77; CHECK: fcmp uno
78; CHECK-NOT: fcmp ult
79}