Downloads

Downloads

The two packages distributed in this page, e.g puzzles19.tar.gz and puzzles21.tar.gz contain many files. they are arranged in the same structure of the llvm development tree, so it should not be very difficult to install. For instance, to install the 2.1 version, just replace the files in your installation of LLVM 2.1 with the files in this zip. Be aware that some files will overwrite the old LLVM files. The files that I have created have the extension _Fer at the end of their names. Not all these files do register allocation, but they may be useful to implement passes.

Source Files
Download it This is the code of the puzzle solver for LLVM 1.9. It is the version that we have used in the experiments presented in our paper. To run the puzzle solver, try llc -f -regalloc=linearscan -SSA-based=true file.bc -o file.s. The code of our puzzle solver is embedded into the code of LLVM's extended linear scan. The tag -SSA-based=true tells the allocator that it should remove phi-functions after register allocation is done. To call LLVM with its default algorithm, use llc -f -regalloc=linearscan -SSA-based=false file.bc -o file.s.
Download it This is the code of the puzzle solver for LLVM 2.1. This version has not been fully tested yet. To run the puzzle solver, try llc -f -regalloc=puzzles -SSA-based=true file.bc -o file.s. Although the puzzle solver is now separated from extended linear scan, one must still point that phi-functions are destroyed after register allocation with -SSA-based=true. This file also contains a hybrid allocator, that either calls the puzzle solver, or extended linear scan. To call the hybrid allocator, use llc -f -regalloc=hybrid -SSA-based=[true?false] file.bc -o file.s. If SSA-based is set to true, the puzzle solver will be called, otherwise extended linear scan will be called instead.
Download it This script calls the puzzle solver and the extended linear scan, produces statistics about both codes such as number of loads, stores, moves and swaps, compiles the assembly code produced and run it to get the execution time. Finally, the output of both allocators is compared against the output of gcc. The script helps in debugging and comparing new register allocators and may be useful during development. In order to run this script, you must have this other script installed. This script works only for version 2.1 of our implementation. For 1.9, use this one.
Download it This script uses grep to count the number of loads, stores, moves and swaps in the code of the assembly program produced for X86. The script has some comments that can be used to generate the same information for PowerPC, or for X86 using the assembly produced by LLVM 1.9.


Última atualização: 17 de Dezembro de 2007.

Last update: December 17th, 2007.