This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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

On Wed, 31 Oct 2012, Kenneth Zadeck wrote:


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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]