[llvm-dev] [RFC] Queries for LLVM version

Nemanja Ivanovic via llvm-dev llvm-dev at lists.llvm.org
Wed Feb 8 07:43:38 PST 2017


Would it make sense to:

   1. Provide the integer Major/Minor/Patch API's for use cases where the
   user wants to check that the loaded version is at least some version that
   contains a fix they're after
   2. Provide a string API for the caching use case you outlined


On Wed, Feb 8, 2017 at 3:56 PM, Mehdi Amini <mehdi.amini at apple.com> wrote:

>
> On Feb 8, 2017, at 7:51 AM, Nemanja Ivanovic <nemanja.i.ibm at gmail.com>
> wrote:
>
> So Mehdi,
> you're not in favour of providing this functionality then?
>
>
> I’m not against the functionality, but I’m not sure the API is the right
> one for the use-case.
>
> Or just not in favour of that use case?
>
>
> The use-case (object cache) makes perfect sense, but I wouldn’t use this
> API.
> I’d like use a `const char *getLLVMVersion()` API that would be documented
> as returning an opaque string representing the LLVM version.
> The reason to return an opaque string is to prevent (not encourage…) users
> to parse it. It could return something like “LLVM 4.0.0svn(r12345)”.
> Using this as part of your cache key makes it more robust to switching a
> given version of the compiler.
>
> But ultimately, if I had to build such a caching system*, I’d likely do it
> upstream in LLVM and design the API to such that it would “just work” for
> my shader driver and could be maintained/improved by the community and
> reused by other users.
>
> * https://github.com/llvm-mirror/llvm/blob/master/lib/LTO/Caching.cpp
> https://github.com/llvm-mirror/llvm/blob/master/include/llvm/Support/
> CachePruning.h
>
>> Mehdi
>
>
>
> On Wed, Feb 8, 2017 at 10:18 AM, Mehdi Amini <mehdi.amini at apple.com>
> wrote:
>
>>
>> > On Feb 7, 2017, at 5:44 PM, Timothy Arceri via llvm-dev <
>> llvm-dev at lists.llvm.org> wrote:
>> >
>> > On Wed, 2017-02-08 at 00:12 +0100, Nemanja Ivanovic wrote:
>> >> I am certainly willing to write up a patch to do this. I was hoping
>> >> to get a few more responses/buy-in from the community.
>> >> And honestly, I'd be interested to know if this can be back-ported to
>> >> at least 4.0 if it gets accepted.
>> >
>> > My *possible* use case is for identifying the version of llvm used to
>> > compile shaders for AMD gpus. This information would be used with an
>> > on-disk cache of compiled shaders allowing old cache items to be
>> > ignored if llvm is upgraded.
>> >
>> > One downside of this is there is no way to know if distros backport
>> > fixes to llvm. If the version is not bumped then the a buggy cached
>> > shader would continue to be used even after the distro makes the fix.
>>
>> This is exactly why we don’t use this kind of versioning: it is
>> fragile/unreliable.
>>
>>>> Mehdi
>>
>>
>> >
>> >
>> >>
>> >> Now that I see that there's more interest in this than just my own,
>> >> I'll put up a patch on Phabricator.
>> >
>> > Cool, thanks!
>> >
>> >>
>> >> On Wed, Feb 8, 2017 at 12:04 AM, Timothy Arceri via llvm-dev <llvm-de
>> >> v at lists.llvm.org> wrote:
>> >>> On 01/26/2017 12:45 AM, Nemanja Ivanovic via llvm-dev wrote:
>> >>>> This has actually come up in the context of a JIT, but I think
>> >>> that
>> >>>> having the functionality in general could be useful.
>> >>>>
>> >>>> Currently, there does not appear to be an API in LLVM to query
>> >>> for
>> >>>> LLVM version information. In the particular context where this
>> >>> came
>> >>>> up, LLVM is used as a shared library and various functionality
>> >>> (and
>> >>>> bug fixes) used by the JIT is available in various LLVM versions.
>> >>> So
>> >>>> it would be quite convenient to be able to dynamically determine
>> >>> the
>> >>>> version that happens to be loaded.
>> >>>>
>> >>>> Honestly, I am not completely clear on what the best place for
>> >>>> something like this would be, but it appears that the following
>> >>> seems
>> >>>> like a natural choice:
>> >>>>
>> >>>> llvm::VersionPrinter in lib/Support/CommandLine.cpp already
>> >>> queries
>> >>>> this data so it might make sense for it to expose the following
>> >>> API's
>> >>>> (as part of VersionPrinter, accessed through the instance):
>> >>>> llvm::cl::getVersionMajor()
>> >>>> llvm::cl::getVersionMinor()
>> >>>> llvm::cl::getVersionPatch()
>> >>>
>> >>> Hi,
>> >>>
>> >>> I'm also interested in querying this at runtime. Has there been any
>> >>> patches submitted for this yet?
>> >>>
>> >>> Thanks,
>> >>> Tim
>> >>> _______________________________________________
>> >>> LLVM Developers mailing list
>> >>> llvm-dev at lists.llvm.org
>> >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>> >>>
>> >>
>> >>
>> > _______________________________________________
>> > LLVM Developers mailing list
>> > llvm-dev at lists.llvm.org
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170208/35f4a66f/attachment-0001.html>


More information about the llvm-dev mailing list