Hi all, This patch adds the __artificial__ and __gnu_inline__ attributes to the intrinsics in arm_neon.h so that costs are associated to the user function during profiling and during debugging the intrinsics are hidden in trace.
A similar patch was already applied to Aarch64. The artificial attribute does not affect code generation. The functions are also changed from static to being extern in order for the __gnu_inline__ function to not treat the intrinsics as standalone functions. No new tests for this since it would require a gdb test but regression tests on arm-none-linux-gnueabi was performed. The attribute was added with the following bash script: #!/bin/bash # first apply to the ones in #define blocks and add extra \ at the end sed -i -r 's/(__inline.+)(__attribute__\s*)\(\((.+)\)\)\s*\\/\1\\\n\2 \(\(\3, __gnu_inline__,__artificial__\)\) \\/m' \ gcc/config/arm/arm_neon.h # Then write all normal functions sed -i -r 's/(__inline.+)(__attribute__\s*)\(\((.+)\)\)/\1\n\2 \(\(\3, __gnu_inline__, __artificial__\)\)/m' \ gcc/config/arm/arm_neon.h # Then correct any trailing whitespaces we might have introduced sed -i 's/[ \t]*$//' \ gcc/config/arm/arm_neon.h # And then finish up by correcting some attribute values which don't fit the patterns above. sed -i -r 's/(__attribute__\s+)\(\((__always_inline__)\)\)\s+\\/\1\(\(\2, __gnu_inline__, __artificial__\)\) \\/m' \ gcc/config/arm/arm_neon.h # Replace static definitions with extern sed -i -r 's/(__extension__\s+)static(.+)/\1extern\2/m' \ gcc/config/arm/arm_neon.h Ok for trunk? Thanks, Tamar gcc/ 2017-01-10 Tamar Christina <tamar.christ...@arm.com> * config/arm/arm_neon.h: Add __artificial__ and gnu_inline to all inlined functions, change static to extern.
arm-artificial.patch.xz
Description: arm-artificial.patch.xz