Changeset 308 for proto/parabix2


Ignore:
Timestamp:
Sep 20, 2009, 12:52:05 PM (10 years ago)
Author:
eamiri
Message:

Bug fix (names generated for array elements and struct members in make_SSA was not valid C names)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • proto/parabix2/Compiler/bitstream_compiler.py

    r307 r308  
    2727Not = 'not'
    2828Sel = 'simd_if'
    29 Add = 'simd_add'
    30 Sub = 'simd_sub'
     29Add = 'adc128'
     30Sub = 'sbb128'
    3131
    3232AllOne = 'allone'
     
    4040        def show(self):
    4141                if self.op == Nop:
    42                         return "%s\n"%self.vars[0]
     42                        return "%s;\n"%self.vars[0]
    4343                else:
    4444                        line_of_code = self.op + "("
     
    4949                                        line_of_code += ', '
    5050                       
    51                         line_of_code += ')\n'
     51                        line_of_code += ');\n'
    5252                       
    5353                        return line_of_code
     
    5757                        i = self.vars.index(old)
    5858                        self.vars[i] = new
     59
     60
     61def parse_var(var):
     62    index=var.find('.')
     63    if index >= 0:
     64        return ('struct', var[0:index], var[index+1:])
     65               
     66    index = var.find('[')
     67    if index >= 0:
     68        right_index = var.find(']')
     69        return ('array', var[0:index], var[index+1:right_index])       
     70       
     71    return ('bitblock', var, None)
     72
    5973
    6074class CodeGenObject:
     
    107121        return s
    108122
    109     def parse_var(self, var):
    110         index=var.find('.')
    111         if index >= 0:
    112                 return ('struct', var[0:index], var[index+1:])
    113                
    114         index = var.find('[')
    115         if index >= 0:
    116                 right_index = var.find(']')
    117                 return ('array', var[0:index], var[index+1:right_index])       
    118        
    119         return ('bitblock', var, None)
    120123
    121124    def extract_vars(self):
     
    132135               
    133136                for var in all_vars:
    134                         (var_type, name, extra) = self.parse_var(var)
     137                        (var_type, name, extra) = parse_var(var)
    135138                        #print
    136139                        #print var, var_type, name
     
    242245        return table
    243246
     247def simplify_name(var):
     248    (vartype, name, extra) = parse_var(var)
     249    if vartype == 'bitblock':
     250        return name
     251    if vartype == 'array':
     252        return "a_%s_%s"%(name, extra)
     253    if vartype == 'struct':
     254        return "s_%s_%s"%(name, extra)
     255    assert(1==0)
     256
    244257def make_SSA(code, st):
    245258        new_vars = []
     
    253266                def_index = 1
    254267                for current, next in pairs(st[var][0])[1:-1]:
    255                         code[current].LHS = "%s_%i"%(var, current)
    256                         new_vars.append("%s_%i"%(var, current))
     268                        code[current].LHS = "%s_%i"%(simplify_name(var), current)
     269                        new_vars.append("%s_%i"%(simplify_name(var), current))
    257270                        uline = st[var][1][use_index]
    258271                        while uline <= next and uline < total_lines:
    259272                                if uline > current:
    260                                         code[uline].RHS.update_var(var, "%s_%i"%(var, current))
     273                                        code[uline].RHS.update_var(var, "%s_%i"%(simplify_name(var), current))
    261274                                use_index += 1
    262275                                uline = st[var][1][use_index]
     
    346359        u16hi[5] = u16hi[5] | u8.scope44
    347360
    348 
    349361        s42lo1 = ~u8bit[3] # subtract 1
    350362        u16lo[1] = u16lo[1] | (u8.scope43 & bitutil.Advance(s42lo1))
     
    376388        code = c.generated_code
    377389        c.new_vars = make_SSA(code, gen_sym_table(code))
    378         print c.showcode(True)
     390        print c.showcode(False)
Note: See TracChangeset for help on using the changeset viewer.