X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fabcremoval.h;h=ac52857ea76d9037ad1aa3edeb50883d32f32504;hb=HEAD;hp=7a4a874e07ed8fa9295119415a67df9b06e5fb2e;hpb=1fabd87b02f8d2e359150ed7a9e92613e60383bc;p=mono.git diff --git a/mono/mini/abcremoval.h b/mono/mini/abcremoval.h index 7a4a874e07e..ac52857ea76 100644 --- a/mono/mini/abcremoval.h +++ b/mono/mini/abcremoval.h @@ -1,5 +1,6 @@ -/* - * abcremoval.h: Array bounds check removal +/** + * \file + * Array bounds check removal * * Author: * Massimiliano Mantione (massi@ximian.com) @@ -179,14 +180,12 @@ typedef struct MonoRelationsEvaluationRanges { /** * The context of a variable evaluation. - * status: the evaluation status * current_relation: the relation that is currently evaluated. * ranges: the result of the evaluation. * father: the context of the evaluation that invoked this one (used to * perform the backtracking when loops are detected. */ typedef struct MonoRelationsEvaluationContext { - MonoRelationsEvaluationStatus status; MonoSummarizedValueRelation *current_relation; MonoRelationsEvaluationRanges ranges; struct MonoRelationsEvaluationContext *father; @@ -303,12 +302,24 @@ typedef struct MonoRelationsEvaluationContext { * contexts: an array of evaluation contexts (one for each method variable) * variable_value_kind: an array of MonoIntegerValueKind, one for each local * variable (or argument) + * defs: maps vregs to the instruction which defines it. */ typedef struct MonoVariableRelationsEvaluationArea { MonoCompile *cfg; MonoSummarizedValueRelation *relations; + +/** + * statuses and contexts are parallel arrays. A given index into each refers to + * the same context. This is a performance optimization. Clean_context was + * coming to dominate the running time of abcremoval. By + * storing the statuses together, we can memset the entire + * region. + */ + MonoRelationsEvaluationStatus *statuses; MonoRelationsEvaluationContext *contexts; + MonoIntegerValueKind *variable_value_kind; + MonoInst **defs; } MonoVariableRelationsEvaluationArea; /**