问题标签 [llvm-ir]

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 投票
1 回答
2006 浏览

c - 在 C 中执行 LLVM IR 代码

我一直在试图弄清楚如何基本上采用 LLVM IR 代码的一部分并在 C 中内联执行它。我希望能够内联 IR 代码,这样就不需要虚拟函数调用(在同一可以使用_asm{}) 内联汇编代码的方式。请参见以下示例:

要执行的 LLVM IR 代码:

C程序:

我知道我可以在使用中读取 IR 代码parseIRFile()并创建一个指向函数的指针,但这不是我想要的,因为需要一个虚拟函数调用。

0 投票
4 回答
1172 浏览

c++ - 遍历模块中的所有结构

我正在编写一个 ModulePass,我需要分析给定模块中定义的每个结构。

我知道在 ValueSymbolTable 中插入了带有名称的已识别结构,但是如何遍历所有其他结构(没有名称和文字结构识别)?

0 投票
1 回答
773 浏览

llvm - 是否可以在 LLVM IR 代码中指定十六进制数字?

例如:

0 投票
1 回答
4375 浏览

llvm - 使用 LLVM 作为虚拟机 - 多平台和多架构编码

我目前正在使用一种宠物编程语言(出于学习目的),并且在过去一年中进行了大量研究,我认为是时候开始对这种语言的概念进行建模了。首先,我希望它编译为某种中间形式,例如 JVM 或 .NET 字节码,目标是兼容多平台/架构。其次,我希望它快(我还有很多其他的想法,但不是本主题讨论的目的)。

我想到的最佳选择是:编译为 JVM 字节码并使用 OpenJDK 作为运行时环境,编译为 .NET 字节码并使用 Mono 作为运行时环境,编译为 LLVM IR 并使用 LLVM 作为运行时环境。

正如您可能想象的那样,我选择了 LLVM。为什么?因为它的速度很快。我使用 C++ N-Body 代码做了一个小基准测试,并在我的机器上用 lli jitted IR 实现了 7 秒,而使用 clang 本机编译代码则为 27 秒(我知道 clang 先生成 IR,然后再生成机器代码)。

所以,这是我的问题:是否有任何可再发行版本的 LLVM 基本工具集(我只需要 lli)我可以使用?还是我必须自己编译?如果是后者,你能给我一些关于如何做的提示吗?如果我真的必须这样做,我正在考虑从我的机器(Intel Mac)交叉编译它们,并生成一些安装程序(例如,用于 Windows 的 .msi、用于流行的 linux 发行版的 .rpm 和 .deb 以及用于麦克斯)。请记住,我只需要 LLVM 的一个最小子集,这样这个子集就可以通过使用“lli”来充当 VM。这里真正的问题是如何将 LLVM 用作典型的虚拟机。

0 投票
1 回答
376 浏览

opencl - OpenCL 内核编程是否有通用的二进制中间表示?

据我了解,OpenCL 使用修改后的 C 语言(通过添加一些关键字,如 __global)作为定义内核函数的通用目的。而现在我在做一个F#语言里面的前端,它有一个代码引用功能,可以做元编程(你可以认为它是某种反射技术)。所以我想知道内核是否有一个通用的二进制中间表示而不是C源文件。

我知道 CUDA 支持 LLVM IR 用于二进制中间表示,因此我们可以以编程方式创建内核,我想用 OpenCL 做同样的事情。但是文档说没有指定二进制格式,每个实现都可以使用自己的二进制格式。那么是否有任何通用IR可以由程序生成,也可以与NVIDIA、AMD、英特尔的OpenCL实现一起运行?

谢谢。

0 投票
1 回答
5147 浏览

llvm - 获取指向先前为 CreateLoad 函数分配的 llvm::Value 的指针

我是 llvm 的新手,我正在编写一个小的 llvm IR Builder。我使用 IRBuilder 和所有这些 Create* 函数来生成我的 IR。我要做的是创建一个加载指令,该指令创建一个新的 SSA 局部变量,其值为先前分配的llvm::Value

我期望拥有的:

使用%2的加载指令结果和%1我之前分配的值 (CreateAlloca)

这是我尝试过的:

这就是我所拥有的:

loc是一个数组,其中包含我所有的 llvm::Value*

你能告诉我我做错了什么吗?或者,如果我走得不好?谢谢。

0 投票
1 回答
873 浏览

llvm - LLVM IR getelementptr LLVM C API 等效项

我正在尝试编写 LLVM C API 代码来生成 LLVM 汇编代码来计算字符串中的字符数。我需要知道如何在 LLVM C API 中的 LLVM IR 等效项中编写 getelementptr。我已经查看了整个谷歌,似乎无法找到答案。任何帮助或提示将不胜感激。先感谢您。

0 投票
1 回答
795 浏览

function - 更改 llvm 传递架构以找到所需的功能,而不是模块中的主要功能

我尝试在不生成最终可执行二进制文件的情况下对 LLVM 位码进行一些优化。我链接了所有项目的bitcode。在这个测试中,bitcode中没有main函数,但是LLVM需要在模块中找到一个main函数来内部化其他函数,我怎样才能改变pass或passmanager而不是把main函数作为程序的入口点,看起来我的特殊功能像 foo1 并假设 foo1 具有主功能的规则?

0 投票
1 回答
1303 浏览

llvm - LLVM中的输入,我想我不明白dominance和phi节点的位置

我的目标是在 LLVM 中做一些简单的事情。我想使用 C 库函数 getchar 定义一个从命令行读取输入的 LLVM 函数。这是我的伪代码算法:

所以现在,我想出的 LLVM 代码是我认为将上述内容转换为 LLVM IR 的最直接的方法。但是,我收到错误“PHI 节点未分组在基本块的顶部”。如果我移动一些东西来修复这个错误,我会得到关于支配地位的错误。下面是给我 PHI 节点错误的 LLVM IR 代码。我相信我误解了有关 LLVM IR 的一些基本知识,因此非常感谢您提供的任何帮助。

0 投票
1 回答
3897 浏览

llvm - 带有数组参数的 LLVM IR 函数

我想从两个基本的 c++ 函数生成 LLVM IR 代码,如下所示。

我的问题是使用 LLVM API 获取数组参数的索引。有任何想法吗 ?太感谢了

已编辑

这是我使用 API 的代码:

这是生成的 LLVM IR:

由于数组访问,我被困在 newFun 的主体上。