X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fglsl%2Floop_analysis.h;h=05c982fc164e6e11061bc671fcd22821f8543b6a;hb=6a5a4d59ce63aa1fa14d3dd6c50169c532424b6d;hp=7b0511fbbec915e7157c25399b98a5ccb38250f6;hpb=e591c4625cae63660c5000fbab366e40fe154ab0;p=mesa.git diff --git a/src/glsl/loop_analysis.h b/src/glsl/loop_analysis.h index 7b0511fbbec..05c982fc164 100644 --- a/src/glsl/loop_analysis.h +++ b/src/glsl/loop_analysis.h @@ -122,10 +122,16 @@ public: */ unsigned num_loop_jumps; + /** + * Whether this loop contains any function calls. + */ + bool contains_calls; + loop_variable_state() { this->max_iterations = -1; this->num_loop_jumps = 0; + this->contains_calls = false; this->var_hash = hash_table_ctor(0, hash_table_pointer_hash, hash_table_pointer_compare); } @@ -134,6 +140,23 @@ public: { hash_table_dtor(this->var_hash); } + + static void* operator new(size_t size, void *ctx) + { + void *lvs = ralloc_size(ctx, size); + assert(lvs != NULL); + + ralloc_set_destructor(lvs, (void (*)(void*)) destructor); + + return lvs; + } + +private: + static void + destructor(loop_variable_state *lvs) + { + lvs->~loop_variable_state(); + } }; @@ -214,6 +237,8 @@ public: loop_variable_state *insert(ir_loop *ir); + bool loop_found; + private: loop_state();