Patchwork Tune hoisting for ARM

login
register
mail settings
Submitter Maxim Kuvyrkov
Date July 17, 2010, 4:52 p.m.
Message ID <4C41DFB3.1090000@codesourcery.com>
Download mbox | patch
Permalink /patch/59143/
State New
Headers show

Comments

Maxim Kuvyrkov - July 17, 2010, 4:52 p.m.
The attached patch tunes code hoisting parameter gcse-unrestricted-cost 
for ARM.  It is provides a small (~0.3%), but measurable size reduction 
to use a bit lesser cost cutoff for ARM PIC.

Tuning was done on SPEC2K benchmarks.

OK to check in?

Thank you,
Richard Earnshaw - July 19, 2010, 8:09 a.m.
On Sat, 2010-07-17 at 20:52 +0400, Maxim Kuvyrkov wrote:
> The attached patch tunes code hoisting parameter gcse-unrestricted-cost 
> for ARM.  It is provides a small (~0.3%), but measurable size reduction 
> to use a bit lesser cost cutoff for ARM PIC.
> 
> Tuning was done on SPEC2K benchmarks.
> 
> OK to check in?

This is OK

R.

Patch

diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 9f00416..b5cc3ed 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -56,6 +56,7 @@ 
 #include "df.h"
 #include "intl.h"
 #include "libfuncs.h"
+#include "params.h"
 
 /* Forward definitions of types.  */
 typedef struct minipool_node    Mnode;
@@ -1872,6 +1873,14 @@  arm_override_options (void)
       flag_reorder_blocks = 1;
     }
 
+  if (!PARAM_SET_P (PARAM_GCSE_UNRESTRICTED_COST)
+      && flag_pic)
+    /* Hoisting PIC address calculations more aggressively provides a small,
+       but measurable, size reduction for PIC code.  Therefore, we decrease
+       the bar for unrestricted expression hoisting to the cost of PIC address
+       calculation, which is 2 instructions.  */
+    set_param_value ("gcse-unrestricted-cost", 2);
+
   /* Register global variables with the garbage collector.  */
   arm_add_gc_roots ();
 }
diff --git a/gcc/config/arm/t-arm b/gcc/config/arm/t-arm
index de2bbc4..4879211 100644
--- a/gcc/config/arm/t-arm
+++ b/gcc/config/arm/t-arm
@@ -45,6 +45,15 @@  $(srcdir)/config/arm/arm-tune.md: $(srcdir)/config/arm/gentune.sh \
 		$(srcdir)/config/arm/arm-cores.def > \
 		$(srcdir)/config/arm/arm-tune.md
 
+arm.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+  $(RTL_H) $(TREE_H) $(OBSTACK_H) $(REGS_H) hard-reg-set.h \
+  insn-config.h conditions.h output.h \
+  $(INSN_ATTR_H) $(FLAGS_H) reload.h $(FUNCTION_H) \
+  $(EXPR_H) $(OPTABS_H) toplev.h $(RECOG_H) $(CGRAPH_H) \
+  $(GGC_H) except.h $(C_PRAGMA_H) $(INTEGRATE_H) $(TM_P_H) \
+  $(TARGET_H) $(TARGET_DEF_H) debug.h langhooks.h $(DF_H) \
+  intl.h libfuncs.h $(PARAMS_H)
+
 arm-c.o: $(srcdir)/config/arm/arm-c.c $(CONFIG_H) $(SYSTEM_H) \
     coretypes.h $(TM_H) $(TREE_H) output.h $(C_COMMON_H)
 	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \