This is the mail archive of the
mailing list for the GCC project.
RE: [PATCH,H8300] Fix ICE due to insv and extzv patterns
- From: "Naveen H.S." <naveen dot hs at kpitcummins dot com>
- To: "Jeff Law" <law at redhat dot com>
- Cc: <gcc-patches at gcc dot gnu dot org>, "Prafulla Thakare" <Prafulla dot Thakare at kpitcummins dot com>
- Date: Mon, 10 Nov 2008 16:55:05 +0530
- Subject: RE: [PATCH,H8300] Fix ICE due to insv and extzv patterns
>> There's nothing which would prevent the same problem from occurring
>> with the original H8 port
Yes, this seems to be a generic problem in H8 target. However, the
original H8 port does not seem to generate the RTL patterns for insv
and extzv expanders. Hence, it does not result in ICE.
H8SX is an advanced port in H8 target and generates the most optimized
code. So register and memory operands are allowed only in H8SX target
for insv and extzv expanders in their "loc" field unlike the original
H8 port which allows only register operands. If memory operands are
used in the "loc" field of H8SX target, it would generate more
optimised code as it reduces the redundant instructions of loading and
storing the values between register and memory. Hence, the patch allows
only memory operands in the "loc" field of H8SX target.
>> you haven't described the conditions leading to the abort in enough
>> detail for me to understand precisely why you're getting an ICE.
The error generated while compiling the testcase was "internal compiler
error: in gen_rtx_SUBREG, at emit-rtl.c". On further investigation, it
led to the following line:-
gcc_assert (validate_subreg (mode, GET_MODE (reg), reg, offset));
Hence, it was assumed that the error was due to generating subreg and
only memory operands were allowed in the "loc" field of insv and extzv
expanders for H8SX.
KPIT Cummins Infosystems Ltd,