Commit 1b34e6e2 by Bernd Schmidt Committed by Jakub Jelinek

re PR middle-end/64412 (ICE in offload compiler: in extract_insn, at recog.c:2327)

	PR middle-end/64412
	* lto-streamer.h (lto_stream_offload_p): New declaration.
	* lto-streamer.c (lto_stream_offload_p): New variable.
	* cgraphunit.c (ipa_passes): Set lto_stream_offload_p
	at the same time as section_name_prefix.
	* lto-streamer-out.c (hash_tree): Don't hash TREE_TARGET_OPTION
	if lto_stream_offload_p.
	* tree-streamer-out.c (streamer_pack_tree_bitfields): Don't
	stream TREE_TARGET_OPTION if lto_stream_offload_p.
	(write_ts_function_decl_tree_pointers): Don't
	stream DECL_FUNCTION_SPECIFIC_TARGET if lto_stream_offload_p.
	* tree-streamer-in.c (unpack_value_fields): Don't stream
	TREE_TARGET_OPTION in if ACCEL_COMPILER.
	(lto_input_ts_function_decl_tree_pointers): Don't stream
	DECL_FUNCTION_SPECIFIC_TARGET in if ACCEL_COMPILER.
	* lto-opts.c (lto_write_options): Use lto_stream_offload_p
	instead of section_name_prefix string comparisons.
lto/
	* lto.c (read_cgraph_and_symbols): Set lto_stream_offload_p
	if ACCEL_COMPILER.

Co-Authored-By: Jakub Jelinek <jakub@redhat.com>

