From: Emma Anholt Date: Tue, 7 Dec 2021 19:09:06 +0000 (-0800) Subject: r300: Cache the var list in the peephole_mul_omod() loop. X-Git-Tag: upstream/22.3.5~14989 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=915af8de8b15886c9fe12ff4bed4fa1fbb904464;p=platform%2Fupstream%2Fmesa.git r300: Cache the var list in the peephole_mul_omod() loop. If we're not making progress (which the function was already giving us!), then there's no need to recompute the list. Reduces pixmark-piano/7.shader_test compile time from 50 seconds to 10. Reviewed-by: Marek Olšák Part-of: --- diff --git a/src/gallium/drivers/r300/compiler/radeon_optimize.c b/src/gallium/drivers/r300/compiler/radeon_optimize.c index c106d8d..5c825a0 100644 --- a/src/gallium/drivers/r300/compiler/radeon_optimize.c +++ b/src/gallium/drivers/r300/compiler/radeon_optimize.c @@ -881,7 +881,6 @@ static int peephole(struct radeon_compiler * c, struct rc_instruction * inst) void rc_optimize(struct radeon_compiler * c, void *user) { struct rc_instruction * inst = c->Program.Instructions.Next; - struct rc_list * var_list; while(inst != &c->Program.Instructions) { struct rc_instruction * cur = inst; inst = inst->Next; @@ -902,12 +901,15 @@ void rc_optimize(struct radeon_compiler * c, void *user) } inst = c->Program.Instructions.Next; + struct rc_list * var_list = NULL; while(inst != &c->Program.Instructions) { struct rc_instruction * cur = inst; inst = inst->Next; if (cur->U.I.Opcode == RC_OPCODE_MUL) { - var_list = rc_get_variables(c); - peephole_mul_omod(c, cur, var_list); + if (!var_list) + var_list = rc_get_variables(c); + if (peephole_mul_omod(c, cur, var_list)) + var_list = NULL; } } }