Open tpops opened 3 years ago
#define bcol(t0) bcol[t0]
#define bcol_0(__tv0, __tv1) bcol(__tv1)
#define browptr(t0) browptr[t0]
#define browptr_3(__tv0) browptr(__tv0)
#define browptr_5(__tv0) browptr(__tv0 + 1)
#define col(t0) col[t0]
#define col_2(__tv0, __tv1, __tv2, __tv3, __tv4, __tv5, __tv6) col(__tv6)
#define col_inv(t0,t1) col_inv[t0][t1]
#define col_inv_1(__tv0, __tv1, __tv2, __tv3, __tv4) col_inv(5 __tv0 + __tv3, 5 __tv2 + __tv4)
#define rowptr(t0) rowptr[t0]
#define rowptr_4(__tv0, __tv1, __tv2, __tv3) rowptr(5 __tv0 + __tv3)
#define rowptr_6(__tv0, __tv1, __tv2, __tv3) rowptr(5 __tv0 + __tv3 + 1)
Looks okay. Some other trivial bugs were fixed too
Add tests to reflect identifying UFs with different param expressions
When IEGenLib generates code for an Uninterpreted function in the domain, it uses a macro to map the function to array access. For instance, if a statment has a domain {[i,j]: 0 <= i and i < NR and j = rowptr(i) }.
A macro for rowptr is created.
#define rowptr(t0) rowptr[t0]
Here rowptr(i) is mapped to rowptr[i]
There is however a problem when we make some UFs omega compliant before codegen. This results to the introduction of wrong mappings.
Computation specification below results in the wrong mapping.