命令:
clang test.cc -O0 -emit-llvm -S -o test.ll
说明:
-emit-llvm 生成IR文件,默认结果为bitcode结果(.bc);
-S 生成汇编格式文件
输入:test.cc
int test(int a, int b) {
int c = 0;
if (a) {
c = a;
} else {
c = b;
}
return c;
}
输出:test.ll
define dso_local noundef i32 @test(int, int)(i32 noundef %0, i32 noundef %1) #0 !dbg !10 {
%3 = alloca i32, align 4
%4 = alloca i32, align 4
%5 = alloca i32, align 4
store i32 %0, ptr %3, align 4
tail call void @llvm.dbg.declare(metadata ptr %3, metadata !16, metadata !DIExpression()), !dbg !17
store i32 %1, ptr %4, align 4
tail call void @llvm.dbg.declare(metadata ptr %4, metadata !18, metadata !DIExpression()), !dbg !19
tail call void @llvm.dbg.declare(metadata ptr %5, metadata !20, metadata !DIExpression()), !dbg !21
store i32 0, ptr %5, align 4, !dbg !21
%6 = load i32, ptr %3, align 4, !dbg !22
%7 = icmp ne i32 %6, 0, !dbg !22
br i1 %7, label %8, label %10, !dbg !24
8:
%9 = load i32, ptr %3, align 4, !dbg !25
store i32 %9, ptr %5, align 4, !dbg !27
br label %12, !dbg !28
10:
%11 = load i32, ptr %4, align 4, !dbg !29
store i32 %11, ptr %5, align 4, !dbg !31
br label %12
12:
%13 = load i32, ptr %5, align 4, !dbg !32
ret i32 %13, !dbg !33
}
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
attributes #0 = { mustprogress noinline nounwind optnone uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }