blob: f8c06768453da0eda9a6271a9e567c9d3fc6702b [file] [log] [blame]
Chris Lattner64ffd112010-02-05 19:53:02 +00001; RUN: opt < %s -instcombine -S | FileCheck %s
2
Dan Gohman2c34c132008-10-28 22:38:57 +00003
4define 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
Chris Lattner1b35bbe2010-01-24 00:09:49 +000012; CHECK: %e = icmp slt i32 %a, %b
Bill Wendling23242092013-02-16 23:41:36 +000013; CHECK-NEXT: [[result:%.*]] = select i1 %e, i32 %c, i32 %d
14; CHECK-NEXT: ret i32 [[result]]
Dan Gohman2c34c132008-10-28 22:38:57 +000015}
16define 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
Chris Lattner1b35bbe2010-01-24 00:09:49 +000024; CHECK: %e = icmp slt i32 %a, %b
Bill Wendling23242092013-02-16 23:41:36 +000025; CHECK-NEXT: [[result:%.*]] = select i1 %e, i32 %c, i32 %d
26; CHECK-NEXT: ret i32 [[result]]
Dan Gohman2c34c132008-10-28 22:38:57 +000027}
Chris Lattner64ffd112010-02-05 19:53:02 +000028
Dan Gohman13cbcf1c182008-10-30 20:40:10 +000029define i32 @goo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
30entry:
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
Chris Lattner1b35bbe2010-01-24 00:09:49 +000038; CHECK: %0 = icmp slt i32 %a, %b
Bill Wendling23242092013-02-16 23:41:36 +000039; CHECK-NEXT: [[result:%.*]] = select i1 %0, i32 %c, i32 %d
40; CHECK-NEXT: ret i32 [[result]]
Dan Gohman13cbcf1c182008-10-30 20:40:10 +000041}
Chris Lattnerc3f3b052008-11-16 04:25:26 +000042define i32 @poo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
43entry:
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
Chris Lattner1b35bbe2010-01-24 00:09:49 +000051; CHECK: %0 = icmp slt i32 %a, %b
Bill Wendling23242092013-02-16 23:41:36 +000052; CHECK-NEXT: [[result:%.*]] = select i1 %0, i32 %c, i32 %d
53; CHECK-NEXT: ret i32 [[result]]
Chris Lattnerc3f3b052008-11-16 04:25:26 +000054}
55
Dan Gohman13cbcf1c182008-10-30 20:40:10 +000056define i32 @par(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
57entry:
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
Chris Lattner1b35bbe2010-01-24 00:09:49 +000065; CHECK: %0 = icmp slt i32 %a, %b
Bill Wendling23242092013-02-16 23:41:36 +000066; CHECK-NEXT: [[result:%.*]] = select i1 %0, i32 %c, i32 %d
67; CHECK-NEXT: ret i32 [[result]]
Dan Gohman13cbcf1c182008-10-30 20:40:10 +000068}