blob: 6d81174d6e08d95483332a557799f89cd1f0e2c4 [file] [log] [blame]
Vikram S. Adveffcaa7b2001-10-28 21:16:34 +00001%FmtString1 = constant [ubyte] c"fib = \00"
2%FmtString2 = constant [ubyte] c"\0A\00"
Chris Lattner00950542001-06-06 20:29:01 +00003
Chris Lattner98af6692001-09-01 01:47:52 +00004declare int "atoi"(sbyte *)
Vikram S. Adveffcaa7b2001-10-28 21:16:34 +00005declare void "printInt"(int)
6declare void "printString"([ubyte]*)
7
8implementation
Chris Lattner98af6692001-09-01 01:47:52 +00009
Chris Lattner00950542001-06-06 20:29:01 +000010ulong "fib"(ulong %n)
11begin
12 setlt ulong %n, 2 ; {bool}:0
13 br bool %0, label %BaseCase, label %RecurseCase
14
15BaseCase:
16 ret ulong 1
17
18RecurseCase:
19 %n2 = sub ulong %n, 2
20 %n1 = sub ulong %n, 1
Chris Lattnerda257162001-10-03 14:50:12 +000021 %f2 = call ulong(ulong) * %fib(ulong %n2)
22 %f1 = call ulong(ulong) * %fib(ulong %n1)
Chris Lattner00950542001-06-06 20:29:01 +000023 %result = add ulong %f2, %f1
24 ret ulong %result
25end
26
Chris Lattner1b3512f2001-10-15 19:18:01 +000027ulong "realmain"(int %argc, sbyte ** %argv)
Chris Lattner00950542001-06-06 20:29:01 +000028begin
29 seteq int %argc, 2 ; {bool}:0
30 br bool %0, label %HasArg, label %Continue
31HasArg:
32 ; %n1 = atoi(argv[1])
Chris Lattner98af6692001-09-01 01:47:52 +000033 %n1 = add int 1, 1
Chris Lattner00950542001-06-06 20:29:01 +000034 br label %Continue
35
36Continue:
Chris Lattner98af6692001-09-01 01:47:52 +000037 %n = phi int [%n1, %HasArg], [1, %0]
38 %N = cast int %n to ulong
Chris Lattnerda257162001-10-03 14:50:12 +000039 %F = call ulong(ulong) *%fib(ulong %N)
Chris Lattner00950542001-06-06 20:29:01 +000040 ret ulong %F
41end
Chris Lattner1b3512f2001-10-15 19:18:01 +000042
43int "main"()
44begin
45 %Result = call ulong %fib(ulong 10)
46 %Result = cast ulong %Result to int
Vikram S. Adveffcaa7b2001-10-28 21:16:34 +000047 call void %printString([ubyte]* %FmtString1)
48 call void %printInt(int %Result)
49 call void %printString([ubyte]* %FmtString2)
Chris Lattner1b3512f2001-10-15 19:18:01 +000050 ret int %Result
51end
52