Я пытаюсь написать проход оптимизации LLVM. И мне нужен способ определить, влияет ли одна инструкция LLVM на другую (или зависит от другой).
Эти зависимости могут иметь различную природу:
- первая инструкция создает значение, другая использует его как операнд
- первая инструкция записывает в память, другая читает оттуда
- другие возможности?
Короче говоря, первая команда всегда должна выполняться раньше другой, чтобы сохранить правильность кода. Трехсторонний ответ (зависит, может зависеть, не зависит) также подойдет.
Я понимаю, что могу использовать цепочки use-def для поиска зависимостей типа 1, и AliasAnalysis может помочь мне с зависимостями типа 2. Но я боюсь, что могут быть другие типы зависимостей ...
Предоставляет ли LLVM какой-либо общий механизм для этого?