diff options
Diffstat (limited to 'src/gallium/drivers/nv50/nv50_tgsi_to_nc.c')
-rw-r--r-- | src/gallium/drivers/nv50/nv50_tgsi_to_nc.c | 16 |
1 files changed, 10 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 6fd749b35f..5994d1c27e 100644 --- a/src/gallium/drivers/nv50/nv50_tgsi_to_nc.c +++ b/src/gallium/drivers/nv50/nv50_tgsi_to_nc.c @@ -39,7 +39,7 @@ #define BLD_MAX_PREDS 4 #define BLD_MAX_IMMDS 128 -#define BLD_MAX_COND_NESTING 4 +#define BLD_MAX_COND_NESTING 8 #define BLD_MAX_LOOP_NESTING 4 #define BLD_MAX_CALL_NESTING 2 @@ -70,14 +70,14 @@ bld_vals_del_val(struct bld_value_stack *stk, struct nv_value *val) { unsigned i; - for (i = stk->size - 1; i >= 0; --i) - if (stk->body[i] == val) + for (i = stk->size; i > 0; --i) + if (stk->body[i - 1] == val) break; - if (i < 0) + if (!i) return FALSE; - if (i != stk->size - 1) - stk->body[i] = stk->body[stk->size - 1]; + if (i != stk->size) + stk->body[i - 1] = stk->body[stk->size - 1]; --stk->size; /* XXX: old size in REALLOC */ return TRUE; @@ -1643,6 +1643,8 @@ bld_instruction(struct bld_context *bld, { struct nv_basic_block *b = new_basic_block(bld->pc); + assert(bld->cond_lvl < BLD_MAX_COND_NESTING); + nvbb_attach_block(bld->pc->current_block, b, CFG_EDGE_FORWARD); bld->join_bb[bld->cond_lvl] = bld->pc->current_block; @@ -1695,6 +1697,8 @@ bld_instruction(struct bld_context *bld, struct nv_basic_block *bl = new_basic_block(bld->pc); struct nv_basic_block *bb = new_basic_block(bld->pc); + assert(bld->loop_lvl < BLD_MAX_LOOP_NESTING); + bld->loop_bb[bld->loop_lvl] = bl; bld->brkt_bb[bld->loop_lvl] = bb; |