9得票2回答
LLVM尾调用优化

以下是我的理解: 当一个函数“f”调用自身是其最后一个操作时,它就是尾递归的。 尾递归可以通过形成循环而不是再次调用函数来显着优化;函数的参数在原地更新,并且再次运行主体。这被称为递归尾调用优化。 当使用fastcc、GHC或HiPE调用约定时,LLVM实现递归尾调用优化。 http://...

9得票1回答
LLVM任意精度整数

LLVM 语言参考 指出: 整数类型是一种非常简单的类型,它仅指定所需整数类型的任意位宽度。可以指定从1位到223-1(约800万)的任何位宽度。 这是否意味着我可以免费使用任意固定长度的整数?也就是说,如果我声明一个i100,那么我会有一个具有100位宽度的变量吗?

9得票2回答
LLI:LLVM错误:无法选择:X86ISD :: WrapperRIP TargetGlobalTLSAddress:i64

在Linux(Debian)上使用clang++ -S -emit-llvm main.cpp && lli main.ll运行以下代码。 #include <future> int main () { return std::async([]{return...

9得票1回答
为什么 Julia 不能像 C++ (LLVM) 一样优化这段代码?

当使用带有LLVM版本6.0.0的C++编译器时,以下代码 bool isEven(int n) { bool ret = true; for (int i = 0; i < n; i ++) { ret = !ret; } return...

8得票1回答
C语言中的restrict限定符与LLVM IR中的noalias属性的区别

我的问题与C中的restrict限定符和LLVM中的noalias属性在函数参数中使用时的不同语义有关。 根据LLVM的noalias文档: 这表示在函数执行期间,基于参数或返回值的指针访问的对象不会通过基于非参数或返回值的指针值进行访问。 对于restrict限定符,在C11草案(示例...

8得票1回答
我该如何从LLVM ir创建可执行文件?

我目前正在使用llc将一个.ll文件通过命令行转换成.s文件。然后我想使用nasm从中创建一个可执行文件。虽然第一步似乎运行良好,但我无法使第二步运行。 原始文件名为code.ll,包含以下代码: define i32 @main() { ret i32 0 } 现在我使用...

8得票1回答
clang-3.8和compiler-rt与libgcc的比较

我一直在使用 clang-3.5,愉快地构建musl libc的比特码版本,并使用结果生成漂亮的独立可执行文件。 最近尝试使用 clang-3.8 不太顺利。似乎由 clang-3.8 生成的比特码使用了在...中定义的函数。 compiler-rt/lib/builtins 典型的例...

8得票1回答
LLVM MCJIT / SEH异常处理

最近,我一直在尝试将SEH异常处理与MCJIT一起在LLVM(3.8.1)中运行。到目前为止,还没有成功。 根据网站(http://llvm.org/docs/ExceptionHandling.html)的理解,这基本上是应该如何实现的。使用clang编译一个最小的代码片段会得到几乎相同的...

8得票1回答
LLVM 结构体数组迭代

在使用LLVM编译此代码时: struct bar { int int1; int int2; char char1; char char2; char char3; }; struct foo { struct bar array[16]...

8得票1回答
程序编译中的PIC级别是什么?

我正在研究LLVM库,发现Clang添加了以下元数据来生成LLVM IR模块: !llvm.module.flags = !{!0} !llvm.ident = !{!1} !0 = !{i32 1, !"PIC Level", i32 2} !1 = !{!"Apple LLVM ver...