Beispiel #1
0
def convert_to_SSA(exprs):
    """
    Convert an iterable of :class:`Eq`s into Static Single Assignment form.
    """
    # Identify recurring LHSs
    seen = {}
    for i, e in enumerate(exprs):
        seen.setdefault(e.lhs, []).append(i)
    # Optimization: don't waste time reconstructing stuff if already in SSA form
    if all(len(i) == 1 for i in seen.values()):
        return exprs
    # Do the SSA conversion
    c = 0
    mapper = {}
    processed = []
    for i, e in enumerate(exprs):
        where = seen[e.lhs]
        if len(where) > 1:
            # Transform into SSA until the very last write, excluded
            if where[-1] != i:
                ssa_lhs = dSymbol(name='ssa_t%d' % c,
                                  dtype=e.lhs.base.function.dtype)
                processed.append(e.func(ssa_lhs, e.rhs.xreplace(mapper)))
                mapper[e.lhs] = ssa_lhs
                c += 1
            else:
                processed.append(e.func(e.lhs, e.rhs.xreplace(mapper)))
        else:
            processed.append(e)
    return processed
Beispiel #2
0
def test_internal_symbols():
    s = dSymbol(name='s', dtype=np.float32)
    pkl_s = pickle.dumps(s)
    new_s = pickle.loads(pkl_s)
    assert new_s.name == s.name
    assert new_s.dtype is np.float32

    s = Scalar(name='s', dtype=np.int32, is_const=True)
    pkl_s = pickle.dumps(s)
    new_s = pickle.loads(pkl_s)
    assert new_s.name == s.name
    assert new_s.dtype is np.int32
    assert new_s.is_const is True
Beispiel #3
0
def test_internal_symbols():
    s = dSymbol(name='s', dtype=np.float32)
    pkl_s = pickle.dumps(s)
    new_s = pickle.loads(pkl_s)
    assert new_s.name == s.name
    assert new_s.dtype is np.float32

    s = Scalar(name='s', dtype=np.int32, is_const=True)
    pkl_s = pickle.dumps(s)
    new_s = pickle.loads(pkl_s)
    assert new_s.name == s.name
    assert new_s.dtype is np.int32
    assert new_s.is_const is True