blob: 87dfdda910b26e94f21f95dde96e927b241d017c [file] [log] [blame]
Duncan Sands566edb02010-12-21 08:49:00 +00001; RUN: opt < %s -instsimplify -S | FileCheck %s
2
3define i32 @add1(i32 %x) {
4; CHECK: @add1
5; (X + -1) + 1 -> X
6 %l = add i32 %x, -1
7 %r = add i32 %l, 1
8 ret i32 %r
9; CHECK: ret i32 %x
10}
11
12define i32 @and1(i32 %x, i32 %y) {
13; CHECK: @and1
14; (X & Y) & X -> X & Y
15 %l = and i32 %x, %y
16 %r = and i32 %l, %x
17 ret i32 %r
18; CHECK: ret i32 %l
19}
20
21define i32 @and2(i32 %x, i32 %y) {
22; CHECK: @and2
23; X & (X & Y) -> X & Y
24 %r = and i32 %x, %y
25 %l = and i32 %x, %r
26 ret i32 %l
27; CHECK: ret i32 %r
28}
29
30define i32 @or1(i32 %x, i32 %y) {
31; CHECK: @or1
32; (X | Y) | X -> X | Y
33 %l = or i32 %x, %y
34 %r = or i32 %l, %x
35 ret i32 %r
36; CHECK: ret i32 %l
37}
38
39define i32 @or2(i32 %x, i32 %y) {
40; CHECK: @or2
41; X | (X | Y) -> X | Y
42 %r = or i32 %x, %y
43 %l = or i32 %x, %r
44 ret i32 %l
45; CHECK: ret i32 %r
46}
47
48define i32 @xor1(i32 %x, i32 %y) {
49; CHECK: @xor1
50; (X ^ Y) ^ X = Y
51 %l = xor i32 %x, %y
52 %r = xor i32 %l, %x
53 ret i32 %r
54; CHECK: ret i32 %y
55}
56
57define i32 @xor2(i32 %x, i32 %y) {
58; CHECK: @xor2
59; X ^ (X ^ Y) = Y
60 %r = xor i32 %x, %y
61 %l = xor i32 %x, %r
62 ret i32 %l
63; CHECK: ret i32 %y
64}