diff options
author | Richard Biener <rguenther@suse.de> | 2020-09-23 15:03:31 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2020-09-23 15:56:32 +0200 |
commit | 3457dae55f72bd4ac0f346bbebb02d1613ac4b5c (patch) | |
tree | c361b2e22d8a1f2ebf9e29b57d31675d0628ceee /gcc/gimple-isel.cc | |
parent | 67c935c8232f6fe96a4be2dc27287b7ace839c67 (diff) | |
download | gcc-3457dae55f72bd4ac0f346bbebb02d1613ac4b5c.zip gcc-3457dae55f72bd4ac0f346bbebb02d1613ac4b5c.tar.gz gcc-3457dae55f72bd4ac0f346bbebb02d1613ac4b5c.tar.bz2 |
middle-end/96453 - relax gimple_expand_vec_cond_expr
This relaxes the condition under which we also try NE_EXPR
for a fake generated compare in addition to LT_EXPR given
the fact the verification ICEd when it failed but obviously
was only implemented for constants. Thus the patch removes
the verification and the restriction to constant operands.
2020-09-23 Richard Biener <rguenther@suse.de>
PR middle-end/96453
* gimple-isel.cc (gimple_expand_vec_cond_expr): Remove
LT_EXPR -> NE_EXPR verification and also apply it for
non-constant masks.
* gcc.dg/pr96453.c: New testcase.
Diffstat (limited to 'gcc/gimple-isel.cc')
-rw-r--r-- | gcc/gimple-isel.cc | 15 |
1 files changed, 2 insertions, 13 deletions
diff --git a/gcc/gimple-isel.cc b/gcc/gimple-isel.cc index b330cf4..9792263 100644 --- a/gcc/gimple-isel.cc +++ b/gcc/gimple-isel.cc @@ -138,22 +138,11 @@ gimple_expand_vec_cond_expr (gimple_stmt_iterator *gsi, if (icode == CODE_FOR_nothing) { if (tcode == LT_EXPR - && op0a == op0 - && TREE_CODE (op0) == VECTOR_CST) + && op0a == op0) { /* A VEC_COND_EXPR condition could be folded from EQ_EXPR/NE_EXPR into a constant when only get_vcond_eq_icode is supported. - Verify < 0 and != 0 behave the same and change it to NE_EXPR. */ - unsigned HOST_WIDE_INT nelts; - if (!VECTOR_CST_NELTS (op0).is_constant (&nelts)) - { - if (VECTOR_CST_STEPPED_P (op0)) - gcc_unreachable (); - nelts = vector_cst_encoded_nelts (op0); - } - for (unsigned int i = 0; i < nelts; ++i) - if (tree_int_cst_sgn (vector_cst_elt (op0, i)) == 1) - gcc_unreachable (); + Try changing it to NE_EXPR. */ tcode = NE_EXPR; } if (tcode == EQ_EXPR || tcode == NE_EXPR) |