summaryrefslogtreecommitdiff
blob: a59359d9f9361d3943e57013b524c1d97d8c4a1b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2000-08-01  Bernd Schmidt  <bernds@cygnus.co.uk>

	* unroll.c (unroll_loop): Disable unrolling if there are any
	jumps to the start label other than the last loop insn.

*** gcc/unroll.c	2000/05/26 00:12:51	1.128
--- gcc/unroll.c	2000/08/01 15:15:34
*************** unroll_loop (loop, insn_count, end_inser
*** 743,751 ****
        else if (GET_CODE (insn) == JUMP_INSN)
  	{
  	  if (JUMP_LABEL (insn))
! 	    set_label_in_map (map,
! 			      CODE_LABEL_NUMBER (JUMP_LABEL (insn)),
! 			      JUMP_LABEL (insn));
  	  else if (GET_CODE (PATTERN (insn)) == ADDR_VEC
  		   || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)
  	    {
--- 743,760 ----
        else if (GET_CODE (insn) == JUMP_INSN)
  	{
  	  if (JUMP_LABEL (insn))
! 	    {
! 	      if (insn != last_loop_insn && JUMP_LABEL (insn) == start_label)
! 		{
! 		  if (loop_dump_stream)
! 		    fprintf (loop_dump_stream,
! 			     "Unrolling failure: found branch to loop start\n");
! 		  return;
! 		}
! 	      set_label_in_map (map,
! 				CODE_LABEL_NUMBER (JUMP_LABEL (insn)),
! 				JUMP_LABEL (insn));
! 	    }
  	  else if (GET_CODE (PATTERN (insn)) == ADDR_VEC
  		   || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)
  	    {