Пример #1
0
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
Пример #2
0
    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
Пример #3
0
 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)
Пример #4
0
 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)
Пример #5
0
    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
Пример #6
0
 def setup_vectorization(self):
     for op in self.operations:
         op.set_forwarded(VectorizationInfo(op))