[committed, gomp4] Fix release_dangling_ssa_names
Tom de Vries
Tom_deVries@mentor.com
Wed Aug 5 08:48:00 GMT 2015
On 05/08/15 09:29, Richard Biener wrote:
>> This patch fixes that by making sure we reset the def stmt to NULL. This means
>> >we can simplify release_dangling_ssa_names to just test for NULL def stmts.
> Not sure if I understand the problem correctly but why are you not simply
> releasing the SSA name when you remove its definition?
In move_sese_region_to_fn we move a region of blocks from one function
to another, bit by bit.
When we encounter an ssa_name as def or use in the region, we:
- generate a new ssa_name,
- set the def stmt of the old name as def stmt of the new name, and
- add a mapping from the old to the new name.
The next time we encounter the same ssa_name in another statement, we
find it in the map.
If we release the old ssa name, we effectively create statements with
operands in the free-list. The first point where that cause breakage, is
in walk_gimple_op, which expects the TREE_TYPE of the lhs of an assign
to be defined, which is not the case if it's in the free-list:
...
case GIMPLE_ASSIGN:
/* Walk the RHS operands. If the LHS is of a non-renamable type or
is a register variable, we may use a COMPONENT_REF on the RHS.*/
if (wi)
{
tree lhs = gimple_assign_lhs (stmt);
wi->val_only
= (is_gimple_reg_type (TREE_TYPE (lhs)) && !is_gimple_reg (lhs))
|| gimple_assign_rhs_class (stmt) != GIMPLE_SINGLE_RHS;
}
...
Thanks,
- Tom
More information about the Gcc-patches
mailing list