diff options
author | Martin Jambor <mjambor@suse.cz> | 2021-11-30 18:45:11 +0100 |
---|---|---|
committer | Martin Jambor <mjambor@suse.cz> | 2021-11-30 18:45:21 +0100 |
commit | e5440bc08e07fd491dcccd47e1b86a5985ee117c (patch) | |
tree | 2348faca18b82a098b00c49fa19a75f1572cbd6e /gcc | |
parent | 7057b8f8c2fbb7a2112705c2962d92b8ccef7c30 (diff) | |
download | gcc-e5440bc08e07fd491dcccd47e1b86a5985ee117c.zip gcc-e5440bc08e07fd491dcccd47e1b86a5985ee117c.tar.gz gcc-e5440bc08e07fd491dcccd47e1b86a5985ee117c.tar.bz2 |
ipa-sra: Check also ECF_LOOPING_CONST_OR_PURE when evaluating calls
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ipa-sra.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/ipa-sra.c b/gcc/ipa-sra.c index cb0e305..12ccd04 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; |