glsl: Change loop_analysis to not look like a resource leak
Previously the loop_state was allocated in the loop_analysis constructor, but not freed in the (nonexistent) destructor. Moving the allocation of the loop_state makes this code appear less sketchy. Either way, there is no actual leak. The loop_state is freed by the single caller of analyze_loop_variables. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Cc: Dave Airlie <airlied@freedesktop.org> Reviewed-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=57753
This commit is contained in:
parent
04f0d6cc22
commit
82691f1293
|
@ -105,7 +105,7 @@ loop_variable_state::insert(ir_if *if_stmt)
|
|||
|
||||
class loop_analysis : public ir_hierarchical_visitor {
|
||||
public:
|
||||
loop_analysis();
|
||||
loop_analysis(loop_state *loops);
|
||||
|
||||
virtual ir_visitor_status visit(ir_loop_jump *);
|
||||
virtual ir_visitor_status visit(ir_dereference_variable *);
|
||||
|
@ -129,12 +129,10 @@ public:
|
|||
};
|
||||
|
||||
|
||||
loop_analysis::loop_analysis()
|
||||
loop_analysis::loop_analysis(loop_state *loops)
|
||||
: loops(loops), if_statement_depth(0), current_assignment(NULL)
|
||||
{
|
||||
this->loops = new loop_state;
|
||||
|
||||
this->if_statement_depth = 0;
|
||||
this->current_assignment = NULL;
|
||||
/* empty */
|
||||
}
|
||||
|
||||
|
||||
|
@ -521,7 +519,8 @@ is_loop_terminator(ir_if *ir)
|
|||
loop_state *
|
||||
analyze_loop_variables(exec_list *instructions)
|
||||
{
|
||||
loop_analysis v;
|
||||
loop_state *loops = new loop_state;
|
||||
loop_analysis v(loops);
|
||||
|
||||
v.run(instructions);
|
||||
return v.loops;
|
||||
|
|
|
@ -249,7 +249,7 @@ private:
|
|||
|
||||
void *mem_ctx;
|
||||
|
||||
friend class loop_analysis;
|
||||
friend loop_state *analyze_loop_variables(exec_list *instructions);
|
||||
};
|
||||
|
||||
#endif /* LOOP_ANALYSIS_H */
|
||||
|
|
Loading…
Reference in New Issue