[llvm-dev] [PPC, APFloat] Add full PPCDoubleDouble to APFloat
Tim Shen via llvm-dev
llvm-dev at lists.llvm.org
Mon Oct 3 13:52:12 PDT 2016
On Mon, Oct 3, 2016 at 1:02 PM Hal Finkel <hfinkel at anl.gov> wrote:
> There might be some tradeoff here between performance and maintainability.
>
I don't think that it's a tradeoff. We can have both. For example:
struct IEEEPayload {
union Significand { integerPart part; integerPart *parts; } significand;
int exponent;
int category : 3;
int sign : 1;
};
struct PPCDoubleDoublePayload {
struct {
int exponent1, exponent2;
integerPart significands[]; // flexible array member, or
llvm::TrailingObjects instead.
} *heapdata;
int category : 3;
int sign : 2;
};
class APFloat {
fltSemantics *semantics;
union {
IEEEPayload ieee;
PPCDoubleDoublePayload ppc;
} payload;
};
It's just an example of how we can use the same shallow space.
My previous point is that, I want to build an internal abstraction in the
hope to reduce technical debt and maintenance burden, but I\we need to do
it correctly.
> APFloat already isn't *fast*, so I'm not super worried about introducing
> some extra checks inside the functions, but I'm more worried about
> increasing the size of the APFloat object itself, because we might have *a
> lot* of these in memory at once. As a result, I'd prefer a solution that
> did not increase the size of the base APFloat object (because then everyone
> pays a price for this and most people won't use it).
>
> Thanks again,
> Hal
>
>
>
>
> Thanks again,
> Hal
>
> ------------------------------
>
>
> > From: "Tim Shen" <timshen at google.com>
> > To: llvm-dev at lists.llvm.org
> > Cc: resistor at mac.com, "Hal Finkel" <hfinkel at anl.gov>, "Fiona Glaser" <
> escha at apple.com>, "Stephen Canon"
> > <scanon at apple.com>, "Eric Christopher" <echristo at gmail.com>
> > Sent: Friday, September 30, 2016 4:43:12 PM
> > Subject: [PPC, APFloat] Add full PPCDoubleDouble to APFloat
> >
> >
> >
> >
> > I have found some internal test failures due to the wrong constant
> > folding on ppc_fp128.
> >
> >
> > As documented in APFloat::PPCDoubleDouble, APFloat doesn't support
> > PowerPC double-double correctly <
> >
> https://github.com/llvm-mirror/llvm/blob/492acdd450bcdf9837494d6da029ed064f14fc33/lib/Support/APFloat.cpp#L74
> > >.
> >
> >
> > To support this, we need to add a second tuple of (sign, exponent,
> > significand) to APFloat. I wonder where should I start to change, so
> > that it's less hacky? I certainly expect refactoring to come. :)
> >
> >
> > Thanks!
>
> --
> Hal Finkel
> Lead, Compiler Technology and Programming Languages
> Leadership Computing Facility
> Argonne National Laboratory
>
>
>
>
> --
> Hal Finkel
> Lead, Compiler Technology and Programming Languages
> Leadership Computing Facility
> Argonne National Laboratory
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161003/87eed2dd/attachment.html>
More information about the llvm-dev
mailing list