问题标签 [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.
compiler-construction - LLVM alloca 导致 while 语句的堆栈溢出
我正在为针对 LLVM-IR 的玩具语言实现前端编译器,在运行编译while
语句时遇到堆栈溢出:
例如,这段代码应该永远运行,但一段时间后我们编译的版本堆栈溢出。
这是编译后的 LLVM-IR:
我们认为我们的问题来自所有alloca
未发布的,因为我们仍然在同一个函数中。
当函数返回时,“分配”的内存会自动释放。
我们应该如何编译while循环?
我们能避免这个问题吗?
llvm-ir - LLVM return from calling external function is wrong
I'm trying LLVM and hitting some walls, like this one. When I compile and run the piece of code below, instead of getting the current year, I'm getting the day of the week:
Please note that I'm not writing C or C++ code, I'm writing the code above as it is. Can someone point me out what I'm doing wrong? All members of SYSTEMTIME seems to be off by 2 positions...
c++ - LLVM-IR 数组指针赋值
在 C++/C 中,您可以这样做:
我想知道这在 LLVM-IR 中是否可行,或者它会立即抱怨类型问题。正要深入研究这个,但我想看看是否有人尝试过这个特定的例子。我会将 GEP A 的第 0 个位置作为 i8*,然后将 B 和 C 作为 i32*。如果可能的话,我对如何进行有点困惑。
提前谢谢。
更新:
好的,如果我改为为 *B 和 C[0]、C[1] 添加初始化,LLVM-IR /C / C++ 的答案会改变吗?
assembly - 是否可以直接从格式良好的 AST 生成汇编代码而不转换为 IR?
我有一个用 LLVM 和 C++ 实现的玩具解释器(通过步行 AST 生成 LLVM IR 并使用 JIT 运行,基于 Perl 的语言,内置数据结构和函数)。现在我想将它扩展为可编译的,生成程序集使用gas和ld编写代码并获得可执行文件。
如果我想要的只是一个可运行的编译器,它可以创建一个“正确的”elf 可执行文件而没有复杂的优化,我必须将 AST 转换为 RTL 之类的 IR 或类似的东西吗?或者有其他选择而不是在句法分析阶段构建 AST?
顺便说一句,我想知道在像 lcc 或 tcc 这样的小型编译器中,它的“IR”和“目标代码”是什么?
python - llvm 可以从托管语言执行代码吗?
我正在制作一个应用程序,我想使用 ExecutionEngine 加载和执行 llvm 位代码。到目前为止,我已经设法使用通过 clang 编译的非常简单的 C 代码来做到这一点。
我的想法是,如果我在这个项目中使用 llvm,那么它可能比说的更与语言无关,特别是选择 lua/python/javascript。但是我很困惑这对于托管或脚本语言如何工作,因为它们通常与具有 GC 等资源的平台相关联。所以我不确定它如何通过 ExecutionEngine 实际工作。
因此,作为一个示例场景,假设用户想要编写一些在我的应用程序中运行的 python 代码。然后我希望他们向我提供代表该 python 代码的位码,然后我将使用 llvm 的 ExecutionEngine 在我的 C++ 应用程序中运行它。
这可能吗?python可以简单地编译成bitcode然后使用ExecutionEngine运行吗?如果不是,我需要知道什么才能理解为什么不呢?
c++ - LLVM JIT 编译的程序找不到外部函数
如果使用外部定义的函数,我的 JIT 编译 LLVM IR 模块并调用foo
其中定义的函数的程序在运行时会失败:foo
我的程序:
这是我构建程序的方式:
输出:
每当我尝试使用不在 C++ 标准库中的外部定义函数时,它都会失败并出现类似的错误(例如,, printf
, malloc
&free
没有问题)。我究竟做错了什么?
llvm - 如何实现 AssemblyAnnotationWriter 以打印元数据
我正在学习如何在 llvm 中编写通行证。我正在尝试实施
virtual void emitFunctionAnnot(const Function *, formatted_raw_ostream &){}
如http://llvm.org/doxygen/AssemblyAnnotationWriter_8h_source.html#[uses]=1
给出的,在函数开始之前
打印。
emitFunctionAnnot(&F, ferrs());
如果我手动调用内部runOnFunction()
方法,下面的代码可以工作,emitFunctionAnnot
我已经覆盖了 which()。但是,如果不将其称为 manullay,它是否应该起作用,因为这就是覆盖它的全部意义。我相信我在覆盖时做错了什么。我花了无数个小时试图调试它。我将不胜感激任何帮助。
这就是我到目前为止所拥有的。
llvm - 获取 LLVM 中的函数将花费的总周期数
假设我有一个用 LLVM IR 表示的函数,我想估计这个函数在我的机器上占用的 cpu 周期数。
我知道这是特定于架构的信息,但出于某些规划目的,我想对此进行粗略估计。
是否可以编写一个遍历函数中的指令并返回这些指令将花费的总周期数的传递?
将不胜感激任何想法。
谢谢,
凯汉
compiler-construction - 获取 LLVM 值的原始变量名
llvm::User
(例如指令)的操作数是llvm::Value
s。
mem2reg通过后,变量为SSA 形式,与原始源代码对应的名称丢失。 Value::getName()
只为某些东西设置;对于大多数作为中介的变量,它没有设置。
可以运行 instnamer传递以提供所有变量名称,例如tmp1和tmp2,但这并不能捕获它们最初的来源。这是原始 C 代码旁边的一些 LLVM IR:
我正在构建一个简单的 html 页面来可视化和调试我正在处理的一些优化,并且我想将 SSA 变量显示为名称ver表示法,而不仅仅是临时的 instnamer 名称。它只是为了帮助我的可读性。
我正在使用命令行从 clang 获取我的 LLVM IR,例如:
IR 中有调用llvm.dbg.declare
和调用llvm.dbg.value
;你如何变成原始源代码名称和 SSA 版本号?
那么如何从 中确定原始变量(或命名常量名)llvm::Value
?调试器必须能够做到这一点,那么我该怎么做呢?
llvm - 如何添加对 LLVM IR 中先前函数中定义的变量的引用?
我是 LLVM IR 的新手,我正在实现 PL0 语言。http://en.wikipedia.org/wiki/PL/0
我正在生成测试文件,如下所示:
而我生成的 LLVM IR 是这样的:
我在这里遇到了一个痛苦的错误(破坏时):
我猜想在过程中使用变量c
(在 中定义__global_main_entry__
)check2
会在 llvm::Value 中添加一个 ref,当破坏__global_main_entry__
ref 时check2
会导致错误。
不知道怎么解决,有时间请具体说一下~
(另外,除了llvm的官方文档。LLVM上还有资源吗?我发现大部分教程都过时了。)
我的完整代码列表在这里:https ://github.com/adamcavendish/PL0Compiler
提前致谢。