From f9071a38194103b84519cba5c664c0831cbd100c Mon Sep 17 00:00:00 2001 From: LiXiaoQi Date: Tue, 22 Nov 2022 10:48:24 +0800 Subject: [PATCH] finish report --- Documentations/4.1-ssa/ssa.pdf | Bin 3859383 -> 3952493 bytes Reports/.gitignore | 1 + Reports/4.1-ssa/report.md | 205 +++++++++++++++++++++++++++++- include/optimization/Dominators.h | 2 +- src/cminusfc/cminusfc.cpp | 4 - src/optimization/Mem2Reg.cpp | 8 ++ 6 files changed, 208 insertions(+), 12 deletions(-) diff --git a/Documentations/4.1-ssa/ssa.pdf b/Documentations/4.1-ssa/ssa.pdf index 1fc23607681eb2d7e6698f1cf5a5047789246c3c..630cd488a456d6c2e9c6ebe673448a9227da9f4c 100644 GIT binary patch delta 97695 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 diff --git a/Reports/.gitignore b/Reports/.gitignore index 2255496..8d999aa 100644 --- a/Reports/.gitignore +++ b/Reports/.gitignore @@ -1,3 +1,4 @@ 1-parser/*.pdf 2-ir-gen-warmup/*.pdf 3-ir-gen/*.pdf +4.1-ssa/*.pdf diff --git a/Reports/4.1-ssa/report.md b/Reports/4.1-ssa/report.md index 9ed8fe6..d90179c 100644 --- a/Reports/4.1-ssa/report.md +++ b/Reports/4.1-ssa/report.md @@ -2,18 +2,209 @@ ## 实验要求 -请按照自己的理解,写明本次实验需要干什么 +4.1给出了一个减少内存分配和访问的优化Mem2Reg,通过学习这个示例,我们可以: + +1. 看到一种优化方案的很多细节:如何使用支配信息、如何使用`phi`函数、如何重命名(实际上是裁剪冗余代码)…… + +2. 了解实验框架的实现原理:如基本块的CFG信息、指令类型和值类型的互相转换细节、如何注册优化……为下一次实验的优化(我相信下一次实验是要自己实现什么优化)做好准备。 ## 思考题 -### Mem2reg -1. ... -2. ... -3. ... + +1. 请简述概念:支配性、严格支配性、直接支配性、支配边界。 + + - 支配性:给定CFG中,假设初始块是B~0~,对于一个基本块B~j~,如果基本块B~i~存在于B~0~到B~j~的所有路径上时,则称B~i~支配B~j~。根据定义,其中B~0~和B~j~一定支配B~j~ + + - 严格支配性:如果B~i~支配B~j~,且B~i~不是B~j~,则B~i~严格支配B~j~ + + - 直接支配:在严格支配基本块B~j~的块集合中,距离B~j~距离最近的块就是B~j~的直接支配节点,称作IDOM(B~j~) + + - 支配边界:如果两个节点B~i~和B~j~满足以下两个条件: + + - B~i~支配B~j~的一个前驱节点 + + - B~i~不严格支配B~j~ + + 则认为符合条件的B~j~的集合是B~i~的支配边界,记作DF(B~i~) + +2. `phi`节点是SSA的关键特征,请简述`phi`节点的概念,以及引入`phi`节点的理由。 + + `phi`节点是构造SSA的技术产物之一。 + + 将程序转化为SSA的过程中,会存在一个问题:在CFG的汇合点,一个变量可能对应不同路径的多个定值,由于SSA要求变量只能被赋值至多一次,不同路径上的定值会对应不同的变量,而在汇合点之后使用变量,就需要决策使用哪个定值。 + + 这件事不能静态确定,解决方案是增加一个`phi`函数的赋值,使`phi`函数的参数是可能的定值,`phi`函数的结果是一个新变量。`phi`函数将动态决定使用哪个定值作为新变量的定值,而这个新变量作为汇合点之后的变量定值可以直接使用。 + +3. 观察下面给出的`cminus`程序对应的 LLVM IR,与**开启**`Mem2Reg`生成的LLVM IR对比,每条`load`, `store`指令发生了变化吗?变化或者没变化的原因是什么?请分类解释。 + + 因为阅读代码后发现,优化是针对函数进行的,所以我们区分函数来观察,先观察函数`func`: + + ```c + int func(int x){ + if(x > 0){ + x = 0; + } + return x; + } + ``` + + 使用到的变量就只有int型参数`x`,不需要任何分配和`load`/`store`,所以都被优化掉。 + + 再来看函数`main`: + + ```cpp + int main(void){ + int arr[10]; + int b; + globVar = 1; + arr[5] = 999; + b = 2333; + func(b); + func(globVar); + return 0; + } + ``` + + 变量`b`是int型,可以删去,所以被优化掉了。 + + `arr`是数组,`globVar`是全局变量,所以不会被优化掉,因此优化后的中间代码还保存着关于这两个变量的`store`和`load`。 + +4. 指出放置phi节点的代码,并解释是如何使用支配树的信息的。(需要给出代码中的成员变量或成员函数名称) + + 插入`phi`节点的代码在`src/optimization/Mem2Reg.cpp`中定义的函数`void Mem2Reg::generate_phi()`中。 + + 这个函数将针对当前指定的**函数**,遍历其所有**基本块**,找到作为`store`指令左值的所有**变量集合**,同时维护**这些变量的定值(即store指令)出现的基本块**。 + + 然后会遍历每个变量,利用**支配树**找到变量定值所在基本块的边界集合,在这些支配边界首部插入`phi`函数,更新`work_list`和基本块的`phi`函数信息`bb_has_var_phi`。 + + ```cpp + auto phi = +     PhiInst::create_phi(var->get_type()->get_pointer_element_type(), bb_dominance_frontier_bb); + phi->set_lval(var); + bb_dominance_frontier_bb->add_instr_begin(phi); + ``` + + 计算活跃变量集合时,算法不计入全局变量和数组内容。按照我的理解,这是因为Mem2Reg算法的目标是将局部非数组变量的(int、float)的内存分配移除,期待用寄存器代之,而全局变量和数组不能满足寄存器分配的性质,所以不对这两种类型做处理。 + +5. 算法是如何选择`value`(变量最新的值)来替换`load`指令的?(描述清楚对应变量与维护该变量的位置) + 替换`load`指令的代码在文件`src/optimization/Mem2Reg.cpp`定义的函数`void Mem2Reg::re_name(BasicBlock *bb)`中。 + + 截取代码如下: + + ```cpp + if (instr->is_load()) { + auto l_val = static_cast(instr)->get_lval(); + + if (!IS_GLOBAL_VARIABLE(l_val) && !IS_GEP_INSTR(l_val)) { + if (var_val_stack.find(l_val) != var_val_stack.end()) { + // 此处指令替换会维护 UD 链与 DU 链 + instr->replace_all_use_with(var_val_stack[l_val].back()); + wait_delete.push_back(instr); + } + } + } + ``` + + 算法在遇`load`指令时,会检查源地址数据的最新定值是否已经被保存在栈中,具体是查找这个变量对应的栈`var_val_stack[l_val]`是否存在,如果存在则会替换掉这条`load`指令,使用栈顶定值`var_val_stack[l_val].back()`代替其结果。 + + 而针对这个栈的维护还是在`rename`函数中,主要做一下几点维护: + + - `phi`函数和`store`指令对一个变量(局部非数组)的最新定值会被压入栈顶。 + + - 离开`re_name`时恢复栈至进入函数的状态。 ### 代码阅读总结 -此次实验有什么收获 +#### UD链与DU链 + +- UD链在`User`类中维护,内部变量为`operands_`,主要是一个使用者(指令、全局变量等)使用了哪些定值。 + +- DU链在`Value`类中维护,内部变量是`use_list_`,表示使用这个`Value`变量的对象集合。 + +在阅读Mem2Reg时,替换load处一个一知半解的函数`replace_all_use_with`: + +```cpp +void Value::replace_all_use_with(Value *new_val) { + for (auto use : use_list_) { + auto val = dynamic_cast(use.val_); + assert(val && "new_val is not a user"); + val->set_operand(use.arg_no_, new_val); + } + use_list_.clear(); +} +``` + +根据这段代码,搞清楚了这个函数的逻辑:针对一个`Value*`变量,将使用到它的位置都替换为另一个`Value*`变量`new_val`,不仅要将自己的DU链清空,还要将原来在DU链上的所用定值使用都更换为`new_val`。 + +回到当初不懂的地方: + +```cpp +if (instr->is_load()) { + auto l_val = static_cast(instr)->get_lval(); + + if (!IS_GLOBAL_VARIABLE(l_val) && !IS_GEP_INSTR(l_val)) { + if (var_val_stack.find(l_val) != var_val_stack.end()) { + // 此处指令替换会维护 UD 链与 DU 链 + instr->replace_all_use_with(var_val_stack[l_val].back()); + wait_delete.push_back(instr); + } + } +} +``` + +这就是在`load`指令可以被替换的时候,`load`指令作为一个`Value*`变量,需要调用其成员函数`replace_all_use_with`,来将其所有使用替换成栈顶的定值。 + +#### Mem2Reg + +- `run`:针对每个函数的产生phi指令`generate_phi()`、重命名`re_name()`和移除冗余alloca指令`remove_alloca()`。 + +- `generate_phi()` + + 1. 计算跨基本块的活跃变量集合`global_live_var_name`,并维护每个活跃变量出现的基本块集合`live_var_2blocks` + + 依据`store`指令即定值产生 + + 这里活跃变量是针对alloca分配过空间的变量,不可以是全局or`GEP`产生的地址。 + + 2. 遍历活跃变量集合,在每个变量定值所在基本块的支配边界处产生`phi`函数。 + + 代码中存在若干细节: + + - 使用结构`map, bool>`维护信息:基本块针对某一变量是否存在`phi`函数。 + + - `work_list`在循环中是变化的,所以使用下标而非auto索引。 + +- `re_name(bb)` + + 因为原本就是SSA,所以不需要counter,需要的是裁减冗余代码,修改操作数。资料中的stack使用`var_val_stack`实现,一个全局活跃变量的栈顶表示编译过程中的最新定值。 + + 1. 将bb的`phi`函数指令压栈,作为其结果的定值。 + + 2. 针对store指令,更新栈顶,即压入右值。对于load指令,将load的结果引用都替换为栈顶定值(如果有的话)。如果上述操作成果,store、load均可删去。 + + 3. 填充后继节点的`phi`指令。 + + 4. 在支配树上递归重命名。 + + 5. 恢复栈状态至初始,根据store指令和phi指令的结果变量弹出。 + + 6. 去除第2步的冗余指令。 + +- `remove_alloca()` + + 这里应该是有一个断言:经过前边的一系列处理,基本块内部的int、float的分配(alloca)指令都是冗余的,应该直接删去。 + + 这里删去的alloca与`re_name()`中的有什么区别 ### 实验反馈 (可选 不会评分) -对本次实验的建议 +对同学整体来说,鼓励大家读代码很好,因为有的同学前几个实验做不明白就是因为不看框架代码。 + +对我自己来说,我还是有点读不清楚,有的地方似懂非懂,估计下个实验真动手做了就会好一点吧。 + +## 参考 + +[PHI Node总结](https://www.jianshu.com/p/497a9d0e1b3e) + +[llvm PHI Node](https://www.llvmpy.org/llvmpy-doc/dev/doc/llvm_concepts.html#ssa-form-and-phi-nodes) + +[北航的mem2reg教程](https://buaa-se-compiling.github.io/miniSysY-tutorial/challenge/mem2reg/help.html) diff --git a/include/optimization/Dominators.h b/include/optimization/Dominators.h index 98a737b..8d7249e 100644 --- a/include/optimization/Dominators.h +++ b/include/optimization/Dominators.h @@ -8,7 +8,7 @@ #include #include -class Dominators : public Pass { +class Dominators: public Pass { public: explicit Dominators(Module *m) : Pass(m) {} ~Dominators() = default; diff --git a/src/cminusfc/cminusfc.cpp b/src/cminusfc/cminusfc.cpp index 9e441cb..733aefc 100644 --- a/src/cminusfc/cminusfc.cpp +++ b/src/cminusfc/cminusfc.cpp @@ -11,11 +11,7 @@ using namespace std::literals::string_literals; void print_help(std::string exe_name) { -<<<<<<< HEAD - std::cout << "Usage: " << exe_name << " [ -h | --help ] [ -o ] [ -emit-llvm ] " -======= std::cout << "Usage: " << exe_name << " [ -h | --help ] [ -o ] [ -emit-llvm ] [-mem2reg] " ->>>>>>> 2f5d0fa70297542b1032ca4614f0f426fa7a4e33 << std::endl; } diff --git a/src/optimization/Mem2Reg.cpp b/src/optimization/Mem2Reg.cpp index 419a6b9..7d5dc33 100644 --- a/src/optimization/Mem2Reg.cpp +++ b/src/optimization/Mem2Reg.cpp @@ -21,6 +21,7 @@ void Mem2Reg::run() { func_ = &f; if (func_->get_basic_blocks().size() >= 1) { // 对应伪代码中 phi 指令插入的阶段 + // why no parameter here: func_ is visible in the generate_phi() generate_phi(); // 对应伪代码中重命名阶段 re_name(func_->get_entry_block()); @@ -43,6 +44,8 @@ void Mem2Reg::generate_phi() { if (instr->is_store()) { // store i32 a, i32 *b // a is r_val, b is l_val + // may be b is from instruction: + // %b = getelementptr ... auto r_val = static_cast(instr)->get_rval(); auto l_val = static_cast(instr)->get_lval(); @@ -59,6 +62,7 @@ void Mem2Reg::generate_phi() { for (auto var : global_live_var_name) { std::vector work_list; work_list.assign(live_var_2blocks[var].begin(), live_var_2blocks[var].end()); + // cannot use auto &bb: work_list, because of the insertion in the loop for (int i = 0; i < work_list.size(); i++) { auto bb = work_list[i]; for (auto bb_dominance_frontier_bb : dominators_->get_dominance_frontier(bb)) { @@ -117,6 +121,8 @@ void Mem2Reg::re_name(BasicBlock *bb) { // 步骤六:为 lval 对应的 phi 指令参数补充完整 for (auto succ_bb : bb->get_succ_basic_blocks()) { for (auto &instr1 : succ_bb->get_instructions()) { + // should be: + // if(instr is not phi): break auto instr = &instr1; if (instr->is_phi()) { auto l_val = static_cast(instr)->get_lval(); @@ -157,6 +163,8 @@ void Mem2Reg::re_name(BasicBlock *bb) { } } +// There is an assertion: +// all the alloca for int|float will be no dead after the pass void Mem2Reg::remove_alloca() { for (auto &bb1 : func_->get_basic_blocks()) { auto bb = &bb1; -- GitLab