X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fintel%2Fcompiler%2Fbrw_fs_live_variables.h;h=5661c102eeb0befde2e39fa265592af72ef512be;hb=5c5555a862754a5b43fee2abf4fc34e888d22a06;hp=69d06922dd97f3dab57049cfbff160bbbe6f8d8e;hpb=12a8f2616a2f8fd9968ec000a3d36c1448d6cf9f;p=mesa.git diff --git a/src/intel/compiler/brw_fs_live_variables.h b/src/intel/compiler/brw_fs_live_variables.h index 69d06922dd9..5661c102eeb 100644 --- a/src/intel/compiler/brw_fs_live_variables.h +++ b/src/intel/compiler/brw_fs_live_variables.h @@ -28,59 +28,70 @@ #ifndef BRW_FS_LIVE_VARIABLES_H #define BRW_FS_LIVE_VARIABLES_H -#include "brw_fs.h" +#include "brw_ir_analysis.h" +#include "brw_ir_fs.h" #include "util/bitset.h" struct cfg_t; +struct backend_shader; namespace brw { -struct fs_block_data { - /** - * Which variables are defined before being used in the block. - * - * Note that for our purposes, "defined" means unconditionally, completely - * defined. - */ - BITSET_WORD *def; - - /** - * Which variables are used before being defined in the block. - */ - BITSET_WORD *use; - - /** Which defs reach the entry point of the block. */ - BITSET_WORD *livein; - - /** Which defs reach the exit point of the block. */ - BITSET_WORD *liveout; - - /** - * Variables such that the entry point of the block may be reached from any - * of their definitions. - */ - BITSET_WORD *defin; - - /** - * Variables such that the exit point of the block may be reached from any - * of their definitions. - */ - BITSET_WORD *defout; - - BITSET_WORD flag_def[1]; - BITSET_WORD flag_use[1]; - BITSET_WORD flag_livein[1]; - BITSET_WORD flag_liveout[1]; -}; - class fs_live_variables { public: - DECLARE_RALLOC_CXX_OPERATORS(fs_live_variables) - - fs_live_variables(fs_visitor *v, const cfg_t *cfg); + struct block_data { + /** + * Which variables are defined before being used in the block. + * + * Note that for our purposes, "defined" means unconditionally, completely + * defined. + */ + BITSET_WORD *def; + + /** + * Which variables are used before being defined in the block. + */ + BITSET_WORD *use; + + /** Which defs reach the entry point of the block. */ + BITSET_WORD *livein; + + /** Which defs reach the exit point of the block. */ + BITSET_WORD *liveout; + + /** + * Variables such that the entry point of the block may be reached from any + * of their definitions. + */ + BITSET_WORD *defin; + + /** + * Variables such that the exit point of the block may be reached from any + * of their definitions. + */ + BITSET_WORD *defout; + + BITSET_WORD flag_def[1]; + BITSET_WORD flag_use[1]; + BITSET_WORD flag_livein[1]; + BITSET_WORD flag_liveout[1]; + }; + + fs_live_variables(const backend_shader *s); ~fs_live_variables(); - bool vars_interfere(int a, int b); + bool validate(const backend_shader *s) const; + + analysis_dependency_class + dependency_class() const + { + return (DEPENDENCY_INSTRUCTION_IDENTITY | + DEPENDENCY_INSTRUCTION_DATA_FLOW | + DEPENDENCY_VARIABLES); + } + + bool vars_interfere(int a, int b) const; + bool vgrfs_interfere(int a, int b) const; int var_from_reg(const fs_reg ®) const { return var_from_vgrf[reg.nr] + reg.offset / REG_SIZE; @@ -109,22 +120,27 @@ public: int *end; /** @} */ + /** @{ + * Final computed live ranges for each VGRF. + */ + int *vgrf_start; + int *vgrf_end; + /** @} */ + /** Per-basic-block information on live variables */ - struct fs_block_data *block_data; + struct block_data *block_data; protected: void setup_def_use(); - void setup_one_read(struct fs_block_data *bd, fs_inst *inst, int ip, - const fs_reg ®); - void setup_one_write(struct fs_block_data *bd, fs_inst *inst, int ip, + void setup_one_read(struct block_data *bd, int ip, const fs_reg ®); + void setup_one_write(struct block_data *bd, fs_inst *inst, int ip, const fs_reg ®); void compute_live_variables(); void compute_start_end(); - fs_visitor *v; + const struct gen_device_info *devinfo; const cfg_t *cfg; void *mem_ctx; - }; } /* namespace brw */