mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-15 08:10:28 +08:00
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
This commit is contained in:
parent
000c70a76c
commit
1b34e6e250
@ -1,3 +1,24 @@
|
||||
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);
|
||||
|
@ -1,3 +1,10 @@
|
||||
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);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user