On Tue, Sep 20, 2016 at 10:09:14AM +0100, James Greenhalgh wrote:
> On Tue, Sep 13, 2016 at 01:15:39PM +0100, Tamar Christina wrote:
>>
> Thanks, I applied this following your script above, and committed it as
> revision 240256, after tweaking one part of the script to replace a double
> space after __attribute__ introduced by the second sed command.

This patch caused a few new failures for AArch64:

  Failures:
        gcc.target/aarch64/vect_int32x2x4_1.c
        gcc.target/aarch64/vdup_lane_2.c
        gcc.target/aarch64/vect_combine_zeroes_1.c
        
  Bisected to: 


  Author: jgreenhalgh <jgreenhalgh@138bc75d-0d04-0410-961f-82ee72b054a4>
  Date:   Tue Sep 20 09:06:13 2016 +0000

    [GCC][PATCH] Add __artificial__ attribute to Aarch64 NEON intrinsics
    
    Committed on behalf of Tamar Christina <tamar.christ...@arm.com>.
    
    gcc/
    
        * config/aarch64/arm_neon.h: Add gnu_inline and artificial
        attributes to all inlined functions and make them extern.
    
    
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240256 
138bc75d-0d04-0410-961f-82ee72b054a4

Looking in to it, I see that the following intrinsics:

  vst2_s64
  vst2_u64
  vst2_f64
  vst2_s8
  vst3_s64
  vst3_u64
  vst3_f64
  vst3_s8
  vst4_s64
  vst4_u64
  vst4_f64
  vst4_s8

Are getting inlined, but their body is output in the assembly.

Looking in arm_neon.h, the reason seems clear:

  __extension__ extern __inline void
  vst2_s64 (int64_t * __a, int64x1x2_t val)
  {

These intrinsics have always been missing
__attribute__ ((__always_inline__)) and consequently were not updated by your
script to have __gnu_inline__, and now they are marked extern - they miss GNU
Inline semantics and keep their body after inlining.

A patch adding the correct attributes to these intrisnics is preapproved.

Thanks,
James

Reply via email to