def is_primitive_array_access(self): """ Indicates that this operations loads/stores a primitive type (int,float) """ if self.is_primitive_load() or self.is_primitive_store(): descr = self.getdescr() if not we_are_translated(): from rpython.jit.backend.llgraph.runner import _getdescr descr = _getdescr(self) if descr and descr.is_array_of_primitives(): return True return False
def inittype(self): if self.is_primitive_array_access(): from rpython.jit.backend.llsupport.descr import ArrayDescr descr = self.getdescr() if not we_are_translated(): from rpython.jit.backend.llgraph.runner import _getdescr descr = _getdescr(self) type = self.type self.bytesize = descr.get_item_size_in_bytes() self.signed = descr.is_item_signed() self.datatype = type elif self.opnum == rop.INT_SIGNEXT: from rpython.jit.metainterp import history arg0 = self.getarg(0) arg1 = self.getarg(1) assert isinstance(arg1, history.ConstInt) signed = True if not arg0.is_constant(): signed = arg0.signed self.setdatatype('i', arg1.value, True) elif self.is_typecast(): ft,tt = self.cast_types() self.setdatatype(tt, self.cast_to_bytesize(), tt == 'i') else: # pass through the type of the first input argument type = self.type signed = type == 'i' bytesize = -1 if self.numargs() > 0: i = 0 arg = self.getarg(i) while arg.is_constant() and i+1 < self.numargs(): i += 1 arg = self.getarg(i) if arg.datatype != '\x00' and \ arg.bytesize != -1: type = arg.datatype signed = arg.signed bytesize = arg.bytesize if self.returns_bool_result(): type = 'i' self.setdatatype(type, bytesize, signed) assert self.datatype != '\x00'