GCC 4.8.0 Status Report (2012-10-29), Stage 1 to end soon

Marc Glisse marc.glisse@inria.fr
Wed Oct 31 19:01:00 GMT 2012


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



More information about the Gcc mailing list