r600/sb: handle jump after target to end of program. (v2)
authorDave Airlie <airlied@redhat.com>
Sun, 26 Nov 2017 23:36:39 +0000 (23:36 +0000)
committerDave Airlie <airlied@redhat.com>
Wed, 29 Nov 2017 01:52:53 +0000 (11:52 +1000)
commit579ec9c311eb5176054b624f39c5c024605b58d6
tree612140eda207aaa617e773b2f031086202fb29c5
parent6b91610fc6082c449f67f1735f06db0e769c36b4
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>
src/gallium/drivers/r600/sb/sb_bc_finalize.cpp