| Index: src/trusted/validator_arm/dgen_opt.py
 | 
| diff --git a/src/trusted/validator_arm/dgen_opt.py b/src/trusted/validator_arm/dgen_opt.py
 | 
| deleted file mode 100644
 | 
| index 806333c2ab8fa11516368adaa0a89301cd767749..0000000000000000000000000000000000000000
 | 
| --- a/src/trusted/validator_arm/dgen_opt.py
 | 
| +++ /dev/null
 | 
| @@ -1,76 +0,0 @@
 | 
| -#!/usr/bin/python
 | 
| -#
 | 
| -# Copyright 2009 The Native Client Authors.  All rights reserved.
 | 
| -# Use of this source code is governed by a BSD-style license that can
 | 
| -# be found in the LICENSE file.
 | 
| -# Copyright 2009, Google Inc.
 | 
| -#
 | 
| -
 | 
| -"""
 | 
| -Table minimization algorithm.
 | 
| -"""
 | 
| -
 | 
| -def optimize_rows(rows):
 | 
| -    """Breaks rows up into batches, and attempts to minimize each batch,
 | 
| -    using _optimize_rows_for_single_action.
 | 
| -    """
 | 
| -    rows_by_action = dict()
 | 
| -    for row in rows:
 | 
| -        if (row.action, row.arch) in rows_by_action:
 | 
| -            rows_by_action[(row.action, row.arch)].append(row)
 | 
| -        else:
 | 
| -            rows_by_action[(row.action, row.arch)] = [row]
 | 
| -
 | 
| -    optimized_rows = []
 | 
| -    for row_group in rows_by_action.itervalues():
 | 
| -        optimized_rows.extend(_optimize_rows_for_single_action(row_group))
 | 
| -
 | 
| -    _remove_unused_columns(optimized_rows)
 | 
| -    return optimized_rows
 | 
| -
 | 
| -def _optimize_rows_for_single_action(rows):
 | 
| -    """Performs basic automatic minimization on the given rows.
 | 
| -
 | 
| -    Repeatedly selects a pair of rows to merge.  Recurses until no suitable pair
 | 
| -    can be found.  It's not real smart, and is O(n^2).
 | 
| -
 | 
| -    A pair of rows is compatible if all columns are equal, or if exactly one
 | 
| -    row differs but is_strictly_compatible.
 | 
| -    """
 | 
| -    for (i, j) in each_index_pair(rows):
 | 
| -        row_i, row_j = rows[i], rows[j]
 | 
| -
 | 
| -        if row_i.can_merge(row_j):
 | 
| -            new_rows = list(rows)
 | 
| -            del new_rows[j]
 | 
| -            del new_rows[i]
 | 
| -            new_rows.append(row_i + row_j)
 | 
| -            return _optimize_rows_for_single_action(new_rows)
 | 
| -
 | 
| -    # No changes made:
 | 
| -    return rows
 | 
| -
 | 
| -def _remove_unused_columns(rows):
 | 
| -    num_cols = len(rows[0].patterns)
 | 
| -    used = [False] * num_cols
 | 
| -
 | 
| -    for r in rows:
 | 
| -        for i in range(0, num_cols):
 | 
| -            if r.patterns[i].mask != 0:
 | 
| -                used[i] = True
 | 
| -
 | 
| -    if not True in used:
 | 
| -        # Always preserve at least one column
 | 
| -        used[0] = True
 | 
| -
 | 
| -    for col in range(num_cols - 1, 0 - 1, -1):
 | 
| -        for r in rows:
 | 
| -            if not used[col]:
 | 
| -                del r.patterns[col]
 | 
| -
 | 
| -
 | 
| -def each_index_pair(sequence):
 | 
| -    """Utility function: Generates each unique index pair in sequence."""
 | 
| -    for i in range(0, len(sequence)):
 | 
| -        for j in range(i + 1, len(sequence)):
 | 
| -            yield (i, j)
 | 
| 
 |