问题标签 [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.
multithreading - 字节码/中间语言/编译器后端的便携式多线程支持?
我一直在为需要多线程支持的编程语言开发解析器。在调查我的编译器的后端应该是什么时,我注意到我找不到很多关于多线程的信息,比如 CIL、LLVM IR、gcc RTL 或 JVM 字节码。我可以找到一些关于如何使此类代码线程安全的参考资料,但没有关于如何创建或派生线程的信息。我当然可以使用信号或其他东西直接与操作系统交互,但这是不可移植且容易出错的。
是不是根本就没有可移植的方式来管理这些低级语言中的线程?我应该编译成像 C 这样的高级语言吗?
llvm - 使用数组时的 Julia llvm 函数签名
在查看 julia 编译器生成的 LLVM IR 时(使用code_llvm
),我注意到在使用数组作为参数时函数签名中有一些奇怪的地方。让我举个例子:
(这是一个无用的示例,但结果与其他函数相同,此示例的结果 IR 只是不那么混乱)
使用code_llvm(test, (Int,Int,Int))
,我得到以下输出:
使用code_llvm(test, (Array{Int},Array{Int},Array{Int}))
,我得到了(至少对我而言)意想不到的结果:
为什么 llvm 函数的签名不只是列出 3 个变量i64*
或类似的东西?为什么函数void
不再返回?
llvm - 在 llvm IR 中将一个 def 替换为另一个 def
我有以下 IR:
这本质上是
现在,在复制传播之后,我想要类似的东西:
所以,我这样做:
这样做,我进入了上述 IR 的无限循环。所以我觉得从 op1 的使用中删除 i 并将 i 添加到 op2 的使用中存在一些问题。但是,代码运行良好,例如:
改造后我得到:a=b; c=b;
llvm - 区分 LLVM IR 中的浮点数和双精度数
我正在尝试从 LLVM IR 中提取常量以进行进一步分析。到目前为止,我已经能够使用适当的方法提取整数、浮点数和双精度数。
在尝试从 APF 类中的方法获取值之前,如何区分浮点数和双精度数。如果没有适当的检查,我最终会在我调用convertToFloat()
双精度或convertToDouble()
浮点数时触发断言。在尝试获取值之前,LLVM 中是否有一些间接机制来区分数据类型?
c++ - replacealluseswith 不起作用
SWL 是一个映射,其中我将存储地址作为键,将常量作为其对应值。然而,当我检查这个存储在加载中使用时,我尝试用常量替换存储指令的使用。这样做不会取代指令。运行此遍后字节码没有变化。
llvm-ir - 了解 llvm SelectionDAG
对于一个简单的 llvm IR:
SelectionDAG 图比我想象的要复杂:
为什么CopyFromReg
需要,为什么不直接连接vreg0
和vreg1
连接udiv
?
我应该如何阅读图表,从EntryToken
到GraphRoot
或相反的方向?
gcc - 静态分析中的中间表示 (IR) 内存管理
我很想知道:在过程间数据流分析期间,IR 内存管理的当前最新技术是什么。我想知道完整代码的 IR 在分析期间是否驻留在内存中,或者是否应用了一些内存管理技术来在任何时刻加载和卸载 IR。在 llvm/gcc 基础架构的上下文中,如何将任何分析扩展到数百万行代码。
llvm - 将编译时常量编译为 LLVM 内在函数
我有一个编译时常量,我需要通过它的参数将它传递给一个内在函数,例如
不幸的是,我知道内联 asm 只处理字符串文字,还有其他方法可以实现吗?
llvm - 跟踪 LLVM 中的全局定义
我正在尝试手动构建指令列表,其中在 LLVM IR 中为特定变量分配了一个值。
对于函数中的局部变量,我可以通过使用指令迭代器并检查特定指令的操作数轻松获得正确的指令集。这种方法似乎不适用于全局变量,因为没有与它们关联的存储指令。
有没有办法在不查看元数据字段的情况下跟踪全局变量的定义位置?如果没有,是否有某种方法可以创建一个虚拟指令,可以将其视为全局变量初始定义的特殊标记?
types - LLVM arbitrary precision integer
LLVM language reference states that
The integer type is a very simple type that simply specifies an arbitrary bit width for the integer type desired. Any bit width from 1 bit to 223-1 (about 8 million) can be specified.
Does that mean that I can make use of arbitrary fixed length integers for free? That's to say, if I declare an i100, will I have a variable with 100 bits width?