Verify unallocated edge/BB flags are clear
authorRichard Biener <rguenther@suse.de>
Fri, 24 Sep 2021 08:13:45 +0000 (10:13 +0200)
committerRichard Biener <rguenther@suse.de>
Fri, 24 Sep 2021 08:16:19 +0000 (10:16 +0200)
This adds verification that unused auto_{edge,bb}_flag are not
remaining set but correctly cleared by consumers.  The intent
is that those flags can be cheaply used on a smaller IL region
and thus afterwards clearing can be restricted to the same
small region as well.

2021-09-24  Richard Biener  <rguenther@suse.de>

* cfghooks.c (verify_flow_info): Verify unallocated BB and
edge flags are not set.

gcc/cfghooks.c

index 50b9b17..6446e16 100644 (file)
@@ -161,6 +161,12 @@ verify_flow_info (void)
          err = 1;
        }
 
+      if (bb->flags & ~cfun->cfg->bb_flags_allocated)
+       {
+         error ("verify_flow_info: unallocated flag set on BB %d", bb->index);
+         err = 1;
+       }
+
       FOR_EACH_EDGE (e, ei, bb->succs)
        {
          if (last_visited [e->dest->index] == bb)
@@ -202,6 +208,13 @@ verify_flow_info (void)
              err = 1;
            }
 
+         if (e->flags & ~cfun->cfg->edge_flags_allocated)
+           {
+             error ("verify_flow_info: unallocated edge flag set on %d -> %d",
+                    e->src->index, e->dest->index);
+             err = 1;
+           }
+
          edge_checksum[e->dest->index] += (size_t) e;
        }
       if (n_fallthru > 1)