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>
* config/rs6000/rs6000.c (adjust_vectorization_cost): New function.
......@@ -5037,6 +5037,15 @@ simplify_relational_operation (enum rtx_code code, machine_mode mode,
return NULL_RTX;
#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;
}
......@@ -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
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
is possible, this function returns zero. Otherwise, it returns
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>
* 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