llvm-ir相关内容

Rust:在LLVM位码中包含依赖项

我正在使用SAW验证一些Rust代码。SAW要求您编译为LLVM bitcode,然后可以导入和验证。我知道您可以使用--emit=llvm-bc标志来生成位码,这对于没有依赖项的项目非常有效。 尝试编译使用外部板条箱的项目时会出现此问题。下面是一个Cargo.toml文件示例: [package] name = "foobar" version = "0.1.0" edition = ..
发布时间:2022-07-01 18:49:12 其他开发

如何使用LLVM将基于堆栈的虚拟机字节码转换为SSA格式

有许多关于如何将SSA表示转换为堆栈计算机的问题,但我对相反的情况很感兴趣。 问题 考虑具有有条件/无条件跳转的基于堆栈的VM,其中每个操作码都有固定数量的它消耗和生成的堆栈元素。 LLVM框架中是否有工具/方法可以从字节码输出重构SSA表单。这实质上是一种反汇编形式。 llvm 推荐答案本身没有工具,只是sSMoP。我已经做到了。有些是困难的,但任何事情都是困难的。 ..
发布时间:2022-03-21 22:48:48 其他开发

Badref是什么意思?

IR行是什么意思 define i32 () { 用于定义新函数并将其写入文件 推荐答案 通常,当IR格式不正确时,您会得到打印输出。您应该在您的模块上运行verifier pass,看看它是否可以帮助您找出确切的问题所在。 在此特定情况下,我猜您已经创建了一个新的未命名函数,但尚未将其添加到模块中-如果没有模块,它将无法对全局值进行编号 ..
发布时间:2022-03-21 22:41:59 其他开发

LLVM-如何将AST转换为IR

我知道解析器生成的AST用于在前端生成IR。 我想知道如何解析AST,然后将其转换为IR(探测程序集或位码), AST是树,从AST到IR转换涉及哪些步骤。 推荐答案 发射LLVM IR from Clang ASTs发生在朗氏code gen阶段。此阶段的代码位于lib/CodeGen/中(相对于Clang的源根目录)。不需要解析AST,因为Clang在内存数据结构中具有 ..
发布时间:2022-03-21 22:27:31 其他开发

GEP指令:i32与i64

我一直试图理解LLVM的GetElementPtr(GEP)指令,发现了这个文档: http://llvm.org/docs/GetElementPtr.html 它非常有帮助,但是有几件事我觉得很困惑。特别地,在“什么是GEP取消引用?”一节(http://llvm.org/docs/GetElementPtr.html#id6)中讨论了以下代码: %MyVar = unini ..
发布时间:2022-03-21 22:19:04 其他开发

获取 LLVM 值的原始变量名

llvm::User(例如指令)是 llvm::Value秒. mem2reg 传递之后,变量在 SSA 形式中,并且它们与原始源代码对应的名称丢失了.Value::getName() 只为某些东西设置;对于大多数作为中介的变量,它没有设置. instnamer 传递可以运行以提供所有变量名称,如 tmp1 和 tmp2,但这并不能捕获它们最初的位置来自.这是原始 C 代码旁边的一些 ..
发布时间:2022-01-17 08:21:33 其他开发

创建LLVM IR的方法

我正在创建 clang 工具,我想从 clang AST 生成 LLVM IR.我知道可以用来获取 *.ll 文件的 -emit-llvm 选项,但是有没有办法在代码中生成 IR?我可以调用的一些方法接受 clang AST 或 AST 上下文并返回 llvm::Module?我找不到任何可以说明这一点的示例. 已编辑:所以我尝试为此使用 CodeGenAction,但我无法让它工作.我最终 ..
发布时间:2021-11-26 17:43:27 其他开发

LLVM 错误无法选择内部 %llvm.coro.begin

我正在学习LLVM中的协程功能,并且一直在基于示例. 当我尝试对生成的位代码运行 llc 时,收到错误消息 LLVM错误:无法选择:固有%llvm.coro.begin .到目前为止,我发现的唯一类似错误是由于某些平台不支持 i1 布尔值,但是我调用的所有内在函数都不使用 i1 . 这是LLVM IR,我已删除了对 llvm.coro.begin 的调用后将发生的所有逻辑,以降低发生错 ..
发布时间:2021-05-30 19:41:11 其他开发

如何在LLVM IR中使用RISC-V向量(RVV)指令?

在本演示文稿Kruppe和Espasa在 https://github.com/hanna-kruppe/rvv-llvm .但是,该存储库现在已存档,并且README文件指示该存储库已过时,因为现在已在上游开发了对RISC-V V扩展的支持.我认为这意味着这些功能现在可以从 https://github.com/llvm的LLVM主机中获得./llvm-project . 但是,当我拉出当 ..
发布时间:2021-05-30 19:41:08 其他开发

LLVM:通过OCaml绑定定义新类型

我正在使用LLVM OCaml绑定为无类型语言构建编译器.不幸的是,我唯一的参考是来源中的 llvm.mli . 因此,我尝试声明一个 value_t 如下: let llar = [|i64_type;array_type i8_type 10;vector_type i64_type 10 |]在让value_t = struct_type llar输入declare_global ..
发布时间:2021-05-30 19:39:18 其他开发

在llvm ir中将布尔向量转换为整数

我正在编写一个涉及向量运算的llvm-ir代码.我用'icmp'指令进行了整数向量比较,结果得到一个向量为的布尔向量,我的问题是我想将这8位转换为对应的整数值而无需遍历向量(向量),我尝试了“将bitcast转换为i8",这似乎将向量的第一位转换为i8,如果不正确,请更正我.有人可以建议我这样做吗. 定义i8 @main()#0 {入口:%A = alloca ..
发布时间:2021-05-30 19:39:15 其他开发

llvm-将参数传递给传递

我需要告诉通行证在文件中查找特定功能.我想指定要在旅途中寻找的功能,即运行通行证时.知道我该怎么做吗?这有点像理论上向函数传递参数. 解决方案 使用 cl :: opt 添加命令行选项,并在运行密码时进行设置. 或者,如果要使用clang从C或C ++生成IR,则可以使用 __ attribute((__ annotate __(("foo"))))来标记您感兴趣的 ..
发布时间:2021-05-30 19:39:01 其他开发

如何使用llvm内部函数@ llvm.read_register?

我注意到 llvm.read_register()可以读取堆栈指针的值,以及 llvm.write_register()可以设置堆栈指针的值.我将主要功能添加到 stackpointer.ll 中,该功能可以在llvm src中找到: ; stackpointer.ll定义i32 @get_stack()nounwind {%sp =调用i32 @ llvm.read_register.i32( ..
发布时间:2021-05-30 19:38:41 其他开发

LLVM IR alloca指令

我想为我的玩具编译器设计一个IR(例如LLVM IR),但我不知道 alloca 指令在进一步分析中的目的是什么?哪些优化使用了 alloca 信息? 解决方案 "alloca"指令在当前正在执行的功能,当此功能被自动释放时函数返回到其调用方.该对象始终分配在数据布局中指示的alloca的地址空间. "alloca"指令通常用于表示自动必须具有地址的变量. 更多信息,请点击 ..
发布时间:2021-05-30 19:38:21 其他开发

从另一个文件定义的LLVM插入函数调用

我想在某个指令之前全部插入一个函数,但是该函数调用是在另一个文件中定义的.我尝试过 IRBuilder生成器(pi);CallInst * callOne = Builder.CreateCall(func_ins,"foo"); 其中 func_ins 是 func *(或更一般地说是Value *),而 foo 是分配了调用函数的变量名前缀.由于此函数是在另一个文件中定义的,因此我 ..
发布时间:2021-05-30 19:38:17 其他开发

GDB显示LLVM IR变量失败

我构建了一个简单的应用程序: hello.c #include无效foo(int x){printf(“%d",x);}int main(){printf("Hello \ n");foo(6 + 5);返回0;} 具有LLVM IR表示形式: ;ModuleID ='hello.ll'source_filename ="hello.c";目标数据布局="e-m ..
发布时间:2021-05-10 18:37:58 其他开发

组装中的功能是什么?

我正在尝试研究汇编,编译器(LLVM)和提升器. 我可以用nasm编写汇编代码.(例如此) 下面是我的汇编代码. 部分.datahello_string db"Hello World!",0x0d,0x0ahello_string_len equ $-hello_string.text部分全局_start_开始:mov eax,4;eax ..
发布时间:2021-04-23 20:02:24 其他开发

printf在LLVM IR中不适用于浮点数

我想将浮点变量的值打印到屏幕上.我在LLVM IR代码中声明了printf()函数,它已成功链接. 每当我打印整数,字符数据类型或字符串时,printf()都会在C代码中将它们正常打印到屏幕上.但是,如果我将float传递给printf(),它会打印0.000000,而不是打印浮点数.我多次检查了源代码,似乎语法是正确的.它应该正在打印2.75!我正在看这段代码,我绝对不明白代码与我编写的代 ..
发布时间:2020-11-08 22:26:56 其他开发