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>
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
re-initializing preserved loops.
* loop-unswitch.c (unswitch_single_loop): Return whether
......
......@@ -116,13 +116,14 @@ output_gimple_stmt (struct output_block *ob, gimple stmt)
for (i = 0; i < gimple_num_ops (stmt); i++)
{
tree op = gimple_op (stmt, i);
tree *basep = NULL;
/* Wrap all uses of non-automatic variables inside MEM_REFs
so that we do not have to deal with type mismatches on
merged symbols during IL read in. The first operand
of GIMPLE_DEBUG must be a decl, not MEM_REF, though. */
if (op && (i || !is_gimple_debug (stmt)))
{
tree *basep = &op;
basep = &op;
while (handled_component_p (*basep))
basep = &TREE_OPERAND (*basep, 0);
if (TREE_CODE (*basep) == VAR_DECL
......@@ -136,8 +137,13 @@ output_gimple_stmt (struct output_block *ob, gimple stmt)
(TREE_TYPE (*basep)), 0));
TREE_THIS_VOLATILE (*basep) = volatilep;
}
else
basep = NULL;
}
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))
{
......
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