Commit 552bc76f by Richard Stallman

*** empty log message ***

From-SVN: r1089
parent 168c4006
...@@ -109,6 +109,11 @@ unsigned long loop_n_iterations; ...@@ -109,6 +109,11 @@ unsigned long loop_n_iterations;
static int loop_has_call; static int loop_has_call;
/* Nonzero if there is a volatile memory reference in the current
loop. */
static int loop_has_volatile;
/* Added loop_continue which is the NOTE_INSN_LOOP_CONT of the /* Added loop_continue which is the NOTE_INSN_LOOP_CONT of the
current loop. A continue statement will generate a branch to current loop. A continue statement will generate a branch to
NEXT_INSN (loop_continue). */ NEXT_INSN (loop_continue). */
...@@ -155,7 +160,7 @@ static rtx loop_store_mems[NUM_STORES]; ...@@ -155,7 +160,7 @@ static rtx loop_store_mems[NUM_STORES];
static int loop_store_mems_idx; static int loop_store_mems_idx;
/* Nonzero if we don't know what MEMs were changed in the current loop. /* Nonzero if we don't know what MEMs were changed in the current loop.
This happens if the loop contains a call (in which call `loop_has_call' This happens if the loop contains a call (in which case `loop_has_call'
will also be set) or if we store into more than NUM_STORES MEMs. */ will also be set) or if we store into more than NUM_STORES MEMs. */
static int unknown_address_altered; static int unknown_address_altered;
...@@ -2089,7 +2094,8 @@ constant_high_bytes (p, loop_start) ...@@ -2089,7 +2094,8 @@ constant_high_bytes (p, loop_start)
#endif #endif
/* Scan a loop setting the variables `unknown_address_altered', /* Scan a loop setting the variables `unknown_address_altered',
`num_mem_sets', `loop_continue', loops_enclosed' and `loop_has_call'. `num_mem_sets', `loop_continue', loops_enclosed', `loop_has_call',
and `loop_has_volatile'.
Also, fill in the array `loop_store_mems'. */ Also, fill in the array `loop_store_mems'. */
static void static void
...@@ -2101,6 +2107,7 @@ prescan_loop (start, end) ...@@ -2101,6 +2107,7 @@ prescan_loop (start, end)
unknown_address_altered = 0; unknown_address_altered = 0;
loop_has_call = 0; loop_has_call = 0;
loop_has_volatile = 0;
loop_store_mems_idx = 0; loop_store_mems_idx = 0;
num_mem_sets = 0; num_mem_sets = 0;
...@@ -2141,9 +2148,14 @@ prescan_loop (start, end) ...@@ -2141,9 +2148,14 @@ prescan_loop (start, end)
else else
{ {
if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN) if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN)
{
if (volatile_refs_p (PATTERN (insn)))
loop_has_volatile = 1;
note_stores (PATTERN (insn), note_addr_stored); note_stores (PATTERN (insn), note_addr_stored);
} }
} }
}
} }
/* Scan the function looking for loops. Record the start and end of each loop. /* Scan the function looking for loops. Record the start and end of each loop.
...@@ -5578,6 +5590,7 @@ check_dbra_loop (loop_end, insn_count, loop_start) ...@@ -5578,6 +5590,7 @@ check_dbra_loop (loop_end, insn_count, loop_start)
if (num_nonfixed_reads <= 1 if (num_nonfixed_reads <= 1
&& !loop_has_call && !loop_has_call
&& !loop_has_volatile
&& (no_use_except_counting && (no_use_except_counting
|| (bl->giv_count + bl->biv_count + num_mem_sets || (bl->giv_count + bl->biv_count + num_mem_sets
+ num_movables + 2 == insn_count))) + num_movables + 2 == insn_count)))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment