Skip to content
Automatic inference of function complexity through polynomial interpolation
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Asymptus Complexity Analyzer

Asymptus is a tool for automatic inference of function complexity. It uses a hibrid approach, mixing static analysis and dynamic profiling, in order to provide more accurate results.


Asymptus requires LLVM 3.4 to performe static analysis. To install LLVM 3.4 you can follow these tutorials: downloading a specific version of LLVM and installing LLVM. Note that its necessary to also install clang, the LLVM front-end.

Once you have a working installation of LLVM 3.4, you can download the Asymptus source code and install it.


Asymptus executes over either a C/C++ file or LLVM bytecodes. The simplest way to run our tool is to execute ./asymptus input_file.(c|cpp|bc). It will identify how many command line arguments the input program reads and generate numeric values for them. You may also use the following options:

 --args type ....         Allows the user to specify the types of command line arguments.
                          It is necessary to specify as many argument as the program reads
                          in order to have a correct execution. The types may be one of the
                          following: int, long, float, double, num, char or string.

 --mix ARG ..             Allows the user to mix random generated arguments with concrete 
                          data. When using this option, the random arguments types have to 
                          come between {}. For instance, --mix myInput {int}.
 --man                    This option will ask the user for only concrete inputs. Asymptus will
                          ask for the inputs of each desired execution. An empty line means all
                          data has been provided.
 -v                       Verbose mode. Prints the polynomial for each loop inside a function.
 -h or --help             Prints this usage message.
Demonstration of usage (audio in Portuguese)

Demo video

LLVM 3.7

If you want to run Asymptus with LLVM 3.7, go to llvm-3.7 branch (experimental).

You can’t perform that action at this time.