[midend]修改一点逻辑和注释,删除无用文件

This commit is contained in:
rain2133
2025-08-08 15:31:35 +08:00
parent f17e44f8d4
commit c4c91412d1
3 changed files with 37 additions and 11 deletions

View File

@ -383,8 +383,24 @@ AliasType SysYAliasAnalysisPass::compareParameters(MemoryLocation* loc1, MemoryL
}
AliasType SysYAliasAnalysisPass::compareWithGlobal(MemoryLocation* loc1, MemoryLocation* loc2) {
// 涉及全局数组的访问,采用保守策略
// SysY中全局数组和其他内存位置的别名关系较复杂保守处理
// 涉及全局数组的访问分析
// 这里处理所有涉及全局数组的情况
// SysY特化局部数组与全局数组不别名
if ((loc1->isLocalArray && loc2->isGlobalArray) ||
(loc1->isGlobalArray && loc2->isLocalArray)) {
// 局部数组在栈上,全局数组在全局区,确定不别名
return AliasType::NO_ALIAS;
}
// SysY特化数组参数与全局数组可能别名保守处理
if ((loc1->isFunctionParameter && loc2->isGlobalArray) ||
(loc1->isGlobalArray && loc2->isFunctionParameter)) {
// 数组参数可能指向全局数组,需要保守处理
return AliasType::POSSIBLE_ALIAS;
}
// 其他涉及全局数组的情况,采用保守策略
return AliasType::POSSIBLE_ALIAS;
}
@ -409,15 +425,6 @@ AliasType SysYAliasAnalysisPass::compareMixedTypes(MemoryLocation* loc1, MemoryL
// 因为局部数组是栈上分配,而数组参数是传入的外部数组
return AliasType::NO_ALIAS;
}
// 如果是局部数组与全局数组或参数的混合访问,通常也不别名
if ((loc1->isLocalArray && loc2->isGlobalArray) ||
(loc1->isGlobalArray && loc2->isLocalArray) ||
(loc1->isFunctionParameter && loc2->isGlobalArray) ||
(loc1->isGlobalArray && loc2->isFunctionParameter)) {
// 局部数组与全局数组或参数:通常不别名
// 因为局部数组是栈上分配,而全局数组或参数是传入的外部数组
return AliasType::NO_ALIAS;
}
// 对于其他混合情况,保守估计
return AliasType::UNKNOWN_ALIAS;

View File

@ -121,6 +121,25 @@ bool SysYSideEffectAnalysisPass::runOnFunction(Function* F, AnalysisManager& AM)
// 获取别名分析结果,在整个函数分析过程中重复使用
aliasAnalysis = AM.getAnalysisResult<AliasAnalysisResult, SysYAliasAnalysisPass>(F);
// TODO: 重构为Module级别的分析利用独立的调用图分析
//
// 建议的架构:
// 1. SysYCallGraphAnalysisPass - 独立的调用图分析Module级别
// - 构建完整的函数调用关系
// - 提供拓扑排序和强连通分量
// - 识别递归调用模式
//
// 2. SysYSideEffectAnalysisPass - 重构为Module级别
// - 依赖调用图分析结果
// - 按拓扑序分析函数,确保依赖函数先分析
// - 使用不动点算法处理递归函数群
//
// 优势:
// - 调用图可被多个Pass复用内联、DCE等
// - 准确的函数间副作用传播
// - 正确处理递归调用
// - 避免保守的"未分析函数"假设
// 分析函数中的每条指令
SideEffectInfo functionSideEffect;