On Mon, Jan 09, 2017 at 07:32:27PM -0500, Michael Meissner wrote: > This patch fixes PR target/79004 by eliminating the optimization of avoiding > direct move if we are converting an 8/16-bit integer value from memory to IEEE > 128-bit floating point. > > I opened a new bug (PR target/79038) to address the underlying issue that the > IEEE 128-bit floating point integer conversions were written before small > integers were allowed in the traditional Altivec registers. This meant that > we > had to use UNSPEC and explicit temporaries to get the integers into the > appropriate registers. > > I have tested this bug by doing a bootstrap build and make check on a little > endian power8 system and using an assembler that knows about ISA 3.0 > instructions. I added a new test to verify the results. Can I check this > into > the trunk? This is not an issue on GCC 6.x.
Okay, thanks! Two comments: > +/* { dg-final { scan-assembler-not " bl __" } } */ > +/* { dg-final { scan-assembler "xscvdpqp" } } */ > +/* { dg-final { scan-assembler "xscvqpdp" } } */ This line always matches if ... > +/* { dg-final { scan-assembler "xscvqpdpo" } } */ ... this one does. I recommend \m \M . > +/* { dg-final { scan-assembler "xscvqpsdz" } } */ > +/* { dg-final { scan-assembler "xscvqpswz" } } */ > +/* { dg-final { scan-assembler "xscvsdqp" } } */ > +/* { dg-final { scan-assembler "xscvudqp" } } */ > +/* { dg-final { scan-assembler "lxsd" } } */ > +/* { dg-final { scan-assembler "lxsiwax" } } */ > +/* { dg-final { scan-assembler "lxsiwzx" } } */ > +/* { dg-final { scan-assembler "lxssp" } } */ > +/* { dg-final { scan-assembler "stxsd" } } */ > +/* { dg-final { scan-assembler "stxsiwx" } } */ > +/* { dg-final { scan-assembler "stxssp" } } */ There are many more than 14 instructions generated; maybe you want scan-assembler-times? Segher