Another attempt at getting the clang self-host to like my instcombine patch.
[oota-llvm.git] / test / Transforms / InstCombine / bit-checks.ll
1 ; This test makes sure that these instructions are properly eliminated.
2 ;
3 ; RUN: opt < %s -instcombine -S | \
4 ; RUN:    not grep {tobool}
5 ; END.
6 define i32 @main(i32 %argc, i8** %argv) nounwind ssp {
7 entry:
8   %and = and i32 %argc, 1                         ; <i32> [#uses=1]
9   %tobool = icmp ne i32 %and, 0                   ; <i1> [#uses=1]
10   %and2 = and i32 %argc, 2                        ; <i32> [#uses=1]
11   %tobool3 = icmp ne i32 %and2, 0                 ; <i1> [#uses=1]
12   %or.cond = and i1 %tobool, %tobool3             ; <i1> [#uses=1]
13   %retval.0 = select i1 %or.cond, i32 2, i32 1    ; <i32> [#uses=1]
14   ret i32 %retval.0
15 }
16
17 define i32 @main2(i32 %argc, i8** nocapture %argv) nounwind readnone ssp {
18 entry:
19   %and = and i32 %argc, 1                         ; <i32> [#uses=1]
20   %tobool = icmp eq i32 %and, 0                   ; <i1> [#uses=1]
21   %and2 = and i32 %argc, 2                        ; <i32> [#uses=1]
22   %tobool3 = icmp eq i32 %and2, 0                 ; <i1> [#uses=1]
23   %or.cond = or i1 %tobool, %tobool3              ; <i1> [#uses=1]
24   %storemerge = select i1 %or.cond, i32 0, i32 1  ; <i32> [#uses=1]
25   ret i32 %storemerge
26 }