问题标签 [llvm-py]

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

python - 在 Mac OS X 上构建和运行 llvm-py

我试图在 Mac OS X 上构建llvm-py 。

这是我尝试做的,我需要下载 11vm-2.7,并且 README 文件有这样的注释:确保将 '--enable-pic' 传递给 LLVM 的 'configure'

  1. 下载llvm 2.7
  2. 构建 llvm 2.7:运行./configure --prefix=LLVM_DIRECTORY --enable-pic
  3. 下载llvm-py 0.6
  4. 构建 llvm-py 0.6:运行python setup.py build --llvm-config=LLVM_DIRECTORY/bin/llvm-config

一切编译都没有错误,但是当我尝试运行测试文件时,我收到了这个错误消息。

ImportError: 'dlopen(/Library/Python/2.7/site-packages/llvm/_core.so, 2): Symbol not found: __ZTVN4llvm16ExtractValueInstE\n Referenced from: /Library/Python/2.7/site-packages/llvm/_core.so\n Expected in: flat namespace\n in /Library/Python/2.7/site-packages/llvm/_core.so'

消息错误似乎表明缺少具有平面命名空间问题的函数“llvmExtractValueInst”。这有什么问题?

在 llvm 2.7 中, Makefile.rules 有这一行

SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress \ -dynamiclib

我试图删除flat_namespace,但出现编译错误。

添加

按照 locojay 的回答,我可以构建 brew 和 llvmpy。

但是,当我尝试在测试目录中执行示例时,我仍然遇到了不同类型的错误-

这是我跑步时的结果otool -L /Library/Python/2.7/site-packages/llvm/_core.so

0 投票
1 回答
215 浏览

python - 如何将 python 中的 Class 对象“转换”为 llvm?

我愿意使用 llvm 来优化我的 python 代码。我阅读了一些教程,但我还没有弄清楚如何将类对象从 python 代码导出到 llvm。我学会了如何在 llvm-py 中创建一个函数,但是类超出了我的能力。

这是我想在 llvm 代码中创建的类的示例:

如果有任何帮助,我将不胜感激!

0 投票
1 回答
114 浏览

objective-c - 是否可以从 iOS 中 *any|some* llvm 生成的代码加载函数(不是由 clang 制作的)?

如果我用 LLVM 构建一个函数,比如

使用http://www.llvmpy.org/llvmpy-doc/dev/doc/firstexample.html之类的东西,是否可以从 iOS 内部使用该功能?好像是用 C/C++/Obj-c 制作的函数?

这是因为我想知道在 LLVM 上构建语言是否会自动神奇地提供免费支持 iOS 的路径(即:与嵌入 python 或类似的东西一样难)。

如果可以,怎么做?(即:从 obj-c 调用 sum)

0 投票
2 回答
1044 浏览

python - 从 LLVM JIT 调用 Python 代码

我在 python 中编写了一个语言词法分析器/解析器/编译器,稍后应该在 LLVM JIT-VM(使用llvm-py)中运行。前两个步骤现在非常简单,但是(即使我还没有启动编译任务)我看到了一个问题,当我的代码想要调用 Python-Code(通常),或者与 Python 词法分析器交互时/parser/compiler(特别)分别。我主要担心的是,代码应该能够在运行时将其他代码动态加载到 VM 中,因此它必须从 VM 内触发 Python 中的整个词法分析器/解析器/编译器链。

首先:这是否可能,或者VM一旦启动就“不可变”?

如果是,我目前看到 3 种可能的解决方案(我愿意接受其他建议)

  • “突破”虚拟机并使其可以直接调用主进程的 Python 函数(可能通过将其注册为 LLVM 函数,以某种方式重定向到主进程)。我对此一无所知,无论如何我不确定这是否是个好主意(安全等)。
  • 将运行时(在运行时静态或动态)编译成 LLVM-Assembly/-IR。这要求 IR 代码能够修改它在其中运行的 VM
  • 将运行时(静态)编译到库中并将其直接加载到 VM 中。同样,它必须能够向它运行的 VM 添加功能(等)。
0 投票
1 回答
128 浏览

python - 如何在 LLVM 中存储值?

我正在使用 LLVM 的Python 绑定- 到目前为止,我已经能够Constant使用 LLVM 生成值。但是,我对如何将它们存储在地址中感到困惑。

这可能是一个非常基本的问题——如何在内存中存储一​​个常量?我以后如何访问该值的内存位置?

0 投票
1 回答
264 浏览

python - 如何从 Python 的 LLVM 绑定中写入输出?

我正在使用 Python 的LLVM 绑定来生成自定义语言的代码。

现在我想运行程序并检查它们的输出是否正常工作 - 但我无法确切地弄清楚如何输出任何东西。

是否有某种方法可以使用 LLVM 绑定写入stdout或写入文件?

还是我需要printf从 C 库调用?

我该怎么做其中之一?

注意:我没有使用 JIT / ExecutionEngine,所以 LLVM 不会自动找到该printf函数。

0 投票
1 回答
1315 浏览

python - How do I pass an array pointer to a function in LLVM / llvmpy?

I am using llvmpy to (attempt to) generate IR code. However, I am stuck using printf and an array of int8.

The following is an excerpt of what is giving me issues:

When I run this code I receive

ctypes.ArgumentError: argument 1: : wrong type

What am I doing wrong? I feel that my usage of .gep() is at fault, but I'm not sure in what way. Or is there something else that I don't understand?

Also, is there a way to get the expected type from the function?

0 投票
1 回答
661 浏览

arrays - 如何在 LLVM 中保存一组指针?

对于某些背景,我正在使用 llvmpy 库实现编译器,该库是 LLVM IR 生成的包装器。

我创建了一种代表一个或多个 UTF-8 代码点的字符类型。这些代码点存储在一个数组中,因此字符可以是以下数组之一:

现在,我想实现一个字符串类型。这将是一个指向数组的指针数组:

但是,(据我所知)LLVM 似乎要求我声明内部数组的长度。所以,虽然我可以存储这个:

我不能存储这个:

如果数组指针导致不同长度的数组,有没有办法存储数组指针数组?

0 投票
1 回答
703 浏览

python - 为什么 LLVM 在创建数组时会抛出“不兼容类型的参数”错误?

我正在使用 LLVM 和 llvmpy 库。

我的目标是创建类似于以下 C 代码的内容:

以下是上述摘录的输出IR:

我相信我已经很好地理解了这一点 - 它只是抓取指向每个单独数组头部的指针,然后用于getelementptr遍历存储数组并插入每个指针。

这是我想出的llvmpy

但我收到错误:

include/llvm/Support/Casting.h:219: typename cast_retty::ret_type llvm::cast_or_null(llvm::Value *): Assertion `isa(Val) && "cast_or_null() argument of in compatible type!"' 失败。

在包含代码的行上:

当我检查指针的类型和数组的类型时,它们似乎都是int32*. 我究竟做错了什么?而且,是否Value需要强制转换通用占位符?

0 投票
1 回答
790 浏览

llvm - 玩 llvm-py

我试图让 llvm-py 安装在我的 OSX 10.9 上,但在尝试安装时出现以下错误。

但是,我似乎没有llvm-config安装。目前,clangllvm-gcc似乎llvm-g++默认出现在 OSX 上。我应该从源代码重新安装它以便能够使用 llvm-config 吗?