LLVM IR 生成 -emit-llvm

命令:
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) }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arthur...J

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值