def wrap_in_conditionals(codegen_state, domain, check_inames, required_preds, stmt): from loopy.codegen.bounds import get_bounds_checks, constraint_to_code bounds_checks = get_bounds_checks( domain, check_inames, codegen_state.implemented_domain, overapproximate=False) bounds_check_set = isl.Set.universe(domain.get_space()) \ .add_constraints(bounds_checks) bounds_check_set, new_implemented_domain = isl.align_two( bounds_check_set, codegen_state.implemented_domain) new_implemented_domain = new_implemented_domain & bounds_check_set if bounds_check_set.is_empty(): return None, None condition_codelets = [ constraint_to_code( codegen_state.expression_to_code_mapper, cns) for cns in bounds_checks] condition_codelets.extend( required_preds - codegen_state.implemented_predicates) if condition_codelets: from cgen import If stmt = If("\n&& ".join(condition_codelets), stmt) return stmt, new_implemented_domain
def gen_code(inner_codegen_state): conditionals = [ constraint_to_code( inner_codegen_state.expression_to_code_mapper, cns) for cns in bounds_checks] + list(pred_checks) prev_result = prev_gen_code(inner_codegen_state) return [wrap_in_if( conditionals, gen_code_block(prev_result))]