On Wed, 31 Oct 2012, Kenneth Zadeck wrote:
Richi,
Let me explain to you what a broken api is. I have spent the last week
screwing around with tree-vpn and as of last night i finally got it to work.
In tree-vpn, it is clear that double-int is the precise definition of a
broken api.
The tree-vpn uses an infinite-precision view of arithmetic. However, that
infinite precision is implemented on top of a finite, CARVED IN STONE, base
that is and will always be without a patch like this, 128 bits on an x86-64.
However, as was pointed out by earlier, tree-vrp needs 2 * the size of a type
+ 1 bit to work correctly. Until yesterday i did not fully understand the
significance of that 1 bit. what this means is that tree-vrp does not work
on an x86-64 with _int128 variables.
I am a bit surprised by that. AFAIK, the wrapping multiplication case is
the only place that uses quad-sized arithmetic, so that must be what you
are talking about. But when I wrote that code, I was well aware of the
need for that extra bit and worked around it using signed / unsigned as an
extra bit of information. So if you found a bug there, I'd like to know
(although it becomes moot once the code is replaced with wide_int).
Note that my original patch for VRP used the GMP library for computations
(it was rejected as likely too slow), so I think simplifying the thing
with a multi-precision type is great. And if as you explained you have one
(large) fixed size used for all temporaries on the stack but never used
for malloc'ed objects, that sounds good too.
Good luck with the useful wide_int work,
--
Marc Glisse