在llvm中完成if else语句的编译

本文介绍了如何使用LLVM将C语言中的if else语句编译为新的DSP芯片指令集。主要涉及添加比较和跳转指令,处理br_cc节点,以及解决BasicBlock识别问题。
摘要由CSDN通过智能技术生成

说明:我们开发了一款新的DSP芯片,定义了一种新的指令集。现在使用llvm来将c代码编译成我们新定义的汇编指令集。本文是其中对c语言总if else语句的处理。

首先看一段c语言程序:

//c代码
void test_main()
{
    int a = 5;
    int b = 10;
    if(a == 5)
        b = 1;
    else
        b = 0;
}

要想编译这段语句,重点有两个,一个是条件语句的处理,第二个就是跳转。
我们首先看一下llvm把这段语句处理成的IR是什么形式:

//经llvm处理后的IR形式
  %cmp = icmp eq i32 %0, 5
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 1, i32* %b, align 4
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 0, i32* %b, align 4
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

忽略次要矛盾,主要的语句就是两句:

//IR中的关键语句
 %cmp = icmp eq i32 %0, 5
  br i1 %cmp, label %if.then, label %if.else

一句是比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值