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
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)
...
@@ -267,19 +267,37 @@ valuePhiFunc(ve,P)
GVN 通过数据流分析来检测冗余的变量和计算,通过替换和死代码删除结合,实现优化效果。前述的例子中主要以二元运算语句来解释原理,且助教为大家提供了代码替换和删除的逻辑,除此之外,需要完成的方向有:
GVN 通过数据流分析来检测冗余的变量和计算,通过替换和死代码删除结合,实现优化效果。前述的例子中主要以二元运算语句来解释原理,且助教为大家提供了代码替换和删除的逻辑,除此之外,需要完成的方向有:
1.
对冗余指令的检测与消除包括(二元运算指令,cmp,gep,类型转换指令)
1.
对冗余指令的检测与消除包括
2.
对纯函数的冗余调用消除(助教提供了纯函数分析,见
[
FuncInfo.h
](
../../include/optimization/FuncInfo.h
)
)
-
二元运算指令:add, sub, mul, sdiv, fadd, fsub, fmul, fdiv
该 Pass 的接口`is_pure_function`接受一个lightIR Function,判断该函数是否为纯函数;对于纯函数,如果其参数等价,对这个纯函数的不同调用也等价。
-
地址运算指令:getelementptr
3.
常量传播
-
比较指令: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.
不会对加法乘法运算的交换律,结合律造成的冗余进行考察。
1.
不会对加法乘法运算的交换律,结合律造成的冗余进行考察。
2.
不会对访存指令之间的等价性进行考察。
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