inductor mean(dim=1) 分解图(truediv(load, index_expr(s44)),除数为运行期 shape 符号)调度与 codegen 均成功,但 AscendC 设备编译失败:
truediv(load, index_expr(s44))
error: use of undeclared identifier 'ks1' const int64_t scalar_2 = (ks1)/(1); Duplicate(local_blk_tensor_of_scalar_2[0], static_cast<int64_t>((ks1)/(1)), ...);
报错点离根因隔一个编译阶段(Tiler::Size 替换表缺项 → 裸符号直出)。
IndexExpr.expr = ks1 这类只被 IR 属性引用、不挂任何轴的"孤儿"动态 size var,在 Optimizer::AutoScheduler 的"清空后重建"中丢失:ClearAllSizeVar 清空登记表后,AppendOriginalSizeVar 的扫描清单只覆盖"轴的 size"与"Load/Store/Gather/Nddma 视图表达式",不含 scalar-like 节点(输出视图为空)的 IR 属性。导致 tiling data 结构体缺 ks1 字段、设备符号替换表缺 ks1 映射。Arange.base/step 为同类隐患。
IndexExpr.expr = ks1
Optimizer::AutoScheduler
ClearAllSizeVar
AppendOriginalSizeVar
ks1
Arange.base/step
AppendOriginalSizeVar 补扫 IndexExpr.expr 与 Arange.base/step 的自由符号(公共上游一处修复,host 签名与 device 字段/替换表同时受益;常量表达式收集不到自由符号,既有场景零行为变化)。
IndexExpr.expr
关联 PR:#2125
FrontendShapeVarsTest.CollectsSymbolsReferencedByScalarLikeIrAttrs
uint32_t ks1
scalar_2 = (t->ks1)/(1)
问题需要修改
现象
inductor mean(dim=1) 分解图(
truediv(load, index_expr(s44)),除数为运行期 shape 符号)调度与 codegen 均成功,但 AscendC 设备编译失败:error: use of undeclared identifier 'ks1' const int64_t scalar_2 = (ks1)/(1); Duplicate(local_blk_tensor_of_scalar_2[0], static_cast<int64_t>((ks1)/(1)), ...);报错点离根因隔一个编译阶段(Tiler::Size 替换表缺项 → 裸符号直出)。
根因
IndexExpr.expr = ks1这类只被 IR 属性引用、不挂任何轴的"孤儿"动态 size var,在Optimizer::AutoScheduler的"清空后重建"中丢失:ClearAllSizeVar清空登记表后,AppendOriginalSizeVar的扫描清单只覆盖"轴的 size"与"Load/Store/Gather/Nddma 视图表达式",不含 scalar-like 节点(输出视图为空)的 IR 属性。导致 tiling data 结构体缺ks1字段、设备符号替换表缺ks1映射。Arange.base/step为同类隐患。修复
AppendOriginalSizeVar补扫IndexExpr.expr与Arange.base/step的自由符号(公共上游一处修复,host 签名与 device 字段/替换表同时受益;常量表达式收集不到自由符号,既有场景零行为变化)。关联 PR:#2125
验证
FrontendShapeVarsTest.CollectsSymbolsReferencedByScalarLikeIrAttrs(忠实复刻 Clear+Append 触发序列,修复前 RED / 修复后 GREEN)uint32_t ks1字段、设备代码为scalar_2 = (t->ks1)/(1),裸符号 0 处(修复前 2 处)