Skip to content

Commit

Permalink
update contest part
Browse files Browse the repository at this point in the history
  • Loading branch information
Ksitta committed Sep 5, 2024
1 parent 0c93cfe commit b4bc52e
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 1 deletion.
4 changes: 4 additions & 0 deletions docs/contest/intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,9 @@

## 介绍

大实验编译器目标:完成一个具有编译优化功能的高性能编译器。

为了简化课程实验,我们的基础实验框架在设计时并未考虑大实验的需求(例如:IR的类型系统简易)

## 评分方法

41 changes: 40 additions & 1 deletion docs/contest/midend.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,48 @@

### 中间表示的设计

#### 三地址码

#### 单变量赋值形式

### 中端优化

中端的优化是编译器的一个重要组成部分,它可以在保持程序功能不变的前提下,提高程序的性能。中端优化的目标是提高程序的性能,减少程序的运行时间和资源消耗。中端优化的方法有很多,比如常量传播、死代码消除、循环不变量外提、循环展开、函数内联等。

一个经典的例子是常量传播。常量传播是指将一个常量值替换为它的值,以便于在中端直接完成一些计算以降低运行时开销。比如,对于下面的 IR 代码:

```asm
T1 = 5
T2 = T1 + 6
T3 = T2 + 7
T4 = T3 + 8
T5 = T4 + 9
ret T5
```

经过常量传播优化后,可以得到:

```asm
T1 = 5
T2 = 11
T3 = 18
T4 = 26
T5 = 35
ret T5
```

进一步如果我们进行死代码消除,可以得到:
> 什么是死代码消除?
> 死代码消除是指删除程序中没有用到的代码,以减少程序的运行时间和资源消耗。
```asm
T5 = 35
ret T5
```



### 预期目标

完成这部分内容后,你的编译器应该能将 MiniDecaf 程序翻译成 IR,并能够输出 IR。
完成这部分内容后,你的编译器应该能将 MiniDecaf 程序翻译成 IR,并能够输出 IR。进一步地,如果你希望参加大实验,你还需要实现一些中端优化。

0 comments on commit b4bc52e

Please sign in to comment.