-/*
- * abcremoval.h: Array bounds check removal
+/**
+ * \file
+ * Array bounds check removal
*
* Author:
* Massimiliano Mantione (massi@ximian.com)
/**
* 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;
* 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;
/**