blob: a398307f869e92663aaa96c487c2d9d129f83e57 [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
Benjamin Kramerbc2724f2012-10-02 15:49:34 +000013; CHECK-NOT: 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}
Benjamin Kramere89c7052013-04-12 21:56:23 +000080
81; PR15737
82define i1 @t8(float %a, double %b) {
83 %cmp = fcmp ord float %a, 0.000000e+00
84 %cmp1 = fcmp ord double %b, 0.000000e+00
85 %and = and i1 %cmp, %cmp1
86 ret i1 %and
87; CHECK: t8
88; CHECK: fcmp ord
89; CHECK: fcmp ord
90}
91
92define <2 x i1> @t9(<2 x float> %a, <2 x double> %b) {
93 %cmp = fcmp ord <2 x float> %a, zeroinitializer
94 %cmp1 = fcmp ord <2 x double> %b, zeroinitializer
95 %and = and <2 x i1> %cmp, %cmp1
96 ret <2 x i1> %and
97; CHECK: t9
98; CHECK: fcmp ord
99; CHECK: fcmp ord
100}