------- Comment #3 from krebbel at gcc dot gnu dot org 2010-04-07 11:46 -------
Created an attachment (id=20327)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=20327&action=view)
(delta) Reduced testcase
The S/390 movstr expander requires the target operand to be a
"register_operand". expand_movstr does not seem to respect this:
(define_expand "movstr"
[(set (reg:SI 0) (const_int 0))
(parallel
[(clobber (match_dup 3))
(set (match_operand:BLK 1 "memory_operand" "")
(match_operand:BLK 2 "memory_operand" ""))
(set (match_operand 0 "register_operand" "")
(unspec [(match_dup 1)
(match_dup 2)
(reg:SI 0)] UNSPEC_MVST))
(clobber (reg:CC CC_REGNUM))])]
...
With 4.4 the target operand is put into a register before expand_movstr is
invoked. I haven't looked into why that changed with 4.5 yet but from a first
glance I would say that this isn't a back-end problem.
--
krebbel at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Attachment #20301|0 |1
is obsolete| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43636