From a0b90b45a9bcef058c8fc6ac88ba5e71a8cedade Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Mon, 24 Feb 2020 09:36:18 -0500 Subject: [PATCH] pan/midgard: Don't spill near a branch Fixes dEQP-GLES2.functional.shaders.indexing.varying_array.vec2_dynamic_loop_write_ static_read with register pressure forced down. Signed-off-by: Alyssa Rosenzweig Reviewed-by: Tomeu Vizoso Part-of: --- src/panfrost/midgard/midgard_schedule.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/panfrost/midgard/midgard_schedule.c b/src/panfrost/midgard/midgard_schedule.c index 8dd5ac1d2e2..55fdba0b546 100644 --- a/src/panfrost/midgard/midgard_schedule.c +++ b/src/panfrost/midgard/midgard_schedule.c @@ -1054,6 +1054,14 @@ mir_schedule_alu( bundle.control |= stages[i]->unit; bytes_emitted += bytes_for_instruction(stages[i]); bundle.instructions[bundle.instruction_count++] = stages[i]; + + /* If we branch, we can't spill to TLS since the store + * instruction will never get executed. We could try to + * break the bundle but this is probably easier for + * now. */ + + if (branch) + stages[i]->no_spill |= (1 << REG_CLASS_WORK); } }