Skip to content

Latest commit

 

History

History
42 lines (40 loc) · 1.77 KB

potential_bugs.md

File metadata and controls

42 lines (40 loc) · 1.77 KB
  • CodeGen

TODO:

  1. 把浮点的inst改一下,如果是sreg则就地操作,不必移动至s0和s1
  2. 除法、模运算换成二进制
  3. pattern recognition (crypto-rotate/or/and)
  4. sub (-1, reg)

注意事项:数组全是指针,标量全是变量

  1. LiveUse生成:如果一个函数的参数没有在函数体内被使用,可能会出问题(因为LiveUse和LiveDef中都没有它,但是传参的时候要用到)
  2. 减法取负优化 - 浮点可能出问题
  3. 暂时没有考虑函数参数超过四个的情况
  4. cmp指令没有交换,后期或许可以优化
  5. fcmp指令返回值没分配寄存器,可能是个坑
  6. mov整数的方式或许可以优化 (灵活的操作数2):
https://developer.arm.com/documentation/dui0068/b/ARM-Instruction-Reference/ARM-general-data-processing-instructions/Flexible-second-operand?lang=en
  1. param中的str长度(128)
  2. mod
  3. ltorg
  4. borrow逻辑:得找没有被当前语句使用的寄存器才行
  5. 以下内容可根据参数个数和返回值的情况进行优化
#define LOCAL_VARS_SAVE_MEMCPY_REGISTERS {r0, r1, r2, lr}
#define LOCAL_VARS_LOAD_MEMCPY_REGISTERS {r0, lr}
  1. call时候的寄存器压栈:有些寄存器里存的变量已经在LiveInterval的末期,不用压栈
  2. call时候移动参数:有时候没有冲突,不用交换
  3. 改变了AddSub的逻辑,现在dst和src大多数情况下可以相同
  4. Operand2可以优化,比如-(-1)可以优化成+1
  • IR
  1. LLIR_RET指令:对于如下代码段
float main(){
    return 3.0;
}

生成的LLIR_RET指令中,ret_inst->ret_value.ctv->int_value的值是3,但ret_inst->ret_value.ctv->float_value的值是0

  • 前端
  1. 非const全局变量初始化优化
  2. 常量传播可以节省后面寄存器分配,一定要做