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-NEXT: %g = select i1 %e, i32 %c, i32 0
14 ; CHECK-NEXT: %i = select i1 %e, i32 0, i32 %d
15 ; CHECK-NEXT: %j = or i32 %g, %i
16 ; CHECK-NEXT: ret i32 %j
18 define i32 @bar(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
19 %e = icmp slt i32 %a, %b
20 %f = sext i1 %e to i32
26 ; CHECK: %e = icmp slt i32 %a, %b
27 ; CHECK-NEXT: %g = select i1 %e, i32 %c, i32 0
28 ; CHECK-NEXT: %i = select i1 %e, i32 0, i32 %d
29 ; CHECK-NEXT: %j = or i32 %i, %g
30 ; CHECK-NEXT: ret i32 %j
33 define i32 @goo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
35 %0 = icmp slt i32 %a, %b
36 %iftmp.0.0 = select i1 %0, i32 -1, i32 0
37 %1 = and i32 %iftmp.0.0, %c
38 %not = xor i32 %iftmp.0.0, -1
42 ; CHECK: %0 = icmp slt i32 %a, %b
43 ; CHECK-NEXT: %1 = select i1 %0, i32 %c, i32 0
44 ; CHECK-NEXT: %2 = select i1 %0, i32 0, i32 %d
45 ; CHECK-NEXT: %3 = or i32 %1, %2
46 ; CHECK-NEXT: ret i32 %3
48 define i32 @poo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
50 %0 = icmp slt i32 %a, %b
51 %iftmp.0.0 = select i1 %0, i32 -1, i32 0
52 %1 = and i32 %iftmp.0.0, %c
53 %iftmp = select i1 %0, i32 0, i32 -1
54 %2 = and i32 %iftmp, %d
57 ; CHECK: %0 = icmp slt i32 %a, %b
58 ; CHECK-NEXT: %1 = select i1 %0, i32 %c, i32 0
59 ; CHECK-NEXT: %2 = select i1 %0, i32 0, i32 %d
60 ; CHECK-NEXT: %3 = or i32 %1, %2
61 ; CHECK-NEXT: ret i32 %3
64 define i32 @par(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
66 %0 = icmp slt i32 %a, %b
67 %iftmp.1.0 = select i1 %0, i32 -1, i32 0
68 %1 = and i32 %iftmp.1.0, %c
69 %not = xor i32 %iftmp.1.0, -1
73 ; CHECK: %0 = icmp slt i32 %a, %b
74 ; CHECK-NEXT: %1 = select i1 %0, i32 %c, i32 0
75 ; CHECK-NEXT: %2 = select i1 %0, i32 0, i32 %d
76 ; CHECK-NEXT: %3 = or i32 %1, %2
77 ; CHECK-NEXT: ret i32 %3