Module: Mesa Branch: main Commit: 7e02787a544a758d134a814eda54068ec1bf25d2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7e02787a544a758d134a814eda54068ec1bf25d2
Author: Daniel Schürmann <[email protected]> Date: Tue Oct 26 18:11:30 2021 +0200 aco: use p_create_vector(v2b,v2b) in get_alu_src_vop3p() Reviewed-by: Rhys Perry <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13576> --- src/amd/compiler/aco_instruction_selection.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index b04e10d7682..f2f53a916ca 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -780,7 +780,16 @@ get_alu_src_vop3p(struct isel_context* ctx, nir_alu_src src) /* extract a full dword if possible */ if (tmp.bytes() >= (dword + 1) * 4) { - return emit_extract_vector(ctx, tmp, dword, RegClass(tmp.type(), 1)); + /* if the source is splitted into components, use p_create_vector */ + auto it = ctx->allocated_vec.find(tmp.id()); + if (it != ctx->allocated_vec.end()) { + unsigned index = dword << 1; + Builder bld(ctx->program, ctx->block); + if (it->second[index].regClass() == v2b) + return bld.pseudo(aco_opcode::p_create_vector, bld.def(v1), it->second[index], + it->second[index + 1]); + } + return emit_extract_vector(ctx, tmp, dword, v1); } else { /* This must be a swizzled access to %a.zz where %a is v6b */ assert(((src.swizzle[0] | src.swizzle[1]) & 1) == 0);
