Skip to content

Commit 631aca9

Browse files
authored
Add nvjitlink get_linked_ltoir (#2337)
1 parent 046cefa commit 631aca9

2 files changed

Lines changed: 50 additions & 0 deletions

File tree

cuda_bindings/docs/source/module/nvjitlink.rst

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ NvJitLink defines the following functions for linking code objects and querying
2525
.. autofunction:: cuda.bindings.nvjitlink.get_linked_cubin
2626
.. autofunction:: cuda.bindings.nvjitlink.get_linked_ptx_size
2727
.. autofunction:: cuda.bindings.nvjitlink.get_linked_ptx
28+
.. autofunction:: cuda.bindings.nvjitlink.get_linked_ltoir_size
29+
.. autofunction:: cuda.bindings.nvjitlink.get_linked_ltoir
2830
.. autofunction:: cuda.bindings.nvjitlink.get_error_log_size
2931
.. autofunction:: cuda.bindings.nvjitlink.get_error_log
3032
.. autofunction:: cuda.bindings.nvjitlink.get_info_log_size
@@ -65,6 +67,33 @@ Types
6567
.. autoattribute:: cuda.bindings.nvjitlink.Result.ERROR_FINALIZE
6668

6769

70+
.. autoattribute:: cuda.bindings.nvjitlink.Result.ERROR_NULL_INPUT
71+
72+
73+
.. autoattribute:: cuda.bindings.nvjitlink.Result.ERROR_INCOMPATIBLE_OPTIONS
74+
75+
76+
.. autoattribute:: cuda.bindings.nvjitlink.Result.ERROR_INCORRECT_INPUT_TYPE
77+
78+
79+
.. autoattribute:: cuda.bindings.nvjitlink.Result.ERROR_ARCH_MISMATCH
80+
81+
82+
.. autoattribute:: cuda.bindings.nvjitlink.Result.ERROR_OUTDATED_LIBRARY
83+
84+
85+
.. autoattribute:: cuda.bindings.nvjitlink.Result.ERROR_MISSING_FATBIN
86+
87+
88+
.. autoattribute:: cuda.bindings.nvjitlink.Result.ERROR_UNRECOGNIZED_ARCH
89+
90+
91+
.. autoattribute:: cuda.bindings.nvjitlink.Result.ERROR_UNSUPPORTED_ARCH
92+
93+
94+
.. autoattribute:: cuda.bindings.nvjitlink.Result.ERROR_LTO_NOT_ENABLED
95+
96+
6897
.. autoclass:: cuda.bindings.nvjitlink.InputType
6998

7099
.. autoattribute:: cuda.bindings.nvjitlink.InputType.NONE

cuda_bindings/tests/test_nvjitlink.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ def check_nvjitlink_usable():
7070
return inner_nvjitlink._inspect_function_pointer("__nvJitLinkVersion") != 0
7171

7272

73+
def check_nvjitlink_get_linked_ltoir_usable():
74+
from cuda.bindings._internal import nvjitlink as inner_nvjitlink
75+
76+
return inner_nvjitlink._inspect_function_pointer("__nvJitLinkGetLinkedLTOIR") != 0
77+
78+
7379
pytestmark = pytest.mark.skipif(
7480
not check_nvjitlink_usable(), reason="nvJitLink not usable, maybe not installed or too old (<12.3)"
7581
)
@@ -183,6 +189,21 @@ def test_get_linked_ptx(arch, get_dummy_ltoir):
183189
assert len(ptx) == ptx_size
184190

185191

192+
@pytest.mark.parametrize("arch", ARCHITECTURES)
193+
@pytest.mark.skipif(
194+
not check_nvjitlink_get_linked_ltoir_usable(),
195+
reason="nvJitLinkGetLinkedLTOIR not available in installed nvJitLink",
196+
)
197+
def test_get_linked_ltoir(arch, get_dummy_ltoir):
198+
with nvjitlink_session(2, [f"-arch={arch}", "-lto"]) as handle:
199+
nvjitlink.add_data(handle, nvjitlink.InputType.LTOIR, get_dummy_ltoir, len(get_dummy_ltoir), "test_data")
200+
nvjitlink.complete(handle)
201+
ltoir_size = nvjitlink.get_linked_ltoir_size(handle)
202+
ltoir = bytearray(ltoir_size)
203+
nvjitlink.get_linked_ltoir(handle, ltoir)
204+
assert len(ltoir) == ltoir_size
205+
206+
186207
def test_package_version():
187208
ver = nvjitlink.version()
188209
assert len(ver) == 2

0 commit comments

Comments
 (0)