This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/28675] [4.1/4.2/4.3 regression] ICE in extract_insn, at recog.c:2084 (unrecognizable insn) [arm]
- From: "pbrook at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 30 Jan 2007 18:06:41 -0000
- Subject: [Bug target/28675] [4.1/4.2/4.3 regression] ICE in extract_insn, at recog.c:2084 (unrecognizable insn) [arm]
- References: <bug-28675-13069@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #12 from pbrook at gcc dot gnu dot org 2007-01-30 18:06 -------
Before reload the problematic instruction is:
(set (mem:HI (something))
(subreg:HI (reg:SI 177)))
Reload decides to reload the second operand into a register.
In find_reloads_subreg_address, reg_equiv_memory_loc tells us that reg 117
is equivalent to
(mem:SI (plus:SI (mult:SI (reg:SI r1) (const_int 16))
(reg:SI r6)))
This is a valid SImode address, but not a valid HImode address.
we change the mem:SI to mem:HI, then call find_reloads_address to fixup the
result. However the comment above find_reloads_address says:
Note that there is no verification that the address will be valid after
this routine does its work. Instead, we rely on the fact that the address
was valid when reload started. So we need only undo things that reload
could have broken. These are wrong register types, pseudos not allocated
to a hard register, and frame pointer elimination. */
No mention of having broken the address by changing the mode of the mem.
The new HImode mem passes through find_reloads_address unmolested, causing
an ICE later when we try to assign it to the reload reg.
My guess would be that we need to be calling something other than
find_reloads_address after replacing the subreg with the mem, but don't know
reload well enough to say what.
--
pbrook at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|pbrook at gcc dot gnu dot |unassigned at gcc dot gnu
|org |dot org
Status|ASSIGNED |NEW
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28675