Commit 976a81ee by Richard Biener Committed by Richard Biener

re PR lto/56295 (Missed optimization with LTO)

2013-02-13  Richard Biener  <rguenther@suse.de>

	PR lto/56295
	* gimple-streamer-out.c (output_gimple_stmt): Undo wrapping
	globals in MEM_REFs.

From-SVN: r196013
parent 6c8064fb
2013-02-13 Richard Biener <rguenther@suse.de> 2013-02-13 Richard Biener <rguenther@suse.de>
PR lto/56295
* gimple-streamer-out.c (output_gimple_stmt): Undo wrapping
globals in MEM_REFs.
2013-02-13 Richard Biener <rguenther@suse.de>
* loop-init.c (loop_optimizer_init): Clear loop state when * loop-init.c (loop_optimizer_init): Clear loop state when
re-initializing preserved loops. re-initializing preserved loops.
* loop-unswitch.c (unswitch_single_loop): Return whether * loop-unswitch.c (unswitch_single_loop): Return whether
......
...@@ -116,13 +116,14 @@ output_gimple_stmt (struct output_block *ob, gimple stmt) ...@@ -116,13 +116,14 @@ output_gimple_stmt (struct output_block *ob, gimple stmt)
for (i = 0; i < gimple_num_ops (stmt); i++) for (i = 0; i < gimple_num_ops (stmt); i++)
{ {
tree op = gimple_op (stmt, i); tree op = gimple_op (stmt, i);
tree *basep = NULL;
/* Wrap all uses of non-automatic variables inside MEM_REFs /* Wrap all uses of non-automatic variables inside MEM_REFs
so that we do not have to deal with type mismatches on so that we do not have to deal with type mismatches on
merged symbols during IL read in. The first operand merged symbols during IL read in. The first operand
of GIMPLE_DEBUG must be a decl, not MEM_REF, though. */ of GIMPLE_DEBUG must be a decl, not MEM_REF, though. */
if (op && (i || !is_gimple_debug (stmt))) if (op && (i || !is_gimple_debug (stmt)))
{ {
tree *basep = &op; basep = &op;
while (handled_component_p (*basep)) while (handled_component_p (*basep))
basep = &TREE_OPERAND (*basep, 0); basep = &TREE_OPERAND (*basep, 0);
if (TREE_CODE (*basep) == VAR_DECL if (TREE_CODE (*basep) == VAR_DECL
...@@ -136,8 +137,13 @@ output_gimple_stmt (struct output_block *ob, gimple stmt) ...@@ -136,8 +137,13 @@ output_gimple_stmt (struct output_block *ob, gimple stmt)
(TREE_TYPE (*basep)), 0)); (TREE_TYPE (*basep)), 0));
TREE_THIS_VOLATILE (*basep) = volatilep; TREE_THIS_VOLATILE (*basep) = volatilep;
} }
else
basep = NULL;
} }
stream_write_tree (ob, op, true); stream_write_tree (ob, op, true);
/* Restore the original base if we wrapped it inside a MEM_REF. */
if (basep)
*basep = TREE_OPERAND (TREE_OPERAND (*basep, 0), 0);
} }
if (is_gimple_call (stmt)) if (is_gimple_call (stmt))
{ {
......
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