From 915af8de8b15886c9fe12ff4bed4fa1fbb904464 Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Tue, 7 Dec 2021 11:09:06 -0800 Subject: [PATCH] r300: Cache the var list in the peephole_mul_omod() loop. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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: --- src/gallium/drivers/r300/compiler/radeon_optimize.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/r300/compiler/radeon_optimize.c b/src/gallium/drivers/r300/compiler/radeon_optimize.c index c106d8d74e6..5c825a0a62a 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; } } }