https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97184

            Bug ID: 97184
           Summary: Incorrect MOVDIRI and MOVDIR64B patterns
           Product: gcc
           Version: 8.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hjl.tools at gmail dot com
                CC: crazylht at gmail dot com, wwwhhhyyy333 at gmail dot com
  Target Milestone: ---
            Target: i386,x86-64

MOVDIRI and MOVDIR64B update memory.  But there is not SET operation:

;; MOVDIRI and MOVDIR64B

(define_insn "movdiri<mode>"
  [(unspec_volatile:SWI48 [(match_operand:SWI48 0 "memory_operand" "m")
                           (match_operand:SWI48 1 "register_operand" "r")]
                          UNSPECV_MOVDIRI)]
  "TARGET_MOVDIRI"
  "movdiri\t{%1, %0|%0, %1}"
  [(set_attr "type" "other")])

(define_insn "@movdir64b_<mode>"
  [(unspec_volatile:XI [(match_operand:P 0 "register_operand" "r")
                        (match_operand:XI 1 "memory_operand")]
                       UNSPECV_MOVDIR64B)]
  "TARGET_MOVDIR64B"
  "movdir64b\t{%1, %0|%0, %1}"
  [(set_attr "type" "other")])

Reply via email to