我有以下代码片段:
static LLVMContext TempContext;
Type * RetTy = Type::getVoidTy(TempContext)
for (Instruction *I : ListOfInstructions) {
if (isa<ReturnInst>(I)) {
RetTy = I->getOperand(0)->getType();
break
}
}
Run Code Online (Sandbox Code Playgroud)
我试图捕获指令的 RetTy 的地方,无论是否无效,这样我就可以在
getOrInsertFunction("TempF", FunctionType::get(RetTy, ArgsTys,false));
Run Code Online (Sandbox Code Playgroud)
只要 ret 指令不是ret void
.
我尝试添加第二个时间if
来检查void
情况,但这似乎不起作用,并且执行在函数中停止FunctionType::get(...)
,打印反向跟踪。
for (Instruction *I : ListOfInstructions) {
if (isa<ReturnInst>(I)) {
if ( I->getOperand(0)->getType() != Type::getVoidTy(TempContext)) {
RetTy = I->getOperand(0)->getType();
break
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,将for
循环全部删除并继续执行,因为该函数可以很好地FunctionType::get(...)
处理初始化的Type * RetTy = Type::getVoidTy(TempContext)
“void”值。RetTy
但是当 …
我想知道是否可以让 LLVMopt
工具详细报告在每个优化级别(如-O1
、-O2
等)期间成功使用了哪些优化通道。
例如,这是文件的简单位码foo.bc
:
define dso_local i32 @main() #0 {
%1 = alloca i32, align 4
%2 = alloca i32, align 4
%3 = alloca i32, align 4
store i32 0, i32* %1, align 4
store i32 1, i32* %2, align 4
store i32 1, i32* %3, align 4
%4 = load i32, i32* %2, align 4
ret i32 %4
}
Run Code Online (Sandbox Code Playgroud)
这是运行后获得的bitcodeopt -O1 foo.bc -o foo.opt.bc
; Function Attrs: noinline norecurse nounwind …
Run Code Online (Sandbox Code Playgroud) 我是新手LLVM IR
,我正在尝试模拟一些x86指令LLVM IR
.
这是一个简单的案例:
move %eax, %ebx
Run Code Online (Sandbox Code Playgroud)
但是,mov
在查看此处和此处的材料后,我没有找到任何相应的操作码.
所以我的问题是:
如果我想mov
使用LLVM IR 模拟操作码?我该怎么办?
我是新手LLVM IR
,也许我会花很长时间在这个"模拟"工作上,关于LLVM IR的最佳参考应该是什么?
如果有人能给我一些帮助,我真的很感激.谢谢!
我知道该store
指令用于将数据存储到内存中,但下面的llvm-ir代码是什么意思?你可以在这里看到很多空的"{}"结构.
; CHECK: Function: foo:
; CHECK-NEXT: NoAlias: {}* %p, {}* %q
define void @foo({}* %p, {}* %q) {
store {} {}, {}* %p
store {} {}, {}* %q
ret void
}
Run Code Online (Sandbox Code Playgroud)
仅供参考:https://github.com/llvm-mirror/llvm/blob/master/test/Analysis/CFLAliasAnalysis/Steensgaard/empty.ll
对于以下 C 代码片段,LLVM 将生成下面的 IR。
#include <stdio.h>
#include <stdlib.h>
int main(){
printf("Hello world\n");
fflush(NULL);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
; ModuleID = 'a.c'
source_filename = "a.c"
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.15.0"
%struct.__sFILE = type { i8*, i32, i32, i16, i16, %struct.__sbuf, i32, i8*, i32 (i8*)*, i32 (i8*, i8*, i32)*, i64 (i8*, i64, i32)*, i32 (i8*, i8*, i32)*, %struct.__sbuf, %struct.__sFILEX*, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 }
%struct.__sFILEX = type opaque
%struct.__sbuf = type { i8*, …
Run Code Online (Sandbox Code Playgroud) scons
我目前正在尝试编译一个我一直在使用 Clang 编写的小程序,并且在使用构建系统进行编译时出现以下错误:
/usr/bin/clang++ -o src/PluGen/main.o -c -std=c++17 -fPIC -I. -O2 -fno-strict-aliasing -fpermissive -fopenmp --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -fpermissive -fPIC -I. -O2 -flto -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -DHAVE_PYTHON -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DLARGE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_PERL -DREENTRANT -DHAVE_R -I/usr/include -I/usr/local/include -Isrc -I/usr/include/python3.10 -I/usr/lib/perl5/5.36/core_perl/CORE -I/usr/include/R -I/usr/lib/R/library/Rcpp/include -I/usr/lib/R/library/RInside/include -I/usr/lib/R/site-library/RInside/include -I/usr/lib/R/site-library/Rcpp/include -I/usr/local/lib/R/library/Rcpp/include -I/usr/local/lib/R/library/RInside/include -I/usr/local/lib/R/site-library/RInside/include -I/usr/local/lib/R/site-library/Rcpp/include -I/usr/local/lib/R/site-library/RInside/lib src/PluGen/main.cxx
...
/usr/bin/clang++ -o PluGen/plugen -rdynamic -Wl,-E -Wl,-rpath,/usr/lib/perl5/5.36/core_perl/CORE -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now src/PluGen/main.o src/PluGen/PluginGenerator.o -L/lib -L/usr/lib -L/usr/local/lib -L/usr/lib/perl5/5.36/core_perl/CORE -L/usr/lib/R/lib -L/usr/lib/R/library/RInside/lib -L/usr/lib/R/site-library/RInside/lib -L/usr/local/lib/R/library/RInside/lib -L/usr/local/lib/R/site-library/RInside/lib -Llib -lc -lc++ -lstdc++fs
src/PluGen/main.o: file not …
Run Code Online (Sandbox Code Playgroud)