LLVM, Звоните по ссылке - PullRequest
1 голос
/ 07 октября 2011

Я пишу компилятор для языка, на котором пользователь может выбирать между вызовом по значению или ссылкой

Последний этап заключается в создании сборки llvm.Я прочитал, что массивы / векторы передаются по ссылке, но я не могу понять, как передать целые числа по ссылке.

Я думал о создании указателя, а затем передать указатель, что-то вроде:

foo(ref var1) { var1 = var1 + 1 }
main { a=1; foo(a); }

переводится на

foo(int* var1) { (*var1) = (*var1) + 1 }
main {a=1; foo(&a ); }

, но я не могу найти, как это сделать в llvm.

Любые идеи, как об указателях, так и о том, как вызывать аргумент по ссылке, были бы потрясающими (янадеюсь, что это не слишком большой вопрос RTFM: /)

1 Ответ

3 голосов
/ 07 октября 2011

Попробуйте выполнить следующий код через http://llvm.org/demo/ с уровнем оптимизации None:

void foo(int* var1) { (*var1) = (*var1) + 1; }
int main() {int a=1; foo(&a ); }

Ответ, по сути, заключается в том, что вам нужно выделить память с помощью инструкции alloca.

...