[committed] TILE-Gx: fix pic code generation issue.

Walter Lee walt@tilera.com
Sat Jan 25 20:49:00 GMT 2014


This patch fixes a pic code generation issue on tilegx.	 We use
crtl->uses_pic_offset_table to decide whether the pic registers are
used in the function.  This value is updated in tile-specific code
generation routines.  However, these routines may be called by the
loop optimizer to get the cost of computing an address.	 So we reset
this value immediately before we begin actual code generation.

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index baf3bd6..9306621 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2014-01-25  Walter Lee  <walt@tilera.com>
+
+	* config/tilegx/tilegx.c (tilegx_expand_to_rtl_hook): New.
+	(TARGET_EXPAND_TO_RTL_HOOK): Define.
+
 2014-01-24  James Greenhalgh  <james.greenhalgh@arm.com>
 
 	* common/config/aarch64/aarch64-common.c
diff --git a/gcc/config/tilegx/tilegx.c b/gcc/config/tilegx/tilegx.c
index 654f836..85a46f7 100644
--- a/gcc/config/tilegx/tilegx.c
+++ b/gcc/config/tilegx/tilegx.c
@@ -719,6 +719,16 @@ tilegx_init_expanders (void)
 }
 
 
+/* Implement TARGET_EXPAND_TO_RTL_HOOK.  */
+static void
+tilegx_expand_to_rtl_hook (void)
+{
+  /* Exclude earlier sets of crtl->uses_pic_offset_table, because we
+     only care about uses actually emitted.  */
+  crtl->uses_pic_offset_table = 0;
+}
+
+
 /* Implement TARGET_SHIFT_TRUNCATION_MASK.  DImode shifts use the mode
    matching insns and therefore guarantee that the shift count is
    modulo 64.  SImode shifts sometimes use the 64 bit version so do
@@ -5515,6 +5525,9 @@ tilegx_file_end (void)
 #undef  TARGET_RTX_COSTS
 #define TARGET_RTX_COSTS tilegx_rtx_costs
 
+#undef  TARGET_EXPAND_TO_RTL_HOOK
+#define TARGET_EXPAND_TO_RTL_HOOK tilegx_expand_to_rtl_hook
+
 #undef  TARGET_SHIFT_TRUNCATION_MASK
 #define TARGET_SHIFT_TRUNCATION_MASK tilegx_shift_truncation_mask
 



More information about the Gcc-patches mailing list