This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/43399] [4.5 Regression] bootstrap failure in stage1
- From: "jakub at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 18 Mar 2010 07:16:29 -0000
- Subject: [Bug target/43399] [4.5 Regression] bootstrap failure in stage1
- References: <bug-43399-18483@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #7 from jakub at gcc dot gnu dot org 2010-03-18 07:16 -------
BTW, if the PRE_MODIFY representation doesn't work well, I'd say just using a
PARALLEL with what the insn really does and checking that in the match_parallel
predicate probably wouldn't clash with anything else. If it would, you'd need
to insert one UNSPEC somewhere.
The comments say that currently the pattern looks like:
(parallel [
(set (mem:BLK (pre_dec:BLK (reg:SI sp)))
(unspec:BLK [(reg:SI r4)] UNSPEC_PUSH_MULT))
(use (reg:SI 11 fp))
(use (reg:SI 12 ip))
(use (reg:SI 14 lr))
(use (reg:SI 15 pc))
])
with the REG_FRAME_RELATED_EXPR:
(sequence [
(set (reg:SI sp) (plus:SI (reg:SI sp) (const_int -20)))
(set (mem:SI (reg:SI sp)) (reg:SI r4))
(set (mem:SI (plus:SI (reg:SI sp) (const_int 4))) (reg:SI fp))
(set (mem:SI (plus:SI (reg:SI sp) (const_int 8))) (reg:SI ip))
(set (mem:SI (plus:SI (reg:SI sp) (const_int 12))) (reg:SI lr))
])
So, would a parallel like:
(parallel [
(set (mem:SI (plus:SI (reg:SI sp) (const_int -20))) (reg:SI r4))
(set (mem:SI (plus:SI (reg:SI sp) (const_int -16))) (reg:SI fp))
(set (mem:SI (plus:SI (reg:SI sp) (const_int -12))) (reg:SI ip))
(set (mem:SI (plus:SI (reg:SI sp) (const_int -8))) (reg:SI lr))
(set (mem:SI (plus:SI (reg:SI sp) (const_int -4))) (reg:SI pc))
(set (reg:SI sp) (plus:SI (reg:SI sp) (const_int -20)))
])
be unique? match_parallel would verify the form (that the first sp offset
matches the negative stack adjustment, that it is multiple of reg size, that
the
last adjustment is -word size, that the offsets are consecutive etc.
Alternatively surround the first set's RHS reg into UNSPEC.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43399