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
12 ; CHECK: %e = icmp slt i32 %a, %b
13 ; CHECK: %j = select i1 %e, i32 %c, i32 %d
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
24 ; CHECK: %e = icmp slt i32 %a, %b
25 ; CHECK: %j = select i1 %e, i32 %c, i32 %d
29 define i32 @goo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
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
38 ; CHECK: %0 = icmp slt i32 %a, %b
39 ; CHECK: %1 = select i1 %0, i32 %c, i32 %d
42 define i32 @poo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
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
51 ; CHECK: %0 = icmp slt i32 %a, %b
52 ; CHECK: %1 = select i1 %0, i32 %c, i32 %d
56 define i32 @par(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
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
65 ; CHECK: %0 = icmp slt i32 %a, %b
66 ; CHECK: %1 = select i1 %0, i32 %c, i32 %d