Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / mini / abcremoval.h
index 7a4a874e07ed8fa9295119415a67df9b06e5fb2e..ac52857ea76d9037ad1aa3edeb50883d32f32504 100644 (file)
@@ -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;
 
 /**