Combinatorial instruction scheduling research project at CSU Sacramento.
This plugin for the LLVM compiler is an optional machine scheduler. We implement a branch and bound instruction scheduling algorithm.
- Ubuntu 16.04 (recommended), or MacOS 10.14
- CMake 3.4.3 or later
- LLVM 6.0 or later
See BUILD.md for build instructions.
The OptSched plugin can be found in “llvm/lib” after building.
OptSched reads from configuration files at runtime to initialize the scheduler. There are templates in the example directory. The default search location for these files is ~/.optsched-cfg
. You can optionally specify the path to this directory or any of the configuration files individually with command-line options.
clang++ -O3 -fplugin=<path/to/OptSched.so> -mllvm -misched=optsched -mllvm -optsched-cfg=<path/to/optsched-cfg> <example.cpp>
llc -load <path/to/OptSched.so> -misched=optsched -optsched-cfg=<path/to/optsched-cfg> <example.ll>
When using Clang, pass options to LLVM with -mllvm
.
CL Opt | Description |
---|---|
-enable-misched | Enable the machine scheduling pass in LLVM (Targets can override this option). |
-misched=optsched | Select the optimizing scheduler. |
-debug-only=optsched | Print debug information from the scheduler. |
-optsched-cfg=<string> | Path to the directory containing configuration files for opt-sched. |
-optsched-cfg-hotfuncs=<string> | Path to the list of hot functions to schedule using opt-sched. |
-optsched-cfg-machine-model=<string> | Path to the machine model specification file for opt-sched. |
-optsched-cfg-sched=<string> | Path to the scheduler options configuration file for opt-sched. |