Check in new testcase based on .c file. Adapted to run with lli
authorChris Lattner <sabre@nondot.org>
Thu, 18 Oct 2001 21:55:07 +0000 (21:55 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 18 Oct 2001 21:55:07 +0000 (21:55 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@908 91177308-0d34-0410-b5e6-96231b3b80d8

test/ackermann.c [new file with mode: 0644]
test/ackermann.ll [new file with mode: 0644]

diff --git a/test/ackermann.c b/test/ackermann.c
new file mode 100644 (file)
index 0000000..5e1bd48
--- /dev/null
@@ -0,0 +1,23 @@
+/* -*- mode: c -*-
+ * $Id$
+ * http://www.bagley.org/~doug/shootout/
+ */
+
+int printf(const char *, int, int);
+int atoi(const char *);
+
+int 
+Ack(int M, int N) {
+    if (M == 0) return( N + 1 );
+    if (N == 0) return( Ack(M - 1, 1) );
+    return( Ack(M - 1, Ack(M, (N - 1))) );
+}
+
+int
+main(int argc, char *argv[]) {
+    int n = ((argc == 2) ? atoi(argv[1]) : 5);
+
+    printf("Ack(3,%d): %d\n", n, Ack(3, n));
+    return(0);
+}
+
diff --git a/test/ackermann.ll b/test/ackermann.ll
new file mode 100644 (file)
index 0000000..508b586
--- /dev/null
@@ -0,0 +1,92 @@
+%__intern_LC0 = global [sbyte] c"Ack(3, \00"
+%__intern_LC1 = global [sbyte] c") = \00"
+%__intern_LC2 = global [sbyte] c"\0A\00"               ; <[15 x sbyte] *>      [#uses=1]
+implementation
+
+declare void "__main"()
+
+declare void "printVal"([sbyte] *)
+declare void "printVal"(int)
+
+declare int "atoi"(sbyte *)
+
+int "main"(int %argc, sbyte * * %argv)
+begin
+bb1:                                   ;[#uses=1]
+       call void () * %__main( )
+       %cond1002 = setne int %argc, 2          ; <bool>        [#uses=1]
+       br bool %cond1002, label %bb4, label %bb2
+
+bb2:                                   ;[#uses=2]
+       %cast1010 = cast ulong 8 to sbyte * *           ; <sbyte * *>   [#uses=1]
+       %reg1003 = add sbyte * * %argv, %cast1010               ; <sbyte * *>   [#uses=1]
+       %reg110 = load sbyte * * %reg1003               ; <sbyte *>     [#uses=1]
+       %reg109 = call int (sbyte *) * %atoi( sbyte * %reg110 )         ; <int> [#uses=1]
+       br label %bb4
+
+bb4:                                   ;[#uses=2]
+       %reg132 = phi int [ %reg109, %bb2 ], [ 5, %bb1 ]                ; <int> [#uses=4]
+       %cond1004 = setne ulong 3, 0            ; <bool>        [#uses=1]
+       br bool %cond1004, label %bb6, label %bb5
+
+bb5:                                   ;[#uses=2]
+       %reg115 = add int %reg132, 1            ; <int> [#uses=1]
+       br label %bb9
+
+bb6:                                   ;[#uses=1]
+       %cond1005 = setne int %reg132, 0                ; <bool>        [#uses=1]
+       br bool %cond1005, label %bb8, label %bb7
+
+bb7:                                   ;[#uses=2]
+       %cast1006 = cast ulong 1 to int         ; <int> [#uses=1]
+       %cast1007 = cast ulong 2 to int         ; <int> [#uses=1]
+       %reg119 = call int (int, int) * %Ack( int %cast1007, int %cast1006 )            ; <int> [#uses=1]
+       br label %bb9
+
+bb8:                                   ;[#uses=2]
+       %reg121 = add int %reg132, -1           ; <int> [#uses=1]
+       %cast1008 = cast ulong 3 to int         ; <int> [#uses=1]
+       %reg122 = call int (int, int) * %Ack( int %cast1008, int %reg121 )              ; <int> [#uses=1]
+       %cast1009 = cast ulong 2 to int         ; <int> [#uses=1]
+       %reg124 = call int (int, int) * %Ack( int %cast1009, int %reg122 )              ; <int> [#uses=1]
+       br label %bb9
+
+bb9:                                   ;[#uses=3]
+       %reg135 = phi int [ %reg124, %bb8 ], [ %reg119, %bb7 ], [ %reg115, %bb5 ]               ; <int> [#uses=1]
+       call void %printVal([sbyte] *%__intern_LC0)
+       call void %printVal(int %reg132)
+       call void %printVal([sbyte] *%__intern_LC1)
+       call void %printVal(int %reg135)
+       call void %printVal([sbyte] *%__intern_LC2)
+       ret int 0
+end
+
+int "Ack"(int %M, int %N)
+begin
+bb1:                                   ;[#uses=2]
+       br label %bb2
+
+bb2:                                   ;[#uses=3]
+       %reg121 = phi int [ %reg117, %bb6 ], [ 1, %bb5 ], [ %N, %bb1 ]          ; <int> [#uses=3]
+       %reg122 = phi int [ %reg115, %bb6 ], [ %reg123, %bb5 ], [ %M, %bb1 ]            ; <int> [#uses=4]
+       %cond1000 = setne int %reg122, 0                ; <bool>        [#uses=1]
+       br bool %cond1000, label %bb4, label %bb3
+
+bb3:                                   ;[#uses=1]
+       %reg109 = add int %reg121, 1            ; <int> [#uses=1]
+       ret int %reg109
+
+bb4:                                   ;[#uses=1]
+       %cond1001 = setne int %reg121, 0                ; <bool>        [#uses=1]
+       br bool %cond1001, label %bb6, label %bb5
+
+bb5:                                   ;[#uses=3]
+       %reg123 = add int %reg122, -1           ; <int> [#uses=1]
+       br label %bb2
+
+bb6:                                   ;[#uses=3]
+       %reg115 = add int %reg122, -1           ; <int> [#uses=1]
+       %reg116 = add int %reg121, -1           ; <int> [#uses=1]
+       %reg117 = call int (int, int) * %Ack( int %reg122, int %reg116 )                ; <int> [#uses=1]
+       br label %bb2
+end