def test_opcount_filling_store(self): descr = ArrayDescr(0, 8, None, 'F', concrete_type='f') pack = Pack([ Node(ResOperation(rop.RAW_STORE, [0, 0, arg('f', 4)], descr), 0), Node(ResOperation(rop.RAW_STORE, [0, 0, arg('f', 4)], descr), 0), ]) assert pack.opcount_filling_vector_register(16) == 2
def __init__(self, loop): self.loop = loop if isinstance(loop, list): self.nodes = loop else: operations = loop.operations self.nodes = [Node(op,i) for i,op in \ enumerate(operations)] self.schedulable_nodes = list(reversed(self.nodes)) self.guards = []
def test_next_must_not_loop_forever(self): scheduler = Scheduler() def delay(node, state): node.count += 1 return True scheduler.delay = delay class State(object): pass class Node(object): emitted = False pack = None count = 0 state = State() state.worklist = [Node(), Node(), Node(), Node(), Node()] assert scheduler.next(state) is None for node in state.worklist: assert node.count == 1
def test_opcount_filling_guard(self): descr = ArrayDescr(0, 4, None, 'S') vec = ResOperation(rop.VEC_RAW_LOAD_I, ['a', 'i'], descr=descr) vec.count = 4 pack = Pack([ Node(ResOperation(rop.GUARD_TRUE, [vec]), 0), Node(ResOperation(rop.GUARD_TRUE, [vec]), 1), Node(ResOperation(rop.GUARD_TRUE, [vec]), 2), Node(ResOperation(rop.GUARD_TRUE, [vec]), 3), Node(ResOperation(rop.GUARD_TRUE, [vec]), 4), Node(ResOperation(rop.GUARD_TRUE, [vec]), 5), ]) assert pack.pack_load(16) == 24 - 16 assert pack.pack_load(8) == 24 - 8 assert pack.pack_load(32) == 24 - 32 assert pack.opcount_filling_vector_register(16) == 4 ops, newops = pack.slice_operations(16) assert len(ops) == 4 assert len(newops) == 2 assert pack.opcount_filling_vector_register(8) == 2 ops, newops = pack.slice_operations(8) assert len(ops) == 2 assert len(newops) == 4
def __init__(self, i): Node.__init__(self, None, i) pass