问题标签 [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.
llvm - 使用 llvm 的 CloneFunctionInto()
我需要在 LLVM 函数传递中通过 CloneFunctionInto 将一个函数克隆到另一个函数中,以使原始控制流图免受我在第一次可能做出的任何更改的影响。
http://llvm.org/docs/doxygen/html/Cloning_8h_source.html
谁能帮我解决这个问题,因为我有一些缺失的部分,比如ClonedCodeInfo
and ValueMapTypeRemapper
?
如果你给我一个例子来更好地理解
谢谢
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() && “当一个值被破坏时使用仍然存在!”'失败。
堆栈转储:
中止(核心转储)
澄清一下:它为我提供了正确的基本块及其正确的继任者,但由于这个错误它也不能很好地工作
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 所需分析:未初始化的通过
llvm - 如何获取表达式上所有操作数的内存地址
我有一些表达式a=b+c-d*e
,在 LLVM pass 的帮助下,我想制作一个这样的字符串
“['b'的十六进制地址] [+的操作码] ['c'的十六进制地址] [-的操作码] ['d'的十六进制地址] [*的操作码] ['e'的十六进制地址]”。
比我该怎么做。
llvm - 如何查看 llvm 转换过程所做的更改
如何在 c 程序中查看转换传递(如死代码消除)所做的更改。就像我在终端上运行以下命令一样,它会创建一个 .bc 文件,通过该文件我可以看到 IR。但是如何在 c 程序中查看 -dce 所做的更改。命令:$opt in.bc -o out.bc -dce
llvm - 使用 LLVM 进行转换
我正在做一些项目,通过先将 C+ACSL 语言转换为另一种语言,先将其转换为 LLVM IR,然后再将其转换为另一种语言。这个我说不上来,因为和一群不想公开的人有关,所以我们就不说了,但是和C很接近。我已经完成了LLVM IR的工作,也有在 CBackend 的帮助下编写将其转换回来,但我真的不知道如何使用它,这意味着我应该如何将它运行到我的 LLVM IR 中。LLVM 中是否有用于执行此操作的命令,或者可以帮助我的东西。
更新 1 我的输入是 LLVM IR,输出将是类似 C 的代码,而不是 C,因为它将遵循与 C 不同的语法。
llvm - 什么时候应该使用 ConstantDataArray 和 ConstantArray?
我正在使用 LLVM 3.3 C++-API。我的代码使用ConstantArray::get
, 和使用递归代码创建多维数组(最内层首先转换为 Constant*s 的向量,如上所述,然后用于初始化下一个最内层,依此类推)。
我试图通过说如果数组的元素类型满足ConstantDataArray::isElementTypeCompatible
谓词来优化这一点,那么它应该使用ConstantDataArray::get
.
这是一个更具体的例子来说明我的意思:
假设我要创建的数组将在 C++ 中这样声明:
诠释 x[2][3] = {{1,2,3},{4,5,6}};
最内层(类型 int[3])是一个简单的数组类型,因此创建了两个 CDA。
下一个等级是两个 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[]
。问题是这构建了一个由三个数组组成的数组,每组两个。
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 邮件列表提出了这个问题,但该线程很少受到关注。
c++ - 使用 cmake 将 LLVM 添加到项目中
我正在尝试将 LLVM 添加到 cmake 项目中,使用 cygwin 作为编译器。我从 cygwin 的安装程序下载了 LLVM(刚刚安装了所有与 llvm 相关的软件包)。这些文件在那里,但是我不能在我的项目中包含 LLVM。我尝试使用 3.5.2 的官方指南(它安装的版本),我的 CMakeLists.txt 看起来像
但是,我收到一堆这样的错误
难道我做错了什么?我想做的就是在我的项目中使用 LLVM。
llvm - 在 FreeBSD 8.4 中编译 llvm 时出错
我正在尝试从 FreeBSD 8.4 中的源代码构建 LLVM。这是我执行的步骤
- 从http://llvm.org/releases/3.8.0/llvm-3.8.0.src.tar.xz下载源代码
- 将源提取到一个文件夹中。
- 创建了一个构建目录并在其中运行 $ cmake ../llvm-3.8.0.src
- 使用 $cmake --build 开始构建。
它抛出以下错误
GCC 版本 = 4.9.2 CMAKE 版本 = 3.2.3
我还尝试在文件 llvm-3.8.0.src/lib/TableGen/TGLexer.cpp 中包含 stdlib.h。这无济于事。
有没有我缺少的配置?