Example #1
0
 def copy_ir_with_calltypes(self, ir, calltypes):
     """
     Create a copy of a given IR along with its calltype information.
     We need a copy of the calltypes because copy propagation applied
     to the copied IR will change the calltypes and make subsequent
     uses of the original IR invalid.
     """
     copy_calltypes = {}
     kernel_copy = ir.copy()
     kernel_copy.blocks = {}
     # For each block...
     for (block_label, block) in ir.blocks.items():
         new_block = copy.deepcopy(ir.blocks[block_label])
         new_block.body = []
         # For each statement in each block...
         for stmt in ir.blocks[block_label].body:
             # Copy the statement to the new copy of the kernel
             # and if the original statement is in the original
             # calltypes then add the type associated with this
             # statement to the calltypes copy.
             scopy = copy.deepcopy(stmt)
             new_block.body.append(scopy)
             if stmt in calltypes:
                 copy_calltypes[scopy] = calltypes[stmt]
         kernel_copy.blocks[block_label] = new_block
     return (kernel_copy, copy_calltypes)
Example #2
0
 def copy_ir_with_calltypes(self, ir, calltypes):
     """
     Create a copy of a given IR along with its calltype information.
     We need a copy of the calltypes because copy propagation applied
     to the copied IR will change the calltypes and make subsequent
     uses of the original IR invalid.
     """
     copy_calltypes = {}
     kernel_copy = ir.copy()
     kernel_copy.blocks = {}
     # For each block...
     for (block_label, block) in ir.blocks.items():
         new_block = copy.deepcopy(ir.blocks[block_label])
         new_block.body = []
         # For each statement in each block...
         for stmt in ir.blocks[block_label].body:
             # Copy the statement to the new copy of the kernel
             # and if the original statement is in the original
             # calltypes then add the type associated with this
             # statement to the calltypes copy.
             scopy = copy.deepcopy(stmt)
             new_block.body.append(scopy)
             if stmt in calltypes:
                 copy_calltypes[scopy] = calltypes[stmt]
         kernel_copy.blocks[block_label] = new_block
     return (kernel_copy, copy_calltypes)