statement-wise -f/-l options for loop separation
[cloog.git] / source / stride.c
blobd7358a08f3d6c21b871764de0de5d9d0d93cab51
1 #include <stdlib.h>
2 #include <cloog/cloog.h>
4 #define ALLOC(type) (type*)malloc(sizeof(type))
6 CloogStride *cloog_stride_malloc()
8 CloogStride *s;
10 s = ALLOC(CloogStride);
11 if (!s)
12 cloog_die("memory overflow.\n");
14 s->references = 1;
15 cloog_int_init(s->stride);
16 cloog_int_init(s->offset);
17 cloog_int_init(s->factor);
18 s->constraint = cloog_constraint_invalid();
20 return s;
23 CloogStride *cloog_stride_alloc(cloog_int_t stride, cloog_int_t offset)
25 CloogStride *s = cloog_stride_malloc();
27 cloog_int_set(s->stride, stride);
28 cloog_int_set(s->offset, offset);
29 cloog_int_set_si(s->factor, 0);
31 return s;
34 CloogStride *cloog_stride_alloc_from_constraint(cloog_int_t stride,
35 CloogConstraint *constraint, cloog_int_t factor)
37 CloogStride *s = cloog_stride_malloc();
39 cloog_int_set(s->stride, stride);
40 cloog_int_set(s->factor, factor);
41 cloog_int_set_si(s->offset, -1);
42 s->constraint = constraint;
44 return s;
47 CloogStride *cloog_stride_copy(CloogStride *stride)
49 if (!stride)
50 return stride;
52 stride->references++;
53 return stride;
56 void cloog_stride_free(CloogStride *stride)
58 if (!stride)
59 return;
61 stride->references--;
62 if (stride->references > 0)
63 return;
65 cloog_int_clear(stride->stride);
66 cloog_int_clear(stride->offset);
67 cloog_int_clear(stride->factor);
68 cloog_constraint_release(stride->constraint);
69 free(stride);