Я не уверен, что вы подразумеваете под «сделать некоторую оптимизацию», но мне кажется, что mem2reg
это точно что вам нужно. Вот как это described in the documentation:
Этот файл распространяет ссылки на память для ссылки на регистры. Он поддерживает команды alloca, которые имеют только нагрузки и хранилища в качестве использования. Атрибут transforma преобразуется с использованием границ доминанта для размещения узлов phi , а затем перемещение функции в глубину-первом порядке для перезаписи загружает и хранит в случае необходимости. Это всего лишь стандартный алгоритм построения SSA для построения «обрезанной» формы SSA.
Clang сам не производит оптимизированный ИК LLVM. Он производит довольно простой IR, в котором локали хранятся в памяти (с использованием alloca
с). Оптимизации выполняются с помощью opt
на уровне LLVM IR, и одна из наиболее важных оптимизаций - это действительно mem2reg
, которая гарантирует, что местные жители представлены в значениях SSA LLVM вместо памяти.
mem2reg (aka PromotePass) не зависит от каких-либо других проходов, кроме анализа DominatorTree, который, очевидно, не изменяет ИК. –