#include <isl/set.h>
#include <isl/map.h>
#include <isl/flow.h>
-#include <isl_qsort.h>
+#include <isl_sort.h>
enum isl_restriction_type {
isl_restriction_type_empty,
isl_set *sink;
};
-/* Create a restriction that doesn't restrict anything.
+/* Create a restriction of the given type.
*/
-__isl_give isl_restriction *isl_restriction_none(__isl_take isl_map *source_map)
+static __isl_give isl_restriction *isl_restriction_alloc(
+ __isl_take isl_map *source_map, enum isl_restriction_type type)
{
isl_ctx *ctx;
isl_restriction *restr;
if (!restr)
goto error;
- restr->type = isl_restriction_type_none;
+ restr->type = type;
isl_map_free(source_map);
return restr;
return NULL;
}
+/* Create a restriction that doesn't restrict anything.
+ */
+__isl_give isl_restriction *isl_restriction_none(__isl_take isl_map *source_map)
+{
+ return isl_restriction_alloc(source_map, isl_restriction_type_none);
+}
+
/* Create a restriction that removes everything.
*/
__isl_give isl_restriction *isl_restriction_empty(
__isl_take isl_map *source_map)
{
- isl_ctx *ctx;
- isl_restriction *restr;
-
- if (!source_map)
- return NULL;
-
- ctx = isl_map_get_ctx(source_map);
- restr = isl_calloc_type(ctx, struct isl_restriction);
- if (!restr)
- goto error;
-
- restr->type = isl_restriction_type_empty;
-
- isl_map_free(source_map);
- return restr;
-error:
- isl_map_free(source_map);
- return NULL;
+ return isl_restriction_alloc(source_map, isl_restriction_type_empty);
}
/* Create a restriction on the input of the maximization problem
/* Free the given isl_access_info structure.
*/
-void isl_access_info_free(__isl_take isl_access_info *acc)
+void *isl_access_info_free(__isl_take isl_access_info *acc)
{
int i;
if (!acc)
- return;
+ return NULL;
isl_map_free(acc->domain_map);
isl_map_free(acc->sink.map);
for (i = 0; i < acc->n_must + acc->n_may; ++i)
isl_map_free(acc->source[i].map);
free(acc);
+ return NULL;
}
isl_ctx *isl_access_info_get_ctx(__isl_keep isl_access_info *acc)
if (acc->n_must <= 1)
return acc;
- isl_quicksort(acc->source, acc->n_must, sizeof(struct isl_labeled_map),
- access_sort_cmp, acc);
+ if (isl_sort(acc->source, acc->n_must, sizeof(struct isl_labeled_map),
+ access_sort_cmp, acc) < 0)
+ return isl_access_info_free(acc);
return acc;
}