Hi All, This patch turns off the usage of section anchors for declarations that do not fit in a single anchor range. A large enough object will use the full anchor range and also force the use of another anchor pointer.
By not using an anchor for large objects more globals can share the same anchor. The patch has been benchmarked using Spec2000 and the impact on performance is negligible, however some files using large arrays showed a appreciable reduction in amount of instructions in the assembly file. Regression tests were run on aarch64-none-elf and no regressions. Ok for trunk? 2016-08-16 Tamar Christina <tamar.christ...@arm.com> Ramana Radhakrishnan <ramana.radhakrish...@arm.com> * gcc/varasm.c (default_use_anchors_for_symbol_p): Reject too large decls. Thanks, Tamar
:100644 100644 e747d2c... 00a9b30... M gcc/varasm.c diff --git a/gcc/varasm.c b/gcc/varasm.c index e747d2c..00a9b30 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -6793,6 +6793,15 @@ default_use_anchors_for_symbol_p (const_rtx symbol) sections that should be marked as small in the section directive. */ if (targetm.in_small_data_p (decl)) return false; + + /* Don't use section anchors for decls that won't fit inside a single + anchor range to reduce the amount of instructions require to refer + to the entire declaration. */ + if (decl && DECL_SIZE (decl) + && tree_to_shwi (DECL_SIZE (decl)) + >= (targetm.max_anchor_offset * BITS_PER_UNIT)) + return false; + } return true; }