Hi,

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.

Bootstrapped and tested on x86_64-linux.  OK for trunk?

Thanks,

Martin


gcc/ChangeLog:

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

        PT ipa/103267
        * ipa-sra.c (scan_function): Also check ECF_LOOPING_CONST_OR_PURE flag.
---
 gcc/ipa-sra.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gcc/ipa-sra.c b/gcc/ipa-sra.c
index cb0e30507a1..12ccd049552 100644
--- a/gcc/ipa-sra.c
+++ b/gcc/ipa-sra.c
@@ -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;
-- 
2.33.1

Reply via email to