Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
2
2022fall-Compiler_CMinus
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
李晓奇
2022fall-Compiler_CMinus
Commits
a1c89ae5
You need to sign in or sign up before continuing.
Commit
a1c89ae5
authored
Dec 09, 2022
by
陈清源
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update README.md
parent
a85b2c88
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
28 additions
and
10 deletions
+28
-10
Documentations/4.2-gvn/README.md
Documentations/4.2-gvn/README.md
+28
-10
No files found.
Documentations/4.2-gvn/README.md
View file @
a1c89ae5
...
...
@@ -267,19 +267,37 @@ valuePhiFunc(ve,P)
GVN 通过数据流分析来检测冗余的变量和计算,通过替换和死代码删除结合,实现优化效果。前述的例子中主要以二元运算语句来解释原理,且助教为大家提供了代码替换和删除的逻辑,除此之外,需要完成的方向有:
1.
对冗余指令的检测与消除包括(二元运算指令,cmp,gep,类型转换指令)
2.
对纯函数的冗余调用消除(助教提供了纯函数分析,见
[
FuncInfo.h
](
../../include/optimization/FuncInfo.h
)
)
该 Pass 的接口`is_pure_function`接受一个lightIR Function,判断该函数是否为纯函数;对于纯函数,如果其参数等价,对这个纯函数的不同调用也等价。
3.
常量传播
在数据流分析的过程中,可以使用常量折叠来实现常量传播,从而将可在编译时计算的结果计算好,减少运行时开销。(助教提供了常量折叠类,在辅助类的介绍中)
1.
对冗余指令的检测与消除包括
-
二元运算指令:add, sub, mul, sdiv, fadd, fsub, fmul, fdiv
-
地址运算指令:getelementptr
-
比较指令:cmp, fcmp
-
类型转换指令:zext, fptosi, sitofp
2.
对于 call 指令冗余的检测与消除:
-
对纯函数的冗余调用需要进行检测与消除
-
对于非纯函数(例如 input())的多次调用不得分析成同一个等价类中
**注**
:助教提供了纯函数分析,见
[
FuncInfo.h
](
../../include/optimization/FuncInfo.h
)
,该 Pass 的接口
`is_pure_function`
接受一个lightIR Function,判断该函数是否为纯函数;对于纯函数,如果其参数等价,对这个纯函数的不同调用也等价。
3.
常量传播:在数据流分析的过程中,需要使用常量折叠来实现常量传播,从而将可在编译时计算的结果计算好,减少运行时开销。
-
本次实验要求借助 GVN 的数据流分析框架,实现常量传播,在含有常量的等价类中,通过将 leader_ 设置为 Constant
*
类型,在常量传播后将指令替换成相应的常数。
**注**
:助教提供了常量折叠类,在辅助类的介绍中
4.
value phi function 的冗余的检测与消除:
-
通过 value phi function 可以在某个程序点比较两个变量每条路径的等价关系,为了简化这部分逻辑,仅考察
`phi(a+b, c+d)`
与
`phi(a,c)+phi(b,d)`
之间的冗余。+ 代表 add, sub, mul, sdiv, fadd, fsub, fmul, fdiv。a,b,c,d 代表不含常数的等价类
我们会在测试样例中对这三点进行考察。
**case 考察范围说明
:**
在 Lab4-2 的公开 case 与隐藏 case 中,以下情况不会出现:
**case 考察范围说明
**
:
在 Lab4-2 的公开 case 与隐藏 case 中,以下情况不会出现:
1.
不会对加法乘法运算的交换律,结合律造成的冗余进行考察。
2.
不会对访存指令之间的等价性进行考察。
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment