This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Il 05/12/2012 15:22, Marc Glisse ha scritto:+ + /* The x86 back-end uses VEC_CONCAT to set an element in a V2DF, but + VEC_MERGE for scalar operations that preserve the other elements + of a vector. */ + if (GET_CODE (trueop1) == VEC_SELECT + && GET_MODE (XEXP (trueop1, 0)) == mode + && XVECLEN (XEXP (trueop1, 1), 0) == 1 + && INTVAL (XVECEXP (XEXP (trueop1, 1), 0, 0)) == 1) + { + rtx newop0 = gen_rtx_fmt_e (VEC_DUPLICATE, mode, trueop0); + rtx newop1 = XEXP (trueop1, 0); + return gen_rtx_fmt_eee (VEC_MERGE, mode, newop0, newop1, + const1_rtx); + }
So this changes this:
(vec_concat:M R1:N (vec_select:N V2:M [1]))
to this
(vec_merge:M (vec_duplicate:M R1:N) V2:M [1])
I wonder if more patterns in i386.md should be canonicalized. Basically, the occurrences of gen_rtx_VEC_CONCAT should be changed to simplify_gen_binary, and the fallout fixed.
Otherwise you have patterns that will not match if someone does generate the vec_concat via simplify_gen_binary.
I don't know Uros' position, but re-reading this message: http://gcc.gnu.org/ml/gcc-patches/2012-12/msg00069.html it seems like he was indeed suggesting this.
-- Marc Glisse
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |