- 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 5 commits
-
-
萝杨空队-梁韬 authored
1. 在 log 中增加 finalInfo 的输出, 便于调试 2. 在 phi 指令中引入单独的一个 symbol, 使得其不会在用于赋值其他变量的时候把自己代表的变量符号覆盖掉 3. 在变量定义的时候引入可能的隐式转换 4. 在 LLVM IR 的注释中写上 phi 代表的变量 5. 更改 ./m 中的 run 子命令使得传递给编译器的参数合理 6. 修改浮点字面量的词法规则, 使之可以匹配 1e9 之类的 token
-
萝杨空队-梁韬 authored
1. 修正了二元运算符的结合性 (应该是左结合的) 2. 修正了多个 ! 接连出现时 IR 的类型错误 3. 删除了 LLVMDumper zext 指令多余的 i1
-
萝杨空队-梁韬 authored
1. 修正了当块内有对应变量的无用 phi, 但是 currDef 中对该变量的定义并不是这个 phi 时, 填充 phi 会导致该定义改变的问题
-
萝杨空队-梁韬 authored
1. 修改 ChainMap 使之可以指定 Key 类型 2. 各个常量现在使用 toString 来获得其对应的字面量 3. Function 中对 BBlock 标号的唯一性验证现在使用 Symbol 了 4. 因为在全局空间做常量折叠时需要预先构建一条指令, 此时传给指令的 block 可能为 null, 因此修改 INode 使得 parent 可空 5. 修改了指令的 toString 使之更加可读 6. 修改了 IRBuilder 使之支持全局/函数内模式切换 7. 修改了 IRGen 使得名称的查找更加统一 8. 为赋值语句加入隐式转换 9. 修改了 Symbol 内错误的获取列号的方式 10. 修改了 test.py 内 difft 的参数顺序使得其将正确输出显示为绿色 11. LLVMDumper 全面修改
-
萝杨空队-梁韬 authored
-
- 18 Jul, 2022 3 commits
-
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
1. 更改了同名数组变量的初始值的撞名问题 2. LLVMDumper 中加入了对空白 phi 的支持 3. 修复了对二元运算与比较的错误的 LLVM IR 翻译 4. 修复了 Phi 指令的重名问题 5. 将 VarVersionInfo 作为 user 以解决一个 SSA 生成问题. 在生成了空白 phi, 递归查找前继定义时, 对循环, 有可能递归会到自己. 这时候对路途中的基本块, 就有可能在它们的 currDef 中留下该变量到这个 phi 指令的定义. 如果填充完这个空白 phi 之后, 发现它可以去掉, 那么去掉之后在其他基本块中的 currDef 里保存着的对应关系并不能去掉, 这就有可能会对后面的基本块的处理产生问题. 因此, 我们需要把 currDef 中保存着的对应关系作为一个 "User", 当对 phi 执行 RAUW 方法时才能同时修改到它.
-
萝杨空队-梁韬 authored
1. 修复了整数折叠时对 F2I 指令的错误折叠方式 2. 修复了 CAlloc 指令生成后没有插入基本块内的错误 3. 对返回值/函数实参/初始值生成对应的隐式类型转换 --- 下面是 LLVMDumper 内容 --- 4. 加入了对 memcpy 的声明 5. 删除了生成的函数中多余的 global 修饰符 6. 修正了全局数组名字的错误生成 7. 在 GEP 类指令中加入遗漏的逗号 8. 修正了 Cmp 类指令类型的错误 9. 将对 MemInit 指令的翻译进行拆分以方便 debug 10. 在 test.py 中拆分 llc 内两个命令以检测 llvm 生成错误
-
- 17 Jul, 2022 4 commits
-
-
萝杨空队-梁韬 authored
1. 支持了嵌套 while 中的 break/continue
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
1. GEP 指令现在可以拿到数组的一部分的指针了, 样例中有可能会需要把数组的一部分传给其他函数 2. 修正了 putarray 原型错误的问题 3. 修正了在函数生成结束以后, builder 的状态没有回归全局的问题 4. 支持了对数组取不完全的索引以获得其一部分的操作 5. 修复了当 while 循环结束时, 其生成的最后一个基本块内已有跳转指令的情况下还会往里面塞跳转指令的错误
-
萝杨空队-梁韬 authored
1. 将 IList/Value/User 等 Log 输出等级变为 debug 2. Log 输出支持颜色了 3. 为 IRBuilder 支持全局模式 (比较 dirty), 同时在换块时注意维护自身的 currFunction 4. 将获得 versionInfo 封装成一个方法 5. 修正了数组类型的 parameter 不放在 finalInfo 里的错误 6. 修正了函数的最后一个块可能没有 Ret 指令也没有 Br 指令的错误 7. 修正了在全局对 finalInfo 内的变量的查找会尝试获取 versionInfo 的错误 8. 补充了注释和报错信息 9. 处理好空语句 10. 增加了对死代码块中 incoming 数量为 0 的 phi 指令的支持 11. 增加了对 Load 指令的约束 12. test.py 现在不会对通过的情况输出报错了
-
- 16 Jul, 2022 4 commits
-
-
萝杨空队-梁韬 authored
1. 更正了 LLVMDumper 中对 br 指令输出格式错误的问题 2. Phi 指令的参数有可能是其本身 (考虑功能性 32), 因此对 Instruction 的参数不能是本身的限制要放宽
-
萝杨空队-梁韬 authored
1. 更正了在 versionInfo 找不到变量定义, 插入 phi 时没有将 phi 加入 versionInfo 中的错误 2. 更正了在填完 phi 之后没有把 phi 标记为已完成的错误
-
萝杨空队-梁韬 authored
1. 修改了 LLVMDumper 使其更有可读性 2. 修正了 while 循环不会回到条件的问题
-
萝杨空队-梁韬 authored
1. 增加了 phi 折叠之后的常量折叠及其配套措施 (比如维护已有 phi incoming 的前继移除以及对已有指令的常数折叠操作) 2. 重载基本块/指令的RAUW, 使其从 IList 中将自己换为 newValue (在 IList 中加入了 replaceFirst 方法以支持该操作) 3. 通过在 phi 填充完成后重新计算 phiEnd 的方式来维护 phiEnd (原本的维护方式在删除 phi 的时候会出错) 4. 修正了填充 phi 时不正确的对 phi incoming 的清空以及将清空的 phi 返回回去的错误 5. 修改了 Br 类指令构造函数内维护前继的方法以支持对已有 Br 指令的重新折叠操作 6. 修正了 Cmp 指令 verify 方法不正确的类型检查 7. 将 B2I 指令加入到 isInt 指令集中 8. 重载了 Value 与 Instruction 的 toString 以支持更好的调试输出 9. 修正了 LLVMDumper 中对函数形参的错误输出 10. 修改 Log 方法的输出格式使之更加可读 11. 允许 Phi 指令增加/删除 Operand (因为一些高层操作需要用到) 12. 修改清空 Phi 指令 incoming 时的错误方法 13. 在一些 User/Value 中的 use-def 修改性方法中加入 Log 14. 修改 test.py 使得 ssyc 的 stderr 输出到日志文件之中
-
- 15 Jul, 2022 9 commits
-
-
萝杨空队-梁韬 authored
1. 实现了外部函数 (External Function), 并同时实现了 libsysy.a 中的外部函数的使用, 并同时实现了 LLVMDumper 对应的部分, 并同时实现了其 verify 方法 2. 于 LLVMDumper 实现了 BoolToInt
-
萝杨空队-梁韬 authored
1. 修正了对单个 exp 的在错误时机转成 == 0 的问题 (原本对于 a == 5 会转换成 (a == 0) == 5) 2. 根据新加入的 BoolToInt 指令支持了形如 2 < 3 == 3 < 4 这类表达式 3. 完成了 BoolToInt 的常量折叠 4. 修正了当变量在当前基本块内无 currDef 时, 赋值语句报错的问题 5. 修正了跳转指令构造时获取当前块的错误方式
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
1. 明确了 LVal 相关的各类事务的处理并总结成文档 2. 使得 Variable 的输出更加人类可读 3. 增加了 .llvm 文件对应的语法高亮
-
萝杨空队-梁韬 authored
1. 更新了 ArrayConst 错误的元素类型约束 2. 更新了 GEP 里对 Ptr 的参数的在 CAlloc 语义下的错误约束 3. 更新了 GEP 里对指针参数的在 CAlloc 语义下的错误的范围约束 4. 更新了 Load 里对指针参数的在 CAlloc 语义下的错误约束 5. 更新了 Store 的 verify 方法里的 typo 与一个小错误 6. 修复了函数形参不在符号表以及 currDef 中的错误 7. 修复了对全局数组的不正确的获取, 现在对全局数组会先调用一个 Load 以获得退化数组指针了 8. 更新了对应的文档
-
萝杨空队-梁韬 authored
1. 更新了 ArrayConst 错误的元素类型约束 2. 更新了 GEP 里对 Ptr 的参数的在 CAlloc 语义下的错误约束 3. 更新了 GEP 里对指针参数的在 CAlloc 语义下的错误的范围约束 4. 更新了 Load 里对指针参数的在 CAlloc 语义下的错误约束 5. 更新了 Store 的 verify 方法里的 typo 与一个小错误 6. 修复了函数形参不在符号表以及 currDef 中的错误 7. 修复了对全局数组的不正确的获取, 现在对全局数组会先调用一个 Load 以获得退化数组指针了
-
萝杨空队-梁韬 authored
-
萝杨空队-梁韬 authored
1. 修正了对指针类型的错误描述 (对目前的全局数组变量实现而言, 有可能是有二重指针的), 同时更新了文档 2. 修正了前端获取零元素时不正确的实现 3. 在 LLVMDumper 中加入对零数组常量的支持 4. 修正了对全局数组类型的不正确处理 (之前没有退化 + 获取元素零类型有错误)
-
萝杨空队-梁韬 authored
1. 修正了 Constant 内对于两个零常量的错误初始化
-