[Bug middle-end/71078] x/abs(x) -> sign(1.0,x)
prathamesh3492 at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Aug 4 11:57:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71078
--- Comment #7 from prathamesh3492 at gcc dot gnu.org ---
(In reply to prathamesh3492 from comment #6)
> (In reply to rguenther@suse.de from comment #5)
> > On Thu, 4 Aug 2016, mwahab at gcc dot gnu.org wrote:
> >
> > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71078
> > >
> > > mwahab at gcc dot gnu.org changed:
> > >
> > > What |Removed |Added
> > > ----------------------------------------------------------------------------
> > > CC| |mwahab at gcc dot gnu.org
> > >
> > > --- Comment #4 from mwahab at gcc dot gnu.org ---
> > > (In reply to prathamesh3492 from comment #3)
> > > > Fixed.
> > >
> > > The new test pr71078-1.c fails for arm and aarch64 because copysignl isn't
> > > generated for fabsl making the expected output fail to match.
> >
> > Is that a non-C99 target? If so add require-effective-target c99_runtime
> dg-require-effective-target c99_runtime didn't work.
> Apparently for long double, it is simplified to __builtin_copysign
> instead of __builtin_copysignl
>
> Applying pattern match.pd:208, gimple-match.c:1347
> gimple_simplified to t2_3 = __builtin_copysign (1.0e+0, x_1(D));
> f3 (long double x)
> {
> long double t2;
> long double t1;
>
> <bb 2>:
> t1_2 = ABS_EXPR <x_1(D)>;
> t2_3 = __builtin_copysign (1.0e+0, x_1(D));
> return t2_3;
>
> }
>
> Looks like for arm, long double and double are same
> (sizeof (double) == sizeof (long double)).
> Since we first match for the double case,
> we end up simplifying to __builtin_copysign.
I wonder if this is a bug in the pattern or in test-case ?
If double and long double are same, then I suppose it shouldn't
matter if copysign would get called for long double ?
In that case, should I add following target-effective-checks
to the test-case ?
dg-require-effective-target large_long_double
dg-require-effective-target large_double
Adding
/* { dg-require-effective-target large_long_double } */
to the test-case makes it unsupported on arm-linux-gnueabihf.
Thanks,
Prathamesh
>
> Thanks,
> Prathamesh
> >
> > Richard.
More information about the Gcc-bugs
mailing list