ipa-sra: Check also ECF_LOOPING_CONST_OR_PURE when evaluating calls
authorMartin Jambor <mjambor@suse.cz>
Tue, 30 Nov 2021 17:45:11 +0000 (18:45 +0100)
committerMartin Jambor <mjambor@suse.cz>
Tue, 30 Nov 2021 17:45:21 +0000 (18:45 +0100)
in PR 103267 Honza found out that IPA-SRA does not look at
ECF_LOOPING_CONST_OR_PURE when evaluating if a call can have side
effects.  Fixed with this patch.  The testcase infinitely loops in a
const function, so it would not make a good addition to the testsuite.

gcc/ChangeLog:

2021-11-29  Martin Jambor  <mjambor@suse.cz>

PR ipa/103267
* ipa-sra.c (scan_function): Also check ECF_LOOPING_CONST_OR_PURE flag.

gcc/ipa-sra.c

index cb0e305..12ccd04 100644 (file)
@@ -1925,7 +1925,8 @@ scan_function (cgraph_node *node, struct function *fun)
                if (lhs)
                  scan_expr_access (lhs, stmt, ISRA_CTX_STORE, bb);
                int flags = gimple_call_flags (stmt);
-               if ((flags & (ECF_CONST | ECF_PURE)) == 0)
+               if (((flags & (ECF_CONST | ECF_PURE)) == 0)
+                   || (flags & ECF_LOOPING_CONST_OR_PURE))
                  bitmap_set_bit (final_bbs, bb->index);
              }
              break;