This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: failuer to build uberbaum --target=m68k-elf
- From: Jim Wilson <wilson at tuliptree dot org>
- To: Peter Barada <peter at baradas dot org>
- Cc: gcc at gcc dot gnu dot org
- Date: Wed, 26 Feb 2003 01:31:35 -0500
- Subject: Re: failuer to build uberbaum --target=m68k-elf
- References: <Pine.BSF.4.44.0212212104140.75377-100000@dair.pair.com> <200301292339.h0TNdwi06854@hyper.wm.sps.mot.com> <20030206055727.CC51098964@baradas.org>
In
http://gcc.gnu.org/ml/gcc/2003-01/msg01606.html
you mention that combine creates
(and:SF (mem/f:SF (plus:SI (reg/f:SI 14 %a6)
(const_int 8 [0x8])) [2 x+0 S4 A16])
(const_int 2147483647 [0x7fffffff]))
The bug here is that we never should have created this rtl because
AND:SF is not meaningful. This rtl is created in simplify_comparison
where it tries to permute AND and SUBREG. So I believe the correct fix
is to add a check for an integral mode there, as otherwise this
optimization is not correct.
I am able to build an uberbaum m68k-elf tree with the following patch,
except for gdb's lib rda, but that isn't a compiler problem. I will do
x86 bootstraps tomorrow to verify and then check it into the 3.3 branch
and the trunk.
2003-02-26 James E Wilson <wilson at tuliptree dot org>
* combine.c (simplify_comparison): Require integral mode when
permuting SUBREG with AND.
Index: combine.c
===================================================================
RCS file: /cvs/uberbaum/gcc/combine.c,v
retrieving revision 1.342
diff -p -r1.342 combine.c
*** combine.c 20 Feb 2003 20:56:51 -0000 1.342
--- combine.c 26 Feb 2003 05:58:53 -0000
*************** simplify_comparison (code, pop0, pop1)
*** 11135,11140 ****
--- 11135,11143 ----
represents the low part, permute the SUBREG and the AND and
try again. */
if (GET_CODE (XEXP (op0, 0)) == SUBREG
+ /* Require an integral mode, to avoid creating something like
+ (AND:SF ...). */
+ && SCALAR_INT_MODE_P (GET_MODE (SUBREG_REG (XEXP (op0, 0))))
/* It is unsafe to commute the AND into the SUBREG if the SUBREG
is paradoxical and WORD_REGISTER_OPERATIONS is not defined.
As originally written the upper bits have a defined value