编译原理实验⼆·了解GCC和LLVM·熟悉使⽤过程·观察中间⽂件·了解编译器优化
效果
了解GCC和LLVM·熟悉使⽤过程·观察中间⽂件·了解编译器优化效果
实验⽬的和内容:
了解⼯业界常⽤的编译器 GCC 和 LLVM,熟悉编译器的安装和使⽤过程,观察编译器⼯作过程中⽣成的中间⽂件的格式和内容,了解编译器的优化效果,为编译器的学习和构造奠定基础。
实验过程与步骤:
本实验主要的内容为在 Linux 平台上安装和运⾏⼯业界常⽤的编译器GCC和LLVM,如果系统中没有安装,则需要⾸先安装编译器,安装完成后编写简单的测试程序,使⽤编译器编译,并观察中间输出结果。
(1)对于 GCC 编译器,完成编译器安装和测试程序编写后,按如下步骤完成:
1.查看编译器的版本
2.使⽤编译器编译单个⽂件
3.使⽤编译器编译链接多个⽂件
gnu编译器4.查看预处理结果:gcc -E hello.c -o hello.i
5.查看语法分析树:gcc -fdump-tree-all hello.c
6.查看中间代码⽣成结果:gcc -fdump-rtl-all hello.c
7.查看⽣成的⽬标代码(汇编代码):gcc –S hello.c –o hello.s
(2)对于 LLVM 编译器,完成编译器安装和测试程序编写后,按如下步骤完成:
1.查看编译器的版本
2.使⽤编译器编译单个⽂件
3.使⽤编译器编译链接多个⽂件
4.查看编译流程和阶段:clang -ccc-print-phases test.c -c
5.查看词法分析结果:clang test.c -Xclang -dump-tokens
6.查看词法分析结果 2:clang test.c -Xclang -dump-raw-tokens
7.查看语法分析结果:clang test.c -Xclang -ast-dump
8.查看语法分析结果 2:clang test.c -Xclang -ast-view
9.查看编译优化的结果:clang test.c -S -mllvm -print-after-all
10.查看⽣成的⽬标代码结果:clang test.c –S
(3)要求:
编写测试程序:可以使⽤语⾔认知部分的 C 语⾔程序,或者其他的 C 语⾔程序作为编译器的输⼊进⾏观测。需要注意的是,不但要求对单个C⽂件进⾏编译,还要求对多个C⽂件⼀起编译和链接。
运⾏编译器进⾏观测:分别运⾏ GCC 和 LLVM 编译器,⾸先要学习编译器的基本使⽤⽅法,其次要通过编译选项查看分析编译器的中间结果,及其与输⼊源码之间的对应关系,最后使⽤-O0、-O1、-O2和-O3分别使⽤两个编译器对输⼊程序进⾏优化编译,并对⽐ GCC 和LLVM 优化后程序的运⾏效率。
运⾏效果截图
准备环境
GCC 编译
查看编译器的版本
使⽤编译器编译单个⽂件//main.c #include <stdio.h>int main (){ int a ; a = 1; a ++; printf ("%d\n", a ); return 0;}
1
2
3
4
5
6
7
8
9
10
4.2.3使⽤编译器编译链接多个⽂件
4.2.4查看预处理结果:gcc -E hello.c -o hello.i //a.h #include <stdio.h>int a = 1;//a.c #include <stdio.h>#include "a.h"int main (){ printf ("a = %d\n", a ); return 0;}
1
2
3
4
5
6
7
8
9
10
11
12
4.2.5查看语法分析树:gcc -fdump-tree-all hello.c
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论