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:
@@ -34,7 +34,7 @@
|
|||||||
* The other side of this is that we need to be able convert between several
|
* The other side of this is that we need to be able convert between several
|
||||||
* types accurately and efficiently.
|
* types accurately and efficiently.
|
||||||
*
|
*
|
||||||
* Conversion between types of different bit width is quite complex since a
|
* Conversion between types of different bit width is quite complex since a
|
||||||
*
|
*
|
||||||
* To remember there are a few invariants in type conversions:
|
* To remember there are a few invariants in type conversions:
|
||||||
*
|
*
|
||||||
@@ -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);
|
||||||
@@ -673,7 +673,7 @@ lp_build_conv(struct gallivm_state *gallivm,
|
|||||||
dst[0] = lp_build_extract_range(gallivm, dst[0], 0, dst_type.length);
|
dst[0] = lp_build_extract_range(gallivm, dst[0], 0, dst_type.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Special case 2x8x32 --> 1x16x8, 1x8x32 ->1x8x8
|
/* Special case 2x8x32 --> 1x16x8, 1x8x32 ->1x8x8
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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), "");
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -76,7 +76,7 @@ lp_build_vec_type(struct gallivm_state *gallivm,struct lp_type type)
|
|||||||
* type and check for identity.
|
* type and check for identity.
|
||||||
*/
|
*/
|
||||||
boolean
|
boolean
|
||||||
lp_check_elem_type(struct lp_type type, LLVMTypeRef elem_type)
|
lp_check_elem_type(struct lp_type type, LLVMTypeRef elem_type)
|
||||||
{
|
{
|
||||||
LLVMTypeKind elem_kind;
|
LLVMTypeKind elem_kind;
|
||||||
|
|
||||||
@@ -113,12 +113,12 @@ lp_check_elem_type(struct lp_type type, LLVMTypeRef elem_type)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
boolean
|
boolean
|
||||||
lp_check_vec_type(struct lp_type type, LLVMTypeRef vec_type)
|
lp_check_vec_type(struct lp_type type, LLVMTypeRef vec_type)
|
||||||
{
|
{
|
||||||
LLVMTypeRef elem_type;
|
LLVMTypeRef elem_type;
|
||||||
|
|
||||||
@@ -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)
|
||||||
@@ -142,7 +142,7 @@ lp_check_vec_type(struct lp_type type, LLVMTypeRef vec_type)
|
|||||||
|
|
||||||
|
|
||||||
boolean
|
boolean
|
||||||
lp_check_value(struct lp_type type, LLVMValueRef val)
|
lp_check_value(struct lp_type type, LLVMValueRef val)
|
||||||
{
|
{
|
||||||
LLVMTypeRef vec_type;
|
LLVMTypeRef vec_type;
|
||||||
|
|
||||||
@@ -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);
|
||||||
|
@@ -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"
|
||||||
|
Reference in New Issue
Block a user