]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
object-size: Use simple_dce_from_worklist in object-size pass
authorAndrew Pinski <quic_apinski@quicinc.com>
Tue, 3 Sep 2024 19:48:46 +0000 (12:48 -0700)
committerAndrew Pinski <quic_apinski@quicinc.com>
Wed, 4 Sep 2024 14:32:47 +0000 (07:32 -0700)
While trying to see if there was a way to improve object-size pass
to use the ranger (for pointer plus), I noticed that it leaves around
the statement containing __builtin_object_size if it was reduced to a constant.
This fixes that by using simple_dce_from_worklist.

Bootstrapped and tested on x86_64-linux-gnu.

gcc/ChangeLog:

* tree-object-size.cc (object_sizes_execute): Mark lhs for maybe dceing
if doing a propagate. Call simple_dce_from_worklist.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
gcc/tree-object-size.cc

index 4c1fa9b555fa926e0d6268899fe24265b5e643e2..6544730e1539e8326c114e242f79c18061679efb 100644 (file)
@@ -38,6 +38,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "builtins.h"
 #include "gimplify-me.h"
 #include "gimplify.h"
+#include "tree-ssa-dce.h"
 
 struct object_size_info
 {
@@ -2187,6 +2188,7 @@ static unsigned int
 object_sizes_execute (function *fun, bool early)
 {
   todo = 0;
+  auto_bitmap sdce_worklist;
 
   basic_block bb;
   FOR_EACH_BB_FN (bb, fun)
@@ -2277,13 +2279,18 @@ object_sizes_execute (function *fun, bool early)
 
          /* Propagate into all uses and fold those stmts.  */
          if (!SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs))
-           replace_uses_by (lhs, result);
+           {
+             replace_uses_by (lhs, result);
+             /* Mark lhs as being possiblely DCEd. */
+             bitmap_set_bit (sdce_worklist, SSA_NAME_VERSION (lhs));
+           }
          else
            replace_call_with_value (&i, result);
        }
     }
 
   fini_object_sizes ();
+  simple_dce_from_worklist (sdce_worklist);
   return todo;
 }