10得票2回答
如何在使用clang生成llvm ir时保存变量名称?

我通过使用“clang -S -emit-llvm test.c”来生成IR。int main(int argc, char **argv) { int* a=0; a=(int *)malloc(sizeof(int)); printf("hello world\n"...

10得票1回答
从LLVM调用Win32/64函数的正确方法是什么?

我试图从LLVM IR调用一个方法回到C++代码。我正在64位Visual C++中工作,或者正如LLVM所描述的那样:Machine CPU: skylake Machine info: x86_64-pc-windows-msvc 对于整数类型和指针类型,我的代码可以正常...

10得票1回答
如何在LLVM中区分有符号整数和无符号整数

LLVM项目不区分有符号整数和无符号整数,如此处所述。然而,在某些情况下,您需要知道特定变量是应该被解释为有符号还是无符号的,例如在进行大小扩展或在除法中使用时。我的解决方案是为每个变量保留单独的类型信息,描述它是整数类型还是基数类型。 但是,我想知道,是否有一种方法可以在LLVM中“属性”...

10得票1回答
LLVM IR 操作码文档

我已经阅读了LLVM IR 语言参考和位码文件格式,但我没有找到包含操作码列表或解释指令编码的文档。 是否有任何地方可以找到这些信息,或者需要搜索源代码?

10得票1回答
LLVM IR:C++ API:从i1到i32和从i32到i1的类型转换

我正在编写一个编译器,用于处理仅限于int值(即i32)的自制语言。条件和表达式类似于C语言。因此,我将条件语句视为表达式,即它们返回一个int值。它们也可以用于表达式中,例如(2>1)+(3>2)将返回2。但是LLVM条件输出i1值。 现在,我希望在每个条件语句之后,将i1转换为i32,以...

10得票1回答
LLVM运行PassManager(非遗留)

我该如何运行一个非遗留(non-legacy)的PassManager?我尝试了以下方法,但在run函数中尝试使分析管理器(analysis manager)失效时抛出了一些异常。我需要做些其他的初始化操作吗?llvm::AnalysisManager<Module> mm; Pa...

10得票1回答
让LLVM内联库中的一个函数

我正在尝试让 LLVM 内联一个库中的函数。 我有手动生成的 LLVM 位代码文件,使用 llvm-link 连接在一起,并且我也有一个 C 语言库(使用 clang 编译为位代码,并用 llvm-ar 存档)。我成功地将它们全部链接在一起并执行了程序,但是我无法让 LLVM 内联来自库中的...

9得票3回答
LLVM IR代码中标签的表达

有时我在LLVM IR中发现标签标识符以逗号“;”开头,例如 ; <label> 6 然而据我所知,逗号通常用于注释。那么LLVM如何从注释中检索标签信息呢?我是不是漏掉了什么? 下面是一个简单的测试。 C源文件: #include <stdio.h> int ma...

9得票1回答
LLVM IR中在"main()"之前运行的是哪个代码?

有人知道在main之前将执行哪些LLVM IR代码的一般规则吗? 使用Clang++ 3.6时,似乎全局类变量通过目标文件中“.text.startup”部分的函数调用其构造函数。例如: define internal void @__cxx_global_var_init() secti...

9得票1回答
在LLVM中插入外部函数调用的LLVM Pass

我正在编写一个LLVM插件来对一个C源程序进行仪器化。我想在每个分支指令之前插入一个函数调用,该函数调用外部函数的方式如下: void print(int x){ printf("x = %d\n", x); return; } 我希望使用llvm-link工具将这个外...