diff options
author | rakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-02-16 15:59:00 +0000 |
---|---|---|
committer | rakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-02-16 15:59:00 +0000 |
commit | 2e33cac51d19b0ae422cd030cc9a0184b1bc0748 (patch) | |
tree | 68ac94b6770936c2d7b4abd15dcacaf03f67bf4d /gcc/loop-invariant.c | |
parent | a39b96b6bfbdd308b18086d8eb1f9fad36256218 (diff) | |
download | gcc-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.c | 9 |
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; |