Zdokonalená analýza výkonnosti v nástroji Looper - Pánek, Jan (Vysoké učení technické v Brně. Fakulta informačních technologií, 2025)
Náš nástroj REBEL je statický analýzátor pro odvozování co nejtěsnějších horních mezí ceny vykonávání imperativních nerekurzivních programů. REBEL je nástupcem nástroje Looper v2. Oba nástroje REBEL a Looper v2 jsou reimplementací nástroje LOOPUS, který využívá model programu zvaný zvaný difference constraint program k posouzení kumulativního přírůstku hodnot výrazů omezujících provádění jednotlivých cyklů v programu. Hodnoty těchto výrazů se mění prostřednictvím lineárních inkrementů, dekrementů a resetů v důsledku provádění programu. Lineární inkrementy, dekrementy a resety jsou modelovány pomocí tzv. difference constraints (nerovnosti typu + ), které umožňují přirozeným způsobem modelovat typické modifikace čítačů cyklů. Inkrementy a dekrementy tvaru = + jsou modelovány jako + a resety tvaru = jsou modelovány jako + 0. Na rozdíl od nástroje Looper v2, který byl implementován jako zásuvný modul v prostředí Meta Infer, tato práce představuje novou architekturu našeho nástroje REBEL, která se opírá o infrastrukturu LLVM a je implementována pomocí C++ a Pythonu, aby umožnila rychlé prototypování nových rozšíření při zachování možnosti optimalizace výkonu. Výkon našeho nástroje REBEL byl vyhodnocen na několika testovacích sadách a porovnán s výkonem nástroje Looper v2 a dvěma dalšími analyzátory Cost a KoAT.

Our tool REBEL is a static analysis tool for inference of as tight as possible upper bounds on the execution cost of imperative non-recursive programs. REBEL is a succesor of the tool called Looper v2. Both REBEL and Looper v2 are reimplementations of the tool called LOOPUS which uses a program model called a difference constraint program to reason about the cumulative gain in the values of expressions constraining execution of individual loops in the program. The values of such expressions are updated through linear increments, decrements, and resets as a result of the program execution. The linear increments, decrements and resets are modelled using so-called difference constraints (inequalities of the from + ), which allow for natural abstraction of common loop counter updates. In particular, increments and decrements of the form = + are modeled as + , and reset of the form = are modelled as + 0. In constrast to Looper v2, which was implemeted as an analysis plugin in the Meta Infer framework, this thesis presents a new architecture of our tool REBEL which relies on the LLVM compiler infrastructure and is implemented using C++ and Python, to allow fast prototyping of new extensions while preserving the posibility for performance optimizations. The performance of our REBEL was evaluated on several test suits and compared to the performance of Looper v2 and two more analyzers Cost and KoAT.
Improved Static Performance Analysis in Looper
Keywords: Statická analýza; analýza mezí; analýza složitosti; amortizovaná analýza; Loopus; Looper; REBEL; analýza ceny; difference constraints; LLVM; imperativní programy.; Static analysis; bound analysis; complexity analysis; amortized complexity; Loopus; Looper; REBEL; cost analysis; difference constraints; LLVM; imperative Programs.