[Mesa-dev] [PATCHv2 3/4] configure.ac: Separate HAVE_LLVM defines for gallium and radv

Emil Velikov emil.l.velikov at gmail.com
Wed Feb 1 19:09:41 UTC 2017


From: Tobias Droste <tdroste at gmx.de>

Currently --enable-gallium-llvm is equivalent to HAVE_LLVM. At the same
time, non-gallium users such as radv do not require anything from
gallium (let alone the llvm code), thus they do not depend on it. One
option is to rename the gallium define to HAVE_GALLIUM_LLVM but that was
deemed too fragile/other [1] so lets use another define for radv.

Correct earlier mistake and define HAVE_LLVM only if
--enable-gallium-llvm is provided. If radv is built add HAVE_LLVM_RADV
define with the same value as HAVE_LLVM.

In the future we might rework --enable-gallium-llvm to --enable-llvm as
a generic guard/toggle. That can lead to small changes in some extremely
corner cases (like --disable-gallium-llvm --with-vulkan-drivers=radeon)
so let's keep it out for now.

[1] https://lists.freedesktop.org/archives/mesa-dev/2017-January/141897.html

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99010
Signed-off-by: Tobias Droste <tdroste at gmx.de>

v2: [Emil Velikov]
 - Consolidate MESA_LLVM_VERSION definition to a single place.
 - Add beefy comment describing the new macro.
 - Update all HAVE_LLVM references in src/amd.
 - Beef-up commit message.

Cc: Tobias Droste <tdroste at gmx.de>
Cc: 17.0 <mesa-stable at lists.freedesktop.org>
Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
---
Ftr the whole series should be in -stable, plus some of my earlier fixes 
which apply on top.

With the updated patch the following build combinations work as expected
 - scons + linux
 - scons + mingw64
 - scons + msvc (appveyor)
 - autoconf - disable-gallium-llvm + vulkan-drivers=radeon
 - autoconf - enable-gallium-llvm + vulkan-drivers=radeon
 - autoconf - enable-gallium-llvm + vulkan-drivers=
---
 configure.ac                      |  3 ++-
 src/amd/common/ac_llvm_helper.cpp |  2 +-
 src/amd/common/ac_llvm_util.c     | 13 +++++++------
 src/amd/common/ac_llvm_util.h     | 14 ++++++++++++++
 src/amd/common/ac_nir_to_llvm.c   |  6 +++---
 src/amd/vulkan/radv_device.c      |  2 +-
 6 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/configure.ac b/configure.ac
index f956df5120..5101e3bb0b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1001,7 +1001,6 @@ llvm_set_environment_variables() {
             LLVM_VERSION_INT="${LLVM_VERSION_MAJOR}${LLVM_VERSION_MINOR}"
         fi
 
-        DEFINES="${DEFINES} -DHAVE_LLVM=0x0$LLVM_VERSION_INT -DMESA_LLVM_VERSION_PATCH=$LLVM_VERSION_PATCH"
         FOUND_LLVM=yes
         USE_LLVM=no
     else
@@ -1775,6 +1774,7 @@ if test -n "$with_vulkan_drivers"; then
             PKG_CHECK_MODULES([AMDGPU], [libdrm_amdgpu >= $LIBDRM_AMDGPU_REQUIRED])
             radeon_llvm_check $LLVM_REQUIRED_RADV "radv"
             HAVE_RADEON_VULKAN=yes;
+            DEFINES="${DEFINES} -DHAVE_LLVM_RADV=0x0$LLVM_VERSION_INT -DMESA_LLVM_VERSION_PATCH=$LLVM_VERSION_PATCH"
             ;;
         *)
             AC_MSG_ERROR([Vulkan driver '$driver' does not exist])
@@ -2407,6 +2407,7 @@ if test "x$enable_gallium_llvm" == "xyes"; then
     llvm_add_default_components "gallium"
 
     USE_LLVM_GALLIUM=yes
+    DEFINES="${DEFINES} -DHAVE_LLVM=0x0$LLVM_VERSION_INT -DMESA_LLVM_VERSION_PATCH=$LLVM_VERSION_PATCH"
 else
     USE_LLVM_GALLIUM=no
 fi
diff --git a/src/amd/common/ac_llvm_helper.cpp b/src/amd/common/ac_llvm_helper.cpp
index 594339ee8c..154156b8a3 100644
--- a/src/amd/common/ac_llvm_helper.cpp
+++ b/src/amd/common/ac_llvm_helper.cpp
@@ -26,7 +26,7 @@
 /* based on Marek's patch to lp_bld_misc.cpp */
 
 // Workaround http://llvm.org/PR23628
-#if HAVE_LLVM >= 0x0307
+#if MESA_LLVM_VERSION >= 0x0307
 #  pragma push_macro("DEBUG")
 #  undef DEBUG
 #endif
diff --git a/src/amd/common/ac_llvm_util.c b/src/amd/common/ac_llvm_util.c
index f3cab921ba..7060a2f003 100644
--- a/src/amd/common/ac_llvm_util.c
+++ b/src/amd/common/ac_llvm_util.c
@@ -22,6 +22,7 @@
  * of the Software.
  *
  */
+
 /* based on pieces from si_pipe.c and radeon_llvm_emit.c */
 #include "ac_llvm_util.h"
 
