1. 21 Jul, 2022 5 commits
  2. 20 Jul, 2022 10 commits
  3. 19 Jul, 2022 5 commits
    • 萝杨空队-梁韬's avatar
      debug/llvm-run: 通过了全部样例, 前端完成 · ef940cbd
      萝杨空队-梁韬 authored
      1. 在 log 中增加 finalInfo 的输出, 便于调试
      2. 在 phi 指令中引入单独的一个 symbol, 使得其不会在用于赋值其他变量的时候把自己代表的变量符号覆盖掉
      3. 在变量定义的时候引入可能的隐式转换
      4. 在 LLVM IR 的注释中写上 phi 代表的变量
      5. 更改 ./m 中的 run 子命令使得传递给编译器的参数合理
      6. 修改浮点字面量的词法规则, 使之可以匹配 1e9 之类的 token
      ef940cbd
    • 萝杨空队-梁韬's avatar
      debug/llvm-run 通过了样例 56 · ef30ef7f
      萝杨空队-梁韬 authored
      1. 修正了二元运算符的结合性 (应该是左结合的)
      2. 修正了多个 ! 接连出现时 IR 的类型错误
      3. 删除了 LLVMDumper zext 指令多余的 i1
      ef30ef7f
    • 萝杨空队-梁韬's avatar
      debug/llvm-run: 通过样例 27 · b4f5d221
      萝杨空队-梁韬 authored
      1. 修正了当块内有对应变量的无用 phi, 但是 currDef 中对该变量的定义并不是这个 phi 时, 填充 phi 会导致该定义改变的问题
      b4f5d221
    • 萝杨空队-梁韬's avatar
      breaking/no-get-name: 进一步改造使得前端与 LLVMDumper 所有代码适应新的接口 · 80ea6999
      萝杨空队-梁韬 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 全面修改
      80ea6999
    • 萝杨空队-梁韬's avatar
  4. 18 Jul, 2022 3 commits
    • 萝杨空队-梁韬's avatar
    • 萝杨空队-梁韬's avatar
      debug/llvm-exec: 通过了样例 78 · 493219ee
      萝杨空队-梁韬 authored
      1. 更改了同名数组变量的初始值的撞名问题
      2. LLVMDumper 中加入了对空白 phi 的支持
      3. 修复了对二元运算与比较的错误的 LLVM IR 翻译
      4. 修复了 Phi 指令的重名问题
      5. 将 VarVersionInfo 作为 user 以解决一个 SSA 生成问题.
      
      在生成了空白 phi, 递归查找前继定义时, 对循环, 有可能递归会到自己.
      这时候对路途中的基本块, 就有可能在它们的 currDef 中留下该变量到这个 phi 指令的定义.
      如果填充完这个空白 phi 之后, 发现它可以去掉, 那么去掉之后在其他基本块中的 currDef 里保存着的对应关系并不能去掉, 这就有可能会对后面的基本块的处理产生问题.
      因此, 我们需要把 currDef 中保存着的对应关系作为一个 "User", 当对 phi 执行 RAUW 方法时才能同时修改到它.
      493219ee
    • 萝杨空队-梁韬's avatar
      debug/llvm-exec: 通过了样例 20 · ab5b77b1
      萝杨空队-梁韬 authored
      1. 修复了整数折叠时对 F2I 指令的错误折叠方式
      2. 修复了 CAlloc 指令生成后没有插入基本块内的错误
      3. 对返回值/函数实参/初始值生成对应的隐式类型转换
      --- 下面是 LLVMDumper 内容 ---
      4. 加入了对 memcpy 的声明
      5. 删除了生成的函数中多余的 global 修饰符
      6. 修正了全局数组名字的错误生成
      7. 在 GEP 类指令中加入遗漏的逗号
      8. 修正了 Cmp 类指令类型的错误
      9. 将对 MemInit 指令的翻译进行拆分以方便 debug
      10. 在 test.py 中拆分 llc 内两个命令以检测 llvm 生成错误
      ab5b77b1
  5. 17 Jul, 2022 4 commits
    • 萝杨空队-梁韬's avatar
      debug/llvm: 通过了样例 94 · 2a304422
      萝杨空队-梁韬 authored
      1. 支持了嵌套 while 中的 break/continue
      2a304422
    • 萝杨空队-梁韬's avatar
      26f09eec
    • 萝杨空队-梁韬's avatar
      debug/llvm: 通过了样例 93 · 41d2d644
      萝杨空队-梁韬 authored
      1. GEP 指令现在可以拿到数组的一部分的指针了, 样例中有可能会需要把数组的一部分传给其他函数
      2. 修正了 putarray 原型错误的问题
      3. 修正了在函数生成结束以后, builder 的状态没有回归全局的问题
      4. 支持了对数组取不完全的索引以获得其一部分的操作
      5. 修复了当 while 循环结束时, 其生成的最后一个基本块内已有跳转指令的情况下还会往里面塞跳转指令的错误
      41d2d644
    • 萝杨空队-梁韬's avatar
      debug/llvm: 通过了样例 60 · 2a2eb70c
      萝杨空队-梁韬 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 现在不会对通过的情况输出报错了
      2a2eb70c
  6. 16 Jul, 2022 4 commits
    • 萝杨空队-梁韬's avatar
      debug/llvm: 回到样例 31 · b9aab61c
      萝杨空队-梁韬 authored
      1. 更正了 LLVMDumper 中对 br 指令输出格式错误的问题
      2. Phi 指令的参数有可能是其本身 (考虑功能性 32), 因此对 Instruction 的参数不能是本身的限制要放宽
      b9aab61c
    • 萝杨空队-梁韬's avatar
      debug/llvm: 快进到样例 29 · 3eb27b8e
      萝杨空队-梁韬 authored
      1. 更正了在 versionInfo 找不到变量定义, 插入 phi 时没有将 phi 加入 versionInfo 中的错误
      2. 更正了在填完 phi 之后没有把 phi 标记为已完成的错误
      3eb27b8e
    • 萝杨空队-梁韬's avatar
      debug/llvm: 倒退回样例 24 · 160c1ec3
      萝杨空队-梁韬 authored
      1. 修改了 LLVMDumper 使其更有可读性
      2. 修正了 while 循环不会回到条件的问题
      160c1ec3
    • 萝杨空队-梁韬's avatar
      debug/llvm: 通过了样例 31 · b9154126
      萝杨空队-梁韬 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 输出到日志文件之中
      b9154126
  7. 15 Jul, 2022 9 commits
    • 萝杨空队-梁韬's avatar
      debug/llvm: 通过了样例 24 · 784f406a
      萝杨空队-梁韬 authored
      1. 实现了外部函数 (External Function), 并同时实现了 libsysy.a 中的外部函数的使用, 并同时实现了 LLVMDumper 对应的部分, 并同时实现了其 verify 方法
      2. 于 LLVMDumper 实现了 BoolToInt
      784f406a
    • 萝杨空队-梁韬's avatar
      debug/llvm: 修改了一些比较表达式中的错误 · ce3e1d3e
      萝杨空队-梁韬 authored
      1. 修正了对单个 exp 的在错误时机转成 == 0 的问题 (原本对于 a == 5 会转换成 (a == 0) == 5)
      2. 根据新加入的 BoolToInt 指令支持了形如 2 < 3 == 3 < 4 这类表达式
      3. 完成了 BoolToInt 的常量折叠
      4. 修正了当变量在当前基本块内无 currDef 时, 赋值语句报错的问题
      5. 修正了跳转指令构造时获取当前块的错误方式
      ce3e1d3e
    • 萝杨空队-梁韬's avatar
      ir: 增加了 BoolToInt 指令 · 6b899c23
      萝杨空队-梁韬 authored
      6b899c23
    • 萝杨空队-梁韬's avatar
      debug/llvm: 通过了样例 20, 完成了涉及跳转之前的所有功能性测试 · 5ea163b2
      萝杨空队-梁韬 authored
      1. 明确了 LVal 相关的各类事务的处理并总结成文档
      2. 使得 Variable 的输出更加人类可读
      3. 增加了 .llvm 文件对应的语法高亮
      5ea163b2
    • 萝杨空队-梁韬's avatar
      debug/llvm: 通过了样例 16 · b38e1bd2
      萝杨空队-梁韬 authored
      1. 更新了 ArrayConst 错误的元素类型约束
      2. 更新了 GEP 里对 Ptr 的参数的在 CAlloc 语义下的错误约束
      3. 更新了 GEP 里对指针参数的在 CAlloc 语义下的错误的范围约束
      4. 更新了 Load 里对指针参数的在 CAlloc 语义下的错误约束
      5. 更新了 Store 的 verify 方法里的 typo 与一个小错误
      6. 修复了函数形参不在符号表以及 currDef 中的错误
      7. 修复了对全局数组的不正确的获取, 现在对全局数组会先调用一个 Load 以获得退化数组指针了
      8. 更新了对应的文档
      b38e1bd2
    • 萝杨空队-梁韬's avatar
      debug/llvm: 通过了样例 16 · 7959fb3b
      萝杨空队-梁韬 authored
      1. 更新了 ArrayConst 错误的元素类型约束
      2. 更新了 GEP 里对 Ptr 的参数的在 CAlloc 语义下的错误约束
      3. 更新了 GEP 里对指针参数的在 CAlloc 语义下的错误的范围约束
      4. 更新了 Load 里对指针参数的在 CAlloc 语义下的错误约束
      5. 更新了 Store 的 verify 方法里的 typo 与一个小错误
      6. 修复了函数形参不在符号表以及 currDef 中的错误
      7. 修复了对全局数组的不正确的获取, 现在对全局数组会先调用一个 Load 以获得退化数组指针了
      7959fb3b
    • 萝杨空队-梁韬's avatar
    • 萝杨空队-梁韬's avatar
      debug/llvm: 通过了样例 03 · 67327ae6
      萝杨空队-梁韬 authored
      1. 修正了对指针类型的错误描述 (对目前的全局数组变量实现而言, 有可能是有二重指针的), 同时更新了文档
      2. 修正了前端获取零元素时不正确的实现
      3. 在 LLVMDumper 中加入对零数组常量的支持
      4. 修正了对全局数组类型的不正确处理 (之前没有退化 + 获取元素零类型有错误)
      67327ae6
    • 萝杨空队-梁韬's avatar
      debug/llvm: 通过了样例 02 · d9ed7bf5
      萝杨空队-梁韬 authored
      1. 修正了 Constant 内对于两个零常量的错误初始化
      d9ed7bf5