Abstract

This paper presents the description of a possible way to build the universal linearized control flow graph which is supposed to be architecture-independent and applicable to the description of any high level language programs. The practical usefulness of the graph considered is the existence of the fast and optimal search of the unique execution paths that is valuable in the methods of static code analysis of algorithms for race condition search. Optimizing compiler CLANG&LLVM is used as a technical tool for building a linearized control flow graph. The analysis of LLVM compiler procedural optimizations is carried out in the article. Transformations of intermediate representation of those optimizations result in reduction of the number of instructions responsible for conditional or unconditional branches in the code as well as the elimination or simplification of the whole loops and conditional constructions. The results of the analysis performed in the paper allowed revealing the most effective optimizations line of the LLVM compiler, which leads to a significant linearization of the control flow graph. That fact was demonstrated by the example code of the Peterson mutual execution algorithm for 2 threads.

Highlights

  • Computing), а также архитектурных платформ с явной поддержкой параллелизма на уровне отдельных инструкций с широким командным словом – VLIW-архитектуры (Very Long Instruction Word)

  • анализа алгоритмов имеет пересечения с задачами оптимизирующих компиляторов

  • Optimizing compiler CLANG&LLVM is used as a technical tool

Read more

Summary

Введение

Проведя анализ современных оптимизирующих компиляторов таких компаний, как Intel, Sun Microsystems, Transmeta, Microsoft, IBM, HP, Elbrus [1], а также особо уделяя внимание компиляторам с открытым кодом, таким как CLANG&LLVM, GCC, понимаешь, что задача линеаризации графа потока управления для организации более эффективного статического анализа алгоритмов имеет пересечения с задачами оптимизирующих компиляторов – получения эффективного кода целевой архитектуры. Особенно данный факт проявляется для оптимизирующих компиляторов архитектурных платформ, использующих статический подход к распараллеливанию на уровне инструкций – EPIC-архитектуры Computing), а также архитектурных платформ с явной поддержкой параллелизма на уровне отдельных инструкций с широким командным словом – VLIW-архитектуры (Very Long Instruction Word). Особенность реализации компиляторов позволяет получать IR практически после каждой фазы оптимизации, а также соответствующие абстрактные представления этого IR: граф потока управления (control flow graph – CFG), граф потока данных (def-use graph – DUG), дерево доминаторов и т.д. Есть возможность использовать и адаптировать некоторые оптимизации компилятора с целью получения наиболее удобного и эффективного представления программы, написанной на языке высокого уровня, для проведения статического анализа алгоритмов на предмет состояния гонки

Общие понятия и постановка задачи
Анализ оптимизаций на промежуточном представлении
Применение оптимизаций LLVM
Заключение и дальнейшие планы работ
Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call