Sorry, here's the correct version, which uses initialized instead of inited in one of the variable names. Kyrill 2015-07-21 Kyrylo Tkachov * config/aarch64/aarch64.c (aarch64_option_valid_attribute_p): Initialize simd builtins if TARGET_SIMD. * config/aarch64/aarch64-builtins.c (aarch64_init_simd_builtins): Make sure that the builtins are initialized only once no matter how many times the function is called. (aarch64_init_builtins): Unconditionally initialize crc builtins. (aarch64_relayout_simd_param): New function. (aarch64_simd_expand_args): Use above during argument expansion. * config/aarch64/aarch64-c.c (aarch64_pragma_target_parse): Initialize simd builtins if TARGET_SIMD. * config/aarch64/aarch64-protos.h (aarch64_init_simd_builtins): New prototype. (aarch64_relayout_simd_types): Likewise. 2015-07-21 Kyrylo Tkachov * gcc.target/aarch64/target-attr-crypto-ice-1.c: New test. On 16/07/15 16:21, Kyrill Tkachov wrote: > Hi all, > > This patch fixes an ICE that I encountered while testing the series. > The testcase in the patch ICEs during builtin expansion because the testcase > is compiled with +nofp which means the builtin SIMD types are laid out > according to the nofp rules, but later when a function tagged with +simd > tries to use them assuming they are laid out for SIMD, the ICE occurs. > > I've struggled for some time to find a good fix for that. > This is the best I could come up with. During expansion time we take > the decl of the thing being passed to the builtin function and re-lay it. > The majority (all?) of uses of these builtins are only within the intrinsics in arm_neon.h anyway. > This fixes the ICE and doesn't have a negative impact on compile time (not that I could measure, anyway) > > This patch also initializes the crc intrinsics unconditionally to handle the case where a user may compile > a file with +nocrc and then have a function with +crc using an intrinsic. > > Bootstrapped and tested on aarch64. > > Ok for trunk? > > Thanks, > Kyrill > > 2015-07-16 Kyrylo Tkachov > > * config/aarch64/aarch64.c (aarch64_option_valid_attribute_p): > Initialize simd builtins if TARGET_SIMD. > * config/aarch64/aarch64-builtins.c (aarch64_init_simd_builtins): > Make sure that the builtins are initialized only once no matter how > many times the function is called. > (aarch64_init_builtins): Unconditionally initialize crc builtins. > (aarch64_relayout_simd_param): New function. > (aarch64_simd_expand_args): Use above during argument expansion. > * config/aarch64/aarch64-c.c (aarch64_pragma_target_parse): Initialize > simd builtins if TARGET_SIMD. > * config/aarch64/aarch64-protos.h (aarch64_init_simd_builtins): New > prototype. > (aarch64_relayout_simd_types): Likewise. > > 2015-07-16 Kyrylo Tkachov > > * gcc.target/aarch64/target-attr-crypto-ice-1.c: New test.