On 20/09/16 17:12, Kyrill Tkachov wrote:


On 20/09/16 16:30, Bernd Schmidt wrote:
On 09/20/2016 05:18 PM, Jeff Law wrote:
I assume HARD_FRAME_POINTER_REGNUM is never zero.
It could be zero.  It's just a hard register number.  No target has the
property that its hard frame pointer register is 0 though :-)

git blame to the rescue. The current state comes from one of tbsaunde's cleanup 
patches:

> diff --git a/gcc/regrename.c b/gcc/regrename.c
index 174d3b5..e5248a5 100644
--- a/gcc/regrename.c
+++ b/gcc/regrename.c
@@ -442,12 +442,10 @@ rename_chains (void)
        continue;

       if (fixed_regs[reg] || global_regs[reg]
-#if !HARD_FRAME_POINTER_IS_FRAME_POINTER
-         || (frame_pointer_needed && reg == HARD_FRAME_POINTER_REGNUM)
-#else
-         || (frame_pointer_needed && reg == FRAME_POINTER_REGNUM)
-#endif
-         )
+         || (!HARD_FRAME_POINTER_IS_FRAME_POINTER && frame_pointer_needed
+             && reg == HARD_FRAME_POINTER_REGNUM)
+         || (HARD_FRAME_POINTER_REGNUM && frame_pointer_needed
+             && reg == FRAME_POINTER_REGNUM))
        continue;

       COPY_HARD_REG_SET (this_unavailable, unavailable);

Looks like it never got reviewed and was committed as preapproved.

The #ifdef we had before looks odd too. Maybe this should just read

 if (fixed_regs[reg] || global_regs[reg]
     || (frame_pointer_needed && reg == HARD_FRAME_POINTER_REGNUM))


I'll try bootstrapping and testing this change on arm-none-linux-gnueabihf.


... and I'm hitting the same issue in sel-sched.c:
   if (fixed_regs[regno]
       || global_regs[regno]
       || (!HARD_FRAME_POINTER_IS_FRAME_POINTER && frame_pointer_needed
           && regno == HARD_FRAME_POINTER_REGNUM)
       || (HARD_FRAME_POINTER_REGNUM && frame_pointer_needed
           && regno == FRAME_POINTER_REGNUM)

I think the condition was copied from regrename.c (or the other way around),
so I'll fix it the same way.

Kyrill


Thanks,
Kyrill


Bernd


Reply via email to