[midend]修改一点逻辑和注释,删除无用文件
This commit is contained in:
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user