When removing a function from the function set and adding it to deferred, we
[llvm.git] / test / Transforms / InstSimplify / 2011-01-18-Compare.ll
blobe08ee2c6fb5e2f5e00b4f8d0ed3a0d8e73ad3ed2
1 ; RUN: opt < %s -instsimplify -S | FileCheck %s
2 target datalayout = "p:32:32"
4 define i1 @ptrtoint() {
5 ; CHECK: @ptrtoint
6   %a = alloca i8
7   %tmp = ptrtoint i8* %a to i32
8   %r = icmp eq i32 %tmp, 0
9   ret i1 %r
10 ; CHECK: ret i1 false
13 define i1 @zext(i32 %x) {
14 ; CHECK: @zext
15   %e1 = zext i32 %x to i64
16   %e2 = zext i32 %x to i64
17   %r = icmp eq i64 %e1, %e2
18   ret i1 %r
19 ; CHECK: ret i1 true
22 define i1 @zext2(i1 %x) {
23 ; CHECK: @zext2
24   %e = zext i1 %x to i32
25   %c = icmp ne i32 %e, 0
26   ret i1 %c
27 ; CHECK: ret i1 %x
30 define i1 @zext3() {
31 ; CHECK: @zext3
32   %e = zext i1 1 to i32
33   %c = icmp ne i32 %e, 0
34   ret i1 %c
35 ; CHECK: ret i1 true
38 define i1 @sext(i32 %x) {
39 ; CHECK: @sext
40   %e1 = sext i32 %x to i64
41   %e2 = sext i32 %x to i64
42   %r = icmp eq i64 %e1, %e2
43   ret i1 %r
44 ; CHECK: ret i1 true
47 define i1 @sext2(i1 %x) {
48 ; CHECK: @sext2
49   %e = sext i1 %x to i32
50   %c = icmp ne i32 %e, 0
51   ret i1 %c
52 ; CHECK: ret i1 %x
55 define i1 @sext3() {
56 ; CHECK: @sext3
57   %e = sext i1 1 to i32
58   %c = icmp ne i32 %e, 0
59   ret i1 %c
60 ; CHECK: ret i1 true
63 define i1 @add(i32 %x, i32 %y) {
64 ; CHECK: @add
65   %l = lshr i32 %x, 1
66   %q = lshr i32 %y, 1
67   %r = or i32 %q, 1
68   %s = add i32 %l, %r
69   %c = icmp eq i32 %s, 0
70   ret i1 %c
71 ; CHECK: ret i1 false
74 define i1 @add2(i8 %x, i8 %y) {
75 ; CHECK: @add2
76   %l = or i8 %x, 128
77   %r = or i8 %y, 129
78   %s = add i8 %l, %r
79   %c = icmp eq i8 %s, 0
80   ret i1 %c
81 ; CHECK: ret i1 false
84 define i1 @add3(i8 %x, i8 %y) {
85 ; CHECK: @add3
86   %l = zext i8 %x to i32
87   %r = zext i8 %y to i32
88   %s = add i32 %l, %r
89   %c = icmp eq i32 %s, 0
90   ret i1 %c
91 ; CHECK: ret i1 %c
94 define i1 @addpowtwo(i32 %x, i32 %y) {
95 ; CHECK: @addpowtwo
96   %l = lshr i32 %x, 1
97   %r = shl i32 1, %y
98   %s = add i32 %l, %r
99   %c = icmp eq i32 %s, 0
100   ret i1 %c
101 ; CHECK: ret i1 false
104 define i1 @or(i32 %x) {
105 ; CHECK: @or
106   %o = or i32 %x, 1
107   %c = icmp eq i32 %o, 0
108   ret i1 %c
109 ; CHECK: ret i1 false
112 define i1 @shl(i32 %x) {
113 ; CHECK: @shl
114   %s = shl i32 1, %x
115   %c = icmp eq i32 %s, 0
116   ret i1 %c
117 ; CHECK: ret i1 false
120 define i1 @lshr(i32 %x) {
121 ; CHECK: @lshr
122   %s = lshr i32 -1, %x
123   %c = icmp eq i32 %s, 0
124   ret i1 %c
125 ; CHECK: ret i1 false
128 define i1 @ashr(i32 %x) {
129 ; CHECK: @ashr
130   %s = ashr i32 -1, %x
131   %c = icmp eq i32 %s, 0
132   ret i1 %c
133 ; CHECK: ret i1 false
136 define i1 @select1(i1 %cond) {
137 ; CHECK: @select1
138   %s = select i1 %cond, i32 1, i32 0
139   %c = icmp eq i32 %s, 1
140   ret i1 %c
141 ; CHECK: ret i1 %cond
144 define i1 @select2(i1 %cond) {
145 ; CHECK: @select2
146   %x = zext i1 %cond to i32
147   %s = select i1 %cond, i32 %x, i32 0
148   %c = icmp ne i32 %s, 0
149   ret i1 %c
150 ; CHECK: ret i1 %cond
153 define i1 @select3(i1 %cond) {
154 ; CHECK: @select3
155   %x = zext i1 %cond to i32
156   %s = select i1 %cond, i32 1, i32 %x
157   %c = icmp ne i32 %s, 0
158   ret i1 %c
159 ; CHECK: ret i1 %cond
162 define i1 @select4(i1 %cond) {
163 ; CHECK: @select4
164   %invert = xor i1 %cond, 1
165   %s = select i1 %invert, i32 0, i32 1
166   %c = icmp ne i32 %s, 0
167   ret i1 %c
168 ; CHECK: ret i1 %cond