On Fri, 17 May 2013, Hans-Peter Nilsson wrote:
From: Marc Glisse <marc.gli...@inria.fr>
Date: Tue, 14 May 2013 13:47:23 +0200
Here is what I tested during the night, I'll just rename the function.
I took the chance to remove an unnecessary alternative in TRUTH_XOR_EXPR.
Passes bootstrap+testsuite on x86_64-linux-gnu.
2013-05-14 Marc Glisse <marc.gli...@inria.fr>
gcc/
* fold-const.c (fold_negate_expr): Handle vectors.
(fold_truth_not_expr): Make it static.
(fold_invert_truth): New static function.
(invert_truthvalue_loc): Handle vectors. Do not call
fold_truth_not_expr directly.
(fold_unary_loc) <BIT_NOT_EXPR>: Handle comparisons.
<TRUTH_NOT_EXPR>: Do not cast to boolean.
(fold_comparison): Handle vector constants.
(fold_binary_loc) <TRUTH_XOR_EXPR>: Remove redundant code.
(fold_ternary_loc) <VEC_COND_EXPR>: Adapt more COND_EXPR optimizations.
* tree.h (fold_truth_not_expr): Remove declaration.
gcc/testsuite/
* g++.dg/ext/vector22.C: New testcase.
* gcc.dg/binop-xor3.c: Remove xfail.
Looks like the removed xfail caused regressions for about half
of all targets; there's now PR57313 opened for this.
Maybe an rtl test like BRANCH_COSTS or rtx_cost now matters in
the decision?
Yes, LOGICAL_OP_NON_SHORT_CIRCUIT seems to be it.
What is the proper thing to do here? If I add the generic xfail back,
we'll get xpass on some platforms, now we have fails on some platforms,
and listing the platforms where we want the transformation to happen is
just a pain. Shall I remove the testcase?
--
Marc Glisse