parameters: (self, blocks, exit_value_var,
                                      parfor_body_exit_label)
docstring: Find return statements in the IR and replace them with a SetItem
          call of the value "returned" by the kernel into the result array.
          Returns the block labels that contained return statements.
docstring_summary: Find return statements in the IR and replace them with a SetItem
          call of the value "returned" by the kernel into the result array.
          Returns the block labels that contained return statements.
docstring_tokens: Find return statements in the IR and replace them with a SetItem call of the value returned by the kernel into the result array . Returns the block labels that contained return statements .
function: def replace_return_with_setitem(self, blocks, exit_value_var,
                                      parfor_body_exit_label):
          """
          Find return statements in the IR and replace them with a SetItem
          call of the value "returned" by the kernel into the result array.
          Returns the block labels that contained return statements.
          """
          for label, block in blocks.items():
              scope = block.scope
              loc = block.loc
              new_body = []
              for stmt in block.body:
                  if isinstance(stmt, ir.Return):
                      # previous stmt should have been a cast
                      prev_stmt = new_body.pop()
                      assert (isinstance(prev_stmt, ir.Assign)
                          and isinstance(prev_stmt.value, ir.Expr)
                          and prev_stmt.value.op == 'cast')
  
                      new_body.append(ir.Assign(prev_stmt.value.value, exit_value_var, loc))
                      new_body.append(ir.Jump(parfor_body_exit_label, loc))
                  else:
                      new_body.append(stmt)
              block.body = new_body
function_tokens: def replace_return_with_setitem ( self , blocks , exit_value_var , parfor_body_exit_label ) : for label , block in blocks . items ( ) : scope = block . scope loc = block . loc new_body = [ ] for stmt in block . body : if isinstance ( stmt , ir . Return ) : # previous stmt should have been a cast prev_stmt = new_body . pop ( ) assert ( isinstance ( prev_stmt , ir . Assign ) and isinstance ( prev_stmt . value , ir . Expr ) and prev_stmt . value . op == 'cast' ) new_body . append ( ir . Assign ( prev_stmt . value . value , exit_value_var , loc ) ) new_body . append ( ir . Jump ( parfor_body_exit_label , loc ) ) else : new_body . append ( stmt ) block . body = new_body