diff --git a/paddle/cinn/operator_fusion/policy/iters_fusion_policy.cc b/paddle/cinn/operator_fusion/policy/iters_fusion_policy.cc index c0da3a56ea9a67..247f94ba8f94e1 100644 --- a/paddle/cinn/operator_fusion/policy/iters_fusion_policy.cc +++ b/paddle/cinn/operator_fusion/policy/iters_fusion_policy.cc @@ -225,12 +225,13 @@ std::optional ItersFusionPolicy::SearchItersTransformRoute( auto squeezed_source = source; if (squeeze_source) { // Remove iters equal to one in source - auto source_ones = MapVectorIfTrue, int>( - Enumerate(source.loop_iters), - [this](std::pair p) { return p.second; }, - [this](std::pair p) { - return this->iters_manager_->IterSymbolEqualOne(p.first); - }); + std::vector source_ones; + for (int i = 0; i < source.loop_iters.size() - source.reduce_iter_nums; + ++i) { + if (iters_manager_->IterSymbolEqualOne(source.loop_iters[i])) { + source_ones.push_back(i); + } + } if (!source_ones.empty() && source_ones.size() != source.loop_iters.size()) { iters_transforms.emplace_back(RemoveOnesTransform(source_ones));