问题标签 [llvm-c++-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4064 浏览

llvm - 可以从 LLVM-IR 自动生成 llvm c++ api 代码吗?

clang 3.0 在线演示页面http://llvm.org/demo/index.cgi提供了一个输出 LLVM C++ API 代码的选项,表示输入程序的 LLVM-IR。

“生成 LLVM C++ API 代码”是否输出一个 clang 选项(如果是,它是什么)?

或者它是一个 llvm 工具选项(哪一个)?

除了 LLVM-IR 输入之外,是否可以做同样的事情?基本上,我希望看到生成特定给定 llvm-ir 序列所需的正确 llvm c++ api 调用。我想通过示例向后学习,而不是从文档中向前学习。

clang、llvm-as 和 llvm-dis 的手册页和 --help 和 --help-hidden 没有显示任何明显的内容。

编辑:好的,现在我在该网页的输出中看到“由 llvm2cpp 生成”。但是我在最近的 llvm 版本中找不到该工具,只有旧版本,2.9 和 3.0 中的新工具接管了 llvm2cpp?

0 投票
2 回答
5217 浏览

llvm - LLVM C++ API 到底是什么

我发现很难理解 LLVM C++ API。
LLVM C++ API 和 LLVM IR 之间有什么关系吗?另外,如何使用 LLVM C++ API?

0 投票
1 回答
1791 浏览

llvm - 将 GetElementPtrInst 与包含多个值的 ArrayRef 一起使用时出现段错误

我正在尝试用 LLVM 和 C++ 编写一个玩具编译器。但是,每当我尝试创建具有多个索引的 GetElementPtrInst 时,都会出现 Segfault。有关此指令的文档对我没有帮助(API-Documentation Language-Documentation

我的 llvm 版本是 3.1,这是在 Arch Linux 上。刚刚在另一台 Arch 机器上测试它并得到了同样的错误。

难道我做错了什么?

这是一个小的工作程序来说明我的问题。它可以编译为:

0 投票
1 回答
403 浏览

f# - 如何从 F# 调用此本机函数?(LLVMCreateJITCompilerForModule)

我正在使用llvm-fs绑定,我想调用的一种方法是 LLVM C api 中createJITCompilerForModule本机方法的外部方法。LLVMCreateJITCompilerForModulellvm-fs 的作者表示他不能在 F# 中制作这个函数调用的“好”版本:

createJITCompilerForModule in llvm-fs:Generated.fs

你知道我会如何从 F# 调用这个函数,甚至是原生函数的作用吗?看起来它有一个“输出参数” OutJIT(因为本机代码重新分配了void*指向的东西)。这是本机功能:

LLVMCreateJITCompilerForModule in llvm-c:ExecutionEngineBindings.cpp

0 投票
1 回答
1804 浏览

llvm - 访问函数参数寄存器以进行加载

函数是这样创建的:

然后通过向块添加指令来创建函数的主体:

足够的上下文,现在解决问题:我想为函数参数值添加加载指令,例如:

我不知道如何/在哪里获取address函数参数的变量。

0 投票
1 回答
1124 浏览

llvm - 不再有 ConstantArray::get(Context&, char*&, bool)?

查看 LLVM Demo,创建常量字符串的官方方法是:

常量* consStr = ConstantArray::get(mod->getContext(), "hello", true);

但是,它不起作用!我会得到关于以下的编译错误:

看llvm源码,没有成员函数支持

我正在使用 llvm3.1。

我的代码有什么问题,或者这个构造函数在新源中被删除了吗?

这是 LLVM 源代码的区别。

LLVM2.8

LLVM3.1

}

显然,2.8 中有 3 个构造函数,但 3.1 中只有一个用于 ConstantArray 的构造函数。现在我不知道如何创建一个常量字符串...... :(

任何帮助都值得赞赏!

谢谢!

0 投票
0 回答
809 浏览

llvm - 如何更改类型:定义前使用全局变量

就我而言,我需要在模块中创建对全局变量的引用,然后在引用之后定义全局变量。

当我创建将使用全局变量的指令时,我不知道变量的类型。即使我实际上只需要符号的地址,我仍然需要通过指定类型来创建 llvm::GlobalVariable 对象。

这导致了一个问题,当我稍后定义全局变量时,我知道类型但不幸的是我无法替换我之前创建的 GlobalVariable 对象。

这是伪代码:

显然,我不能创建另一个具有相同名称的变量。但是如何将第一个 GlobalVariable 对象转换为实际类型并为其提供初始化程序?

有没有其他方法可以在不创建 GlobalVariable 对象的情况下获取符号地址?

0 投票
1 回答
211 浏览

llvm - 我可以从符号创建一个常量并将其用作数组初始值设定项吗?

基本上我想为以下 C 代码创建数据 IR:

所以我llvm::GlobalVariablemyarr1. 但是llvm断言并说它不能用作初始化程序。

数组元素初始值设定项中的类型错误

是否有可能做到这一点?

0 投票
1 回答
150 浏览

llvm - 我需要自己计算填充来构造 StructType 吗?

我正在使用 LLVM IR 生成一些结构数据。

例如:

我阅读了文档并尝试了演示,似乎 API 需要用户自己处理填充和值组合。

有没有办法像这样更简单地创建结构:

布局工作真的很难,而且很可能会导致错误。组合初始化器的值也很困难。

据我了解,如果我告诉 llvm API 结构没有打包,它应该自动处理填充,对吧?

任何意见?

0 投票
1 回答
8089 浏览

llvm - 向 LLVM IR 中的指令添加元数据

首先,我是 LLVM 通行证的新手。

我试图在转换通过后将元数据添加到 LLVM 中的指令中(使用 C++ API)。我打算存储此信息以供工具链中的另一个工具使用。我对此有两个问题。

  1. 我希望我存储为元数据的信息能够输入到另一个适用于 LLVM IR 的工具中。那么元数据是个好主意吗?我打算将字符串存储为带有一些说明的元数据。

  2. 如果元数据是正确的方法,我需要一些帮助来创建元数据节点。我计划使用 setMedata() 函数将其附加到指令中。setMetadata() 的哪个变体是正确的。我不确定我的数据应该属于哪个 MDKind。我想创建一个 MDString,将它附加到我的 MDNode,然后使用指令调用 setMetadata()。如果我想将元数据附加到函数内的指令,我应该在 setMedata() 中使用什么上下文。上下文与元数据的相关性是什么?

我尝试在论坛和 llvm doxygen 文档中阅读很多讨论,但我没有得到所有问题的清晰完整的答案。感谢您的帮助或一些可以帮助我理解这一点的材料。