Как отключить оптимизацию постоянного сворачивания в llvm - PullRequest
0 голосов
/ 22 января 2019

Я новичок в Clang и llvm. Я пытаюсь сгенерировать неоптимизированную версию битового кода из исходного кода c. Я обнаружил, что сгенерированный битовый код имеет постоянную оптимизацию свертывания, которая мне не нужна. Я использую эту команду: clang -O0 -Xclang -disable-O0-optnone test1.c -S -emit-llvm -o test1.ll

Файл test1.c имеет следующий код:

int test() {
int y;
y = 2 * 4;
return y;
}

Содержимое файла test1.ll: enter image description here

Вместо того, чтобы генерировать инструкцию для умножения 2 и 4, он непосредственно сохраняет значение 8, выполняя операцию постоянного сворачивания: сохранить i32 8, i32 *% 1, выровнять 4

Было бы здорово, если бы кто-то любезно дал мне знать, что мне не хватает и как мне отключить постоянную оптимизацию сворачивания. Я использую версию llvm 6.0.0.

Спасибо.

1 Ответ

0 голосов
/ 22 января 2019

Было бы очень хорошо, если бы кто-то любезно дал мне знать, что мне не хватает и как мне отключить постоянную оптимизацию сворачивания.Я использую версию llvm 6.0.0.

Это функция Clang, которую нельзя отключить даже с -O0.Чтобы обойти это, попробуйте сделать переменные глобальными, передать их в качестве параметров функции или просто написать IR вручную.

...