From 1a424fee4a2cc807992ab4eb3e2130363150d930 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Thu, 3 Nov 2022 13:41:19 -0400 Subject: [PATCH] ac/llvm: implement nir_op_unpack_32_4x8 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: Pierre-Eric Pelloux-Prayer Reviewed-by: Timur Kristóf Reviewed-by: Rhys Perry Part-of: --- src/amd/llvm/ac_llvm_build.c | 1 + src/amd/llvm/ac_llvm_build.h | 1 + src/amd/llvm/ac_nir_to_llvm.c | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/src/amd/llvm/ac_llvm_build.c b/src/amd/llvm/ac_llvm_build.c index a9668e3..b30cea1 100644 --- a/src/amd/llvm/ac_llvm_build.c +++ b/src/amd/llvm/ac_llvm_build.c @@ -85,6 +85,7 @@ void ac_llvm_context_init(struct ac_llvm_context *ctx, struct ac_llvm_compiler * ctx->f16 = LLVMHalfTypeInContext(ctx->context); ctx->f32 = LLVMFloatTypeInContext(ctx->context); ctx->f64 = LLVMDoubleTypeInContext(ctx->context); + ctx->v4i8 = LLVMVectorType(ctx->i8, 4); ctx->v2i16 = LLVMVectorType(ctx->i16, 2); ctx->v4i16 = LLVMVectorType(ctx->i16, 4); ctx->v2f16 = LLVMVectorType(ctx->f16, 2); diff --git a/src/amd/llvm/ac_llvm_build.h b/src/amd/llvm/ac_llvm_build.h index e493433..0c11f49 100644 --- a/src/amd/llvm/ac_llvm_build.h +++ b/src/amd/llvm/ac_llvm_build.h @@ -96,6 +96,7 @@ struct ac_llvm_context { LLVMTypeRef f16; LLVMTypeRef f32; LLVMTypeRef f64; + LLVMTypeRef v4i8; LLVMTypeRef v2i16; LLVMTypeRef v4i16; LLVMTypeRef v2f16; diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c index ed60a1d..f721e21 100644 --- a/src/amd/llvm/ac_nir_to_llvm.c +++ b/src/amd/llvm/ac_nir_to_llvm.c @@ -543,6 +543,7 @@ static bool visit_alu(struct ac_nir_context *ctx, const nir_alu_instr *instr) case nir_op_vec5: case nir_op_vec8: case nir_op_vec16: + case nir_op_unpack_32_4x8: case nir_op_unpack_32_2x16: case nir_op_unpack_64_2x32: case nir_op_unpack_64_4x16: @@ -1223,6 +1224,9 @@ static bool visit_alu(struct ac_nir_context *ctx, const nir_alu_instr *instr) break; } + case nir_op_unpack_32_4x8: + result = LLVMBuildBitCast(ctx->ac.builder, src[0], ctx->ac.v4i8, ""); + break; case nir_op_unpack_32_2x16: { result = LLVMBuildBitCast(ctx->ac.builder, src[0], ctx->ac.v2i16, ""); -- 2.7.4