У меня есть указатель на числовую переменную с плавающей запятой в моем коде 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*)
Что я делаю не так?
Когда я применяю проверку пройти. Что я делаю не так?