diff options
author | Nicolai Hähnle <nhaehnle@gmail.com> | 2009-10-03 21:28:59 +0200 |
---|---|---|
committer | Nicolai Hähnle <nhaehnle@gmail.com> | 2009-10-03 23:37:16 +0200 |
commit | b7cf887ca74561469c144f1d12227e1bcf277e7e (patch) | |
tree | c956777f799712573febf464310a1ec0f75f1991 /src/mesa/drivers/dri/r300/compiler/radeon_dataflow.h | |
parent | 6d25b9125ec1e66e0e255b0ee20fe18dfe1076fa (diff) |
r300/compiler: Introduce control flow instructions and refactor dataflow
Note that control flow instruction support isn't actually fully functional yet.
Signed-off-by: Nicolai Hähnle <nhaehnle@gmail.com>
Diffstat (limited to 'src/mesa/drivers/dri/r300/compiler/radeon_dataflow.h')
-rw-r--r-- | src/mesa/drivers/dri/r300/compiler/radeon_dataflow.h | 69 |
1 files changed, 2 insertions, 67 deletions
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_dataflow.h b/src/mesa/drivers/dri/r300/compiler/radeon_dataflow.h index c9856affe8..76c323d057 100644 --- a/src/mesa/drivers/dri/r300/compiler/radeon_dataflow.h +++ b/src/mesa/drivers/dri/r300/compiler/radeon_dataflow.h @@ -34,79 +34,14 @@ struct radeon_compiler; struct rc_instruction; struct rc_swizzle_caps; -struct rc_dataflow_vector; - -struct rc_dataflow_ref { - struct rc_dataflow_vector * Vector; - - /** - * Linked list of references to the above-mentioned vector. - * The linked list is \em not sorted. - */ - /*@{*/ - struct rc_dataflow_ref * Prev; - struct rc_dataflow_ref * Next; - /*@}*/ - - unsigned int UseMask:4; - struct rc_instruction * ReadInstruction; -}; - -struct rc_dataflow_vector { - rc_register_file File:3; - unsigned int Index:RC_REGISTER_INDEX_BITS; - - /** For private use in compiler passes. MUST BE RESET TO 0 by the end of each pass. - * The annotate pass uses this bit to track whether a vector is in the - * update stack. - */ - unsigned int PassBit:1; - /** Which of the components have been written with useful values */ - unsigned int ValidMask:4; - /** Which of the components are used downstream */ - unsigned int UseMask:4; - /** The instruction that produced this vector */ - struct rc_instruction * WriteInstruction; - - /** Linked list of references to this vector */ - struct rc_dataflow_ref Refs; -}; - -struct rc_instruction_dataflow { - struct rc_dataflow_ref * SrcReg[3]; - struct rc_dataflow_ref * SrcRegAddress[3]; - - /** Reference the components of the destination register - * that are carried over without being overwritten */ - struct rc_dataflow_ref * DstRegPrev; - /** Indicates whether the destination register was in use - * before this instruction */ - unsigned int DstRegAliased:1; - struct rc_dataflow_vector * DstReg; -}; - -/** - * General functions for manipulating the dataflow structures. - */ -/*@{*/ -struct rc_dataflow_ref * rc_dataflow_create_ref(struct radeon_compiler * c, - struct rc_dataflow_vector * vector, struct rc_instruction * inst); -struct rc_dataflow_vector * rc_dataflow_create_vector(struct radeon_compiler * c, - rc_register_file file, unsigned int index, struct rc_instruction * inst); -void rc_dataflow_remove_ref(struct rc_dataflow_ref * ref); - -void rc_dataflow_remove_instruction(struct rc_instruction * inst); -/*@}*/ - /** - * Compiler passes based on dataflow structures. + * Compiler passes based on dataflow analysis. */ /*@{*/ typedef void (*rc_dataflow_mark_outputs_fn)(void * userdata, void * data, void (*mark_fn)(void * data, unsigned int index, unsigned int mask)); -void rc_dataflow_annotate(struct radeon_compiler * c, rc_dataflow_mark_outputs_fn dce, void * userdata); -void rc_dataflow_dealias(struct radeon_compiler * c); +void rc_dataflow_deadcode(struct radeon_compiler * c, rc_dataflow_mark_outputs_fn dce, void * userdata); void rc_dataflow_swizzles(struct radeon_compiler * c); /*@}*/ |