Skip to content

Commit f302f3a

Browse files
committed
Update to compare against generated code even with post-processing
1 parent 22d8a8d commit f302f3a

1 file changed

Lines changed: 29 additions & 13 deletions

File tree

tests/python/unittest/test_tir_transform_inject_ptx_async_copy.py

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -361,13 +361,27 @@ def postproc_if_missing_async_support():
361361
support_async = major >= 8
362362

363363
func_name = "tvm_callback_cuda_postproc"
364-
prev_postproc = None
365-
366-
if not support_async:
367-
prev_postproc = tvm.get_global_func(func_name, allow_missing=True)
368-
369-
@tvm.register_func(func_name, override=True)
370-
def tvm_callback_cuda_postproc(code, _):
364+
prev_postproc = tvm.get_global_func(func_name, allow_missing=True)
365+
366+
# Store the generated code prior to the post-processing. This
367+
# way, even though the generated code doesn't compile on platforms
368+
# that do not support async, the comparison against an expected
369+
# output can still be performed. We cannot use
370+
# `mod.get_source()`, as that contains the source after all
371+
# post-processing.
372+
original_code = None
373+
374+
def get_original_code():
375+
nonlocal original_code
376+
return original_code
377+
378+
@tvm.register_func(func_name, override=True)
379+
def tvm_callback_cuda_postproc(code, _):
380+
nonlocal original_code
381+
original_code = code
382+
if support_async:
383+
return code
384+
else:
371385
ret = []
372386
for line in code.split("\n"):
373387
ret.append(line)
@@ -377,10 +391,12 @@ def tvm_callback_cuda_postproc(code, _):
377391
ret.append("}")
378392
return "".join(ret)
379393

380-
yield
394+
yield get_original_code
381395

382396
# Restore previous postproc func to avoid impacting other tests
383-
if prev_postproc is not None:
397+
if prev_postproc is None:
398+
tvm._ffi.registry.remove_global_func(func_name)
399+
else:
384400
tvm.register_func(func_name, prev_postproc, override=True)
385401

386402

@@ -426,8 +442,8 @@ def simple_compute(
426442

427443
mod = tvm.IRModule.from_expr(simple_compute)
428444
with tvm.transform.PassContext(config={"tir.use_async_copy": 1}):
429-
built = tvm.build(mod, target="cuda")
430-
generated_code = built.imported_modules[0].get_source()
445+
tvm.build(mod, target="cuda")
446+
generated_code = postproc_if_missing_async_support()
431447
assert generated_code == expected_cuda_script
432448

433449

@@ -881,8 +897,8 @@ def complex_compute(
881897

882898
mod = tvm.IRModule.from_expr(complex_compute)
883899
with tvm.transform.PassContext(config={"tir.use_async_copy": 1}):
884-
built = tvm.build(mod, target="cuda")
885-
generated_code = built.imported_modules[0].get_source()
900+
tvm.build(mod, target="cuda")
901+
generated_code = postproc_if_missing_async_support()
886902
# generated_code must contain " setp.ne.b32 p, %0, 0;"
887903
assert "setp.ne.b32" in generated_code
888904

0 commit comments

Comments
 (0)