IPO: Add use-list-order verifier
[oota-llvm.git] / test / Bitcode / use-list-order.ll
1 ; RUN: opt -S < %s -preserve-bc-use-list-order -verify-use-list-order
2 ; XFAIL: *
3
4 @a = global [4 x i1] [i1 0, i1 1, i1 0, i1 1]
5 @b = alias i1* getelementptr ([4 x i1]* @a, i64 0, i64 2)
6
7 define i64 @f(i64 %f) {
8 entry:
9   %sum = add i64 %f, 0
10   ret i64 %sum
11 }
12
13 define i64 @g(i64 %g) {
14 entry:
15   %sum = add i64 %g, 0
16   ret i64 %sum
17 }
18
19 define i64 @h(i64 %h) {
20 entry:
21   %sum = add i64 %h, 0
22   ret i64 %sum
23 }
24
25 define i64 @i(i64 %i) {
26 entry:
27   %sum = add i64 %i, 1
28   ret i64 %sum
29 }
30
31 define i64 @j(i64 %j) {
32 entry:
33   %sum = add i64 %j, 1
34   ret i64 %sum
35 }
36
37 define i64 @k(i64 %k) {
38 entry:
39   %sum = add i64 %k, 1
40   ret i64 %sum
41 }
42
43 define i64 @l(i64 %l) {
44 entry:
45   %sum = add i64 %l, 1
46   ret i64 %sum
47 }
48
49 define i1 @loadb() {
50 entry:
51   %b = load i1* @b
52   ret i1 %b
53 }
54
55 define i1 @loada() {
56 entry:
57   %a = load i1* getelementptr ([4 x i1]* @a, i64 0, i64 2)
58   ret i1 %a
59 }
60
61 define i32 @f32(i32 %a, i32 %b, i32 %c, i32 %d) {
62 entry:
63   br label %first
64
65 second:
66   %eh = mul i32 %e, %h
67   %sum = add i32 %eh, %ef
68   br label %exit
69
70 exit:
71   %product = phi i32 [%ef, %first], [%sum, %second]
72   ret i32 %product
73
74 first:
75   %e = add i32 %a, 7
76   %f = add i32 %b, 7
77   %g = add i32 %c, 8
78   %h = add i32 %d, 8
79   %ef = mul i32 %e, %f
80   %gh = mul i32 %g, %h
81   %gotosecond = icmp slt i32 %gh, -9
82   br i1 %gotosecond, label %second, label %exit
83 }