This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[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
- From: "ubizjak at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sun, 23 Oct 2011 13:05:43 +0000
- Subject: [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
- Auto-submitted: auto-generated
- References: <bug-50788-4@http.gcc.gnu.org/bugzilla/>
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>")])