diff mbox

Fix streaming of target optimization/option nodes

Message ID 20141215062619.GB11373@kam.mff.cuni.cz
State New
Headers show

Commit Message

Jan Hubicka Dec. 15, 2014, 6:26 a.m. UTC
Hi,
the testcase in PR ipa/61324 fails because it is compiled with -O0 and linked with -O2.
This should not matter anymore if there wasn't the following problem in streamer that
makes us to merge all default nodes across units.

Bootstrapped/regtested x86_64-linux, plan to commit it after more testing finishes (Firefox)

Honza

	PR ipa/61324
	* tree-streamer.c (preload_common_nodes): Do not ocnsider optimizatoin
	nad target_option nodes as common nodes; they depend on flags.

Comments

Jan Hubicka Dec. 15, 2014, 7:49 a.m. UTC | #1
Hi,
actually this patch break fortran, I get streaming error in:
lto1: internal compiler error: in streamer_get_pickled_tree
apparently picking error_mark_node for variable constructor results in reading integer_type...

Honza
> Hi,
> the testcase in PR ipa/61324 fails because it is compiled with -O0 and linked with -O2.
> This should not matter anymore if there wasn't the following problem in streamer that
> makes us to merge all default nodes across units.
> 
> Bootstrapped/regtested x86_64-linux, plan to commit it after more testing finishes (Firefox)
> 
> Honza
> 
> 	PR ipa/61324
> 	* tree-streamer.c (preload_common_nodes): Do not ocnsider optimizatoin
> 	nad target_option nodes as common nodes; they depend on flags.
> 
> Index: tree-streamer.c
> ===================================================================
> --- tree-streamer.c	(revision 218726)
> +++ tree-streamer.c	(working copy)
> @@ -324,7 +324,14 @@ preload_common_nodes (struct streamer_tr
>      /* Skip boolean type and constants, they are frontend dependent.  */
>      if (i != TI_BOOLEAN_TYPE
>  	&& i != TI_BOOLEAN_FALSE
> -	&& i != TI_BOOLEAN_TRUE)
> +	&& i != TI_BOOLEAN_TRUE
> +	/* Skip optimization and target option nodes; they depend on flags.  */
> +	&& i != TI_OPTIMIZATION_DEFAULT
> +	&& i != TI_OPTIMIZATION_CURRENT
> +	&& i != TI_TARGET_OPTION_DEFAULT
> +	&& i != TI_TARGET_OPTION_CURRENT
> +	&& i != TI_CURRENT_TARGET_PRAGMA
> +	&& i != TI_CURRENT_OPTIMIZE_PRAGMA)
>        record_common_node (cache, global_trees[i]);
>  }
>
Richard Biener Dec. 15, 2014, 8:32 a.m. UTC | #2
On Mon, 15 Dec 2014, Jan Hubicka wrote:

> Hi, actually this patch break fortran, I get streaming error in: lto1: 
> internal compiler error: in streamer_get_pickled_tree apparently picking 
> error_mark_node for variable constructor results in reading 
> integer_type...

?

Probably the default nodes are referenced by another builtin tree instead
and you get inconsistent streaming between f951 and lto1.  See the
assert placed into record_common_node which you should extend to cover
the optimization node trees.

Richard.

> Honza
> > Hi,
> > the testcase in PR ipa/61324 fails because it is compiled with -O0 and linked with -O2.
> > This should not matter anymore if there wasn't the following problem in streamer that
> > makes us to merge all default nodes across units.
> > 
> > Bootstrapped/regtested x86_64-linux, plan to commit it after more testing finishes (Firefox)
> > 
> > Honza
> > 
> > 	PR ipa/61324
> > 	* tree-streamer.c (preload_common_nodes): Do not ocnsider optimizatoin
> > 	nad target_option nodes as common nodes; they depend on flags.
> > 
> > Index: tree-streamer.c
> > ===================================================================
> > --- tree-streamer.c	(revision 218726)
> > +++ tree-streamer.c	(working copy)
> > @@ -324,7 +324,14 @@ preload_common_nodes (struct streamer_tr
> >      /* Skip boolean type and constants, they are frontend dependent.  */
> >      if (i != TI_BOOLEAN_TYPE
> >  	&& i != TI_BOOLEAN_FALSE
> > -	&& i != TI_BOOLEAN_TRUE)
> > +	&& i != TI_BOOLEAN_TRUE
> > +	/* Skip optimization and target option nodes; they depend on flags.  */
> > +	&& i != TI_OPTIMIZATION_DEFAULT
> > +	&& i != TI_OPTIMIZATION_CURRENT
> > +	&& i != TI_TARGET_OPTION_DEFAULT
> > +	&& i != TI_TARGET_OPTION_CURRENT
> > +	&& i != TI_CURRENT_TARGET_PRAGMA
> > +	&& i != TI_CURRENT_OPTIMIZE_PRAGMA)
> >        record_common_node (cache, global_trees[i]);
> >  }
> >  
> 
>
Jan Hubicka Dec. 15, 2014, 4:45 p.m. UTC | #3
> On Mon, 15 Dec 2014, Jan Hubicka wrote:
> 
> > Hi, actually this patch break fortran, I get streaming error in: lto1: 
> > internal compiler error: in streamer_get_pickled_tree apparently picking 
> > error_mark_node for variable constructor results in reading 
> > integer_type...
> 
> ?
> 
> Probably the default nodes are referenced by another builtin tree instead
> and you get inconsistent streaming between f951 and lto1.  See the
> assert placed into record_common_node which you should extend to cover
> the optimization node trees.

