- 27 Jul, 2022 6 commits
-
-
萝杨空队-梁韬 authored
1. 加入了对 idom 是当前块, 但是当前块并没有 user 的情况的处理 2. 优化了代码写法, 使用了新 API
-
萝杨空队-梁韬 authored
1. 于 IRPass 中加入 copyForChange 方法 2. 改进了 IRPassManager 的日志输出 3. 修复了死基本块消除中没有将被删除的基本块移出 use-def 关系的问题 4. 修复了函数内联中没有将原基本块移出 use-def 关系的问题 5. 于函数内联的实现代码中删除不必要的成员变量的使用
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
-
- 25 Jul, 2022 10 commits
-
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
1. 由于实现上的错误, 事实上其生成的指令并没有被缓存 2. 由于 SSA 的约束, 每一条指令必须支配其所有的使用; 而这要求在实现指令缓存的时候, 还要将指令调度到所有使用它的指令所在的基本块的 LCA 基本块中. 这基本上是不可能在局部实现的 关于条件 2 的一个例子可以思考 asm-handmade/07 其中关于 if 的两个分支中 GEP %a 0, 0 的缓存的实现.
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
但是受限于 IR 修改性操作的架构问题, 现在还不能用
-
- 24 Jul, 2022 6 commits
- 23 Jul, 2022 1 commit
-
-
萝杨空队-梁韬 authored
-
- 22 Jul, 2022 1 commit
-
-
萝杨空队-梁韬 authored
1. 对函数内联产生的基本块添加随机字符串前缀以防止对同一函数的多次内联使得基本块撞名 2. 明确了函数内联的条件: 目前只将简单函数内联 (即在任意次函数内联之后不调用任何其他函数的函数) 3. 修复了 callerBlock 的指令在移除后 phiEnd 不正确的问题 4. 修复了在修复原块后继的前继时, 错误地向新块获取前继而不是旧块的问题 5. 修复了在替换旧 Call 指令时, phi 会被替换到旧基本块中的问题 6. 修复了新加入的辅助块的 phiEnd 不正确的问题 7. 修复了在 clone 引用自身的 phi 指令时的无限递归错误 8. 取消了在设置前继时, 对 phi 的对应位置的 incoming value 必须来自该前继的错误约束 9. 于 IList 中加入了 indexOf 方法 10. 于 INodeOwner 中加入了从当前列表脱离的方法 11. 将 IR Pass 的运行方式改为使用 Runner 的硬编码形式以支持更好的异常堆栈显示 12. 于 LLVMDumper 中加入了对 CurrDef 为空的基本块的支持 (在因为内联而被 clone 的块中可能有此现象) 13. 于 phi 指令中加入了不检查前继数量直接替换 incomingValue 的方法以方便新基本块的构造
-
- 21 Jul, 2022 5 commits
- 20 Jul, 2022 10 commits
-
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
这样就不用特别维护前继的引用了
-
萝杨空队-梁韬 authored
一个 INode 仅应该属于一个 IList. 所以, INode 要么没有 parent, 要么必须在 parent 的某一个位置之中. 没有 parent 的节点称为自由节点. 一般而言, 任何 INode 被创建之后都应该是自由的. 而当 INode 被加入/删除/替换之后, 它对应的 parent 信息也应该修改.
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
1. 常量折叠 2. 无用 phi 消除 3. 死代码消除 4. 直接跳转合并
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
这样就不用特别维护前继的引用了
-
萝杨空队-梁韬 authored
一个 INode 仅应该属于一个 IList. 所以, INode 要么没有 parent, 要么必须在 parent 的某一个位置之中. 没有 parent 的节点称为自由节点. 一般而言, 任何 INode 被创建之后都应该是自由的. 而当 INode 被加入/删除/替换之后, 它对应的 parent 信息也应该修改.
-
萝杨空队-梁韬 authored
-
- 19 Jul, 2022 1 commit
-
-
萝杨空队-梁韬 authored
1. 在 log 中增加 finalInfo 的输出, 便于调试 2. 在 phi 指令中引入单独的一个 symbol, 使得其不会在用于赋值其他变量的时候把自己代表的变量符号覆盖掉 3. 在变量定义的时候引入可能的隐式转换 4. 在 LLVM IR 的注释中写上 phi 代表的变量 5. 更改 ./m 中的 run 子命令使得传递给编译器的参数合理 6. 修改浮点字面量的词法规则, 使之可以匹配 1e9 之类的 token
-