Make gcc generate assembly files (%.ll) until Chris has a stable
[oota-llvm.git] / test / ackermann.ll
1 %__intern_LC0 = global [sbyte] c"Ack(3, \00"
2 %__intern_LC1 = global [sbyte] c") = \00"
3 %__intern_LC2 = global [sbyte] c"\0A\00"                ; <[15 x sbyte] *>      [#uses=1]
4 implementation
5
6 declare void "__main"()
7
8 declare void "printVal"([sbyte] *)
9 declare void "printVal"(int)
10
11 declare int "atoi"(sbyte *)
12
13 int "main"(int %argc, sbyte * * %argv)
14 begin
15 bb1:                                    ;[#uses=1]
16         call void () * %__main( )
17         %cond1002 = setne int %argc, 2          ; <bool>        [#uses=1]
18         br bool %cond1002, label %bb4, label %bb2
19
20 bb2:                                    ;[#uses=2]
21         %cast1010 = cast ulong 8 to sbyte * *           ; <sbyte * *>   [#uses=1]
22         %reg1003 = add sbyte * * %argv, %cast1010               ; <sbyte * *>   [#uses=1]
23         %reg110 = load sbyte * * %reg1003               ; <sbyte *>     [#uses=1]
24         %reg109 = call int (sbyte *) * %atoi( sbyte * %reg110 )         ; <int> [#uses=1]
25         br label %bb4
26
27 bb4:                                    ;[#uses=2]
28         %reg132 = phi int [ %reg109, %bb2 ], [ 5, %bb1 ]                ; <int> [#uses=4]
29         %cond1004 = setne ulong 3, 0            ; <bool>        [#uses=1]
30         br bool %cond1004, label %bb6, label %bb5
31
32 bb5:                                    ;[#uses=2]
33         %reg115 = add int %reg132, 1            ; <int> [#uses=1]
34         br label %bb9
35
36 bb6:                                    ;[#uses=1]
37         %cond1005 = setne int %reg132, 0                ; <bool>        [#uses=1]
38         br bool %cond1005, label %bb8, label %bb7
39
40 bb7:                                    ;[#uses=2]
41         %cast1006 = cast ulong 1 to int         ; <int> [#uses=1]
42         %cast1007 = cast ulong 2 to int         ; <int> [#uses=1]
43         %reg119 = call int (int, int) * %Ack( int %cast1007, int %cast1006 )            ; <int> [#uses=1]
44         br label %bb9
45
46 bb8:                                    ;[#uses=2]
47         %reg121 = add int %reg132, -1           ; <int> [#uses=1]
48         %cast1008 = cast ulong 3 to int         ; <int> [#uses=1]
49         %reg122 = call int (int, int) * %Ack( int %cast1008, int %reg121 )              ; <int> [#uses=1]
50         %cast1009 = cast ulong 2 to int         ; <int> [#uses=1]
51         %reg124 = call int (int, int) * %Ack( int %cast1009, int %reg122 )              ; <int> [#uses=1]
52         br label %bb9
53
54 bb9:                                    ;[#uses=3]
55         %reg135 = phi int [ %reg124, %bb8 ], [ %reg119, %bb7 ], [ %reg115, %bb5 ]               ; <int> [#uses=1]
56         call void %printVal([sbyte] *%__intern_LC0)
57         call void %printVal(int %reg132)
58         call void %printVal([sbyte] *%__intern_LC1)
59         call void %printVal(int %reg135)
60         call void %printVal([sbyte] *%__intern_LC2)
61         ret int 0
62 end
63
64 int "Ack"(int %M, int %N)
65 begin
66 bb1:                                    ;[#uses=2]
67         br label %bb2
68
69 bb2:                                    ;[#uses=3]
70         %reg121 = phi int [ %reg117, %bb6 ], [ 1, %bb5 ], [ %N, %bb1 ]          ; <int> [#uses=3]
71         %reg122 = phi int [ %reg115, %bb6 ], [ %reg123, %bb5 ], [ %M, %bb1 ]            ; <int> [#uses=4]
72         %cond1000 = setne int %reg122, 0                ; <bool>        [#uses=1]
73         br bool %cond1000, label %bb4, label %bb3
74
75 bb3:                                    ;[#uses=1]
76         %reg109 = add int %reg121, 1            ; <int> [#uses=1]
77         ret int %reg109
78
79 bb4:                                    ;[#uses=1]
80         %cond1001 = setne int %reg121, 0                ; <bool>        [#uses=1]
81         br bool %cond1001, label %bb6, label %bb5
82
83 bb5:                                    ;[#uses=3]
84         %reg123 = add int %reg122, -1           ; <int> [#uses=1]
85         br label %bb2
86
87 bb6:                                    ;[#uses=3]
88         %reg115 = add int %reg122, -1           ; <int> [#uses=1]
89         %reg116 = add int %reg121, -1           ; <int> [#uses=1]
90         %reg117 = call int (int, int) * %Ack( int %reg122, int %reg116 )                ; <int> [#uses=1]
91         br label %bb2
92 end