diff options
author | Christoph Bumiller <e0425955@student.tuwien.ac.at> | 2010-08-16 18:00:39 +0200 |
---|---|---|
committer | Christoph Bumiller <e0425955@student.tuwien.ac.at> | 2010-08-17 00:47:47 +0200 |
commit | 62f933a6f617050a267079b27360eaae2d0e1a70 (patch) | |
tree | a7897c1efe777740babff92409ba515085254ff4 /src/gallium/drivers/nv50/nv50_tgsi_to_nc.c | |
parent | 6c5c55723d32f8933ffb5fc6b5beb209eca84ca8 (diff) |
nv50: generate JOINs for outermost IF clauses
Diffstat (limited to 'src/gallium/drivers/nv50/nv50_tgsi_to_nc.c')
-rw-r--r-- | src/gallium/drivers/nv50/nv50_tgsi_to_nc.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/src/gallium/drivers/nv50/nv50_tgsi_to_nc.c b/src/gallium/drivers/nv50/nv50_tgsi_to_nc.c index b23c285dc1..d6c5a8d660 100644 --- a/src/gallium/drivers/nv50/nv50_tgsi_to_nc.c +++ b/src/gallium/drivers/nv50/nv50_tgsi_to_nc.c @@ -1314,7 +1314,7 @@ bld_instruction(struct bld_context *bld, src1 = bld_predicate(bld, emit_fetch(bld, insn, 0, 0), TRUE); - bld_flow(bld, NV_OP_BRA, NV_CC_EQ, src1, NULL, FALSE); + bld_flow(bld, NV_OP_BRA, NV_CC_EQ, src1, NULL, (bld->cond_lvl == 0)); ++bld->cond_lvl; bld_new_block(bld, b); @@ -1346,13 +1346,12 @@ bld_instruction(struct bld_context *bld, bld->cond_bb[bld->cond_lvl]->exit->target = b; - if (0 && bld->join_bb[bld->cond_lvl]) { - bld->join_bb[bld->cond_lvl]->exit->prev->target = b; + bld_new_block(bld, b); - new_instruction(bld->pc, NV_OP_NOP)->is_join = TRUE; + if (!bld->cond_lvl && bld->join_bb[bld->cond_lvl]) { + bld->join_bb[bld->cond_lvl]->exit->prev->target = b; + new_instruction(bld->pc, NV_OP_JOIN)->is_join = TRUE; } - - bld_new_block(bld, b); } break; case TGSI_OPCODE_BGNLOOP: |