1 ; RUN: opt < %s -instsimplify -S | FileCheck %s
2 target datalayout = "p:32:32"
4 define i1 @ptrtoint() {
7 %tmp = ptrtoint i8* %a to i32
8 %r = icmp eq i32 %tmp, 0
13 define i1 @zext(i32 %x) {
15 %e1 = zext i32 %x to i64
16 %e2 = zext i32 %x to i64
17 %r = icmp eq i64 %e1, %e2
22 define i1 @zext2(i1 %x) {
24 %e = zext i1 %x to i32
25 %c = icmp ne i32 %e, 0
33 %c = icmp ne i32 %e, 0
38 define i1 @sext(i32 %x) {
40 %e1 = sext i32 %x to i64
41 %e2 = sext i32 %x to i64
42 %r = icmp eq i64 %e1, %e2
47 define i1 @sext2(i1 %x) {
49 %e = sext i1 %x to i32
50 %c = icmp ne i32 %e, 0
58 %c = icmp ne i32 %e, 0
63 define i1 @add(i32 %x, i32 %y) {
69 %c = icmp eq i32 %s, 0
74 define i1 @add2(i8 %x, i8 %y) {
84 define i1 @add3(i8 %x, i8 %y) {
86 %l = zext i8 %x to i32
87 %r = zext i8 %y to i32
89 %c = icmp eq i32 %s, 0
94 define i1 @addpowtwo(i32 %x, i32 %y) {
99 %c = icmp eq i32 %s, 0
101 ; CHECK: ret i1 false
104 define i1 @or(i32 %x) {
107 %c = icmp eq i32 %o, 0
109 ; CHECK: ret i1 false
112 define i1 @shl(i32 %x) {
115 %c = icmp eq i32 %s, 0
117 ; CHECK: ret i1 false
120 define i1 @lshr(i32 %x) {
123 %c = icmp eq i32 %s, 0
125 ; CHECK: ret i1 false
128 define i1 @ashr(i32 %x) {
131 %c = icmp eq i32 %s, 0
133 ; CHECK: ret i1 false
136 define i1 @select1(i1 %cond) {
138 %s = select i1 %cond, i32 1, i32 0
139 %c = icmp eq i32 %s, 1
141 ; CHECK: ret i1 %cond
144 define i1 @select2(i1 %cond) {
146 %x = zext i1 %cond to i32
147 %s = select i1 %cond, i32 %x, i32 0
148 %c = icmp ne i32 %s, 0
150 ; CHECK: ret i1 %cond
153 define i1 @select3(i1 %cond) {
155 %x = zext i1 %cond to i32
156 %s = select i1 %cond, i32 1, i32 %x
157 %c = icmp ne i32 %s, 0
159 ; CHECK: ret i1 %cond
162 define i1 @select4(i1 %cond) {
164 %invert = xor i1 %cond, 1
165 %s = select i1 %invert, i32 0, i32 1
166 %c = icmp ne i32 %s, 0
168 ; CHECK: ret i1 %cond