def forwarded_vecinfo(op): fwd = op.get_forwarded() if fwd is None or not isinstance(fwd, VectorizationInfo): # the optimizer clears getforwarded AFTER # vectorization, it happens that this is not clean fwd = VectorizationInfo(op) if not op.is_constant(): op.set_forwarded(fwd) return fwd
def update_vector(self, resop, var): pattern = re.compile('.*\[(\d+)x(u?)(i|f)(\d+)\]') match = pattern.match(var) if match: vecinfo = VectorizationInfo(None) vecinfo.count = int(match.group(1)) vecinfo.signed = not (match.group(2) == 'u') vecinfo.datatype = match.group(3) vecinfo.bytesize = int(match.group(4)) // 8 resop._vec_debug_info = vecinfo return var[:var.find('[')] vecinfo = VectorizationInfo(resop) vecinfo.count = -1 resop._vec_debug_info = vecinfo return var
def test_signext_int32(self): loop1 = self.parse_trace(""" i10 = int_signext(i1, 4) i11 = int_signext(i1, 4) """, additional_args=['v10[2xi64]']) pack1 = self.pack(loop1, 0, 2) var = loop1.inputargs[-1] vi = VectorizationInfo(None) vi.datatype = 'i' vi.bytesize = 8 vi.count = 2 vi.signed = True var.set_forwarded(vi) loop2 = self.schedule(loop1, [pack1], prepend_invariant=True, overwrite_funcs = { 'getvector_of_box': lambda v: (0, var), }) loop3 = self.parse_trace(""" v11[2xi32] = vec_int_signext(v10[2xi64], 4) """, False, additional_args=['v10[2xi64]']) self.assert_equal(loop2, loop3)
def test_signext_int32(self): loop1 = self.parse_trace(""" i10 = int_signext(i1, 4) i11 = int_signext(i1, 4) """, additional_args=['v10[2xi64]']) pack1 = self.pack(loop1, 0, 2) var = loop1.inputargs[-1] vi = VectorizationInfo(None) vi.datatype = 'i' vi.bytesize = 8 vi.count = 2 vi.signed = True var.set_forwarded(vi) loop2 = self.schedule(loop1, [pack1], prepend_invariant=True, overwrite_funcs={ 'getvector_of_box': lambda v: (0, var), }) loop3 = self.parse_trace(""" v11[2xi32] = vec_int_signext(v10[2xi64], 4) """, False, additional_args=['v10[2xi64]']) self.assert_equal(loop2, loop3)
def update_vector(self, resop, var): pattern = re.compile('.*\[(\d+)x(u?)(i|f)(\d+)\]') match = pattern.match(var) if match: vecinfo = VectorizationInfo(None) vecinfo.count = int(match.group(1)) vecinfo.signed = not (match.group(2) == 'u') vecinfo.datatype = match.group(3) vecinfo.bytesize = int(match.group(4)) // 8 resop._vec_debug_info = vecinfo return var[:var.find('[')] vecinfo = VectorizationInfo(resop) vecinfo.count = -1 resop._vec_debug_info = vecinfo return var
def setup_vectorization(self): for op in self.operations: op.set_forwarded(VectorizationInfo(op))