This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]