This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH, rs6000] Don't mark the TOC reg as set up in prologue
On Thu, Sep 14, 2017 at 11:53:02AM -0500, Pat Haugen wrote:
> On 09/14/2017 11:35 AM, Segher Boessenkool wrote:
> > On Thu, Sep 14, 2017 at 10:18:55AM -0500, Pat Haugen wrote:
> >> --- gcc/config/rs6000/rs6000.c (revision 252029)
> >> +++ gcc/config/rs6000/rs6000.c (working copy)
> >> @@ -37807,6 +37807,11 @@ rs6000_set_up_by_prologue (struct hard_r
> >> add_to_hard_reg_set (&set->set, Pmode, RS6000_PIC_OFFSET_TABLE_REGNUM);
> >> if (cfun->machine->split_stack_argp_used)
> >> add_to_hard_reg_set (&set->set, Pmode, 12);
> >> +
> >> + /* Make sure the hard reg set doesn't include r2, which was possibly added
> >> + via PIC_OFFSET_TABLE_REGNUM. */
> >> + if (TARGET_TOC)
> >> + remove_from_hard_reg_set (&set->set, Pmode, TOC_REGNUM);
> >> }
> > Hrm, can't you simply not add it in the first place? Just a few lines up?
>
> As we discussed offline, that is RS6000_PIC_OFFSET_TABLE_REGNUM (i.e.
> r30). PIC_OFFSET_REGNUM is added in shrink-wrap.c:try_shrink_wrapping().
Ah, right, I never can keep the two apart.
> I noticed that the test fails on 32-bit because there's no prologue and
> hence no shrink-wrapping to be performed. Following is updated testcase
> which limits it to 64-bit. Ok?
> --- gcc/testsuite/gcc.target/powerpc/r2_shrink-wrap.c (nonexistent)
> +++ gcc/testsuite/gcc.target/powerpc/r2_shrink-wrap.c (working copy)
> @@ -0,0 +1,17 @@
> +/* { dg-do compile { target { lp64 } } } */
You don't need the braces around lp64.
> +/* { dg-options "-O2 -fdump-rtl-pro_and_epilogue" } */
> +
> +/* Verify we move the prologue past the TOC reference of 'j' and
> shrink-wrap
> + the function. */
> +void bar();
> +int j;
> +void foo(int i)
> +{
> + j = i;
> + if (i > 0)
> + {
> + bar();
If you add asm (""); here, it won't do a sibcall on any (sub-)target.
Not that this testcase is relevant elsewhere anyway.
> + }
> +}
> +
> +/* { dg-final { scan-rtl-dump-times "Performing shrink-wrapping" 1
> "pro_and_epilogue" } } */
Okay for trunk, with or without that asm. Thanks!
Segher