[llvm-commits] [PATCH] llvm-stress fixes

Hal Finkel hfinkel at anl.gov
Mon Apr 16 14:18:08 PDT 2012


On Mon, 16 Apr 2012 22:58:04 +0200
Gabor Greif <gabor at mac.com> wrote:

> Hal wrote:
> 
> > The current situation is not great, support for ppc128 in APFloat is
> > currently broken, and while fixing it is on my TODO list, I have not
> > really worked on it yet.
> 
> Something changed lately, as clang is ICEing on me when encountering  
> a long double literal.
> I am targetting PowerPC.

You essentially have two options. First, are you targeting PPC on Linux
(where long double is now *normally* ppc128) or something else (where
long double == double).

If you really need a ppc128-targeting build, then for now, you'll need
to locally disable the assertions this way:
===================================================================
--- lib/Support/APFloat.cpp	(revision 154802)
+++ lib/Support/APFloat.cpp	(working copy)
@@ -61,7 +61,7 @@
   // The PowerPC format consists of two doubles.  It does not map
cleanly // onto the usual format above.  For now only storage of
constants of // this type is supported, no arithmetic.
-  const fltSemantics APFloat::PPCDoubleDouble = { 1023, -1022, 106,
false };
+  const fltSemantics APFloat::PPCDoubleDouble = { 1023, -1022, 106,
true }; 
   /* A tight upper bound on number of parts required to hold the value
      pow(5, power) is

This is what I use for now. The produced code is wrong (so don't
actually do any long double computations), and I'm working on redoing
the support so that it will all work again :) -- I'll let you know as
soon as I have something.

 -Hal

> 
> >
> > If you edit APFloat.cpp to disable the relevant asserts then you can
> > compile codes with long doubles in them (which is important for C++
> 
> Yes, I had to manually comment out an assertion in APFloat.cpp, to  
> avoid the ICEs.
> 
> > codes that #include <complex>, for example), but any code that  
> > actually
> > uses long doubles will most likely output the wrong answer.
> > Therefore, so long as some skeleton support exists, then there is
> > no regression in
> > practice.
> 
> My sources do not actually resort to long doubles, but the <limits>  
> header in our g++ installation does
> have a specialization for 'long double' with literals in it. This  
> seems to trigger the issue.
> 
> >
> > I would be happy to move the relevant code into the frontend, but  
> > while
> > I imagine that in some ways this is very similar to how _Complex  
> > double
> > is handled, any assistance would be appreciated.
> 
> I gather that once the frontend is fixed the assert won't trigger
> any more?
> 
> Cheers,
> 
>      Gabor
> 
> >
> > Thanks again,
> > Hal
> 
> 



-- 
Hal Finkel
Postdoctoral Appointee
Leadership Computing Facility
Argonne National Laboratory



More information about the llvm-commits mailing list