This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH][RFC][regrename][sel-sched] Fix arm bootstrap
- From: Kyrill Tkachov <kyrylo dot tkachov at foss dot arm dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: Bernd Schmidt <bschmidt at redhat dot com>, Bernd Edlinger <bernd dot edlinger at hotmail dot de>
- Date: Thu, 22 Sep 2016 14:26:07 +0100
- Subject: [PATCH][RFC][regrename][sel-sched] Fix arm bootstrap
- Authentication-results: sourceware.org; auth=none
Hi all,
In the the interest of fixing arm bootstrap here are the two blocking issues
and the changes proposed for them.
I'm not familiar enough with regrename or sel-sched to make a call on whether
these are right or not, I just want to keep the ball rolling so we can fix
arm bootstrap.
These changes allowed arm bootstrap to complete.
Are they the right way to go?
If so, I'll do a full bootstrap and test run on aarch64 and x86_64.
Thanks,
Kyrill
2016-09-22 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
Bernd Edlinger <bernd.edlinger@hotmail.de>
Bernd Schmidt <bschmidt@redhat.com>
* regrename.c (rename_chains): Avoid using HARD_FRAME_POINTER_REGNUM
in a boolean context.
* sel-sched.c (mark_unavailable_hard_regs): Likewise.
diff --git a/gcc/regrename.c b/gcc/regrename.c
index 54c7768efa226139c340868e42b784fb011a19b9..a7339db441012e338de5697015f04c1fdb970164 100644
--- a/gcc/regrename.c
+++ b/gcc/regrename.c
@@ -464,8 +464,7 @@ rename_chains (void)
if (frame_pointer_needed)
{
add_to_hard_reg_set (&unavailable, Pmode, FRAME_POINTER_REGNUM);
- if (!HARD_FRAME_POINTER_IS_FRAME_POINTER)
- add_to_hard_reg_set (&unavailable, Pmode, HARD_FRAME_POINTER_REGNUM);
+ add_to_hard_reg_set (&unavailable, Pmode, HARD_FRAME_POINTER_REGNUM);
}
FOR_EACH_VEC_ELT (id_to_chain, i, this_head)
@@ -479,10 +478,9 @@ rename_chains (void)
continue;
if (fixed_regs[reg] || global_regs[reg]
- || (!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))
+ || (frame_pointer_needed
+ && (reg == HARD_FRAME_POINTER_REGNUM
+ || reg == FRAME_POINTER_REGNUM)))
continue;
COPY_HARD_REG_SET (this_unavailable, unavailable);
diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c
index 25a100ee34f6ceaceda2814ae281cadf8b29e688..4a2679c6701c256c5559fa1e9c156bdaad1c2891 100644
--- a/gcc/sel-sched.c
+++ b/gcc/sel-sched.c
@@ -1183,10 +1183,8 @@ mark_unavailable_hard_regs (def_t def, struct reg_rename *reg_rename_p,
frame pointer, or we could not discover its class. */
if (fixed_regs[regno]
|| global_regs[regno]
- || (!HARD_FRAME_POINTER_IS_FRAME_POINTER && frame_pointer_needed
+ || (frame_pointer_needed
&& regno == HARD_FRAME_POINTER_REGNUM)
- || (HARD_FRAME_POINTER_REGNUM && frame_pointer_needed
- && regno == FRAME_POINTER_REGNUM)
|| (reload_completed && cl == NO_REGS))
{
SET_HARD_REG_SET (reg_rename_p->unavailable_hard_regs);