fix a globalopt crash on two Adobe-C++ testcases that the recent
[llvm.git] / test / Transforms / InstCombine / logical-select.ll
blobbb59817a4f6985e62e26e35ea36daeba3f03ea80
1 ; RUN: opt < %s -instcombine -S | FileCheck %s
4 define i32 @foo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
5   %e = icmp slt i32 %a, %b
6   %f = sext i1 %e to i32
7   %g = and i32 %c, %f
8   %h = xor i32 %f, -1
9   %i = and i32 %d, %h
10   %j = or i32 %g, %i
11   ret i32 %j
12 ; CHECK: %e = icmp slt i32 %a, %b
13 ; CHECK: %j = select i1 %e, i32 %c, i32 %d
14 ; CHECK: ret i32 %j
16 define i32 @bar(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
17   %e = icmp slt i32 %a, %b
18   %f = sext i1 %e to i32
19   %g = and i32 %c, %f
20   %h = xor i32 %f, -1
21   %i = and i32 %d, %h
22   %j = or i32 %i, %g
23   ret i32 %j
24 ; CHECK: %e = icmp slt i32 %a, %b
25 ; CHECK: %j = select i1 %e, i32 %c, i32 %d
26 ; CHECK: ret i32 %j
29 define i32 @goo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
30 entry:
31   %0 = icmp slt i32 %a, %b
32   %iftmp.0.0 = select i1 %0, i32 -1, i32 0
33   %1 = and i32 %iftmp.0.0, %c
34   %not = xor i32 %iftmp.0.0, -1
35   %2 = and i32 %not, %d
36   %3 = or i32 %1, %2
37   ret i32 %3
38 ; CHECK: %0 = icmp slt i32 %a, %b
39 ; CHECK: %1 = select i1 %0, i32 %c, i32 %d
40 ; CHECK: ret i32 %1
42 define i32 @poo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
43 entry:
44   %0 = icmp slt i32 %a, %b
45   %iftmp.0.0 = select i1 %0, i32 -1, i32 0
46   %1 = and i32 %iftmp.0.0, %c
47   %iftmp = select i1 %0, i32 0, i32 -1
48   %2 = and i32 %iftmp, %d
49   %3 = or i32 %1, %2
50   ret i32 %3
51 ; CHECK: %0 = icmp slt i32 %a, %b
52 ; CHECK: %1 = select i1 %0, i32 %c, i32 %d
53 ; CHECK: ret i32 %1
56 define i32 @par(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
57 entry:
58   %0 = icmp slt i32 %a, %b
59   %iftmp.1.0 = select i1 %0, i32 -1, i32 0
60   %1 = and i32 %iftmp.1.0, %c
61   %not = xor i32 %iftmp.1.0, -1
62   %2 = and i32 %not, %d
63   %3 = or i32 %1, %2
64   ret i32 %3
65 ; CHECK: %0 = icmp slt i32 %a, %b
66 ; CHECK: %1 = select i1 %0, i32 %c, i32 %d
67 ; CHECK: ret i32 %1