Hi!

On Mon, Oct 14, 2019 at 07:18:11PM -0500, Peter Bergner wrote:
> On 10/14/19 2:57 PM, Segher Boessenkool wrote:
> > On Mon, Oct 14, 2019 at 06:35:06PM +0200, Richard Biener wrote:
> >> The general case should be that if the caller ISA supports the callee one
> >> then inlining is OK. If this is not wanted in some cases then there are
> >> options like using a noinline attribute. 
> > 
> > I agree, and that is what we already do afaik.
> 
> I agree on the making sure the caller's ISA supports the callee's ISA
> before allowing inlining...and I think that's what our code it "trying"
> to do.  It just has some bugs.

It says that it wants the callee ISA to be a subset of the caller ISA,
and that is what it does.  Which is exactly what we want.  But as the
PR points out it is *also* useful to not inline callees that explicitly
disabled some ISA feature the caller has.  Which we never promissed, but
perhaps we should.

> I don't think sprinkling noinline's around will work given LTO can
> inline random functions from one object file into a function in another
> object file and we have no idea what the options were used for both files.
> I think that would just force us to end up putting nolines on all fuctions
> that might be compiled with LTO.

I think LTO should handle noinline attributes just fine, it would be a
much bigger problem than this PR if it doesn't!


Missing date+name+address here; and missing PR ref.

> gcc/
>       * config/rs6000/rs6000.c (rs6000_can_inline_p): Handle explicit
>       options.

"Prohibit inlining if the callee explicitly disables some isa_flags the
caller has", or something like that?  A few more words please.

> --- gcc/testsuite/gcc.target/powerpc/pr70010.c        (nonexistent)
> +++ gcc/testsuite/gcc.target/powerpc/pr70010.c        (working copy)
> @@ -0,0 +1,21 @@
> +/* { dg-do compile { target { powerpc*-*-* } } } */

Just
  /* { dg-do compile } */
please: everything in gcc.target checks for powerpc*-*-* always (and
compile is the default, but it's nice documentation).

> +/* { dg-skip-if "" { powerpc*-*-darwin* } } */

You don't need this I think.  If this test cannot work on Darwin for
some reason, the Darwin maintainers will take care of it.  Unless you
*know* they want (or need) the skip here?

> +/* { dg-require-effective-target powerpc_vsx_ok } */
> +/* { dg-options "-O2 -finline" } */

-finline does nothing; it isn't even documented, only -fno-inline is.

> +/* { dg-final { scan-assembler "bl vadd_no_vsx" } } */

Please use
  /* { dg-final { scan-assembler "\mbl vadd_no_vsx\M" } } */
so that it won't match "rldibl vadd_no_vsx", etc.  Doesn't matter much
for this testcase, but it's a good habit (and using it makes me not
comment about it, also useful ;-) )

Okay for trunk with those tweaks.  Thanks!


Segher

Reply via email to