aboutsummaryrefslogtreecommitdiff
path: root/gcc/gcse.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2002-04-10 03:50:39 +0000
committerAlan Modra <amodra@gcc.gnu.org>2002-04-10 13:20:39 +0930
commita6a063b81ce323e49eb23bd87d7147c5cb09814e (patch)
tree8f57737d03a2fc651bab26e059ff589511d75dfa /gcc/gcse.c
parent7b2e1077614049c9899772aa14edab91e80e7ec5 (diff)
downloadgcc-a6a063b81ce323e49eb23bd87d7147c5cb09814e.zip
gcc-a6a063b81ce323e49eb23bd87d7147c5cb09814e.tar.gz
gcc-a6a063b81ce323e49eb23bd87d7147c5cb09814e.tar.bz2
re PR rtl-optimization/6233 (simple loop miscompilation)
PR optimization/6233 * rtlanal.c (pure_call_p): New function. * rtl.h (pure_call_p): Declare. * loop.c (prescan_loop): Use it to set has_nonconst_call. * gcse.c (store_killed_in_insn): Use pure_call_p here too. From-SVN: r52110
Diffstat (limited to 'gcc/gcse.c')
-rw-r--r--gcc/gcse.c16
1 files changed, 1 insertions, 15 deletions
diff --git a/gcc/gcse.c b/gcc/gcse.c
index 7a49ffc..ba83712 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -6528,21 +6528,7 @@ store_killed_in_insn (x, insn)
{
/* A normal or pure call might read from pattern,
but a const call will not. */
- if (CONST_OR_PURE_CALL_P (insn))
- {
- rtx link;
-
- for (link = CALL_INSN_FUNCTION_USAGE (insn);
- link;
- link = XEXP (link, 1))
- if (GET_CODE (XEXP (link, 0)) == USE
- && GET_CODE (XEXP (XEXP (link, 0), 0)) == MEM
- && GET_CODE (XEXP (XEXP (XEXP (link, 0), 0), 0)) == SCRATCH)
- return 1;
- return 0;
- }
- else
- return 1;
+ return ! CONST_OR_PURE_CALL_P (insn) || pure_call_p (insn);
}
if (GET_CODE (PATTERN (insn)) == SET)