增加Reg2Mem,但是会生成死存储指令,需要死代码删除支持识别死存储指令
This commit is contained in:
@@ -570,7 +570,7 @@ auto Mem2Reg::preOptimize3() -> void {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 为所有变量的定义块集合的迭代支配边界插入phi结点(剪枝版)
|
||||
* @brief 为所有变量的定义块集合的迭代支配边界插入phi结点
|
||||
*
|
||||
* insertPhi是mem2reg的核心之一,这里是对所有变量的迭代支配边界的phi结点插入,无参数也无返回值;
|
||||
* 同样跳过对数组和全局变量的处理,因为这些变量不会被mem2reg优化,刚好这里在计算value2DefBlocks时已经跳过了,所以不需要再显式处理了;
|
||||
@@ -796,10 +796,7 @@ auto Mem2Reg::getPredIndex(BasicBlock *n, BasicBlock *s) -> int {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 判断一个value是不是全局变量
|
||||
*
|
||||
* @param [in] val 一个value
|
||||
* @return 返回true表示是全局变量,返回false表示不是
|
||||
* 判断一个value是不是全局变量
|
||||
*/
|
||||
auto Mem2Reg::isGlobal(Value *val) -> bool {
|
||||
auto gval = dynamic_cast<GlobalValue *>(val);
|
||||
@@ -807,10 +804,7 @@ auto Mem2Reg::isGlobal(Value *val) -> bool {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 判断一个value是不是数组
|
||||
*
|
||||
* @param [in] val 一个value
|
||||
* @return 返回true表示是数组,返回false表示不是
|
||||
* 判断一个value是不是数组
|
||||
*/
|
||||
auto Mem2Reg::isArr(Value *val) -> bool {
|
||||
auto aval = dynamic_cast<AllocaInst *>(val);
|
||||
@@ -818,10 +812,7 @@ auto Mem2Reg::isArr(Value *val) -> bool {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 删除一个指令的operand对应的value的该条use
|
||||
*
|
||||
* @param [in] inst 一条指令
|
||||
* @return 无返回值
|
||||
* 删除一个指令的operand对应的value的该条use
|
||||
*/
|
||||
auto Mem2Reg::usedelete(Instruction *instr) -> void {
|
||||
for (auto &use : instr->getOperands()) {
|
||||
|
||||
Reference in New Issue
Block a user