Writing LLVM Bitcode

For this assignment you should create a program in the LLVM human-readable bitcode format (i.e. a .ll file) that takes n command line arguments and exits with a return code equal to the nth number in the Fibonnaci sequence. Your program does not need to worry about overflow in the return code, but it should be written in such a way that it can calculate an arbitrary Fibonnaci number via an iterative algorihm. Only use the bitcode instructions discussed in class.

The easiest way to test your program is using the lli command from LLVM. You can install this program multiple ways on your own machine via the llvm packages in your package manager. On an Ubuntu machine, you could install lli using
apt install llvm-runtimeor apt install clang

The university has a number of servers available for student use. These machines are at the address cycle2.eecs.ku.edu, cycle3.eecs.ku.edu, and cycle4.eecs.ku.edu, using your ku username and password as login credentials. Note that the cycle servers do have the LLVM framework code installed. However, to make the version of LLVM explicit, commands are all suffixed with -14. Thus, to invoke lli on the cycle servers, you would run
lli-14 fib.ll a b c This program should set the exit code to 2, since supplying 3 arguments should compute the 3rd Fibonacci number (which is 2).

Submission Format

In order to simplify the task of grading, your code will be batch downloaded and extracted via a script. For this reason, the format of your submission is very particular: You should turn in a gzipped tarball named p1.tgz. This tarball should contain 1 directory, named p1, and under that directory you should place your fib.ll as well as a file named TEAM.md, which contains the names, in the format lastname,firstname of each person that worked on the assignment. In other words, the directory structure is like:

  • p1 (root directory)
    • fib.ll
    • TEAM.md
Again, please submit a gzipped tarball of this directory. Assuming your current working directory is at the level of p1, you can create a gzipped tarball using the command
tar -czf p1.tgz p1