gallium/gallivm: fix compilation issues with llvm 11

Top of the trunk LLVM removes old vector type
and introduces two new ones - one for fixed-width
and one for scalable vectors. This commit fixes
compilation issues by switching from LLVMVectorTypeKind
to LLVMFixedVectorTypeKind for new LLVM.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4748>
This commit is contained in:
Jan Zielinski
2020-04-25 19:27:07 +02:00
committed by Marge Bot
parent 6943eda5c9
commit e2a7436dd1
8 changed files with 26 additions and 19 deletions

View File

@@ -93,7 +93,7 @@ lp_build_half_to_float(struct gallivm_state *gallivm,
{ {
LLVMBuilderRef builder = gallivm->builder; LLVMBuilderRef builder = gallivm->builder;
LLVMTypeRef src_type = LLVMTypeOf(src); LLVMTypeRef src_type = LLVMTypeOf(src);
unsigned src_length = LLVMGetTypeKind(src_type) == LLVMVectorTypeKind ? unsigned src_length = LLVMGetTypeKind(src_type) == LLVMFixedVectorTypeKind ?
LLVMGetVectorSize(src_type) : 1; LLVMGetVectorSize(src_type) : 1;
struct lp_type f32_type = lp_type_float_vec(32, 32 * src_length); struct lp_type f32_type = lp_type_float_vec(32, 32 * src_length);
@@ -138,7 +138,7 @@ lp_build_float_to_half(struct gallivm_state *gallivm,
{ {
LLVMBuilderRef builder = gallivm->builder; LLVMBuilderRef builder = gallivm->builder;
LLVMTypeRef f32_vec_type = LLVMTypeOf(src); LLVMTypeRef f32_vec_type = LLVMTypeOf(src);
unsigned length = LLVMGetTypeKind(f32_vec_type) == LLVMVectorTypeKind unsigned length = LLVMGetTypeKind(f32_vec_type) == LLVMFixedVectorTypeKind
? LLVMGetVectorSize(f32_vec_type) : 1; ? LLVMGetVectorSize(f32_vec_type) : 1;
struct lp_type i32_type = lp_type_int_vec(32, 32 * length); struct lp_type i32_type = lp_type_int_vec(32, 32 * length);
struct lp_type i16_type = lp_type_int_vec(16, 16 * length); struct lp_type i16_type = lp_type_int_vec(16, 16 * length);

View File

@@ -240,7 +240,7 @@ lp_build_float_to_r11g11b10(struct gallivm_state *gallivm,
LLVMValueRef dst, rcomp, bcomp, gcomp; LLVMValueRef dst, rcomp, bcomp, gcomp;
struct lp_build_context i32_bld; struct lp_build_context i32_bld;
LLVMTypeRef src_type = LLVMTypeOf(*src); LLVMTypeRef src_type = LLVMTypeOf(*src);
unsigned src_length = LLVMGetTypeKind(src_type) == LLVMVectorTypeKind ? unsigned src_length = LLVMGetTypeKind(src_type) == LLVMFixedVectorTypeKind ?
LLVMGetVectorSize(src_type) : 1; LLVMGetVectorSize(src_type) : 1;
struct lp_type i32_type = lp_type_int_vec(32, 32 * src_length); struct lp_type i32_type = lp_type_int_vec(32, 32 * src_length);
@@ -406,7 +406,7 @@ lp_build_r11g11b10_to_float(struct gallivm_state *gallivm,
LLVMValueRef *dst) LLVMValueRef *dst)
{ {
LLVMTypeRef src_type = LLVMTypeOf(src); LLVMTypeRef src_type = LLVMTypeOf(src);
unsigned src_length = LLVMGetTypeKind(src_type) == LLVMVectorTypeKind ? unsigned src_length = LLVMGetTypeKind(src_type) == LLVMFixedVectorTypeKind ?
LLVMGetVectorSize(src_type) : 1; LLVMGetVectorSize(src_type) : 1;
struct lp_type f32_type = lp_type_float_vec(32, 32 * src_length); struct lp_type f32_type = lp_type_float_vec(32, 32 * src_length);
@@ -464,7 +464,7 @@ lp_build_rgb9e5_to_float(struct gallivm_state *gallivm,
LLVMBuilderRef builder = gallivm->builder; LLVMBuilderRef builder = gallivm->builder;
LLVMTypeRef src_type = LLVMTypeOf(src); LLVMTypeRef src_type = LLVMTypeOf(src);
LLVMValueRef shift, scale, bias, exp; LLVMValueRef shift, scale, bias, exp;
unsigned src_length = LLVMGetTypeKind(src_type) == LLVMVectorTypeKind ? unsigned src_length = LLVMGetTypeKind(src_type) == LLVMFixedVectorTypeKind ?
LLVMGetVectorSize(src_type) : 1; LLVMGetVectorSize(src_type) : 1;
struct lp_type i32_type = lp_type_int_vec(32, 32 * src_length); struct lp_type i32_type = lp_type_int_vec(32, 32 * src_length);
struct lp_type u32_type = lp_type_uint_vec(32, 32 * src_length); struct lp_type u32_type = lp_type_uint_vec(32, 32 * src_length);

View File

@@ -67,7 +67,7 @@ lp_format_intrinsic(char *name,
char c; char c;
LLVMTypeKind kind = LLVMGetTypeKind(type); LLVMTypeKind kind = LLVMGetTypeKind(type);
if (kind == LLVMVectorTypeKind) { if (kind == LLVMFixedVectorTypeKind) {
length = LLVMGetVectorSize(type); length = LLVMGetVectorSize(type);
type = LLVMGetElementType(type); type = LLVMGetElementType(type);
kind = LLVMGetTypeKind(type); kind = LLVMGetTypeKind(type);

View File

@@ -1035,7 +1035,7 @@ lp_build_pad_vector(struct gallivm_state *gallivm,
type = LLVMTypeOf(src); type = LLVMTypeOf(src);
if (LLVMGetTypeKind(type) != LLVMVectorTypeKind) { if (LLVMGetTypeKind(type) != LLVMFixedVectorTypeKind) {
/* Can't use ShuffleVector on non-vector type */ /* Can't use ShuffleVector on non-vector type */
undef = LLVMGetUndef(LLVMVectorType(type, dst_length)); undef = LLVMGetUndef(LLVMVectorType(type, dst_length));
return LLVMBuildInsertElement(gallivm->builder, undef, src, lp_build_const_int32(gallivm, 0), ""); return LLVMBuildInsertElement(gallivm->builder, undef, src, lp_build_const_int32(gallivm, 0), "");

View File

@@ -92,7 +92,7 @@ lp_build_print_value(struct gallivm_state *gallivm,
type_ref = LLVMTypeOf(value); type_ref = LLVMTypeOf(value);
type_kind = LLVMGetTypeKind(type_ref); type_kind = LLVMGetTypeKind(type_ref);
if (type_kind == LLVMVectorTypeKind) { if (type_kind == LLVMFixedVectorTypeKind) {
length = LLVMGetVectorSize(type_ref); length = LLVMGetVectorSize(type_ref);
type_ref = LLVMGetElementType(type_ref); type_ref = LLVMGetElementType(type_ref);

View File

@@ -50,7 +50,7 @@ lp_build_broadcast(struct gallivm_state *gallivm,
{ {
LLVMValueRef res; LLVMValueRef res;
if (LLVMGetTypeKind(vec_type) != LLVMVectorTypeKind) { if (LLVMGetTypeKind(vec_type) != LLVMFixedVectorTypeKind) {
/* scalar */ /* scalar */
assert(vec_type == LLVMTypeOf(scalar)); assert(vec_type == LLVMTypeOf(scalar));
res = scalar; res = scalar;

View File

@@ -129,7 +129,7 @@ lp_check_vec_type(struct lp_type type, LLVMTypeRef vec_type)
if (type.length == 1) if (type.length == 1)
return lp_check_elem_type(type, vec_type); return lp_check_elem_type(type, vec_type);
if(LLVMGetTypeKind(vec_type) != LLVMVectorTypeKind) if(LLVMGetTypeKind(vec_type) != LLVMFixedVectorTypeKind)
return FALSE; return FALSE;
if(LLVMGetVectorSize(vec_type) != type.length) if(LLVMGetVectorSize(vec_type) != type.length)
@@ -259,7 +259,7 @@ lp_sizeof_llvm_type(LLVMTypeRef t)
return 8 * sizeof(float); return 8 * sizeof(float);
case LLVMDoubleTypeKind: case LLVMDoubleTypeKind:
return 8 * sizeof(double); return 8 * sizeof(double);
case LLVMVectorTypeKind: case LLVMFixedVectorTypeKind:
{ {
LLVMTypeRef elem = LLVMGetElementType(t); LLVMTypeRef elem = LLVMGetElementType(t);
unsigned len = LLVMGetVectorSize(t); unsigned len = LLVMGetVectorSize(t);
@@ -311,8 +311,12 @@ lp_typekind_name(LLVMTypeKind t)
return "LLVMArrayTypeKind"; return "LLVMArrayTypeKind";
case LLVMPointerTypeKind: case LLVMPointerTypeKind:
return "LLVMPointerTypeKind"; return "LLVMPointerTypeKind";
case LLVMVectorTypeKind: case LLVMFixedVectorTypeKind:
#if LLVM_VERSION_MAJOR >= 11
return "LLVMFixedVectorTypeKind";
#else
return "LLVMVectorTypeKind"; return "LLVMVectorTypeKind";
#endif
case LLVMMetadataTypeKind: case LLVMMetadataTypeKind:
return "LLVMMetadataTypeKind"; return "LLVMMetadataTypeKind";
default: default:
@@ -329,7 +333,7 @@ lp_dump_llvmtype(LLVMTypeRef t)
{ {
LLVMTypeKind k = LLVMGetTypeKind(t); LLVMTypeKind k = LLVMGetTypeKind(t);
if (k == LLVMVectorTypeKind) { if (k == LLVMFixedVectorTypeKind) {
LLVMTypeRef te = LLVMGetElementType(t); LLVMTypeRef te = LLVMGetElementType(t);
LLVMTypeKind ke = LLVMGetTypeKind(te); LLVMTypeKind ke = LLVMGetTypeKind(te);
unsigned len = LLVMGetVectorSize(t); unsigned len = LLVMGetVectorSize(t);

View File

@@ -36,6 +36,9 @@
#ifndef LP_BLD_TYPE_H #ifndef LP_BLD_TYPE_H
#define LP_BLD_TYPE_H #define LP_BLD_TYPE_H
#if LLVM_VERSION_MAJOR < 11
#define LLVMFixedVectorTypeKind LLVMVectorTypeKind
#endif
#include "util/format/u_format.h" #include "util/format/u_format.h"
#include "pipe/p_compiler.h" #include "pipe/p_compiler.h"