This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [rtl, i386] vec_merge simplification
- From: Eric Botcazou <ebotcazou at adacore dot com>
- To: Marc Glisse <marc dot glisse at inria dot fr>
- Cc: gcc-patches at gcc dot gnu dot org, ubizjak at gmail dot com
- Date: Tue, 02 Apr 2013 09:34:43 +0200
- Subject: Re: [rtl, i386] vec_merge simplification
- References: <alpine dot DEB dot 2 dot 02 dot 1303170103230 dot 12359 at stedding dot saclay dot inria dot fr> <8694562 dot qGXxdu6rGm at polaris> <alpine dot DEB dot 2 dot 02 dot 1303301513400 dot 10575 at stedding dot saclay dot inria dot fr>
> Thanks, here is a version taking into account all your comments, and which
> still passes bootstrap+testsuite on x86_64-linux-gnu. I am not completely
> sure if there is a point checking !side_effects_p (op1) after rtx_equal_p
> (op0, op1), but I am still doing it as it seems safe.
It's also done in other cases (IOR, XOR, AND, etc) where we return the first
operand after having found out that the second operand is equal to it. If the
semantics of VEC_MERGE is to evaluate its operands, then they always need to
be evaluated, whatever the result.
> gcc/
> * simplify-rtx.c (simplify_binary_operation_1) <VEC_SELECT>:
> Handle VEC_MERGE.
> (simplify_ternary_operation) <VEC_MERGE>: Use unsigned HOST_WIDE_INT
> for masks. Test for side effects. Handle nested VEC_MERGE. Handle
> equal arguments.
OK for mainline, thanks.
--
Eric Botcazou