Skip to content

Latest commit

 

History

History
34 lines (26 loc) · 2.23 KB

File metadata and controls

34 lines (26 loc) · 2.23 KB

B2 Mem2Reg

在第二部分,你需要理解Mem2Reg优化遍的具体含义,结合例子说明Mem2Reg是如何对LLVM IR代码进行变换的。

  • 任务2-1

    你需要仔细阅读include/Optimize/Mem2Reg.hsrc/Optimize/Mem2Reg.cpp,参考静态单赋值构造中的算法,将Mem2Reg优化遍的流程记录在报告中,并结合例子说明在Mem2Reg哪些阶段分别存储了什么对IR做了什么处理

    • 为了体现Mem2Reg的效果,例子需要包含至少两层由条件分支、循环组成的嵌套结构,并且对同一个变量有在不同分支或者迭代中的定值和引用。

    两层嵌套结构例如

    while {
      if {}
      else {}
    }
    

    Mem2Reg可能会产生phi指令,关于phi指令的含义可以参考SysYFIR.md Phi小节的说明。

    • B2-1. 请说明Mem2Reg优化遍的流程。
    • B2-2. 结合例子说明在Mem2Reg哪些阶段分别存储了什么对IR做了什么处理。需要说明
      • Mem2Reg可能会删除的指令类型是哪些?对哪些分配(alloca)指令会有影响?
      • 在基本块内前进insideBlockForwarding时,对store指令处理时为什么rvalueforward_list中存在时,就需要将rvalue替换成forward_list映射中的->second值?
      • 在基本块内前进时,defined_list代表什么含义?
      • 生成phi指令genPhi的第一步两层for循环在收集什么信息,这些信息在后面的循环中如何被利用生成Phi指令?
      • valueDefineCountingdefined_var记录了什么信息
      • valueForwarding在遍历基本块时采用的什么方式
      • valueForwarding中为什么value_status需要对phi指令做信息收集
      • valueForwarding中第二个循环对load指令的替换是什么含义
      • valueForwarding中出现的defined_varvalue_status插入条目之间有什么联系
    • B2-3. 请说明上述例子的要求为什么能体现Mem2Reg的效果?

请将问题答案写在doc/reports/B2.md中。