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;
 }

Reply via email to