mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 06:58:05 +02:00
r600/sb: handle jump after target to end of program. (v2)
This fixes hangs on cayman with
tests/spec/arb_tessellation_shader/execution/trivial-tess-gs_no-gs-inputs.shader_test
This has a single if/else in it, and when this peephole activated,
it would set the jump target to NULL if there was no instruction
after the final POP. This adds a NOP if we get a jump in this case,
and seems to fix the hangs, so we have a valid target for the ELSE
instruction to go to, instead of 0 (which causes infinite loops).
v2: update last_cf correctly. (I had some other patches hide this)
Cc: <mesa-stable@lists.freedesktop.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
(cherry picked from commit 579ec9c311)
This commit is contained in:
parent
ab5585ff9f
commit
de438f1569
1 changed files with 5 additions and 0 deletions
|
|
@ -933,6 +933,11 @@ void bc_finalizer::cf_peephole() {
|
|||
cf_node *c = static_cast<cf_node*>(*I);
|
||||
|
||||
if (c->jump_after_target) {
|
||||
if (c->jump_target->next == NULL) {
|
||||
c->jump_target->insert_after(sh.create_cf(CF_OP_NOP));
|
||||
if (last_cf == c->jump_target)
|
||||
last_cf = static_cast<cf_node*>(c->jump_target->next);
|
||||
}
|
||||
c->jump_target = static_cast<cf_node*>(c->jump_target->next);
|
||||
c->jump_after_target = false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue