http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50788

--- Comment #8 from Uros Bizjak <ubizjak at gmail dot com> 2011-10-23 13:05:43 
UTC ---
Looking a bit deeper into the problem - maskload pattern is simply wrong. There
is no dependency on the previous value in the register, vmaskmov insn puts zero
when value is not moved into the destination register.

So,

(define_insn "*avx_maskload<ssemodesuffix><avxsizesuffix>"
  [(set (match_operand:VF 0 "register_operand" "=x")
    (unspec:VF
      [(match_operand:<sseintvecmode> 1 "register_operand" "x")
       (match_operand:VF 2 "memory_operand" "m")]
      UNSPEC_MASKMOV))]
  "TARGET_AVX"
  "vmaskmov<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
  [(set_attr "type" "sselog1")
   (set_attr "prefix_extra" "1")
   (set_attr "prefix" "vex")
   (set_attr "mode" "<MODE>")])

Reply via email to