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.

Attachment: arm-artificial.patch.xz
Description: arm-artificial.patch.xz

Reply via email to