summaryrefslogtreecommitdiff
path: root/gcc/loop-invariant.c
diff options
context:
space:
mode:
authorrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>2006-02-16 15:59:00 +0000
committerrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>2006-02-16 15:59:00 +0000
commit2e33cac51d19b0ae422cd030cc9a0184b1bc0748 (patch)
tree68ac94b6770936c2d7b4abd15dcacaf03f67bf4d /gcc/loop-invariant.c
parenta39b96b6bfbdd308b18086d8eb1f9fad36256218 (diff)
downloadgcc-2e33cac51d19b0ae422cd030cc9a0184b1bc0748.tar.gz
* loop-invariant.c (invariant_for_use, check_dependencies): Fail for
read-write uses. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@111141 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/loop-invariant.c')
-rw-r--r--gcc/loop-invariant.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/loop-invariant.c b/gcc/loop-invariant.c
index 03a0c34e6cb..04531a0e05f 100644
--- a/gcc/loop-invariant.c
+++ b/gcc/loop-invariant.c
@@ -233,6 +233,9 @@ invariant_for_use (struct df_ref *use)
struct df_ref *def;
basic_block bb = BLOCK_FOR_INSN (use->insn), def_bb;
+ if (use->flags & DF_REF_READ_WRITE)
+ return NULL;
+
defs = DF_REF_CHAIN (use);
if (!defs || defs->next)
return NULL;
@@ -682,7 +685,8 @@ record_use (struct def *def, rtx *use, rtx insn)
}
/* Finds the invariants INSN depends on and store them to the DEPENDS_ON
- bitmap. */
+ bitmap. Returns true if all dependencies of INSN are known to be
+ loop invariants, false otherwise. */
static bool
check_dependencies (rtx insn, bitmap depends_on)
@@ -695,6 +699,9 @@ check_dependencies (rtx insn, bitmap depends_on)
for (use = DF_INSN_GET (df, insn)->uses; use; use = use->next_ref)
{
+ if (use->flags & DF_REF_READ_WRITE)
+ return false;
+
defs = DF_REF_CHAIN (use);
if (!defs)
continue;