===================================================================
@@ -724,7 +724,10 @@ live_track_clear_var (live_track_p ptr,
int p;
p = var_to_partition (ptr->map, var);
- if (p != NO_PARTITION)
+ if (p != NO_PARTITION
+ /* ??? If this partition has more than one member don't do anything. */
+ && ptr->map->var_partition->elements[SSA_NAME_VERSION
+ (partition_to_var (ptr->map, p))].class_count == 1)
live_track_remove_partition (ptr, p);
}
@@ -780,8 +783,11 @@ live_track_process_def (live_track_p ptr
if (p == NO_PARTITION)
return;
- /* Clear the liveness bit. */
- live_track_remove_partition (ptr, p);
+ /* Clear the liveness bit.
+ ??? If this partition has more than one member we can't do that. */
+ if (ptr->map->var_partition->elements[SSA_NAME_VERSION
+ (partition_to_var (ptr->map, p))].class_count == 1)
+ live_track_remove_partition (ptr, p);
/* If the bitmap isn't empty now, conflicts need to be added. */
root = basevar_index (ptr->map, p);
@@ -789,7 +795,8 @@ live_track_process_def (live_track_p ptr
{
b = ptr->live_base_partitions[root];
EXECUTE_IF_SET_IN_BITMAP (b, 0, x, bi)
- ssa_conflicts_add (graph, p, x);
+ if (x != (unsigned) p)
+ ssa_conflicts_add (graph, p, x);
}
}