| /* |
| * Copyright 2017 Sven Verdoolaege |
| * |
| * Use of this software is governed by the MIT license |
| * |
| * Written by Sven Verdoolaege, |
| */ |
| |
| /* Align the parameters of "multi" and "domain" (if needed) and |
| * call "fn". |
| */ |
| static __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),align_params),ALIGN_DOMBASE)( |
| __isl_take MULTI(BASE) *multi, __isl_take ALIGN_DOM *domain, |
| __isl_give MULTI(BASE) *fn(__isl_take MULTI(BASE) *multi, |
| __isl_take ALIGN_DOM *domain)) |
| { |
| isl_bool aligned; |
| isl_bool named; |
| isl_space *dom_space; |
| |
| aligned = FN(ALIGN_DOM,space_has_equal_params)(domain, multi->space); |
| if (aligned < 0) |
| goto error; |
| if (aligned) |
| return fn(multi, domain); |
| |
| dom_space = FN(ALIGN_DOM,peek_space)(domain); |
| named = isl_space_has_named_params(multi->space); |
| if (named >= 0 && named) |
| named = isl_space_has_named_params(dom_space); |
| if (named < 0) |
| goto error; |
| if (!named) |
| isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_invalid, |
| "unaligned unnamed parameters", goto error); |
| multi = FN(MULTI(BASE),align_params)(multi, |
| FN(ALIGN_DOM,get_space)(domain)); |
| domain = FN(ALIGN_DOM,align_params)(domain, |
| FN(MULTI(BASE),get_space)(multi)); |
| return fn(multi, domain); |
| error: |
| FN(MULTI(BASE),free)(multi); |
| FN(ALIGN_DOM,free)(domain); |
| return NULL; |
| } |