aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2021-11-30 18:45:11 +0100
committerMartin Jambor <mjambor@suse.cz>2021-11-30 18:45:21 +0100
commite5440bc08e07fd491dcccd47e1b86a5985ee117c (patch)
tree2348faca18b82a098b00c49fa19a75f1572cbd6e /gcc
parent7057b8f8c2fbb7a2112705c2962d92b8ccef7c30 (diff)
downloadgcc-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.c3
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;