From: Josef Zlomek Date: Wed, 28 Apr 2004 06:00:45 +0000 (+0200) Subject: var-tracking.c (variable_different_p): Add a parameter compare_current_location... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=83532fb78e33c960520f97b8a94632245ba3ff60;p=gcc.git var-tracking.c (variable_different_p): Add a parameter compare_current_location... * var-tracking.c (variable_different_p): Add a parameter compare_current_location, compare current location of variable parts if it is true. (dataflow_set_different_1): Pass compare_current_location == false. (dataflow_set_different_2): Pass compare_current_location == false. (emit_notes_for_differences_1): Pass compare_current_location == true. From-SVN: r81242 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1f8d3e3dea0..6770285e362 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2004-04-28 Josef Zlomek + + * var-tracking.c (variable_different_p): Add a parameter + compare_current_location, compare current location of variable parts + if it is true. + (dataflow_set_different_1): Pass compare_current_location == false. + (dataflow_set_different_2): Pass compare_current_location == false. + (emit_notes_for_differences_1): Pass compare_current_location == true. + 2004-04-28 Ulrich Weigand * config/s390/s390.md ("casesi"): Mark jump table access as diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index be66392f07d..28c0c6fbdba 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -304,7 +304,7 @@ static int variable_union_info_cmp_pos (const void *, const void *); static int variable_union (void **, void *); static void dataflow_set_union (dataflow_set *, dataflow_set *); static bool variable_part_different_p (variable_part *, variable_part *); -static bool variable_different_p (variable, variable); +static bool variable_different_p (variable, variable, bool); static int dataflow_set_different_1 (void **, void *); static int dataflow_set_different_2 (void **, void *); static bool dataflow_set_different (dataflow_set *, dataflow_set *); @@ -1260,12 +1260,13 @@ variable_part_different_p (variable_part *vp1, variable_part *vp2) return false; } -/* Return true if variables VAR1 and VAR2 are different (only the first - location in the list of locations is checked for each offset, - i.e. when true is returned a note should be emitted). */ +/* Return true if variables VAR1 and VAR2 are different. + If COMPARE_CURRENT_LOCATION is true compare also the cur_loc of each + variable part. */ static bool -variable_different_p (variable var1, variable var2) +variable_different_p (variable var1, variable var2, + bool compare_current_location) { int i; @@ -1279,6 +1280,16 @@ variable_different_p (variable var1, variable var2) { if (var1->var_part[i].offset != var2->var_part[i].offset) return true; + if (compare_current_location) + { + if (!((GET_CODE (var1->var_part[i].cur_loc) == REG + && GET_CODE (var2->var_part[i].cur_loc) == REG + && (REGNO (var1->var_part[i].cur_loc) + == REGNO (var2->var_part[i].cur_loc))) + || rtx_equal_p (var1->var_part[i].cur_loc, + var2->var_part[i].cur_loc))) + return true; + } if (variable_part_different_p (&var1->var_part[i], &var2->var_part[i])) return true; if (variable_part_different_p (&var2->var_part[i], &var1->var_part[i])) @@ -1307,7 +1318,7 @@ dataflow_set_different_1 (void **slot, void *data) return 0; } - if (variable_different_p (var1, var2)) + if (variable_different_p (var1, var2, false)) { dataflow_set_different_value = true; @@ -1342,7 +1353,7 @@ dataflow_set_different_2 (void **slot, void *data) #ifdef ENABLE_CHECKING /* If both variables are defined they have been already checked for equivalence. */ - if (variable_different_p (var1, var2)) + if (variable_different_p (var1, var2, false)) abort (); #endif @@ -2286,7 +2297,7 @@ emit_notes_for_differences_1 (void **slot, void *data) empty_var->n_var_parts = 0; variable_was_changed (empty_var, NULL); } - else if (variable_different_p (old_var, new_var)) + else if (variable_different_p (old_var, new_var, true)) { variable_was_changed (new_var, NULL); }