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>")])