Component
PTODSL
Description
PTODSL 在编译嵌套顺序为 for => with => for 的代码片段时可能失败,错误提示内层循环的变量被用在循环体之外,但实则只被用在了循环体内部
Reproduction (minimal)
例 1:
from ptodsl import pto
@pto.jit(kernel_kind="vector", target="a5", mode="explicit")
def kernel(n: pto.i32):
for outer in range(0, n):
with pto.vecscope():
for row in range(0, 2):
value = outer + row
kernel.compile()
例 2:
from ptodsl import pto
@pto.jit(kernel_kind="vector", target="a5",mode="explicit")
def kernel(n: pto.i32):
for outer in range(0, n):
with pto.for_(0, 2, step=1) as group:
for row in range(0, 2):
value = group + row
kernel.compile()
Expected behavior
编译成功通过
Actual behavior / error logs
File "inner_loop_outer_loop.py", line 12, in <module>
kernel.compile()
File "ptodsl/ptodsl/_jit.py", line 290, in compile
return self._compiler.compile(**constexpr_bindings)
File "ptodsl/ptodsl/_kernel_compilation.py", line 123, in compile
callback = self.tracing_callback(normalized_bindings)
File "ptodsl/ptodsl/_kernel_compilation.py", line 98, in tracing_callback
cached = rewrite_jit_function(self._callback, static_bindings=constexpr_bindings)
File "ptodsl/ptodsl/_ast_rewrite.py", line 50, in rewrite_jit_function
function_def.body = rewriter.rewrite_block(function_def.body, live_after=set())
File "ptodsl/ptodsl/_ast_rewrite.py", line 812, in rewrite_block
rewritten = self.rewrite_stmt(
File "ptodsl/ptodsl/_ast_rewrite.py", line 836, in rewrite_stmt
return self._rewrite_for(
File "ptodsl/ptodsl/_ast_rewrite.py", line 1145, in _rewrite_for
body = self.rewrite_block(
File "ptodsl/ptodsl/_ast_rewrite.py", line 812, in rewrite_block
rewritten = self.rewrite_stmt(
File "ptodsl/ptodsl/_ast_rewrite.py", line 848, in rewrite_stmt
self._rewrite_nested(
File "ptodsl/ptodsl/_ast_rewrite.py", line 876, in _rewrite_nested
self.rewrite_block(
File "ptodsl/ptodsl/_ast_rewrite.py", line 812, in rewrite_block
rewritten = self.rewrite_stmt(
File "ptodsl/ptodsl/_ast_rewrite.py", line 836, in rewrite_stmt
return self._rewrite_for(
File "ptodsl/ptodsl/_ast_rewrite.py", line 1112, in _rewrite_for
raise PTODSLAstRewriteError(
ptodsl._ast_rewrite.PTODSLAstRewriteError: ast_rewrite=True runtime for-loops cannot expose the loop induction variable outside the loop yet; use explicit pto.for_(...) for 'row'
Git commit
370e626
Host platform
None
Target Ascend arch (if relevant)
None
PTOAS build level (if relevant)
None
Component
PTODSL
Description
PTODSL 在编译嵌套顺序为
for => with => for的代码片段时可能失败,错误提示内层循环的变量被用在循环体之外,但实则只被用在了循环体内部Reproduction (minimal)
例 1:
例 2:
Expected behavior
编译成功通过
Actual behavior / error logs
Git commit
370e626
Host platform
None
Target Ascend arch (if relevant)
None
PTOAS build level (if relevant)
None