Code instrumentation

LANCE includes an API for code instrumentation at the IR level, which supports implementation of advanced application code profiling tools. The API permits the automatic placement of user-defined probe function calls in between three address code IR statements generated by the C frontend. The instrumented code can be compiled and executed like the original C application program. It retains the original program semantics, but collects dynamic execution statistics as a side effect. For instance, probe functions may be used to accurately count the dynamic frequency of C operations, to determine variable word lengths, or to monitor memory accesses. As opposed to traditional source code profilers, IR-level profiling leads to better observability of program characteristics without a large increase in execution time.