From 42ab786e52986c9302d79f532e65fd31b24419be Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Mon, 7 Aug 2023 11:32:04 +0200 Subject: [PATCH] ac/nir: handle more special cases in ac_nir_unpack_arg Foz-DB Navi21: Totals from 60972 (45.96% of 132657) affected shaders: CodeSize: 158371336 -> 158127376 (-0.15%) Reviewed-by: Rhys Perry Part-of: --- src/amd/common/ac_nir.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/amd/common/ac_nir.c b/src/amd/common/ac_nir.c index bf58a79..63e73c5 100644 --- a/src/amd/common/ac_nir.c +++ b/src/amd/common/ac_nir.c @@ -40,10 +40,14 @@ ac_nir_unpack_arg(nir_builder *b, const struct ac_shader_args *ac_args, struct a unsigned rshift, unsigned bitwidth) { nir_ssa_def *value = ac_nir_load_arg(b, ac_args, arg); - if (rshift) - return nir_ubfe_imm(b, value, rshift, bitwidth); - else + if (rshift == 0 && bitwidth == 32) + return value; + else if (rshift == 0) return nir_iand_imm(b, value, BITFIELD_MASK(bitwidth)); + else if ((32 - rshift) <= bitwidth) + return nir_ushr_imm(b, value, rshift); + else + return nir_ubfe_imm(b, value, rshift, bitwidth); } static bool -- 2.7.4