/** Converts v to mpz_class. Assumes that v is signed */ inline mpz_class toMpz (const APInt &v) { // Based on: // https://llvm.org/svn/llvm-project/polly/trunk/lib/Support/GICHelper.cpp // return v.getSExtValue (); APInt abs; abs = v.isNegative () ? v.abs () : v; const uint64_t *rawdata = abs.getRawData (); unsigned numWords = abs.getNumWords (); // TODO: Check if this is true for all platforms. mpz_class res; mpz_import(res.get_mpz_t (), numWords, 1, sizeof (uint64_t), 0, 0, rawdata); return v.isNegative () ? mpz_class(-res) : res; }