diff options
author | Tobias Grosser <tobias@grosser.es> | 2015-02-04 20:55:43 +0000 |
---|---|---|
committer | Tobias Grosser <tobias@grosser.es> | 2015-02-04 20:55:43 +0000 |
commit | 52a25237d894fd5736a90f11df2c5c9391d13fd5 (patch) | |
tree | 2b0e65b1e1de52b56aaa9b04999fe6223d1a7b0f /polly/lib/External/isl/isl_imath.c | |
parent | b6472fe3da9a20bcceb7b24af4ce9f0c4e79b254 (diff) | |
download | bcm5719-llvm-52a25237d894fd5736a90f11df2c5c9391d13fd5.tar.gz bcm5719-llvm-52a25237d894fd5736a90f11df2c5c9391d13fd5.zip |
Import isl(+imath) as an external library into Polly
With this patch Polly is always GPL-free (no dependency on GMP any more). As a
result, building and distributing Polly will be easier. Furthermore, there is no
need to tightly coordinate isl and Polly releases anymore.
We import isl b3e0fa7a05d as well as imath 4d707e5ef2. These are the git
versions Polly currently was tested with when using utils/checkout_isl.sh. The
imported libraries are both MIT-style licensed.
We build isl and imath with -fvisibility=hidden to avoid clashes in case other
projects (such as gcc) use conflicting versions of isl. The use of imath can
temporarily reduce compile-time performance of Polly. We will work on
performance tuning in tree.
Patches to isl should be contributed first to the main isl repository and can
then later be reimported to Polly.
This patch is also a prerequisite for the upcoming isl C++ interface.
llvm-svn: 228193
Diffstat (limited to 'polly/lib/External/isl/isl_imath.c')
-rw-r--r-- | polly/lib/External/isl/isl_imath.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/polly/lib/External/isl/isl_imath.c b/polly/lib/External/isl/isl_imath.c new file mode 100644 index 00000000000..959b5e78272 --- /dev/null +++ b/polly/lib/External/isl/isl_imath.c @@ -0,0 +1,53 @@ +#include <isl_int.h> + +uint32_t isl_imath_hash(mp_int v, uint32_t hash) +{ + unsigned const char *data = (unsigned char *)v->digits; + unsigned const char *end = data + v->used * sizeof(v->digits[0]); + + if (v->sign == 1) + isl_hash_byte(hash, 0xFF); + for (; data < end; ++data) + isl_hash_byte(hash, *data); + return hash; +} + +/* Try a standard conversion that fits into a long. + */ +int isl_imath_fits_slong_p(mp_int op) +{ + unsigned long out; + mp_result res = mp_int_to_int(op, &out); + return res == MP_OK; +} + +/* Try a standard conversion that fits into an unsigned long. + */ +int isl_imath_fits_ulong_p(mp_int op) +{ + unsigned long out; + mp_result res = mp_int_to_uint(op, &out); + return res == MP_OK; +} + +void isl_imath_addmul_ui(mp_int rop, mp_int op1, unsigned long op2) +{ + isl_int temp; + isl_int_init(temp); + + isl_int_set_ui(temp, op2); + isl_int_addmul(rop, op1, temp); + + isl_int_clear(temp); +} + +void isl_imath_submul_ui(mp_int rop, mp_int op1, unsigned long op2) +{ + isl_int temp; + isl_int_init(temp); + + isl_int_set_ui(temp, op2); + isl_int_submul(rop, op1, temp); + + isl_int_clear(temp); +} |