def _mutate_with_block_callee(blocks, blk_start, blk_end, inputs, outputs): """Mutate *blocks* for the callee of a with-context. Parameters ---------- blocks : dict[ir.Block] blk_start, blk_end : int labels of the starting and ending block of the context-manager. inputs: sequence[str] Input variable names outputs: sequence[str] Output variable names """ head_blk = min(blocks) temp_blk = blocks[head_blk] scope = temp_blk.scope loc = temp_blk.loc blocks[blk_start] = ir_utils.fill_callee_prologue( block=ir.Block(scope=scope, loc=loc), inputs=inputs, label_next=head_blk, ) blocks[blk_end] = ir_utils.fill_callee_epilogue( block=ir.Block(scope=scope, loc=loc), outputs=outputs, )
def _loop_lift_prepare_loop_func(loopinfo, blocks): """ Inplace transform loop blocks for use as lifted loop. """ entry_block = blocks[loopinfo.callfrom] scope = entry_block.scope loc = entry_block.loc # Lowering assumes the first block to be the one with the smallest offset firstblk = min(blocks) - 1 blocks[firstblk] = ir_utils.fill_callee_prologue( block=ir.Block(scope=scope, loc=loc), inputs=loopinfo.inputs, label_next=loopinfo.callfrom, ) blocks[loopinfo.returnto] = ir_utils.fill_callee_epilogue( block=ir.Block(scope=scope, loc=loc), outputs=loopinfo.outputs, )