This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Further i?86 vector permutation fixes
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Richard Henderson <rth at redhat dot com>
- Cc: Uros Bizjak <ubizjak at gmail dot com>, gcc-patches at gcc dot gnu dot org
- Date: Wed, 19 Oct 2011 22:56:33 +0200
- Subject: Re: [PATCH] Further i?86 vector permutation fixes
- References: <20111019192542.GF2210@tyan-ft48-01.lab.bos.redhat.com> <4E9F34C9.70501@redhat.com>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Wed, Oct 19, 2011 at 01:36:25PM -0700, Richard Henderson wrote:
> Although I think a good followup would be to fix
> this so that we don't need a copy to another register.
> That could be done by adding a d.one_operand field, and
> using that test instead of explicit equality everywhere.
Perhaps.
BTW, I've recently noticed that CSE isn't able to CSE when
SET_DEST is a SUBREG, even when it is same size SUBREG. Apparently
there are hundreds of places in at least the i386 backend that
do emit_insn (gen_* (gen_lowpart (V???mode, something), ...));
Some of them could be changed without big difficulties
(if something is used in the same routine, just create the pseudo
with different mode and use gen_lowpart on the use side instead),
but there are many places that use say gen_lowpart (V???mode, target)
on the LHS.
Should CSE be taught to handle this, or should CSE early on
replace these (set (subreg:M (reg:N X) 0) ...) with
(set (reg:M Y) ...)
(set (reg:N X) (subreg:N (reg:M Y) 0))
so that CSE etc. can optimize it, something else?
Jakub