This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: ICE, OSF/1, egcs-19990927
- To: kargl at pag dot apl dot washington dot edu
- Subject: Re: ICE, OSF/1, egcs-19990927
- From: Richard Henderson <rth at cygnus dot com>
- Date: Thu, 14 Oct 1999 22:51:38 -0700
- Cc: gcc-bugs at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- References: <199909302031.NAA29413@pag.apl.washington.edu>
On Thu, Sep 30, 1999 at 01:31:48PM -0700, kargl@pag.apl.washington.edu wrote:
> DragBS.c:581: Internal compiler error in `fixup_var_refs_1',
> at function.c:1749
For the curious, this happened because
(insn 258 256 260 (set (reg:DI 126)
(and:DI (plus:DI (addressof:DI (mem/s:SI (plus:DI (reg:DI 63 FP)
(const_int 144 [0x90])) 0) 113 0x200000aed00)
(const_int 1 [0x1]))
(const_int -8 [0xfffffffffffffff8]))) -1 (nil)
(nil))
was broken out from a MEM because the address was deemed invalid.
I didn't look to see how force_operand (or whoever) could be
changed to accomodate such weird addressing modes, because we
actually don't want the address broken out.
So a small tweek to one of GO_IF_LEGITIMATE_ADDRESS's subroutines
allows ADDRESSOF to be a base of an ANDed address. With the change,
purge_addressof successfully substitutes a reg for the ADDRESSOF
and compilation proceeds apace.
r~
* alpha.h (GO_IF_LEGITIMATE_SIMPLE_ADDRESS): Accept addressof
as the base of a PLUS.
Index: alpha.h
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/alpha/alpha.h,v
retrieving revision 1.79
diff -c -p -d -r1.79 alpha.h
*** alpha.h 1999/10/14 04:20:55 1.79
--- alpha.h 1999/10/15 05:39:09
*************** do { \
*** 1452,1457 ****
--- 1452,1460 ----
&& CONSTANT_ADDRESS_P (XEXP (X, 1))) \
goto ADDR; \
} \
+ else if (GET_CODE (tmp) == ADDRESSOF \
+ && CONSTANT_ADDRESS_P (XEXP (X, 1))) \
+ goto ADDR; \
} \
}