X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fi965%2Fbrw_cfg.h;h=a09491781e6015757594c2e2db93666ef9a3841a;hb=8a688bee83ced46eb4bff741f05d2da033c07ade;hp=388d29e87231e4529df9383d6acb622fc22790c2;hpb=f0cfc4fca011b594393b0e39793cb8d8acdcde0e;p=mesa.git diff --git a/src/mesa/drivers/dri/i965/brw_cfg.h b/src/mesa/drivers/dri/i965/brw_cfg.h index 388d29e8723..a09491781e6 100644 --- a/src/mesa/drivers/dri/i965/brw_cfg.h +++ b/src/mesa/drivers/dri/i965/brw_cfg.h @@ -60,7 +60,7 @@ struct bblock_t { bool is_successor_of(const bblock_t *block) const; bool can_combine_with(const bblock_t *that) const; void combine_with(bblock_t *that); - void dump(backend_visitor *v) const; + void dump(backend_shader *s) const; backend_instruction *start(); const backend_instruction *start() const; @@ -81,6 +81,7 @@ struct bblock_t { struct exec_node link; struct cfg_t *cfg; + struct bblock_t *idom; int start_ip; int end_ip; @@ -89,14 +90,6 @@ struct bblock_t { struct exec_list parents; struct exec_list children; int num; - - /* If the current basic block ends in an IF or ELSE instruction, these will - * point to the basic blocks containing the other associated instruction. - * - * Otherwise they are NULL. - */ - struct bblock_t *if_block; - struct bblock_t *else_block; }; static inline struct backend_instruction * @@ -277,8 +270,12 @@ struct cfg_t { bblock_t *new_block(); void set_next_block(bblock_t **cur, bblock_t *block, int ip); void make_block_array(); + void calculate_idom(); + static bblock_t *intersect(bblock_t *b1, bblock_t *b2); - void dump(backend_visitor *v) const; + void dump(backend_shader *s); + void dump_cfg(); + void dump_domtree(); #endif void *mem_ctx; @@ -286,6 +283,8 @@ struct cfg_t { struct exec_list block_list; struct bblock_t **blocks; int num_blocks; + + bool idom_dirty; }; /* Note that this is implemented with a double for loop -- break will @@ -305,6 +304,9 @@ struct cfg_t { #define foreach_block(__block, __cfg) \ foreach_list_typed (bblock_t, __block, link, &(__cfg)->block_list) +#define foreach_block_reverse(__block, __cfg) \ + foreach_list_typed_reverse (bblock_t, __block, link, &(__cfg)->block_list) + #define foreach_block_safe(__block, __cfg) \ foreach_list_typed_safe (bblock_t, __block, link, &(__cfg)->block_list) @@ -322,6 +324,9 @@ struct cfg_t { #define foreach_inst_in_block_reverse(__type, __inst, __block) \ foreach_in_list_reverse(__type, __inst, &(__block)->instructions) +#define foreach_inst_in_block_reverse_safe(__type, __inst, __block) \ + foreach_in_list_reverse_safe(__type, __inst, &(__block)->instructions) + #define foreach_inst_in_block_starting_from(__type, __scan_inst, __inst, __block) \ for (__type *__scan_inst = (__type *)__inst->next; \ !__scan_inst->is_tail_sentinel(); \