gpt4 book ai didi

llvm - 在 LLVM 中创建新类型(特别是指向函数类型的指针)

转载 作者:行者123 更新时间:2023-12-04 19:16:11 25 4
gpt4 key购买 nike

我想创建一个以下类型,

  void (i8*)*

我尝试使用 Type 类来创建上述类型,但我没有找到任何直接的方法来做同样的事情。
有人请建议我创建上述类型的方法。
提前致谢。

最佳答案

如果您的意思是 i8** (指向 i8 的指针),然后:

// This creates the i8* type
PointerType* PointerTy = PointerType::get(IntegerType::get(mod->getContext(), 8), 0);
// This creates the i8** type
PointerType* PointerPtrTy = PointerType::get(PointerTy, 0);

如果您需要一个指向不返回任何内容并采用 i8* 的函数的指针, 然后:
// This creates the i8* type
PointerType* PointerTy = PointerType::get(IntegerType::get(mod->getContext(), 8), 0);

// Create a function type. Its argument types are passed as a vector
std::vector<Type*>FuncTy_args;
FuncTy_args.push_back(PointerTy); // one argument: char*
FunctionType* FuncTy = FunctionType::get(
/*Result=*/Type::getVoidTy(mod->getContext()), // returning void
/*Params=*/FuncTy_args, // taking those args
/*isVarArg=*/false);

// Finally this is the pointer to the function type described above
PointerType* PtrToFuncTy = PointerType::get(FuncTy, 0);

更通用的答案是:您可以使用 LLVM C++ API 后端来生成创建任何类型的 IR 所需的 C++ 代码。这可以通过在线 LLVM 演示方便地完成 - http://llvm.org/demo/ - 这就是我为这个答案生成代码的方式。

关于llvm - 在 LLVM 中创建新类型(特别是指向函数类型的指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9434602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com