寻找 llvm v3.5 的目标代码生成模块

summ.c     --(clang -emit-llvm -S)-->   summ.ll   --(llvm-as)---->  summ.bc    --(llc)--->   summ.s

opt -S -O2 实施机器无关优化,跟后端目标代码生成无关,故llc是llvm的后端。

1,示例代码

summ.c

int adddd(int aaa, int bbb, int ccc)
{
        aaa = aaa + bbb;
        aaa = aaa + ccc;

        return aaa;
}

Makefile

BIN_DIR := ../../local_x86_3_5/bin

CLANG   := $(BIN_DIR)/clang
OPT     := $(BIN_DIR)/opt
LLVM-AS := $(BIN_DIR)/llvm-as
LLC     := $(BIN_DIR)/llc

OUT :=  summ.s summ.bc summ.ll summ.clang.O3.s summ.opt.O2.ll summ.opt.O2.bc summ.opt.O2.s

all: $(OUT)


summ.ll: summ.c
        $(CLANG)   -emit-llvm -S summ.c -o summ.ll

summ.bc: summ.ll
        $(LLVM-AS) summ.ll -o summ.bc

summ.s: summ.bc
        $(LLC)     summ.bc -o summ.s

summ.clang.O3.s: summ.c
        $(CLANG) -O3 -S summ.c -o summ.clang.O3.s

summ.opt.O2.ll: summ.ll
        $(OPT) -O2 -S summ.ll -o summ.opt.O2.ll



summ.opt.O2.bc: summ.opt.O2.ll
        $(LLVM-AS) summ.opt.O2.ll -o  summ.opt.O2.bc

summ.opt.O2.s: summ.opt.O2.bc
        $(LLC) summ.opt.O2.bc -o summ.opt.O2.s



.PHONY: clean
clean:
        -rm $(OUT)

2,机器无关优化前后区别

关注 一下 summ.opt.O2.ll 的内容,机器对应的 ASM

3,X86后端分析

llc 是如何将 summ.opt.O2.ll 生成为 summ.opt.O2.s 的呢?

从命令行的角度如下:

$ llvm-as     summ.opt.O2.ll   -o    summ.opt.O2.bc

$ llc    summ.opt.O2.bc   -o   summ.opt.O2.s

关键是这里的 llc 的功能。

接下来分析 llc 的源码大体过程。。。

llc 代码路径:

/home/hipper/ex_llvmorg-3.5.0/llvm-project/llvm/tools/llc/llc.cpp

主要是这个函数:

static int compileModule(char **argv, LLVMContext &Context)

其中,X86 后端机器信息的路径为:

/home/hipper/ex_llvmorg-3.5.0/llvm-project/llvm/lib/Target/X86

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值