Нумерация LLVM не начинается с% 0 - PullRequest
0 голосов
/ 04 августа 2020

Почему первый блок кода действителен, а второй - нет? Когда я смотрю документы, я вижу, что %0 использовалось много раз, но когда я пытаюсь использовать его (по порядку), я получаю сообщение об ошибке от llc:

llc: error: llc: test.ll:2:2: error: instruction expected to be numbered '%1'
        %0 = add i64 %x, %y
        ^
define i64 @add(i64 %x, i64 %y) {
    %1 = add i64 %x, %y
    ret i64 %1
}

define i64 @main() {
    ret i64 0
}
define i64 @add(i64 %x, i64 %y) {
    %0 = add i64 %x, %y
    ret i64 %0
}

define i64 @main() {
    ret i64 0
}

1 Ответ

2 голосов
/ 04 августа 2020

Первый безымянный объект - это базовый c блок. Вот почему первая инструкция должна использовать %1 в безымянном блоке basi c.

define i64 @add(i64 %x, i64 %y) {
entry:
    %0 = add i64 %x, %y
    ret i64 %0
}

должно работать

...