@@ -37,7 +38,7 @@
 
 static void ac_init_llvm_target()
 {
-#if HAVE_LLVM < 0x0307
+#if MESA_LLVM_VERSION < 0x0307
 	LLVMInitializeR600TargetInfo();
 	LLVMInitializeR600Target();
 	LLVMInitializeR600TargetMC();
@@ -99,7 +100,7 @@ static const char *ac_get_llvm_processor_name(enum radeon_family family)
 		return "iceland";
 	case CHIP_CARRIZO:
 		return "carrizo";
-#if HAVE_LLVM <= 0x0307
+#if MESA_LLVM_VERSION <= 0x0307
 	case CHIP_FIJI:
 		return "tonga";
 	case CHIP_STONEY:
@@ -110,7 +111,7 @@ static const char *ac_get_llvm_processor_name(enum radeon_family family)
 	case CHIP_STONEY:
 		return "stoney";
 #endif
-#if HAVE_LLVM <= 0x0308
+#if MESA_LLVM_VERSION <= 0x0308
 	case CHIP_POLARIS10:
 		return "tonga";
 	case CHIP_POLARIS11:
@@ -166,7 +167,7 @@ ac_llvm_context_init(struct ac_llvm_context *ctx, LLVMContextRef context)
 	ctx->fpmath_md_2p5_ulp = LLVMMDNodeInContext(ctx->context, args, 1);
 }
 
-#if HAVE_LLVM < 0x0400
+#if MESA_LLVM_VERSION < 0x0400
 static LLVMAttribute ac_attr_to_llvm_attr(enum ac_func_attr attr)
 {
    switch (attr) {
@@ -209,7 +210,7 @@ ac_add_function_attr(LLVMValueRef function,
                      enum ac_func_attr attr)
 {
 
-#if HAVE_LLVM < 0x0400
+#if MESA_LLVM_VERSION < 0x0400
    LLVMAttribute llvm_attr = ac_attr_to_llvm_attr(attr);
    if (attr_idx == -1) {
       LLVMAddFunctionAttr(function, llvm_attr);
@@ -329,7 +330,7 @@ build_cube_intrinsic(struct ac_llvm_context *ctx,
 {
 	LLVMBuilderRef builder = ctx->builder;
 
-	if (HAVE_LLVM >= 0x0309) {
+	if (MESA_LLVM_VERSION >= 0x0309) {
 		LLVMTypeRef f32 = ctx->f32;
 
 		out->stc[1] = ac_emit_llvm_intrinsic(ctx, "llvm.amdgcn.cubetc",
diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h
index c07f67ab8b..64af30228d 100644
--- a/src/amd/common/ac_llvm_util.h
+++ b/src/amd/common/ac_llvm_util.h
@@ -24,6 +24,20 @@
  */
 #pragma once
 
+/*
+ * Since HAVE_LLVM means --enable-gallium-llvm and we cannot change that we
+ * need to indicate/track the LLVM version in a separate way (HAVE_LLVM_RADV).
+ *
+ * Strictly speaking we could get away with HAVE_LLVM_RADV alone, but things
+ * are quite fragile and on their way out since this work is mostly -stable
+ * fixes to get all the crazy permutations building again.
+ */
+#if defined(HAVE_LLVM)
+#  define MESA_LLVM_VERSION HAVE_LLVM
+#elif defined(HAVE_LLVM_RADV)
+#  define MESA_LLVM_VERSION HAVE_LLVM_RADV
+#endif
+
 #include <stdbool.h>
 #include <llvm-c/TargetMachine.h>
 
diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 50ed4d4783..6af109cda7 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -2661,7 +2661,7 @@ static void get_image_intr_name(const char *base_name,
         build_type_name_for_intr(coords_type, coords_type_name,
                             sizeof(coords_type_name));
 
-        if (HAVE_LLVM <= 0x0309) {
+        if (MESA_LLVM_VERSION <= 0x0309) {
                 snprintf(out_name, out_len, "%s.%s", base_name, coords_type_name);
         } else {
                 char data_type_name[8];
@@ -2710,7 +2710,7 @@ static LLVMValueRef visit_image_load(struct nir_to_llvm_context *ctx,
 		params[0] = get_image_coords(ctx, instr);
 		params[1] = get_sampler_desc(ctx, instr->variables[0], DESC_IMAGE);
 		params[2] = LLVMConstInt(ctx->i32, 15, false); /* dmask */
-		if (HAVE_LLVM <= 0x0309) {
+		if (MESA_LLVM_VERSION <= 0x0309) {
 			params[3] = LLVMConstInt(ctx->i1, 0, false);  /* r128 */
 			params[4] = da;
 			params[5] = glc;
@@ -2769,7 +2769,7 @@ static void visit_image_store(struct nir_to_llvm_context *ctx,
 		params[1] = get_image_coords(ctx, instr); /* coords */
 		params[2] = get_sampler_desc(ctx, instr->variables[0], DESC_IMAGE);
 		params[3] = LLVMConstInt(ctx->i32, 15, false); /* dmask */
-		if (HAVE_LLVM <= 0x0309) {
+		if (MESA_LLVM_VERSION <= 0x0309) {
 			params[4] = i1false;  /* r128 */
 			params[5] = da;
 			params[6] = glc;
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 0026de5a0e..9c8675bef9 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -861,7 +861,7 @@ VkResult radv_CreateDevice(
 		}
 	}
 
-#if HAVE_LLVM < 0x0400
+#if MESA_LLVM_VERSION < 0x0400
 	device->llvm_supports_spill = false;
 #else
 	device->llvm_supports_spill = true;
-- 
2.11.0



More information about the mesa-dev mailing list