------- 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