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] |
On Thu, May 19, 2016 at 10:33:41AM -0500, Segher Boessenkool wrote: > On Thu, May 19, 2016 at 10:53:41AM -0400, Michael Meissner wrote: > > GCC 6.1 added support for the XXPERM instruction for the PowerPC ISA 3.0. The > > XXPERM instruction is essentially a 4 operand instruction, with only 3 operands > > in the instruction (the target register overlaps with the first input > > register). The Power9 hardware has fusion support where if the instruction > > that precedes the XXPERM is a XXLOR move instruction to set the first input > > argument, it is fused with the XXPERM. I added code to support this fusion. > > > > Unfortunately, in running the testsuite on the power9 simulator, we discovered > > that the test gcc.c-torture/execute/pr56866.c would fail because the fusion > > alternatives confused the register allocator and/or the passes after the > > register allocator. This patch removes the explicit fusion support from > > XXPERM. > > Okay. Please keep the PR open until that problem is fixed. It also > shouldn't be "target" category, if the problem is RA. > > > In addition, ISA 3.0 added XXPERMR and VPERMR instructions for little endian > > support where the permute vector reverses the bytes. This patch adds support > > for XXPERMR/VPERMR. > > Please send that as a separate patch, it has nothing to do with the PR. > > > + x = gen_rtx_UNSPEC (mode, > > + gen_rtvec (3, target, reg, > > Trailing space. > > > + if (TARGET_P9_VECTOR) > > + { > > + unspec = gen_rtx_UNSPEC (mode, gen_rtvec (3, op0, op1, sel), > > And another. > > > + The VNAND is preferred for future fusion opportunities. */ > > + notx = gen_rtx_NOT (V16QImode, sel); > > + iorx = (TARGET_P8_VECTOR > > + ? gen_rtx_IOR (V16QImode, notx, notx) > > + : gen_rtx_AND (V16QImode, notx, notx)); > > + emit_insn (gen_rtx_SET (norreg, iorx)); > > + > > Some more. > > > +/* { dg-final { scan-assembler "vpermr\|xxpermr" } } */ > > Tab in the middle of the line. Here are the patches for xxpermr/vpermr support that are broken out from fixing the xxperm fusion bug. I have built a compiler with these patches (and the xxperm patches) and it bootstraps and does not cause a regression. Are they ok to add to GCC 7 and eventually to GCC 6.2? [gcc] 2016-05-23 Michael Meissner <meissner@linux.vnet.ibm.com> Kelvin Nilsen <kelvin@gcc.gnu.org> * config/rs6000/rs6000.c (rs6000_expand_vector_set): Generate vpermr/xxpermr on ISA 3.0. (altivec_expand_vec_perm_le): Likewise. * config/rs6000/altivec.md (UNSPEC_VPERMR): New unspec. (altivec_vpermr_<mode>_internal): Add VPERMR/XXPERMR support for ISA 3.0. [gcc/testsuite] 2016-05-23 Michael Meissner <meissner@linux.vnet.ibm.com> Kelvin Nilsen <kelvin@gcc.gnu.org> * gcc.target/powerpc/p9-vpermr.c: New test for ISA 3.0 vpermr support. -- Michael Meissner, IBM IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA email: meissner@linux.vnet.ibm.com, phone: +1 (978) 899-4797
Attachment:
gcc-stage7.xxperm003b
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |