已开启
[Huawei][AscendNPU IR] fix PDLL regbase lit gating for A3/A5 builds #27
[Huawei][AscendNPU IR] fix PDLL regbase lit gating for A3/A5 builds #27
已开启
gguo创建于 7月15日
gguo
gguo成员
7月15日

摘要

PR #24 的后续修复:在 A5 构建下注册 regbase lit feature,使带 REQUIRES: regbase 的两个 PDLL 集成测试在 A3 上跳过、在 A5 上执行。向 mlir-pdll 的 TableGen include 传入 BSPUB_DAVINCI_BISHENGIR_A5 宏,并恢复相关 PDLL pattern。

PDLL UT 验证结果(llvm 18251f68

在 npuir-a3 本地构建目录下用 llvm-lit 验证(build = A3,build-a5flags = A5)。

目标用例(REQUIRES: regbase

用例 A3 A5
mlir-pdll/Integration/test-pdll.mlir UNSUPPORTED(符合预期) PASS
Transforms/test-dialect-conversion-pdll.mlir UNSUPPORTED(符合预期) PASS

mlir-pdll/ 套件(21 个)

构建 通过 跳过 失败
A3 20 1(Integration/test-pdll.mlir 0
A5 21 0 0

mlir-pdll-lsp-server/ 套件(17 个)

构建 通过 失败
A3 17 0
A5 12 5(既有失败,非本 PR 范围)

A5 lsp-server 失败项:compilation_database.testdocument-links.testhover.testinlay-hints.testsignature-help.test

复现命令

# 目标用例
cd build-a5flags/tools/mlir/test && llvm-lit -v \
  mlir-pdll/Integration/test-pdll.mlir Transforms/test-dialect-conversion-pdll.mlir
cd build/tools/mlir/test && llvm-lit -v \
  mlir-pdll/Integration/test-pdll.mlir Transforms/test-dialect-conversion-pdll.mlir

# PDLL parser/codegen 全量套件
llvm-lit -v mlir-pdll/

# PDLL LSP server 套件
llvm-lit -v mlir-pdll-lsp-server/
likedislike
合并受阻
atomgit-bot
atomgit-bot
7月15日 评论:

变更摘要

此 PR 主要修复 AscendNPU IR 在 A3/A5 构建中 PDLL 相关 lit 测试被错误门控的问题。核心思路是:扩展 TableGenParseFile 接口使其支持传入预定义宏,在 PDLL 解析器中针对 A5 构建将 BSPUB_DAVINCI_BISHENGIR_A5 宏传递给 TableGen 解析器,同时恢复之前被注释掉的 PDLL 测试文件内容,并在 lit 配置中通过 regbase 特性正确控制测试启停。

主要改动

  • TableGenParseFile 接口扩展llvm/include/llvm/TableGen/Parser.h 中的 TableGenParseFile 函数新增 std::optional<ArrayRef<std::string>> Macros 可选参数,允许调用者向 TableGen 解析器注入预定义宏;llvm/lib/TableGen/Parser.cpp 中对应实现将宏传递给 TGParser 构造函数。
  • PDLL 解析器条件编译支持mlir/lib/Tools/PDLL/Parser/Parser.cppparseTdInclude 方法中,通过 #ifdef BSPUB_DAVINCI_BISHENGIR_A5 条件编译,在 A5 构建下将 {"BSPUB_DAVINCI_BISHENGIR_A5"} 宏数组传入 TableGenParseFile
  • 恢复 PDLL 测试文件mlir/test/lib/Tools/PDLL/TestPDLL.pdllmlir/test/lib/Transforms/TestDialectConversion.pdll 中之前被注释掉的 #include 指令及 Pattern 定义全部取消注释,恢复正常测试内容。
  • lit 配置中注册 regbase 特性mlir/test/lit.site.cfg.py.in 新增 config.bspub_davinci_bishengir_a5 配置项,mlir/test/lit.cfg.py 新增条件逻辑,当该配置为真时添加 regbase 可用特性,使依赖 REQUIRES: regbase 的测试得以执行。
  • 清理测试文件中的 TODO 注释mlir/test/Transforms/test-dialect-conversion-pdll.mlirmlir/test/mlir-pdll/Integration/test-pdll.mlir 移除了关于迁移后启用测试的 TODO 注释。
likedislike
atomgit-bot
atomgit-bot
7月15日 评论:

代码审查

经过对所有 8 个变更文件的逐项审查,我没有发现此 diff 引入的明确正确性、安全或可靠性问题。以下是各文件的审查结论:

审查确认(按文件逐一确认)

文件 审查结果
llvm/include/llvm/TableGen/Parser.h ✅ 无问题 — 添加 ArrayRef include 和 Macros 默认参数,保持向后兼容
llvm/lib/TableGen/Parser.cpp ✅ 无问题 — 将 Macros 参数正确传递给 TGParser 构造函数
mlir/lib/Tools/PDLL/Parser/Parser.cpp ✅ 无问题 — #ifdef 条件编译创建 ArrayRef 指向 static const std::string,生命周期安全;#else 分支创建空的 ArrayRef;逻辑正确
mlir/test/CMakeLists.txt ✅ 无问题 — 将 LLVM_BSPUB_DAVINCI_BISHENGIR_A5 加入 llvm_canonicalize_cmake_booleans,与其他布尔变量一致
mlir/test/lib/Tools/PDLL/TestPDLL.pdll ✅ 无问题 — 取消注释的 Pattern 使用标准 ops (test.simple, test.success, CastOpInterface),不依赖 A5 特定定义
mlir/test/lib/Transforms/TestDialectConversion.pdll ✅ 无问题 — 取消注释的 Pattern 使用标准 PDLL 内置函数 (convertTypes, convertValues) 和标准 ops (test.cast, test.return)
mlir/test/lit.cfg.py ✅ 无问题 — 当 bspub_davinci_bishengir_a5 为真时添加 regbase 特性标记,与 lit 测试的 REQUIRES: regbase 对应
mlir/test/lit.site.cfg.py.in ✅ 无问题 — 模板替换 @LLVM_BSPUB_DAVINCI_BISHENGIR_A5@ 经过 CMake canonicalize 处理后值为 0/1,Python 条件判断正确

关键检查点

  • API 兼容性TableGenParseFile 新增参数 ArrayRef<std::string> Macros = {},默认值为空 ArrayRef(调用默认构造函数),两个已有调用点(ParserEntryPointTest.cppTableGenServer.cpp)无需修改即可编译通过。
  • ArrayRef 生命周期:PDLL parser 中的 static const std::string tdMacro 保证其生存期覆盖整个程序,ArrayRef 不会悬垂。
  • TableGen 宏名映射:C 预处理器宏 BSPUB_DAVINCI_BISHENGIR_A5 → TableGen DefinedMacros 集合中的同名条目,语义一致,StringMap 内部会复制字符串。
  • Lit 特性门控.pdll 中的 Pattern 虽然无条件编译,但对应的 lit 测试(test-pdll.mlirtest-dialect-conversion-pdll.mlir)由 REQUIRES: regbase 门控,仅 A5 构建运行。

总结

  • P0–P2 问题数:0
  • P3 问题数:0
  • 整体风险评估低风险。变更结构清晰、范围受限,API 改动向后兼容,CMake 配置和 lit 特性门控逻辑正确。

⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。

likedislike
ascend-robotascend-robot成员
7月15日 添加了label:ascend-cla/yes
ascend-robot
ascend-robot成员
7月15日 评论:

CLA Signature Pass

gguo9, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
ascend-robot
ascend-robot成员
7月15日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here
You can get sig-info at here


PR Approval Progress

⚠️ This PR does not yet meet the following requirements:lgtm (requires ≥ 2 person(s) per module)、approve (requires ≥ 1 person(s) per module)

Module Approval Details

module lgtm status approve status
repo-Ascend/llvm-project ❌ (0/2)(You can also ask: tanshengshun, 周浩, wangtao489, Zz_zl, shijingchang) ❌ (0/1)(You can also ask: hocky, Zz_zl, cxtjjcz, tarvlad, rusyaev-roman)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

gguo9, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
gguogguo成员
7月15日 强制推送  1 个提交:d098fa9b-[Huawei][AscendNPU IR] enable PDLL regbase lit gating for two mlir tests
gguogguo成员
7月15日 强制推送  1 个提交:18251f68-[Huawei][AscendNPU IR] enable PDLL regbase lit gating for two mlir tests
gguogguo成员
7月15日 修改了pull request 的描述
gguogguo成员
7月15日 修改了pull request 的描述