clover/llvm: Add get_[cl|language]_version, validation and some helpers
authorAaron Watry <awatry@gmail.com>
Sat, 22 Jul 2017 02:43:38 +0000 (21:43 -0500)
committerAaron Watry <awatry@gmail.com>
Wed, 21 Mar 2018 11:59:37 +0000 (06:59 -0500)
commit29b4090d18fa3e7435450e30383d0416e536a425
treee6084714c5adcc5c7b096e84c7d1939590f88182
parent14fffefc60482fe84cffcd00a44a4c8b7e0d5a36
clover/llvm: Add get_[cl|language]_version, validation and some helpers

Used to calculate the default CLC language version based on the --cl-std in build args
and the device capabilities.

According to section 5.8.4.5 of the 2.0 spec, the CL C version is chosen by:
 1) If you have -cl-std=CL1.1+ use the version specified
 2) If not, use the highest 1.x version that the device supports

Curiously, there is no valid value for -cl-std=CL1.0

Validates requested cl-std against device_clc_version

Signed-off-by: Aaron Watry <awatry@gmail.com>
Reviewed-by: Pierre Moreau <pierre.morrow@free.fr>
v7: (Pierre) Split cl/clc versions into separate lists and
    make more references const.

v6: (Pierre) Add more const and fix some whitespace

v5: (Aaron) Use a collection of cl versions instead of switch cases
    Consolidates the string, numeric version, and clc langstandard::kind

v4: (Pierre) Split get_language_version addition and use into separate patches
    Squash patches that add the helpers and validate the language standard

v3: Change device_version to device_clc_version

v2: (Pierre) Move create_compiler_instance changes to correct patch
    to prevent temporary build breakage.
    Convert version_str into unsigned and use it to find language version
    Add build_error for unknown language version string
    Whitespace fixes
src/gallium/state_trackers/clover/llvm/invocation.cpp