“…These counts are used to drive optimizations such as increasing parallelism [38], minimizing memory size [1,2,27,38,42], estimating worst case execution time [28], increasing cache effectiveness [6,16], high-level transformations for DSP applications [23], converting software loops into parallel hardware implementations [5,18,22,25,38] and minimizing communication overhead in distributed applications [9,26,37]. In many of these optimizations, the objects or events to be counted are modeled as the integer solutions to systems of linear inequalities, i.e., as the elements of a set S = { x ∈ Z d | Ax + c ≥ 0 }, with A ∈ Z n×d and c ∈ Z n .…”