LLvm Jit: Как разыменовать указатель времени выполнения из jited-кода? - PullRequest
1 голос
/ 13 октября 2019

У меня есть указатель на числовую переменную с плавающей запятой в моем коде c ++. Я хотел бы выдать инструкцию IRV llvm, которая разыменовывает этот указатель для доступа к этой переменной из кода jited. Как я могу выдать такую ​​инструкцию?

Я попытался преобразовать указатель в 64-разрядную целочисленную константу, а затем в указатель с плавающей точкой. Но когда я получаю искаженный код IR.

auto *pointer_as_integer = ConstantInt::get(
    context, APInt(64, reinterpret_cast<uint64_t>(&variable)));

auto *pointer = builder.CreateIntToPtr(
    pointer_as_integer, Type::getFloatTy(context));

return builder.CreateLoad(
    Type::getFloatTy(context), pointer);

Я получаю это, когда пытаюсь применить проверочный проход:

Instruction does not dominate all uses!
%PTR = load float, float* inttoptr (i64 140724356577004 to float*)

Что я делаю не так?

Когда я применяю проверку пройти. Что я делаю не так?

1 Ответ

0 голосов
/ 13 октября 2019

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

...