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

Reply via email to