re PR rtl-optimization/79901 (ICE in prepare_cmp_insn, at optabs.c:3904)

PR rtl-optimization/79901
	* config/i386/sse.md (*avx512bw_<code><mode>3<mask_name>): Renamed to
	...
	(*avx512f_<code><mode>3<mask_name>): ... this.
	(<code><mode>3 with maxmin code iterator): Use VI8_AVX2_AVX512F
	iterator instead of VI8_AVX2_AVX512BW.

	* gcc.target/i386/pr79901.c: New test.

From-SVN: r245947
This commit is contained in:
Jakub Jelinek 2017-03-07 09:11:30 +01:00 committed by Jakub Jelinek
parent cd5c0aeeae
commit 760f82dbb7
4 changed files with 37 additions and 5 deletions

View File

@ -1,5 +1,12 @@
2017-03-07 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/79901
* config/i386/sse.md (*avx512bw_<code><mode>3<mask_name>): Renamed to
...
(*avx512f_<code><mode>3<mask_name>): ... this.
(<code><mode>3 with maxmin code iterator): Use VI8_AVX2_AVX512F
iterator instead of VI8_AVX2_AVX512BW.
PR rtl-optimization/79901
* expr.c (expand_expr_real_2): For vector MIN/MAX, if there is no
min/max expander, expand it using expand_vec_cond_expr.

View File

@ -10841,7 +10841,7 @@
"TARGET_AVX512F"
"ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
(define_insn "*avx512bw_<code><mode>3<mask_name>"
(define_insn "*avx512f_<code><mode>3<mask_name>"
[(set (match_operand:VI48_AVX512VL 0 "register_operand" "=v")
(maxmin:VI48_AVX512VL
(match_operand:VI48_AVX512VL 1 "nonimmediate_operand" "%v")
@ -10865,10 +10865,10 @@
(set_attr "mode" "<sseinsnmode>")])
(define_expand "<code><mode>3"
[(set (match_operand:VI8_AVX2_AVX512BW 0 "register_operand")
(maxmin:VI8_AVX2_AVX512BW
(match_operand:VI8_AVX2_AVX512BW 1 "register_operand")
(match_operand:VI8_AVX2_AVX512BW 2 "register_operand")))]
[(set (match_operand:VI8_AVX2_AVX512F 0 "register_operand")
(maxmin:VI8_AVX2_AVX512F
(match_operand:VI8_AVX2_AVX512F 1 "register_operand")
(match_operand:VI8_AVX2_AVX512F 2 "register_operand")))]
"TARGET_SSE4_2"
{
if (TARGET_AVX512F

View File

@ -1,5 +1,8 @@
2017-03-07 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/79901
* gcc.target/i386/pr79901.c: New test.
PR sanitizer/79897
* c-c++-common/ubsan/pr79897.c: New test.

View File

@ -0,0 +1,22 @@
/* PR rtl-optimization/79901 */
/* { dg-do compile } */
/* { dg-options "-O3 -mavx512f -fno-ssa-phiopt" } */
unsigned int
foo (const unsigned long long x)
{
if (x < 0)
return 0;
else if ( x > ~0U)
return ~0U;
else
return (unsigned int) x;
}
void
bar (unsigned x, unsigned int *y, unsigned int z)
{
unsigned i;
for (i = 0; i < x; i++)
y[i] = foo (y[i] * (unsigned long long) z);
}