------- Comment #4 from rguenth at gcc dot gnu dot org 2010-02-23 10:42 ------- (In reply to comment #3) > Subject: Re: vld4 and vst4 intrinsics are not handled > correctly > > On Fri, Feb 19, 2010 at 11:08:18AM -0000, rguenth at gcc dot gnu dot org > wrote: > > Likely because of the union in > > > > __extension__ static __inline void __attribute__ ((__always_inline__)) > > vst4_u8 (uint8_t * __a, uint8x8x4_t __b) > > { > > union { uint8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; > > __builtin_neon_vst4v8qi ((__builtin_neon_qi *) __a, __bu.__o); > > } > > > > which does copy-initialization of __bu. > > Right. FYI, my best idea to date of how to fix this is to convert the > multiple-vector types (like uint8x8x4_t) to builtin types. At that > point we can use the neon_reinterpret patterns to do the necessary > type punning without involving __builtin_neon_oi and the union.
Ideally we'd be able to get rid of the extra temporary at the tree level. Value-numbering can in theory do that, but I suppose the testcase at hand is obfuscated enough to not do it. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43118