From-SVN: r219410
parent 000c70a7
2015-01-09 Bernd Schmidt <bernds@codesourcery.com>
Jakub Jelinek <jakub@redhat.com>
PR middle-end/64412
* lto-streamer.h (lto_stream_offload_p): New declaration.
* lto-streamer.c (lto_stream_offload_p): New variable.
* cgraphunit.c (ipa_passes): Set lto_stream_offload_p
at the same time as section_name_prefix.
* lto-streamer-out.c (hash_tree): Don't hash TREE_TARGET_OPTION
if lto_stream_offload_p.
* tree-streamer-out.c (streamer_pack_tree_bitfields): Don't
stream TREE_TARGET_OPTION if lto_stream_offload_p.
(write_ts_function_decl_tree_pointers): Don't
stream DECL_FUNCTION_SPECIFIC_TARGET if lto_stream_offload_p.
* tree-streamer-in.c (unpack_value_fields): Don't stream
TREE_TARGET_OPTION in if ACCEL_COMPILER.
(lto_input_ts_function_decl_tree_pointers): Don't stream
DECL_FUNCTION_SPECIFIC_TARGET in if ACCEL_COMPILER.
* lto-opts.c (lto_write_options): Use lto_stream_offload_p
instead of section_name_prefix string comparisons.
2015-01-09 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/64536
......
......@@ -2114,11 +2114,14 @@ ipa_passes (void)
if (g->have_offload)
{
section_name_prefix = OFFLOAD_SECTION_NAME_PREFIX;
lto_stream_offload_p = true;
ipa_write_summaries (true);
lto_stream_offload_p = false;
}
if (flag_lto)
{
section_name_prefix = LTO_SECTION_NAME_PREFIX;
lto_stream_offload_p = false;
ipa_write_summaries (false);
}
}
......
......@@ -167,7 +167,7 @@ lto_write_options (void)
"-fno-strict-overflow");
/* Append options from target hook and store them to offload_lto section. */
if (strcmp (section_name_prefix, OFFLOAD_SECTION_NAME_PREFIX) == 0)
if (lto_stream_offload_p)
{
char *offload_opts = targetm.offload_options ();
char *offload_ptr = offload_opts;
......@@ -208,7 +208,7 @@ lto_write_options (void)
/* Do not store target-specific options in offload_lto section. */
if ((cl_options[option->opt_index].flags & CL_TARGET)
&& strcmp (section_name_prefix, OFFLOAD_SECTION_NAME_PREFIX) == 0)
&& lto_stream_offload_p)
continue;
/* Drop options created from the gcc driver that will be rejected
......@@ -221,8 +221,7 @@ lto_write_options (void)
We do not need those. The only exception is -foffload option, if we
write it in offload_lto section. Also drop all diagnostic options. */
if ((cl_options[option->opt_index].flags & (CL_DRIVER|CL_WARNING))
&& (strcmp (section_name_prefix, OFFLOAD_SECTION_NAME_PREFIX) != 0
|| option->opt_index != OPT_foffload_))
&& (!lto_stream_offload_p || option->opt_index != OPT_foffload_))
continue;
for (j = 0; j < option->canonical_option_num_elements; ++j)
......
......@@ -949,7 +949,9 @@ hash_tree (struct streamer_tree_cache_d *cache, hash_map<tree, hashval_t> *map,
hstate.add (TRANSLATION_UNIT_LANGUAGE (t),
strlen (TRANSLATION_UNIT_LANGUAGE (t)));
if (CODE_CONTAINS_STRUCT (code, TS_TARGET_OPTION))
if (CODE_CONTAINS_STRUCT (code, TS_TARGET_OPTION)
/* We don't stream these when passing things to a different target. */
&& !lto_stream_offload_p)
hstate.add_wide_int (cl_target_option_hash (TREE_TARGET_OPTION (t)));
if (CODE_CONTAINS_STRUCT (code, TS_OPTIMIZATION))
......
......@@ -67,6 +67,8 @@ static bitmap_obstack lto_obstack;
static bool lto_obstack_initialized;
const char *section_name_prefix = LTO_SECTION_NAME_PREFIX;
/* Set when streaming LTO for offloading compiler. */
bool lto_stream_offload_p;
/* Return a string representing LTO tag TAG. */
......
......@@ -744,6 +744,10 @@ extern void lto_append_block (struct lto_output_stream *);
/* In lto-streamer.c. */
/* Set when streaming LTO for offloading compiler. */
extern bool lto_stream_offload_p;
extern const char *lto_tag_name (enum LTO_tags);
extern bitmap lto_bitmap_alloc (void);
extern void lto_bitmap_free (bitmap);
......
2015-01-09 Bernd Schmidt <bernds@codesourcery.com>
Jakub Jelinek <jakub@redhat.com>
PR middle-end/64412
* lto.c (read_cgraph_and_symbols): Set lto_stream_offload_p
if ACCEL_COMPILER.
2015-01-09 Michael Collison <michael.collison@linaro.org>
* lto.c: Include hash-set.h, machmode.h, vec.h, double-int.h,
......
......@@ -2909,7 +2909,8 @@ read_cgraph_and_symbols (unsigned nfiles, const char **fnames)
timevar_push (TV_IPA_LTO_DECL_IN);
#ifdef ACCEL_COMPILER
section_name_prefix = OFFLOAD_SECTION_NAME_PREFIX;
section_name_prefix = OFFLOAD_SECTION_NAME_PREFIX;
lto_stream_offload_p = true;
#endif
real_file_decl_data
......
......@@ -529,8 +529,10 @@ unpack_value_fields (struct data_in *data_in, struct bitpack_d *bp, tree expr)
vec_safe_grow (CONSTRUCTOR_ELTS (expr), length);
}
#ifndef ACCEL_COMPILER
if (CODE_CONTAINS_STRUCT (code, TS_TARGET_OPTION))
cl_target_option_stream_in (data_in, bp, TREE_TARGET_OPTION (expr));
#endif
if (code == OMP_CLAUSE)
unpack_ts_omp_clause_value_fields (data_in, bp, expr);
......@@ -794,7 +796,9 @@ lto_input_ts_function_decl_tree_pointers (struct lto_input_block *ib,
DECL_VINDEX (expr) = stream_read_tree (ib, data_in);
/* DECL_STRUCT_FUNCTION is loaded on demand by cgraph_get_body. */
DECL_FUNCTION_PERSONALITY (expr) = stream_read_tree (ib, data_in);
#ifndef ACCEL_COMPILER
DECL_FUNCTION_SPECIFIC_TARGET (expr) = stream_read_tree (ib, data_in);
#endif
DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr) = stream_read_tree (ib, data_in);
/* If the file contains a function with an EH personality set,
......
......@@ -480,7 +480,9 @@ streamer_pack_tree_bitfields (struct output_block *ob,
if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
bp_pack_var_len_unsigned (bp, CONSTRUCTOR_NELTS (expr));
if (CODE_CONTAINS_STRUCT (code, TS_TARGET_OPTION))
if (CODE_CONTAINS_STRUCT (code, TS_TARGET_OPTION)
/* Don't stream these when passing things to a different target. */
&& !lto_stream_offload_p)
cl_target_option_stream_out (ob, bp, TREE_TARGET_OPTION (expr));
if (code == OMP_CLAUSE)
......@@ -695,7 +697,9 @@ write_ts_function_decl_tree_pointers (struct output_block *ob, tree expr,
stream_write_tree (ob, DECL_VINDEX (expr), ref_p);
/* DECL_STRUCT_FUNCTION is handled by lto_output_function. */
stream_write_tree (ob, DECL_FUNCTION_PERSONALITY (expr), ref_p);
stream_write_tree (ob, DECL_FUNCTION_SPECIFIC_TARGET (expr), ref_p);
/* Don't stream these when passing things to a different target. */
if (!lto_stream_offload_p)
stream_write_tree (ob, DECL_FUNCTION_SPECIFIC_TARGET (expr), ref_p);
stream_write_tree (ob, DECL_FUNCTION_SPECIFIC_OPTIMIZATION (expr), ref_p);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment