15得票1回答
将嵌入式LLVM转换为二进制代码(共享库)的C++操作

我正在开发一个用C++编写的高性能系统。该过程需要能够在应用程序中运行一些用简单语言编写的复杂逻辑(规则)。我们有两个选择: 解释逻辑-运行嵌入式解释器并生成动态函数调用,当接收到数据时,根据解释后的逻辑处理数据 将逻辑编译为plugin.so动态共享文件,使用dlopen、dlsym加载...

14得票1回答
在clang命令行上提供一个LLVM ModulePass

我有一个ModulePass可以在opt工具中使用,但我不知道该如何让它在clang命令行中可用。目前使用该pass的方法如下: clang -c -emit-llvm [c源代码文件] llvm-link [llvm位码文件] opt -load [PassName].so -[pass...

14得票3回答
LLVM IR代码中的Call与Invoke有什么区别?

我有三个问题: 1)LLVM IR代码中Invoke和Call操作的区别是什么? 2)为什么在BasicBlocks中Call指令不被视为终止器操作,详情请见这里? 3)无论是Invoke还是Call操作,在汇编语言层面上都有可能生成间接调用吗? 提前感谢您的回答,

13得票3回答
如何插入LLVM指令?

我已经搜寻了好几个小时,但是没有找到任何能够帮助我的东西。我正在处理一个涉及FunctionPass的项目。我已经实现了runOnFunction(Function &f)方法,并且它运行得很好。基本上需要做以下几点: 1)检测存储指令 2)将存储指令的内存地址转换为整数 3)使...

13得票1回答
为什么LLVM IR中的空函数不被作为死代码移除?

从这个简单的C程序开始:void nothing(void) {} int main() { int i; for (i = 0; i < 10; ++i) { nothing(); } return 0; } 我的传递输出如下: 注意:IR语句为绿色。; Fun...

13得票1回答
在LLVM IR中表示void指针类型

目前,我在生成的IR中使用 i8* 来表示 void 指针,但这使得很难区分 void* 和 char*。有没有常见的解决方法?我已经搜索了很多,但没有找到。 对于其他类型对,我能够直接使用 llvm::Type* 来区分类型,所以如果不能再为 void 指针特例这样做,它将增加很多复杂性。...

12得票3回答
如何在LLVM中编写自定义的跨模块传递?

我已经通过扩展FunctionPass类在LLVM中编写了标准分析流程。现在我想编写一些跨模块的 passes,也就是允许我同时分析多个模块的 passes。其中一个 pass 的目的是构建整个应用程序的调用图。另一个 pass 的目的是我有一个关于函数调用及其参数优化的想法。 我知道在LL...

12得票2回答
如何通过模块构建系统在LLVM中调用@printf

我正在学习LLVM。我了解到LLVM提供了一些有用的C函数,这些函数作为内置函数已经存在于LLVM中。因此,我正在尝试从我的代码中调用@printf函数。 我在LLVM参考手册中找到了相应的部分,描述了实现这一点所需的IR代码,这相对清晰:declare i32 @printf(i8* noa...

11得票2回答
从LLVM位代码生成Rust可执行文件

我如何生成由Rust编写且已编译为LLVM-IR位代码的应用程序的可执行文件? 如果我尝试使用rustc编译 .bc 文件,它会告诉我 流不包含有效的UTF-8 ,我似乎找不到rustc中是否有特定的选项可以解决这个问题。 基本上,我想实现以下操作: program.rs -> progr...

11得票1回答
如何将JavaScript转换为LLVM IR?

是否有JavaScript的LLVM后端?如果没有,其他将动态语言(类似于JavaScript)转换为LLVM IR的工具也可以。因为我正在编写一种动态语言编译器,这些工具可以帮助我找出某些功能的实现方式。