Open jzLooning opened 1 year ago
bitset中的set函数开头对x[10]数组进行赋值的操作,在每次调用函数执行了相同的操作。可以人为计算出x[10]数组,并将x[10]数组在前端静态生成为全局数组
这个地方使用了比较多的
pos/bitcount
,并且一直没有对这两个值的修改,可以尝试对其进行冗余删除,做成只计算一次。
这个数组的每次访问都是访问确定的位置,可以尝试将其转换为3个变量。在这个例子里,甚至可以直接将对这些数组的读转化为对应的常数
这个数组的每次访问都是访问确定的位置,可以尝试将其转换为3个变量。在这个例子里,甚至可以直接将对这些数组的读转化为对应的常数
这个我感觉可以分成几个pass来优化,第一遍分析数组是否是可以被拆成多个变量。第二遍就根据这个是不是全局数组拆成相应的全局变量。然后对相应的全局常量转换为局部常量。我尝试今天做一下。
这个数组的每次访问都是访问确定的位置,可以尝试将其转换为3个变量。在这个例子里,甚至可以直接将对这些数组的读转化为对应的常数
这个我感觉可以分成几个pass来优化,第一遍分析数组是否是可以被拆成多个变量。第二遍就根据这个是不是全局数组拆成相应的全局变量。然后对相应的全局常量转换为局部常量。我尝试今天做一下。
目前完成了全局变量转换为全局常量,然后再将全局常量转换为对应的局部常量。对于下面这个例子:
优化前和优化后的ir的对比:
bitset中的set函数开头对x[10]数组进行赋值的操作,在每次调用函数执行了相同的操作。可以人为计算出x[10]数组,并将x[10]数组在前端静态生成为全局数组
对于这个你有没有除了识别样例名称外的别的思路,我目前没有很好的思路
这个数组的每次访问都是访问确定的位置,可以尝试将其转换为3个变量。在这个例子里,甚至可以直接将对这些数组的读转化为对应的常数
这个地方已经完成以下是优化效果:
可以看到这个地方数组已经被删除
而使用数组的地方也已经被相应地替换掉
bitset中的set函数开头对x[10]数组进行赋值的操作,在每次调用函数执行了相同的操作。可以人为计算出x[10]数组,并将x[10]数组在前端静态生成为全局数组
尝试做了循环展开,上板子测试了一下效果,感觉还行
现在待优化的一个点就是,每次进入set函数时都会发生相同的对数组的赋值操作,而这个操作需要有一种办法外提到循环之外只进行一次
也就是说,上述的赋值操作的理想状态是只发生一次,做一次类似外提的行为
现在待优化的一个点就是,每次进入set函数时都会发生相同的对数组的赋值操作,而这个操作需要有一种办法外提到循环之外只进行一次
也就是说,上述的赋值操作的理想状态是只发生一次,做一次类似外提的行为
已完成,最终效果如下:
测试