diff options
author | Alan Modra <amodra@bigpond.net.au> | 2002-04-10 03:50:39 +0000 |
---|---|---|
committer | Alan Modra <amodra@gcc.gnu.org> | 2002-04-10 13:20:39 +0930 |
commit | a6a063b81ce323e49eb23bd87d7147c5cb09814e (patch) | |
tree | 8f57737d03a2fc651bab26e059ff589511d75dfa /gcc/gcse.c | |
parent | 7b2e1077614049c9899772aa14edab91e80e7ec5 (diff) | |
download | gcc-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.c | 16 |
1 files changed, 1 insertions, 15 deletions
@@ -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) |