# compiler-4
- 一个将SysY2022语言编译为ARMv7汇编代码的编译器
- 2022年第三届“毕昇杯”全国大学生计算机系统能力大赛编译系统设计赛从容应队参赛作品
- 参赛队员:王翰墨 王玉佳 乔袁飞龙 郑世杰
- 最终名次:全国二等奖
- 开发仓库链接:https://gitlab.eduxiji.net/educg-group-12619-928705/HammerWang-2412
## 项目简介
主要内容:
1、基于Flex、Bison构建的词法、语法分析器
2、建立抽象语法树与符号表
3、语义分析、语义检查
4、MIR和LIR两级中间表示
5、支持将MIR转为C源程序,可编译运行
6、针对AST、MIR、LIR、ARM的优化
7、翻译为ARMv7汇编语言
## 目录说明
目录 | 说明
:-: | :-:
doc|文档
gen_src|由flex、bison工具自动生成的词法、语法分析器代码
src|参赛队员编写的源代码
testcase|本地测试工具和测试脚本
## 文档
文档存放在在"doc"目录下
文件名 | 说明
:---: | :---:
compiler2022-cryd.docx|总体设计文档
ast_specification.md|抽象语法树规范
mir_specification.md|中级IR规范
lir_specification.md|低级IR规范
detailed_design.docx|数据结构、算法、接口和功能
update_log.md|(部分)更新记录
## 优化简介
针对AST的优化:
名称 | 描述
:---: | :---:
常量折叠|将源语言中对const常量的引用替换为字面值
循环倒置|将while型循环倒置为do-while型,减少跳转指令。
常量数组访问替代|除初始化外未被修改的数组,对特定元素的访用常量代替
if转switch|将对同一个变量进行判断的if语句转成switch,以实现跳转表优化
针对MIR的优化:
名称 | 描述
:---: | :---:
基本块化简|包含空基本块删除、不可达基本块删除、相邻基本块合并
常量折叠与代数化简|用更简单的指令替代操作数均为常量,或是可以进行代数化简的运算指令
SSA形式变换|将MIR转为静态单赋值形式
SSA形式逆变换|将静态单赋值形式的MIR转回原形式
死调用删除|删除无副作用,且返回值被丢弃/无返回值的函数调用
死代码删除|删除计算结果未被使用的指令,丢弃未使用的函数返回值(支持基本块内的全局变量分析)
常量重结合|在变量对常量加减乘除的计算指令之间寻找将它们重新结合的机会,以产生更多死代码
全局公共子表达式删除|利用全局值编号的方法提取公共子表达式
局部公共子表达式删除|在基本块内删除冗余的公共子表达式计算(支持全局变量分析)
局部复写传播|在基本块内用被赋值的变量替代其他相同值的变量,创造死代码(支持全局变量分析)
局部数组访问标量替代|在基本块内,如果一个数组元素被定值,则用新值来代替之后对该元素的引用
全局数组访问冗余消除|在整个过程内消除冗余的数组访问
循环不变式外提|将循环不变指令提出循环外
循环展开|将循环展开,为其他优化创造机会
模运算展开|将a%b展开为a-a/b*b
过程集成|将函数内联,减少调用开销,为其他优化带来机会
稀疏条件常量传播|将常量在指令间传播,简化运算和控制流
过程特殊化|将返回值没有用到的函数改成void型,增加死代码
全局变量局部化|将只在main函数中出现的全局变量局部化
过程间数据流分析|建立调用图,分析函数对全局变量的定值/使用情况,让一些优化支持对全局变量的处理
针对LIR的优化:
名称 | 描述
:---: | :---:
强度削弱|将特殊的乘除模运算削弱为代价更小的指令
指令融合|将乘法、加法指令融合为乘累加指令,并进行化简
向前替代|寻找单次使用的变量,在其使用处用计算来代替它
活跃区间分析|分析变量的活跃区间,为寄存器分配做准备
寄存器分配|使用图着色或线性扫描算法为变量分配寄存器
针对ARM汇编语言的优化:
名称 | 描述
:---: | :---:
基本块条件化|对指令数≤5的分支使用条件指令代替
冗余分支指令消除|消除多余的分支指令
## Build
cmake .
make
没有合适的资源?快使用搜索试试~ 我知道了~
2022年第三届“毕昇杯”全国大学生计算机系统能力大赛编译系统设计赛参赛源码+PPT.zip
共156个文件
cpp:57个
h:56个
bat:10个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
1 下载量 151 浏览量
2024-04-02
22:42:08
上传
评论 1
收藏 2.54MB ZIP 举报
温馨提示
1、该资源内项目代码经过严格调试,下载即用确保可以运行! 2、该资源适合计算机相关专业(如计科、人工智能、大数据、数学、电子信息等)正在做课程设计、期末大作业和毕设项目的学生、或者相关技术学习者作为学习资料参考使用。 3、该资源包括全部源码,需要具备一定基础才能看懂并调试代码。 2022年第三届“毕昇杯”全国大学生计算机系统能力大赛编译系统设计赛参赛源码+PPT.zip 2022年第三届“毕昇杯”全国大学生计算机系统能力大赛编译系统设计赛参赛源码+PPT.zip 2022年第三届“毕昇杯”全国大学生计算机系统能力大赛编译系统设计赛参赛源码+PPT.zip 2022年第三届“毕昇杯”全国大学生计算机系统能力大赛编译系统设计赛参赛源码+PPT.zip 2022年第三届“毕昇杯”全国大学生计算机系统能力大赛编译系统设计赛参赛源码+PPT.zip 2022年第三届“毕昇杯”全国大学生计算机系统能力大赛编译系统设计赛参赛源码+PPT.zip 2022年第三届“毕昇杯”全国大学生计算机系统能力大赛编译系统设计赛参赛源码+PPT.zip 2022年第三届“毕昇杯”全国大学生计算机系统能力大赛编译系
资源推荐
资源详情
资源评论
收起资源包目录
2022年第三届“毕昇杯”全国大学生计算机系统能力大赛编译系统设计赛参赛源码+PPT.zip (156个子文件)
libsysy.a 6KB
test_perf_single.bat 2KB
test_func_single.bat 2KB
test_ir2c.bat 334B
test_perf.bat 264B
test_func.bat 264B
gen_func_asm.bat 162B
gen_perf_asm.bat 162B
gen_perf_asm_single.bat 141B
test.bat 137B
gen_func_asm_single.bat 131B
sylib.c 2KB
sylib.c 2KB
parser.yy.cpp 90KB
arm_manager.cpp 80KB
lexer.ll.cpp 56KB
linear_ir_manager.cpp 51KB
reg_alloc.cpp 48KB
semantic_analysis.cpp 46KB
loop_unrolling.cpp 44KB
lower_ir_manager.cpp 35KB
instruction_combination.cpp 34KB
constant_recombination.cpp 31KB
live.cpp 31KB
sparse_conditional_constant_propagation.cpp 31KB
loop_invariant_code_motion.cpp 23KB
cfg_manager.cpp 23KB
global_array_visit_substitution.cpp 23KB
procedure_integration.cpp 21KB
arm.cpp 20KB
auto_memorize.cpp 19KB
strength_reduction.cpp 19KB
main.cpp 19KB
ast.cpp 17KB
dead_code_elimination.cpp 16KB
simplify_arm.cpp 14KB
constant_fold_and_algebraic_simplification.cpp 14KB
forward_substitution.cpp 12KB
ir_test_manager.cpp 12KB
global_common_subexpression_elimination.cpp 11KB
convert_ssa.cpp 10KB
ir_instr.cpp 8KB
constant_array_visit_substitution.cpp 8KB
if_to_switch.cpp 7KB
interprocedural_data_flow_analysis.cpp 6KB
local_array_visit_substitution.cpp 6KB
local_copy_propagation.cpp 6KB
optimizer.cpp 6KB
ir_symbol_table.cpp 6KB
global_variable_localization.cpp 5KB
symbol_table.cpp 5KB
type_define.cpp 5KB
block_simplification.cpp 5KB
cfg.cpp 5KB
dead_call_elimination.cpp 5KB
mod_expansion.cpp 4KB
array_visit_substitution_on_ssa.cpp 4KB
local_common_subexpression_elimination.cpp 4KB
revert_ssa.cpp 4KB
interval.cpp 3KB
bitmap.cpp 3KB
other_redundant_elimination.cpp 3KB
procedure_specialization_and_clone.cpp 3KB
ir_define.cpp 1KB
constant_fold_ast.cpp 1KB
arm_define.cpp 952B
add_newline.cpp 845B
add_newline.cpp 792B
loop_inversion_ast.cpp 786B
arm_struct.cpp 714B
detailed_design.docx 992KB
.gitignore 267B
reg_alloc.h 13KB
lexer.ll.h 10KB
ast.h 8KB
arm.h 7KB
ir_symbol_table.h 6KB
linear_ir_manager.h 6KB
sparse_conditional_constant_propagation.h 5KB
arm_define.h 5KB
cfg.h 5KB
ir_instr.h 5KB
live.h 5KB
type_define.h 5KB
arm_manager.h 5KB
optimizer.h 4KB
loop_invariant_code_motion.h 4KB
symbol_table.h 4KB
global_array_visit_substitution.h 4KB
cfg_manager.h 4KB
loop_unrolling.h 4KB
instruction_combination.h 3KB
interprocedural_data_flow_analysis.h 3KB
constant_recombination.h 3KB
ir_define.h 3KB
local_common_subexpression_elimination.h 2KB
forward_substitution.h 2KB
global_common_subexpression_elimination.h 2KB
arm_struct.h 2KB
semantic_analysis.h 2KB
共 156 条
- 1
- 2
资源评论
辣椒种子
- 粉丝: 4139
- 资源: 5745
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功