[Bug target/50788] [4.7 Regression] ICE: in merge_overlapping_regs, at regrename.c:318 with -mavx -fpeel-loops -fstack-protector-all and __builtin_ia32_maskloadpd256

ubizjak at gmail dot com gcc-bugzilla@gcc.gnu.org
Sun Oct 23 13:06:00 GMT 2011


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



More information about the Gcc-bugs mailing list