Commit 1a4c0446 by Jakub Jelinek Committed by Jakub Jelinek

re PR target/92908 (wrong code with -Og -fno-tree-fre -mavx512bw and vector compare)

	PR target/92908
	* simplify-rtx.c (simplify_relational_operation): Punt for vector
	cmp_mode and scalar mode, if simplify_relational_operation returned
	const_true_rtx.
	(simplify_const_relational_operation): Change VOID_mode in function
	comment to VOIDmode.

	* gcc.target/i386/avx512bw-pr92908.c: New test.

From-SVN: r279369
parent 814db0c1
2019-12-13 Jakub Jelinek <jakub@redhat.com>
PR target/92908
* simplify-rtx.c (simplify_relational_operation): Punt for vector
cmp_mode and scalar mode, if simplify_relational_operation returned
const_true_rtx.
(simplify_const_relational_operation): Change VOID_mode in function
comment to VOIDmode.
2019-12-13 Kewen Lin <linkw@gcc.gnu.org> 2019-12-13 Kewen Lin <linkw@gcc.gnu.org>
* config/rs6000/rs6000.c (adjust_vectorization_cost): New function. * config/rs6000/rs6000.c (adjust_vectorization_cost): New function.
...@@ -5037,6 +5037,15 @@ simplify_relational_operation (enum rtx_code code, machine_mode mode, ...@@ -5037,6 +5037,15 @@ simplify_relational_operation (enum rtx_code code, machine_mode mode,
return NULL_RTX; return NULL_RTX;
#endif #endif
} }
/* For vector comparison with scalar int result, it is unknown
if the target means here a comparison into an integral bitmask,
or comparison where all comparisons true mean const_true_rtx
whole result, or where any comparisons true mean const_true_rtx
whole result. For const0_rtx all the cases are the same. */
if (VECTOR_MODE_P (cmp_mode)
&& SCALAR_INT_MODE_P (mode)
&& tem == const_true_rtx)
return NULL_RTX;
return tem; return tem;
} }
...@@ -5383,7 +5392,7 @@ comparison_result (enum rtx_code code, int known_results) ...@@ -5383,7 +5392,7 @@ comparison_result (enum rtx_code code, int known_results)
} }
/* Check if the given comparison (done in the given MODE) is actually /* Check if the given comparison (done in the given MODE) is actually
a tautology or a contradiction. If the mode is VOID_mode, the a tautology or a contradiction. If the mode is VOIDmode, the
comparison is done in "infinite precision". If no simplification comparison is done in "infinite precision". If no simplification
is possible, this function returns zero. Otherwise, it returns is possible, this function returns zero. Otherwise, it returns
either const_true_rtx or const0_rtx. */ either const_true_rtx or const0_rtx. */
......
2019-12-13 Jakub Jelinek <jakub@redhat.com>
PR target/92908
* gcc.target/i386/avx512bw-pr92908.c: New test.
2019-12-13 Andrew Pinski <apinski@marvell.com> 2019-12-13 Andrew Pinski <apinski@marvell.com>
* gcc.c-torture/execute/pr86659-1.c: New test. * gcc.c-torture/execute/pr86659-1.c: New test.
......
/* PR target/92908 */
/* { dg-do run } */
/* { dg-options "-Og -fno-tree-fre -mavx512bw" } */
/* { dg-require-effective-target avx512bw } */
#define AVX512BW
#include "avx512f-helper.h"
typedef unsigned short V __attribute__ ((__vector_size__ (64)));
V v;
void
TEST (void)
{
int i;
v = (V) v == v;
for (i = 0; i < 32; i++)
if (v[i] != 0xffff)
abort ();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment