Deadline is 11.59pm Friday, Feb 10th, 2017.
*********************************Instructions on RUST****************************************——————————————————————————————–
Instructions for Writing an Instruction Counting Pass for Rust’s MIR
Environment setup:
In order to write an MIR transformation pass easily you need three things:
- A Rust nightly compiler
- Cargo: the Rust build system
- The source code for the Rust compiler.
Thankfully there is an easy way to get all three: rustup.
Rustup is the system most Rust hackers use to manage their Rust environment. It’s very easy to install:
- SSH into the cycle machines
- Copy paste the following into your command line, it will run the install script and set your default rust compiler to nightly
$ curl https://sh.rustup.rs -sSf | sh -s — –default-toolchain nightly
- Follow the instructions to add rustc and cargo to your PATH
- Ensure your rust compiler is on the correct version by making sure the output of the following command contains the word “nightly”:
$ rustc -V
- Make sure the same is true of the next command
$ cargo -V
- Type the following command to download the rust source code into “~/.multirust/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/” or something similar
$ rustup component add rust-src
Once you have done the above, you are ready to start writing your first MIR pass.
Start your pass:
This git repository is a rust project that contains everything you need to start writing your own compiler pass. You need to finish the compiler pass in the “src/lib.rs” file so that it insert dynamic instruction counting tooling into the compiled “src/main.rs” program. You can use “cargo build” in order to compile the project, and “cargo run” to run it. Your goal is to make the X static variable equal to the number of dynamically executed MIR statements, including Storage, Descriminant, and NOOPs.
Some sample code is in lib.rs to get your started.
If you have any questions, please email jbisnett@u.rochester.edu
*********************************Instructions on LLVM**************************************
——————————————————————————————–
Environment setup:
Log in to your csug account.
$ cp -r /u/cs255/cs255-llvm YOURUSERNAME-cs255-llvm
$ cd YOURUSERNAME-cs255-llvm
Start your pass:
Included files:
———————–
* lib/InstCounter.cpp
You must implement your compiler pass here.
This file already provides the skeleton and a related example.
* runtime/InstCounting.c
This file implements the runtime functions that you need for the instrumentation. init() is to initialize the counter to ZERO before counting, increase() is to increase the counter by 1 and print_stmt_cnt() is to print the value of the counter.
* test/test.c
This is a simple program to test your pass.
After implementing your pass, compile it by running “make” in your top-level directory. Then cd into the “test” directory and run “make check” to test your pass. This gives you the instrumented program “test”. Run it on the string “cs255” and report your output. Make sure to explain your implementation and findings in a readme file.
Submission guideline:
Archive your working directory using the following command line, and submit on Blackboard.
tar –exclude=’.svn’ –exclude=’autoconf’ -czvf YOURUSERNAME-cs255-llvm.tar.gz YOURUSERNAME-cs255-llvm/
Helpful documentations:
(1) LLVM Programer’s Manual: highlight some of the important classes and interfaces available in the LLVM source-base (For example, how to iterate over basic blocks, how to iterate over instructions inside a basic block or function).
(2) LLVM Language Reference Manual: reference manual for the LLVM assembly language.
(3) LLVM class references: reference for the interfaces of the classes needed. (For example instructions, basic block, functions)
Note: you can use the llvm-dis tool (/u/cs255/build-llvm-38/bin/llvm-dis) to check your instrumentation at IR level. Run this tool on the llvm bitcode file that is generated by your pass:
/u/cs255/dc_llvm/build/bin/llvm-dis test.bc.opt
If you have any questions, please email dchen39@cs.rochester.edu
———————————————————————————————