Exemple #1
0
 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
Exemple #2
0
 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()
Exemple #3
0
 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()