This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
RFA: Don't generate zero_extend:DF ...
- From: Joern Rennecke <joern dot rennecke at superh dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Wed, 04 Sep 2002 12:46:54 +0100
- Subject: RFA: Don't generate zero_extend:DF ...
- Organization: SuperH UK Ltd.
--
--------------------------
SuperH (UK) Ltd.
2430 Aztec West / Almondsbury / BRISTOL / BS32 4AQ
T:+44 1454 462330
make_compound_operation, called with code SUBREG and x
(subreg:DF (and:DI (reg/v:DI 162)
(const_int 4294967295 [0xffffffff])) 0)
, returns (zero_extend:DF (subreg:SI (reg/v:DI 162) 0)) .
This causes a compile/combine-hang.c failure for SH5 -m5-32media-nofpu -ml
at -O1 and higher.
We should not make floating point mode zero_extend operations.
I have included a fix.
Wed Sep 4 12:43:02 2002 J"orn Rennecke <joern.rennecke@superh.com>
* combine.c (make_compound_operation): Don't generate zero / sign
extensions in floating point modes.
Index: combine.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/combine.c,v
retrieving revision 1.310
diff -p -r1.310 combine.c
*** combine.c 19 Aug 2002 18:18:11 -0000 1.310
--- combine.c 4 Sep 2002 11:42:50 -0000
*************** make_compound_operation (x, in_code)
*** 6629,6635 ****
if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (tem))
|| (GET_MODE_SIZE (mode) >
GET_MODE_SIZE (GET_MODE (XEXP (tem, 0)))))
! tem = gen_rtx_fmt_e (GET_CODE (tem), mode, XEXP (tem, 0));
else
tem = gen_lowpart_for_combine (mode, XEXP (tem, 0));
return tem;
--- 6629,6639 ----
if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (tem))
|| (GET_MODE_SIZE (mode) >
GET_MODE_SIZE (GET_MODE (XEXP (tem, 0)))))
! {
! if (! INTEGRAL_MODE_P (mode))
! break;
! tem = gen_rtx_fmt_e (GET_CODE (tem), mode, XEXP (tem, 0));
! }
else
tem = gen_lowpart_for_combine (mode, XEXP (tem, 0));
return tem;