问题标签 [llvm-3.0]

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 回答
1932 浏览

llvm - 使用 llvm 的 CloneFunctionInto()

我需要在 LLVM 函数传递中通过 CloneFunctionInto 将一个函数克隆到另一个函数中,以使原始控制流图免受我在第一次可能做出的任何更改的影响。

http://llvm.org/docs/doxygen/html/Cloning_8h_source.html

谁能帮我解决这个问题,因为我有一些缺失的部分,比如ClonedCodeInfoand ValueMapTypeRemapper

如果你给我一个例子来更好地理解

谢谢

0 投票
1 回答
519 浏览

llvm - CloneFunctioninto() LLVM 中的错误

我正在尝试将 CFG in 函数复制到一个新函数中,以便对旧函数进行一些操作。我通过以下代码使用了 CloneFunctionInto

在新旧功能中打印每个基本块后出现的错误:

删除时:i32 %

Def 被破坏后使用仍然卡住:%cmp1_ = icmp sgt i32 %4, 20

opt: Value.cpp:75: virtual llvm::Value::~Value(): Assertion `use_empty() && “当一个值被破坏时使用仍然存在!”'失败。

堆栈转储:

中止(核心转储)

澄清一下:它为我提供了正确的基本块及其正确的继任者,但由于这个错误它也不能很好地工作

0 投票
1 回答
200 浏览

llvm - 如何在 X86 AT&T-Style Assembly Printer pass 之前添加我的 pass?

如何在 X86 AT&T-Style Assembly Printer pass 之前添加我的 pass?我需要更改 MachineFunction 并将更改保存到 asm 文件。问题是我的通行证毕竟被触发了。

通过调试:

  • 0x202a430 释放函数“InterlockedBitTestAndSet”上的“执行依赖性修复”... 0x202a430 正在函数“InterlockedBitTestAndSet”上执行“X86 AT&T 样式装配打印机”... 0x2094f80 所需分析:未初始化的通过、机器模块信息、创建垃圾收集器模块元数据

    -*- 'X86 AT&T-Style Assembly Printer' 是以下通行证实例的最后一个用户。释放这些实例 0x202a430 释放函数“InterlockedBitTestAndSet”上的“X86 AT&T-Style Assembly Printer”... 0x202a430 正在函数“InterlockedBitTestAndSet”上执行“删除垃圾收集器信息”... 0x2095268 所需分析:创建垃圾收集器模块元数据

    -*- 'Delete Garbage Collector Information' 是以下通行证实例的最后一个用户。释放这些实例 0x202a430 释放函数“InterlockedBitTestAndSet”上的“删除垃圾收集器信息”... 0x202a430 正在函数“InterlockedBitTestAndSet”上执行“简单寄存器分配器”... 0x20955b8 所需分析:未初始化的通过

完整来源: http ://www1.datafilehost.com/d/7f544b4b

0 投票
1 回答
2188 浏览

llvm - 如何获取表达式上所有操作数的内存地址

我有一些表达式a=b+c-d*e,在 LLVM pass 的帮助下,我想制作一个这样的字符串

“['b'的十六进制地址] [+的操作码] ['c'的十六进制地址] [-的操作码] ['d'的十六进制地址] [*的操作码] ['e'的十六进制地址]”。

比我该怎么做。

0 投票
3 回答
1029 浏览

llvm - 如何查看 llvm 转换过程所做的更改

如何在 c 程序中查看转换传递(如死代码消除)所做的更改。就像我在终端上运行以下命令一样,它会创建一个 .bc 文件,通过该文件我可以看到 IR。但是如何在 c 程序中查看 -dce 所做的更改。命令:$opt in.bc -o out.bc -dce

0 投票
0 回答
142 浏览

llvm - 使用 LLVM 进行转换

我正在做一些项目,通过先将 C+ACSL 语言转换为另一种语言,先将其转换为 LLVM IR,然后再将其转换为另一种语言。这个我说不上来,因为和一群不想公开的人有关,所以我们就不说了,但是和C很接近。我已经完成了LLVM IR的工作,也有在 CBackend 的帮助下编写将其转换回来,但我真的不知道如何使用它,这意味着我应该如何将它运行到我的 LLVM IR 中。LLVM 中是否有用于执行此操作的命令,或者可以帮助我的东西。

更新 1 我的输入是 LLVM IR,输出将是类似 C 的代码,而不是 C,因为它将遵循与 C 不同的语法。

0 投票
0 回答
2099 浏览

llvm - 什么时候应该使用 ConstantDataArray 和 ConstantArray?

我正在使用 LLVM 3.3 C++-API。我的代码使用ConstantArray::get, 和使用递归代码创建多维数组(最内层首先转换为 Constant*s 的向量,如上所述,然后用于初始化下一个最内层,依此类推)。

我试图通过说如果数组的元素类型满足ConstantDataArray::isElementTypeCompatible谓词来优化这一点,那么它应该使用ConstantDataArray::get.

这是一个更具体的例子来说明我的意思:

  1. 假设我要创建的数组将在 C++ 中这样声明:

    诠释 x[2][3] = {{1,2,3},{4,5,6}};

  2. 最内层(类型 int[3])是一个简单的数组类型,因此创建了两个 CDA。

  3. 下一个等级是两个 int[3] 的数组。它不是一个简单的类型,所以ConstantArray创建了一个正则。参数是ArrayRef<Constant*>包含两个 CDA 的。

在第 3 步,ConstantArray因为初始化程序没有完全正确的类型而抱怨。这是消息:

我虽然ConstantDataArray是一个替代品ConstantArray是元素类型足够简单时的正确的理解方式是什么?

更新

这看起来像是我的代码中的一个错误(在 LLVM 之外)。 ConstantDataArray似乎确实是ConstantArray.

这是我用来演示问题的代码。它实际上在没有任何来自 LLVM 的投诉的情况下运行:

如果有人感兴趣,断言源于我反转数组范围。 int[2][3]是一个由两个三个数组组成的数组。我正在重载operator[]构建一个数组类型 as i64[2][3],其中i64是一个包含 anIntegerType*和重载的对象operator[]。问题是这构建了一个由三个数组组成的数组,每组两个。

0 投票
0 回答
116 浏览

llvm - LLVM 3.4 性能下降?

我使用Spec 2006基准测试来衡量一些私人通行证和生成的代码的性能。到目前为止,我所有的工作都是基于LLVM 3.1的。

上周我想继续使用 LLVM,并且我将所有通行证重新设置为LLVM 3.4。这只需要调整几#include行。然而,在那次改变之后,我测量了一个巨大的性能回归。接下来,我禁用了所有自定义通行证,但性能仍然下降。以下是使用 LLVM 3.1 和 3.4 编译的一些 Spec 基准测试的数量

我还注意到 eg 调用的函数数量456.hmmer从 6 变为 45009;大多数其他基准测试显示类似的数字。内联失败?

我用

然后打电话opt

一旦opt完成,位码就会被降低llc并链接到一个可执行文件中。

性能回归非常明显,我怀疑 3.4 是否会以如此明显的回归发布。所以我的问题是:我错过了什么吗?现在是否更明确地调用了优化?我在通过后添加-std-compile-opts到我的 opt 调用中,但这根本没有帮助。

编辑正如建议的那样,我向LLVMdev 邮件列表提出了这个问题,但该线程很少受到关注。

0 投票
2 回答
8777 浏览

c++ - 使用 cmake 将 LLVM 添加到项目中

我正在尝试将 LLVM 添加到 cmake 项目中,使用 cygwin 作为编译器。我从 cygwin 的安装程序下载了 LLVM(刚刚安装了所有与 llvm 相关的软件包)。这些文件在那里,但是我不能在我的项目中包含 LLVM。我尝试使用 3.5.2 的官方指南(它安装的版本),我的 CMakeLists.txt 看起来像

但是,我收到一堆这样的错误

在此处输入图像描述

难道我做错了什么?我想做的就是在我的项目中使用 LLVM。

0 投票
1 回答
109 浏览

llvm - 在 FreeBSD 8.4 中编译 llvm 时出错

我正在尝试从 FreeBSD 8.4 中的源代码构建 LLVM。这是我执行的步骤

  1. 从http://llvm.org/releases/3.8.0/llvm-3.8.0.src.tar.xz下载源代码
  2. 将源提取到一个文件夹中。
  3. 创建了一个构建目录并在其中运行 $ cmake ../llvm-3.8.0.src
  4. 使用 $cmake --build 开始构建。

它抛出以下错误

GCC 版本 = 4.9.2 CMAKE 版本 = 3.2.3

我还尝试在文件 llvm-3.8.0.src/lib/TableGen/TGLexer.cpp 中包含 stdlib.h。这无济于事。

有没有我缺少的配置?