Yep, I looked into that other assert and added check for optimization nodes,
it does not seem to trigger + error mark node is 0.  Will try to look into this
more today.

Honza
> 
> Richard.
> 
> > Honza
> > > Hi,
> > > the testcase in PR ipa/61324 fails because it is compiled with -O0 and linked with -O2.
> > > This should not matter anymore if there wasn't the following problem in streamer that
> > > makes us to merge all default nodes across units.
> > > 
> > > Bootstrapped/regtested x86_64-linux, plan to commit it after more testing finishes (Firefox)
> > > 
> > > Honza
> > > 
> > > 	PR ipa/61324
> > > 	* tree-streamer.c (preload_common_nodes): Do not ocnsider optimizatoin
> > > 	nad target_option nodes as common nodes; they depend on flags.
> > > 
> > > Index: tree-streamer.c
> > > ===================================================================
> > > --- tree-streamer.c	(revision 218726)
> > > +++ tree-streamer.c	(working copy)
> > > @@ -324,7 +324,14 @@ preload_common_nodes (struct streamer_tr
> > >      /* Skip boolean type and constants, they are frontend dependent.  */
> > >      if (i != TI_BOOLEAN_TYPE
> > >  	&& i != TI_BOOLEAN_FALSE
> > > -	&& i != TI_BOOLEAN_TRUE)
> > > +	&& i != TI_BOOLEAN_TRUE
> > > +	/* Skip optimization and target option nodes; they depend on flags.  */
> > > +	&& i != TI_OPTIMIZATION_DEFAULT
> > > +	&& i != TI_OPTIMIZATION_CURRENT
> > > +	&& i != TI_TARGET_OPTION_DEFAULT
> > > +	&& i != TI_TARGET_OPTION_CURRENT
> > > +	&& i != TI_CURRENT_TARGET_PRAGMA
> > > +	&& i != TI_CURRENT_OPTIMIZE_PRAGMA)
> > >        record_common_node (cache, global_trees[i]);
> > >  }
> > >  
> > 
> > 
> 
> -- 
> Richard Biener <rguenther@suse.de>
> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Jennifer Guild,
> Dilip Upmanyu, Graham Norton HRB 21284 (AG Nuernberg)
diff mbox

Patch

Index: tree-streamer.c
===================================================================
--- tree-streamer.c	(revision 218726)
+++ tree-streamer.c	(working copy)
@@ -324,7 +324,14 @@  preload_common_nodes (struct streamer_tr
     /* Skip boolean type and constants, they are frontend dependent.  */
     if (i != TI_BOOLEAN_TYPE
 	&& i != TI_BOOLEAN_FALSE
-	&& i != TI_BOOLEAN_TRUE)
+	&& i != TI_BOOLEAN_TRUE
+	/* Skip optimization and target option nodes; they depend on flags.  */
+	&& i != TI_OPTIMIZATION_DEFAULT
+	&& i != TI_OPTIMIZATION_CURRENT
+	&& i != TI_TARGET_OPTION_DEFAULT
+	&& i != TI_TARGET_OPTION_CURRENT
+	&& i != TI_CURRENT_TARGET_PRAGMA
+	&& i != TI_CURRENT_OPTIMIZE_PRAGMA)
       record_common_node (cache, global_trees[i]);
 }