This release adds new LLVM versions and introduces experimental support for SPIR-V code generation. Note that as of the tested LLVM versions, LLVM's native SPIR-V backend is unable to generate correct SPIR-V code in all cases; but the LLVM SPIR-V target can still be used in combination with the LLVM/SPIR-V Translator to generate valid code.
Users who generate code for AMD GPUs are strongly encouraged to upgrade to LLVM 18 and ROCm 6.0.0, as previous version combinations generate bad code to varying degrees.
Added Features
- Support for LLVM 17 and 18
- Experimental support for SPIR-V code generation (e.g., for Intel GPUs)
Fixed Bugs
- Updated LuaJIT to obtain fix for passing large arrays on macOS M1
Removed Features
- Removed support for LLVM <= 10
- Removed the long-deprecated Makefile build
Known Issues
- #671: When using LLVM >= 17 in JIT mode, Terra is unable to inline functions with
:setinlined(true)
. There are two available workarounds:- Use
terralib.saveobj(...)
to dump a.o
,.so
or executable file. This will apply the full optimization suite required to inline these functions. - Build from source or use binaries with LLVM <= 16
- Use
Binaries
Binaries for this release were produced in the following configurations:
- Linux: x86_64 on Ubuntu 18.04 with LLVM 18 and CUDA 11.6 (verified to work on Ubuntu 20.04, 22.04 and 24.04)
- Note: binaries with LLVM 16 are also provided to work around the above known issue
- Linux: PPC64le on Ubuntu 18.04 with LLVM 13 (verified to work on POWER9 with RHEL 8)
- Linux: AArch64 on Ubuntu 18.04 with LLVM 11 (verified to work on Ubuntu 22.04)
- macOS: x86_64 on macOS 12 with LLVM 18 (verified to work on macOS 14.5)
- Windows: x86_64 on Server 2022 with LLVM 11 and CUDA 11.6
Note that, while we do our best to make the binaries compatible across OS versions/distros, in general we cannot guarantee compatibility outside of the specified OS release (except where otherwise noted).