コード例 #1
0
def update():
    r'''Update side_effects and suspends *from* database.
    '''
    for id in crud.read_column('symbol_table', 'id', side_effects=1):
        Symbols_by_id[id].side_effects = True
    for id in crud.read_column('symbol_table', 'id', suspends=1):
        Symbols_by_id[id].suspends = True
コード例 #2
0
def init():
    crud.Db_conn = crud.db.connect('avr.db')
    crud.Db_cur = crud.Db_conn.cursor()
    try:
        # insert 0's for m=0:

        crud.Db_cur.execute("""
          insert into worst (N, C, m, value)
            select N.id, C.id, 0, 0 from reg_class N cross join reg_class C
        """)

        crud.Db_conn.commit()

        registers = crud.read_column('register', 'name')
        aliases = {}
        for R in registers:
            aliases[R] = frozenset(crud.read_column('alias', 'r2', r1=R))

        reg_classes = crud.read_column('reg_class', 'id')
        regs_in_class = {}
        for C in reg_classes:
            regs_in_class[C] = \
              frozenset(crud.read_column('reg_in_class', 'reg', reg_class=C))
        print 'reg_classes', reg_classes

        for N in reg_classes:
            print 'N', N
            N_regs = regs_in_class[N]
            for C in reg_classes:
                C_regs = regs_in_class[C]
                print 'C', C, C_regs

                # {set of S: set of registers}
                worsts0 = {frozenset(): frozenset()}

                for m in range(1, len(C_regs) + 1):
                    print 'm', m
                    worsts1 = {}
                    for R in C_regs:
                        for S0, regs in worsts0.iteritems():
                            if R not in S0:
                                worsts1[S0.union((R,))] = \
                                    regs.union(aliases[R]).intersection(N_regs)
                    crud.insert('worst', N=N, C=C, m=m,
                                value=max(len(regs)
                                          for regs in worsts1.itervalues()))
                    worsts0 = worsts1
            crud.Db_conn.commit()
        worst0 = worst1 = None
    except:
        crud.Db_conn.rollback()
        raise
    finally:
        crud.Db_cur.close()
        crud.Db_conn.close()
コード例 #3
0
 def __init__(self, row, triple_id_map):
     for key, value in row.iteritems():
         setattr(self, key, value)
     self.labels = tuple(crud.read_column('triple_labels', 'symbol_id',
                                          triple_id=self.id))
     self.predecessors = tuple(crud.read_column('triple_order_constraints',
                                                'predecessor',
                                                successor=self.id))
     triple_id_map[self.id] = self
     self.parents = []
     self.updated_attributes = []
     self.children = [self]
コード例 #4
0
def class_compares():
    crud.Db_conn = crud.db.connect('avr.db')
    crud.Db_cur = crud.Db_conn.cursor()
    try:
        reg_classes = crud.read_column('reg_class', 'id')
        aliases = {}
        for C in reg_classes:
            aliases[C] = \
              frozenset(crud.read_column('class_alias', 'reg', reg_class=C))

        for C1, C2 in itertools.combinations(reg_classes, 2):
            if aliases[C1] == aliases[C2]:
                print C1, 'alias-equivalent', C2
            elif aliases[C1].issubset(aliases[C2]):
                print C1, 'alias-contained in', C2
            elif aliases[C2].issubset(aliases[C1]):
                print C2, 'alias-contained in', C1
            elif not aliases[C1].isdisjoint(aliases[C2]):
                print C1, '*** UNKNOWN ***', C2

    finally:
        crud.Db_cur.close()
        crud.Db_conn.close()
コード例 #5
0
def delete(symbol):
    r'''Deletes all of the blocks associated with 'symbol' from the database.

    This also deletes all associated information in the database for the
    deleted blocks.

    This is used to delete the results from a prior compile run.
    '''
    block_ids = crud.read_column('blocks', 'id', word_symbol_id=symbol)
    if block_ids:
        crud.delete('gens', block_id=block_ids)
        crud.delete('kills', block_id=block_ids)
        crud.delete('ins', block_id=block_ids)
        crud.delete('outs', block_id=block_ids)
        triple.delete(block_ids)
        crud.delete('block_successors', predecessor=block_ids)
        crud.delete('block_successors', successor=block_ids)
        crud.delete('blocks', id=block_ids)