A scope graph hierarchy (or iteration scope graph hierarchy) is a hierarchy of scopes. The root scope (at the top) is typically the main function, or the top function in a subgraph. The (iteration) scope is either a function or a loop, and constitutes a (possibly) looping entity in the program. The arrow from one scope to another below represents a call in the case of a function scope, or a loop invocation in the case of a loop scope.

The scope graph hierarchies for our benchmarks are context sensitive which means that each call site to a function creates a unique scope of the called function.

Function scopes get their names by adding their function name (preceded with a separating "_") to the name of the calling scope. If there are several call sites to a function from a another function, the different instances are separated with a suffixed number representing the copy number in the graph (ranging from 1 and up).

Outer loop scopes get their names by adding "_Lx" to the name of the calling scope, where "x" is the number for the loop in the function (ranging from 1 and up).

Inner loop scopes get their names by adding "_Lx" to the name of the calling scope, where "x" is the number for the loop in the containing loop (ranging from 1 and up).

Note 1: Please note that the function and loop numbers do not necessarily correspond to the position of the function call or loop in the source code.

Note 2: The scope graph hierarchies are generated by the SWEET tool. Recursive functions are not currently supported by our tool.

Note 3: An example program that contains all of the above scope types and names is compress.c.