I can’t seem to find a direct answer. If I want to convert NVVM IR to PTX code, do I have to use libNVVM or can I use a publicly released version of LLVM?
You can use either.
NVVM IR is just a pre-defined subset of LLVM IR along with some conventions and intrinsics for generating PTX assembly. You can use the open-source version of LLVM along with the NVPTX back-end to compile LLVM IR to PTX. A goal of the open-source NVPTX back-end is to be 100% compatible with this IR specification. Depending on your needs, the open-source version tracks upstream changes more closely (since it is part of the upstream repository).
The libnvvm library is the “official” compiler library that provides an easy-to-use API for reading LLVM IR modules and compiling them to PTX, without needing to interface with LLVM APIs directly.