def can_be_packed(self, lnode, rnode, origin_pack, forward): """ Check to ensure that two nodes might be packed into a Pair. """ if isomorphic(lnode.getoperation(), rnode.getoperation()): # even if a guard depends on the previous it is able to lop = lnode.getoperation() independent = lnode.independent(rnode) if independent: if forward and origin_pack.is_accumulating(): # in this case the splitted accumulator must # be combined. This case is not supported raise NotAVectorizeableLoop() # if self.contains_pair(lnode, rnode): return None # if origin_pack is None: op = lnode.getoperation() if rop.is_primitive_load(op.opnum): return Pair(lnode, rnode) else: return Pair(lnode, rnode) if self.profitable_pack(lnode, rnode, origin_pack, forward): return Pair(lnode, rnode) else: if self.contains_pair(lnode, rnode): return None if origin_pack is not None: return self.accumulates_pair(lnode, rnode, origin_pack) return None
def opcount_filling_vector_register(self, op, vec_reg_size): assert rop.is_primitive_load(op.opnum) descr = op.getdescr() return vec_reg_size // descr.get_item_size_in_bytes()