Доступ к переменным LLVM - PullRequest
       32

Доступ к переменным LLVM

0 голосов
/ 25 сентября 2018

Я знаю, как сохранить переменную int 'x' в коде LLVM, я бы использовал команду:

  store i32 1, i32* %x

Если я затем захочу извлечь "% x" и использовать его в команденапример, add, как бы я это сделал?

%Temp1 = add i32 1, %x

В основном спрашиваю, как ссылаться на магазин

1 Ответ

0 голосов
/ 01 ноября 2018

Как ответил один из комментаторов, решение состоит в том, чтобы использовать инструкцию загрузки.Когда вы используете инструкцию сохранения в LLVM, вы записываете на некоторый адрес памяти.

Чтобы прочитать указанную переменную и сохранить ее в виртуальном регистре, вы используете инструкцию загрузки.

Например, рассмотрим следующую функцию, которая добавляет два целых числа:

define i32 @add(i32, i32) {
  %3 = alloca i32
  %4 = alloca i32
  store i32 %0, i32* %3
  store i32 %1, i32* %4
  %5 = load i32, i32* %3
  %6 = load i32, i32* %4
  %7 = add i32 %5, %6
  ret i32 %7
}

Первые две строки выделяют память в стеке для двух целых чисел размером четыре байта.Затем мы записываем значение аргументов функции в эти места.Прежде чем мы сможем использовать add, мы загружаем эти две переменные из памяти в виртуальные регистры% 5 и% 6.Затем выполняется инструкция добавления, а результат присваивается виртуальному регистру% 7.

Затем мы возвращаем результат вычисления, используя инструкцию ret, которая также является единственным ограничителем одного базового блока, составляющегоэтот пример функции.

...