aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/tree-stdarg.c7
-rw-r--r--gcc/tree-streamer.c9
3 files changed, 23 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f36328e..ff6df3d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2015-02-20 Bernd Schmidt <bernds@codesourcery.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ * tree-streamer.c (preload_common_nodes): Don't preload
+ TI_VA_LIST* for offloading.
+ * tree-stdarg.c (pass_stdarg::gate): Disable for ACCEL_COMPILER
+ in_lto_p.
+
2015-02-19 John David Anglin <danlgin@gcc.gnu.org>
* config/pa/pa.c (pa_emit_move_sequence): Always force
diff --git a/gcc/tree-stdarg.c b/gcc/tree-stdarg.c
index 17d51a2..0c70790 100644
--- a/gcc/tree-stdarg.c
+++ b/gcc/tree-stdarg.c
@@ -705,6 +705,13 @@ public:
virtual bool gate (function *fun)
{
return (flag_stdarg_opt
+#ifdef ACCEL_COMPILER
+ /* Disable for GCC5 in the offloading compilers, as
+ va_list and gpr/fpr counter fields are not merged.
+ In GCC6 when stdarg is lowered late this shouldn't be
+ an issue. */
+ && !in_lto_p
+#endif
/* This optimization is only for stdarg functions. */
&& fun->stdarg != 0);
}
diff --git a/gcc/tree-streamer.c b/gcc/tree-streamer.c
index 8f597aa..7b35358 100644
--- a/gcc/tree-streamer.c
+++ b/gcc/tree-streamer.c
@@ -342,7 +342,14 @@ preload_common_nodes (struct streamer_tree_cache_d *cache)
&& i != TI_TARGET_OPTION_DEFAULT
&& i != TI_TARGET_OPTION_CURRENT
&& i != TI_CURRENT_TARGET_PRAGMA
- && i != TI_CURRENT_OPTIMIZE_PRAGMA)
+ && i != TI_CURRENT_OPTIMIZE_PRAGMA
+ /* Skip va_list* related nodes if offloading. For native LTO
+ we want them to be merged for the stdarg pass, for offloading
+ they might not be identical between host and offloading target. */
+ && (!lto_stream_offload_p
+ || (i != TI_VA_LIST_TYPE
+ && i != TI_VA_LIST_GPR_COUNTER_FIELD
+ && i != TI_VA_LIST_FPR_COUNTER_FIELD)))
record_common_node (cache, global_trees[i]);
}