/* * Copyright 2011 Tom Stellard * SPDX-License-Identifier: MIT */ #ifndef RADEON_VARIABLE_H #define RADEON_VARIABLE_H #include "radeon_compiler.h" struct radeon_compiler; struct rc_list; struct rc_reader_data; struct rc_readers; struct live_intervals { int Start; int End; int Used; }; struct rc_variable { struct radeon_compiler *C; struct rc_dst_register Dst; struct rc_instruction *Inst; unsigned int ReaderCount; struct rc_reader *Readers; struct live_intervals Live[4]; /* A friend is a variable that shares a reader with another variable. */ struct rc_variable *Friend; }; void rc_variable_change_dst(struct rc_variable *var, unsigned int new_index, unsigned int new_writemask); void rc_variable_compute_live_intervals(struct rc_variable *var); void rc_variable_add_friend(struct rc_variable *var, struct rc_variable *friend); struct rc_variable *rc_variable(struct radeon_compiler *c, unsigned int DstFile, unsigned int DstIndex, unsigned int DstWriteMask, struct rc_reader_data *reader_data); struct rc_list *rc_get_variables(struct radeon_compiler *c); unsigned int rc_variable_writemask_sum(struct rc_variable *var); struct rc_list *rc_variable_readers_union(struct rc_variable *var); struct rc_list *rc_variable_list_get_writers(struct rc_list *var_list, unsigned int src_type, void *src); struct rc_list *rc_variable_list_get_writers_one_reader(struct rc_list *var_list, unsigned int src_type, void *src); void rc_variable_print(struct rc_variable *var); #endif /* RADEON_VARIABLE_H */