Skip to content

Commit ee149f0

Browse files
committed
Fix nvvm.compile_program() failure for CUDA version 12.0
The original datalayout lacked explicit alignment and size definitions for i1, i8, i16, f32, f64, v64, and v128. The missing types are crucial for LLVM-based compilation in CUDA 12.0. Later CUDA versions are more forgiving, but 12.0 enforces a stricter layout. The stricter layout should resolve the issue for CUDA 12.0 without breaking compatibility with later versions.
1 parent cb991d7 commit ee149f0

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

cuda_bindings/tests/test_nvvm.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
from cuda.bindings import nvvm
88

99
MINIMAL_NVVMIR = b"""\
10-
target datalayout = "e-p:64:64:64-i64:64:64:64-i128:128:128:128-v16:16:16:16-v32:32:32:32-n16:32:64"
10+
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-i128:128:128-f32:32:32-f64:64:64-v16:16:16-v32:32:32-v64:64:64-v128:128:128-n16:32:64"
11+
1112
target triple = "nvptx64-nvidia-cuda"
1213
1314
define void @kernel() {
@@ -20,7 +21,7 @@
2021
2122
!nvvmir.version = !{!1}
2223
!1 = !{i32 2, i32 0, i32 3, i32 1}
23-
"""
24+
""" # noqa: E501
2425

2526

2627
def test_nvvm_version():
@@ -112,12 +113,18 @@ def test_with_minimal_nnvm_ir():
112113
prog = nvvm.create_program()
113114
try:
114115
nvvm.add_module_to_program(prog, MINIMAL_NVVMIR, len(MINIMAL_NVVMIR), "FileNameHere.ll")
115-
nvvm.compile_program(prog, 0, [])
116-
log_size = nvvm.get_program_log_size(prog)
117-
assert log_size == 1
118-
buffer = bytearray(log_size)
119-
nvvm.get_program_log(prog, buffer)
120-
assert buffer == b"\x00"
116+
try:
117+
nvvm.compile_program(prog, 0, [])
118+
except nvvm.nvvmError as e:
119+
buffer = bytearray(nvvm.get_program_log_size(prog))
120+
nvvm.get_program_log(prog, buffer)
121+
raise RuntimeError(buffer.decode(errors="backslashreplace")) from e
122+
else:
123+
log_size = nvvm.get_program_log_size(prog)
124+
assert log_size == 1
125+
buffer = bytearray(log_size)
126+
nvvm.get_program_log(prog, buffer)
127+
assert buffer == b"\x00"
121128
result_size = nvvm.get_compiled_result_size(prog)
122129
buffer = bytearray(result_size)
123130
nvvm.get_compiled_result(prog, buffer)

0 commit comments

Comments
 (0)