]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
vartrack: fix skipping of unsuitable locs
authorAlexandre Oliva <oliva@adacore.com>
Thu, 18 Dec 2025 01:41:14 +0000 (22:41 -0300)
committerAlexandre Oliva <oliva@gnu.org>
Thu, 18 Dec 2025 01:41:14 +0000 (22:41 -0300)
When the last loc in a chain happens to be an unsuitable_loc(), we
record VAR_LOC_FROM as if the empty location had been derived from
that unsuitable loc, instead of leaving it empty, which ends up
preventing the VAR loc from being recomputed when other related locs
are usefully expanded.

Adjust the code that skips an unsuitable_loc() to take the same
preparation steps we take for exiting the loop as when an expansion
attempt yields NULL_RTX.

for  gcc/ChangeLog

* var-tracking.cc (vt_expand_var_loc_chain): Prepare to exit
the loop after unsuitable_loc.

gcc/var-tracking.cc

index 8732c3ba62aa54a223751cc7a7cfff4d2e04990b..7c255b1a8833ff8350a796040c018433fd63b1a7 100644 (file)
@@ -8397,7 +8397,7 @@ vt_expand_var_loc_chain (variable *var, bitmap regs, void *data,
          next = loc;
          cloc = cloc->next;
          if (unsuitable_loc (loc_from))
-           continue;
+           goto try_next_loc;
        }
       else
        {
@@ -8437,6 +8437,7 @@ vt_expand_var_loc_chain (variable *var, bitmap regs, void *data,
          result = NULL;
        }
 
+    try_next_loc:
       /* Set it up in case we leave the loop.  */
       depth.complexity = depth.entryvals = 0;
       loc_from = NULL;