Replace an unguarded early access to the incoming RTX's operand 0 in
`nonindexed_address_p' with direct accesses at the actual use places,
fixing a libgcc build error:
during RTL pass: reload
.../libgcc/libgcc2.c: In function '__udiv_w_sdiv':
.../libgcc/libgcc2.c:649:1: internal compiler error: RTL check: expected elt 0
type 'e' or 'u', have 'r' (rtx reg) in nonindexed_address_p, at
config/vax/vax.cc:1826
where `--enable-checking=rtl' has been specified so as to enable RTL
consistency checks.
gcc/
* config/vax/vax.cc (nonindexed_address_p): Move incoming RTX's
operand 0 access to the actual use places.
---
Hi,
I have committed this fix executing a target maintainer's liberty to
apply reasonable changes during Stage 4. While not a recent regression,
since this code has been there going back at least to 2005, it is a fix to
a GCC build failure and no actual functional change as to code produced,
so it is safe to make, while making it easier to catch any issue arising
from another change. And the VAX port surely is not a tier 1 GCC target
anyway.
Maciej
---
gcc/config/vax/vax.cc | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
gcc-vax-nonindexed-address-xexp-reg.patch
Index: gcc/gcc/config/vax/vax.cc
===================================================================
--- gcc.orig/gcc/config/vax/vax.cc
+++ gcc/gcc/config/vax/vax.cc
@@ -1811,7 +1811,6 @@ indirectable_address_p (rtx x, bool stri
static bool
nonindexed_address_p (rtx x, bool strict)
{
- rtx xfoo0;
if (REG_P (x))
{
if (! reload_in_progress
@@ -1823,11 +1822,10 @@ nonindexed_address_p (rtx x, bool strict
return true;
if (indirectable_address_p (x, strict, false))
return true;
- xfoo0 = XEXP (x, 0);
- if (MEM_P (x) && indirectable_address_p (xfoo0, strict, true))
+ if (MEM_P (x) && indirectable_address_p (XEXP (x, 0), strict, true))
return true;
if ((GET_CODE (x) == PRE_DEC || GET_CODE (x) == POST_INC)
- && BASE_REGISTER_P (xfoo0, strict))
+ && BASE_REGISTER_P (XEXP (x, 0), strict))
return true;
return false;
}