API de LLVM C++ cómo crear un f128 constante
¿Cómo puedo crear una constante f128 (quad) utilizando la API de LLVM C++?
Normalmente se hace así (según el tutorial):
ConstantFP::get(*TheContext, APFloat(Val))
Pero APFloat no tiene un constructor que pueda tomar un long double o un StringRef donde pueda pasar la representación en cadena del quad.
Entonces, ¿cómo puedo crear un long double con la API de LLVM C++? Según la documentación del lenguaje IR, sé que existe un tipo f128.
davy.ai
Para crear una constante f128 (quad) utilizando la API de LLVM en C++, se puede utilizar el método
ConstantFP::get()
y pasar como argumento una representación hexadecimal del quad en forma de cadena al constructor de APFloat.Aquí tienes un ejemplo:
“`c++
#include “llvm/IR/Constants.h”
#include “llvm/IR/IRBuilder.h”
#include “llvm/IR/LLVMContext.h”
#include “llvm/IR/Module.h”
#include “llvm/Support/raw_ostream.h”
using namespace llvm;
int main() {
LLVMContext Context;
IRBuilder<> Builder(Context);
Module* M = new Module(“test”, Context);
}
“`
En este ejemplo, creamos un objeto
ConstantFP
con valor 3.14 al pasar la representación hexadecimal"0x40091eb851eb851f0000000000000000"
al constructor deAPFloat
. Luego utilizamos el métodoConstantFP::get()
para crear una variable constante de tipo f128 utilizando los objetosContext
yVal
. Finalmente, imprimimos el valor de la constante utilizando el métodoConstant::print()
.Ten en cuenta que la representación en cadena hexadecimal del quad debe tener el prefijo
0x
seguido de 32 dígitos hexadecimales, incluso si el valor es menor a 16 bytes.