Skip to content

Feature/qnnbugfix#4239

Merged
wangzhaode merged 3 commits intoalibaba:masterfrom
jxt1234:feature/qnnbugfix
Mar 12, 2026
Merged

Feature/qnnbugfix#4239
wangzhaode merged 3 commits intoalibaba:masterfrom
jxt1234:feature/qnnbugfix

Conversation

@jxt1234
Copy link
Collaborator

@jxt1234 jxt1234 commented Mar 11, 2026

QNN 后端增加 Transpose / Pack / Unpack 算子

@wangzhaode wangzhaode self-assigned this Mar 12, 2026
Copy link
Collaborator

@wangzhaode wangzhaode left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #4239: Feature/qnnbugfix 代码审查

概述

QNN 后端增加 Transpose / Pack / Unpack 算子支持,同时修复节点名称冒号处理和 ONNX PReLU 单 slope 优化。整体思路合理,但有 2 个阻塞问题需修复。


🚨 阻塞问题

1. [Bug] QNNPermute.cpp — 移除 null 保护导致 OpType_Permute 可能崩溃

原始 onCreate 中有关键的空指针保护:

if (op->main_as_Permute()->dims() == nullptr) {
    return nullptr;
}

PR 中该检查被完全删除。如果一个 OpType_Permutedims() 为 nullptr,onEncode 中会直接调用 param->dims()->size()空指针解引用崩溃。这是回归 bug——原本能正常 fallback 的 case 现在会 crash。

建议:在 onCreate 中对 OpType_Permute 保留原有校验,或在 onEncode 的 Permute 分支加 null check。

2. [Bug] QNNConcat.cpp:15-27axis 变量可能未初始化

int axis;
if (mOp->type() == OpType_Concat) {
    axis = ...;
} else if (mOp->type() == OpType_Pack) {
    axis = ...;
} else if (mOp->type() == OpType_Unpack) {
    axis = ...;
}
// 无 else 分支,axis 可能未初始化 → 未定义行为

建议添加 else { MNN_ASSERT(false); return NOT_SUPPORT; }


其他建议(非阻塞)

  • QNNPermute.cpp:38inputs[1]->host<int32_t>() 建议加空指针断言
  • QNNConcat.cpp:19 — early return 的 Reshape 路径在 axis 赋值之后,对 Pack 类型可能触发不必要的 main_as_PackParam() 调用,建议将 early return 前移
  • OnnxPrelu 单 slope 优化和节点名称冒号处理都是好的改进

Reviewed by claude-opus-4-6

@wangzhaode wangzhaode merged commit ae546a6 into alibaba:master Mar 12, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants