LLVM IR оптимизация - PullRequest
       25

LLVM IR оптимизация

0 голосов
/ 23 февраля 2019

Я пытаюсь перейти по этой ссылке, чтобы сгенерировать IR-представление для c кода.Код c, который я использую, выглядит следующим образом:

void main() {
 int c1 = 17;
 int c2 = 25;
 int c3 = c1 + c2;
 printf("Value = %d\n", c3);
}

, который я сохраняю как const.c.Как только это сохранено, я использую следующую команду для генерации файла .bc.

clang -c -emit-llvm const.c -o const.bc


После того, как файл .bc сгенерирован, я хочу использовать следующую команду, чтобы сгенерировать оптимизированную версию файла const.bc с именем const.reg.bc.

opt -mem2reg const.bc > const.reg.bc

У меня нет проблем с генерацией этих файлов, но по какой-то причине оба они точно такие же, и оптимизация не происходит.Результаты должны отличаться, я имею в виду const.reg.bc должна быть оптимизированной версией файла const.bc.Но почему-то этого не происходит.Может кто-нибудь сказать мне, что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Эта опция может использоваться с clang -Xclang -disable-O0-optnone для предотвращения генерации атрибута optnone.

0 голосов
/ 23 февраля 2019

Когда вы запускаете clang somefile.c, по умолчанию используется уровень оптимизации -O0, который генерирует основную функцию с атрибутом optnone.Этот атрибут предотвращает оптимизацию, поэтому вы не видите результат mem2reg.

. Вы должны удалить атрибут optnone, если хотите, чтобы opt выполнил работу:

clang -S -emit-llvm const.c -o - | sed s/optnone// | opt -S -mem2reg

Обратите внимание, что mem2reg и его проходы reg2mem не являются строго оптимизирующими.Они просто конвертируют IR из / в форму SSA.

...