Dlaczego pierwszy blok kodu jest ważny, podczas gdy drugi nie jest? Kiedy patrzę na doktorzy, widzę %0 używane mnóstwo razy, ale kiedy próbuję go użyć (w porządku), otrzymuję błąd z 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
}
0
Alex F 4 sierpień 2020, 01:15

1 odpowiedź

Najlepsza odpowiedź

Pierwszym nienazwanym podmiotem jest podstawowy blok. Dlatego pierwsza instrukcja powinna używać %1 w nienazwanym podstawowym bloku.

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

Powinno działać

2
Anton Korobeynikov 4 sierpień 2020, 09:13