RFC: kill od flow_delete_insns

Jan Hubicka jh@suse.cz
Wed Sep 12 08:41:00 GMT 2001


Hi,
I am just quickly sending the attached patch.  I didn't finished bootstrap yet,
but I would like to know your opinion and I must leave for today.  The patch
attempts to avoid confusion in ways we delete instruction (we have delete_insn,
remove_insn, flow_delete_insn and half a dozen other ways to delete insns).

I am attempting to amn flow_delete_insn and use delete_insn everywhere.
To do it, I need to kill the aggresive code removal it have (and keep it
for the cfg_cleanup, that IMO makes more sense too).

What I am affraid of is reorg pass and machine depdendent reorg.  Will
they stay happy with this change?

If you think it makes sense, I will futher update delete_insn to update CFG
as insn emitting code does and cleanup the various places we do update boundaries.

Sorry, no changelog, I am in a hurry.

Honza

Index: cfg.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cfg.c,v
retrieving revision 1.3
diff -c -3 -p -r1.3 cfg.c
*** cfg.c	2001/09/11 16:58:57	1.3
--- cfg.c	2001/09/12 15:37:18
*************** Software Foundation, 59 Temple Place - S
*** 27,33 ****
       - Initialization/deallocation
  	 init_flow, clear_edges
       - CFG aware instruction chain manipulation
! 	 flow_delete_insn, flow_delete_insn_chain
       - Basic block manipulation
  	 create_basic_block, flow_delete_block, split_block, merge_blocks_nomove
       - Infrastructure to determine quickly basic block for instruction.
--- 27,33 ----
       - Initialization/deallocation
  	 init_flow, clear_edges
       - CFG aware instruction chain manipulation
! 	 delete_insn, flow_delete_insn_chain
       - Basic block manipulation
  	 create_basic_block, flow_delete_block, split_block, merge_blocks_nomove
       - Infrastructure to determine quickly basic block for instruction.
*************** can_delete_label_p (label)
*** 233,290 ****
    return 1;
  }
  
- /* Delete INSN by patching it out.  Return the next insn.  */
- 
- rtx
- flow_delete_insn (insn)
-      rtx insn;
- {
-   rtx prev = PREV_INSN (insn);
-   rtx next = NEXT_INSN (insn);
-   rtx note;
- 
-   PREV_INSN (insn) = NULL_RTX;
-   NEXT_INSN (insn) = NULL_RTX;
-   INSN_DELETED_P (insn) = 1;
- 
-   if (prev)
-     NEXT_INSN (prev) = next;
-   if (next)
-     PREV_INSN (next) = prev;
-   else
-     set_last_insn (prev);
- 
-   if (GET_CODE (insn) == CODE_LABEL)
-     remove_node_from_expr_list (insn, &nonlocal_goto_handler_labels);
- 
-   /* If deleting a jump, decrement the use count of the label.  Deleting
-      the label itself should happen in the normal course of block merging.  */
-   if (GET_CODE (insn) == JUMP_INSN
-       && JUMP_LABEL (insn)
-       && GET_CODE (JUMP_LABEL (insn)) == CODE_LABEL)
-     LABEL_NUSES (JUMP_LABEL (insn))--;
- 
-   /* Also if deleting an insn that references a label.  */
-   else if ((note = find_reg_note (insn, REG_LABEL, NULL_RTX)) != NULL_RTX
- 	   && GET_CODE (XEXP (note, 0)) == CODE_LABEL)
-     LABEL_NUSES (XEXP (note, 0))--;
- 
-   if (GET_CODE (insn) == JUMP_INSN
-       && (GET_CODE (PATTERN (insn)) == ADDR_VEC
- 	  || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC))
-     {
-       rtx pat = PATTERN (insn);
-       int diff_vec_p = GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC;
-       int len = XVECLEN (pat, diff_vec_p);
-       int i;
- 
-       for (i = 0; i < len; i++)
- 	LABEL_NUSES (XEXP (XVECEXP (pat, diff_vec_p, i), 0))--;
-     }
- 
-   return next;
- }
- 
  /* Unlink a chain of insns between START and FINISH, leaving notes
     that must be paired.  */
  
--- 233,238 ----
*************** flow_delete_insn_chain (start, finish)
*** 312,318 ****
  	  NOTE_SOURCE_FILE (start) = name;
  	}
        else
! 	next = flow_delete_insn (start);
  
        if (start == finish)
  	break;
--- 260,266 ----
  	  NOTE_SOURCE_FILE (start) = name;
  	}
        else
! 	next = delete_insn (start);
  
        if (start == finish)
  	break;
*************** try_redirect_by_replacing_jump (e, targe
*** 1092,1098 ****
  	 && NOTE_LINE_NUMBER (e->src->end) >= 0)
      {
        rtx prev = PREV_INSN (e->src->end);
!       flow_delete_insn (e->src->end);
        e->src->end = prev;
      }
  
--- 1040,1046 ----
  	 && NOTE_LINE_NUMBER (e->src->end) >= 0)
      {
        rtx prev = PREV_INSN (e->src->end);
!       delete_insn (e->src->end);
        e->src->end = prev;
      }
  
*************** commit_one_edge_insertion (e)
*** 1683,1689 ****
        bb->end = last;
  
        if (before)
! 	flow_delete_insn (before);
      }
    else if (GET_CODE (last) == JUMP_INSN)
      abort ();
--- 1631,1637 ----
        bb->end = last;
  
        if (before)
! 	delete_insn (before);
      }
    else if (GET_CODE (last) == JUMP_INSN)
      abort ();
Index: cfgbuild.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cfgbuild.c,v
retrieving revision 1.3
diff -c -3 -p -r1.3 cfgbuild.c
*** cfgbuild.c	2001/09/11 16:58:57	1.3
--- cfgbuild.c	2001/09/12 15:37:18
*************** find_basic_blocks_1 (f)
*** 442,448 ****
  		if (bb_note == NULL_RTX)
  		  bb_note = insn;
  		else
! 		  next = flow_delete_insn (insn);
  	      }
  	    break;
  	  }
--- 442,448 ----
  		if (bb_note == NULL_RTX)
  		  bb_note = insn;
  		else
! 		  next = delete_insn (insn);
  	      }
  	    break;
  	  }
*************** find_basic_blocks_1 (f)
*** 581,587 ****
    if (head != NULL_RTX)
      create_basic_block_structure (i++, head, end, bb_note);
    else if (bb_note)
!     flow_delete_insn (bb_note);
  
    if (i != n_basic_blocks)
      abort ();
--- 581,587 ----
    if (head != NULL_RTX)
      create_basic_block_structure (i++, head, end, bb_note);
    else if (bb_note)
!     delete_insn (bb_note);
  
    if (i != n_basic_blocks)
      abort ();
Index: cfgcleanup.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cfgcleanup.c,v
retrieving revision 1.3
diff -c -3 -p -r1.3 cfgcleanup.c
*** cfgcleanup.c	2001/09/11 16:58:57	1.3
--- cfgcleanup.c	2001/09/12 15:37:18
*************** merge_blocks_move_predecessor_nojumps (a
*** 277,283 ****
    barrier = next_nonnote_insn (a->end);
    if (GET_CODE (barrier) != BARRIER)
      abort ();
!   flow_delete_insn (barrier);
  
    /* Move block and loop notes out of the chain so that we do not
       disturb their order.
--- 277,283 ----
    barrier = next_nonnote_insn (a->end);
    if (GET_CODE (barrier) != BARRIER)
      abort ();
!   delete_insn (barrier);
  
    /* Move block and loop notes out of the chain so that we do not
       disturb their order.
*************** merge_blocks_move_successor_nojumps (a, 
*** 337,343 ****
  
    /* There had better have been a barrier there.  Delete it.  */
    if (barrier && GET_CODE (barrier) == BARRIER)
!     flow_delete_insn (barrier);
  
    /* Move block and loop notes out of the chain so that we do not
       disturb their order.
--- 337,343 ----
  
    /* There had better have been a barrier there.  Delete it.  */
    if (barrier && GET_CODE (barrier) == BARRIER)
!     delete_insn (barrier);
  
    /* Move block and loop notes out of the chain so that we do not
       disturb their order.
Index: cse.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cse.c,v
retrieving revision 1.203
diff -c -3 -p -r1.203 cse.c
*** cse.c	2001/08/28 01:29:48	1.203
--- cse.c	2001/09/12 15:37:20
*************** delete_trivially_dead_insns (insns, nreg
*** 7689,7695 ****
  	      count_reg_usage (insn, counts, NULL_RTX, -1);
  	      if (insn == bb->end)
  		bb->end = PREV_INSN (insn);
! 	      flow_delete_insn (insn);
  	    }
  
  	  if (find_reg_note (insn, REG_LIBCALL, NULL_RTX))
--- 7689,7695 ----
  	      count_reg_usage (insn, counts, NULL_RTX, -1);
  	      if (insn == bb->end)
  		bb->end = PREV_INSN (insn);
! 	      delete_insn (insn);
  	    }
  
  	  if (find_reg_note (insn, REG_LIBCALL, NULL_RTX))
Index: except.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/except.c,v
retrieving revision 1.189
diff -c -3 -p -r1.189 except.c
*** except.c	2001/08/27 17:25:36	1.189
--- except.c	2001/09/12 15:37:20
*************** connect_post_landing_pads ()
*** 1850,1856 ****
        seq = get_insns ();
        end_sequence ();
        emit_insns_before (seq, region->resume);
!       flow_delete_insn (region->resume);
      }
  }
  
--- 1850,1856 ----
        seq = get_insns ();
        end_sequence ();
        emit_insns_before (seq, region->resume);
!       delete_insn (region->resume);
      }
  }
  
Index: flow.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/flow.c,v
retrieving revision 1.477
diff -c -3 -p -r1.477 flow.c
*** flow.c	2001/09/10 12:23:07	1.477
--- flow.c	2001/09/12 15:37:21
*************** delete_dead_jumptables ()
*** 810,817 ****
  	{
  	  if (rtl_dump_file)
  	    fprintf (rtl_dump_file, "Dead jumptable %i removed\n", INSN_UID (insn));
! 	  flow_delete_insn (NEXT_INSN (insn));
! 	  flow_delete_insn (insn);
  	  next = NEXT_INSN (next);
  	}
      }
--- 810,817 ----
  	{
  	  if (rtl_dump_file)
  	    fprintf (rtl_dump_file, "Dead jumptable %i removed\n", INSN_UID (insn));
! 	  delete_insn (NEXT_INSN (insn));
! 	  delete_insn (insn);
  	  next = NEXT_INSN (next);
  	}
      }
*************** propagate_block_delete_insn (bb, insn)
*** 1368,1374 ****
  	  for (i = 0; i < len; i++)
  	    LABEL_NUSES (XEXP (XVECEXP (pat, diff_vec_p, i), 0))--;
  
! 	  flow_delete_insn (next);
  	}
      }
  
--- 1368,1374 ----
  	  for (i = 0; i < len; i++)
  	    LABEL_NUSES (XEXP (XVECEXP (pat, diff_vec_p, i), 0))--;
  
! 	  delete_insn (next);
  	}
      }
  
*************** propagate_block_delete_insn (bb, insn)
*** 1377,1383 ****
        bb->end = PREV_INSN (insn);
        purge_dead_edges (bb);
      }
!   flow_delete_insn (insn);
  }
  
  /* Delete dead libcalls for propagate_block.  Return the insn
--- 1377,1383 ----
        bb->end = PREV_INSN (insn);
        purge_dead_edges (bb);
      }
!   delete_insn (insn);
  }
  
  /* Delete dead libcalls for propagate_block.  Return the insn
Index: function.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/function.c,v
retrieving revision 1.305
diff -c -3 -p -r1.305 function.c
*** function.c	2001/09/05 17:48:26	1.305
--- function.c	2001/09/12 15:37:23
*************** thread_prologue_and_epilogue_insns (f)
*** 7309,7315 ****
  	      if (simplejump_p (jump))
  		{
  		  emit_return_into_block (bb, epilogue_line_note);
! 		  flow_delete_insn (jump);
  		}
  
  	      /* If we have a conditional jump, we can try to replace
--- 7309,7315 ----
  	      if (simplejump_p (jump))
  		{
  		  emit_return_into_block (bb, epilogue_line_note);
! 		  delete_insn (jump);
  		}
  
  	      /* If we have a conditional jump, we can try to replace
Index: ifcvt.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/ifcvt.c,v
retrieving revision 1.66
diff -c -3 -p -r1.66 ifcvt.c
*** ifcvt.c	2001/08/22 14:51:32	1.66
--- ifcvt.c	2001/09/12 15:37:23
*************** noce_process_if_block (test_bb, then_bb,
*** 1767,1773 ****
    /* The original sets may now be killed.  */
    if (insn_a == then_bb->end)
      then_bb->end = PREV_INSN (insn_a);
!   flow_delete_insn (insn_a);
  
    /* Several special cases here: First, we may have reused insn_b above,
       in which case insn_b is now NULL.  Second, we want to delete insn_b
--- 1767,1773 ----
    /* The original sets may now be killed.  */
    if (insn_a == then_bb->end)
      then_bb->end = PREV_INSN (insn_a);
!   delete_insn (insn_a);
  
    /* Several special cases here: First, we may have reused insn_b above,
       in which case insn_b is now NULL.  Second, we want to delete insn_b
*************** noce_process_if_block (test_bb, then_bb,
*** 1779,1792 ****
      {
        if (insn_b == else_bb->end)
  	else_bb->end = PREV_INSN (insn_b);
!       flow_delete_insn (insn_b);
      }
  
    /* The new insns will have been inserted before cond_earliest.  We should
       be able to remove the jump with impunity, but the condition itself may
       have been modified by gcse to be shared across basic blocks.  */
    test_bb->end = PREV_INSN (jump);
!   flow_delete_insn (jump);
  
    /* If we used a temporary, fix it up now.  */
    if (orig_x != x)
--- 1779,1792 ----
      {
        if (insn_b == else_bb->end)
  	else_bb->end = PREV_INSN (insn_b);
!       delete_insn (insn_b);
      }
  
    /* The new insns will have been inserted before cond_earliest.  We should
       be able to remove the jump with impunity, but the condition itself may
       have been modified by gcse to be shared across basic blocks.  */
    test_bb->end = PREV_INSN (jump);
!   delete_insn (jump);
  
    /* If we used a temporary, fix it up now.  */
    if (orig_x != x)
*************** find_cond_trap (test_bb, then_edge, else
*** 2190,2199 ****
    emit_insn_before (seq, cond_earliest);
  
    test_bb->end = PREV_INSN (jump);
!   flow_delete_insn (jump);
  
    trap_bb->end = PREV_INSN (trap);
!   flow_delete_insn (trap);
  
    /* Merge the blocks!  */
    if (trap_bb != then_bb && ! else_bb)
--- 2190,2199 ----
    emit_insn_before (seq, cond_earliest);
  
    test_bb->end = PREV_INSN (jump);
!   delete_insn (jump);
  
    trap_bb->end = PREV_INSN (trap);
!   delete_insn (trap);
  
    /* Merge the blocks!  */
    if (trap_bb != then_bb && ! else_bb)
Index: jump.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/jump.c,v
retrieving revision 1.196
diff -c -3 -p -r1.196 jump.c
*** jump.c	2001/08/31 05:55:53	1.196
--- jump.c	2001/09/12 15:37:23
*************** delete_insn (insn)
*** 1757,1771 ****
      /* Mark this insn as deleted.  */
      INSN_DELETED_P (insn) = 1;
  
-   /* If instruction is followed by a barrier,
-      delete the barrier too.  */
- 
-   if (next != 0 && GET_CODE (next) == BARRIER)
-     {
-       INSN_DELETED_P (next) = 1;
-       next = NEXT_INSN (next);
-     }
- 
    /* Patch out INSN (and the barrier if any) */
  
    if (! dont_really_delete)
--- 1757,1762 ----
*************** delete_insn (insn)
*** 1793,1828 ****
       and delete the label if it is now unused.  */
  
    if (GET_CODE (insn) == JUMP_INSN && JUMP_LABEL (insn))
!     {
!       rtx lab = JUMP_LABEL (insn), lab_next;
! 
!       if (--LABEL_NUSES (lab) == 0)
! 	{
! 	  /* This can delete NEXT or PREV,
! 	     either directly if NEXT is JUMP_LABEL (INSN),
! 	     or indirectly through more levels of jumps.  */
! 	  delete_insn (lab);
! 
! 	  /* I feel a little doubtful about this loop,
! 	     but I see no clean and sure alternative way
! 	     to find the first insn after INSN that is not now deleted.
! 	     I hope this works.  */
! 	  while (next && INSN_DELETED_P (next))
! 	    next = NEXT_INSN (next);
! 	  return next;
! 	}
!       else if ((lab_next = next_nonnote_insn (lab)) != NULL
! 	       && GET_CODE (lab_next) == JUMP_INSN
! 	       && (GET_CODE (PATTERN (lab_next)) == ADDR_VEC
! 		   || GET_CODE (PATTERN (lab_next)) == ADDR_DIFF_VEC))
! 	{
! 	  /* If we're deleting the tablejump, delete the dispatch table.
! 	     We may not be able to kill the label immediately preceeding
! 	     just yet, as it might be referenced in code leading up to
! 	     the tablejump.  */
! 	  delete_insn (lab_next);
! 	}
!     }
  
    /* Likewise if we're deleting a dispatch table.  */
  
--- 1784,1790 ----
       and delete the label if it is now unused.  */
  
    if (GET_CODE (insn) == JUMP_INSN && JUMP_LABEL (insn))
!     LABEL_NUSES (JUMP_LABEL (insn))--;
  
    /* Likewise if we're deleting a dispatch table.  */
  
*************** delete_insn (insn)
*** 1835,1844 ****
        int len = XVECLEN (pat, diff_vec_p);
  
        for (i = 0; i < len; i++)
! 	if (--LABEL_NUSES (XEXP (XVECEXP (pat, diff_vec_p, i), 0)) == 0)
! 	  delete_insn (XEXP (XVECEXP (pat, diff_vec_p, i), 0));
!       while (next && INSN_DELETED_P (next))
! 	next = NEXT_INSN (next);
        return next;
      }
  
--- 1797,1803 ----
        int len = XVECLEN (pat, diff_vec_p);
  
        for (i = 0; i < len; i++)
! 	LABEL_NUSES (XEXP (XVECEXP (pat, diff_vec_p, i), 0))--;
        return next;
      }
  
*************** delete_insn (insn)
*** 1848,1894 ****
        if (REG_NOTE_KIND (note) == REG_LABEL
  	  /* This could also be a NOTE_INSN_DELETED_LABEL note.  */
  	  && GET_CODE (XEXP (note, 0)) == CODE_LABEL)
! 	if (--LABEL_NUSES (XEXP (note, 0)) == 0)
! 	  delete_insn (XEXP (note, 0));
  
    while (prev && (INSN_DELETED_P (prev) || GET_CODE (prev) == NOTE))
      prev = PREV_INSN (prev);
- 
-   /* If INSN was a label and a dispatch table follows it,
-      delete the dispatch table.  The tablejump must have gone already.
-      It isn't useful to fall through into a table.  */
- 
-   if (was_code_label
-       && NEXT_INSN (insn) != 0
-       && GET_CODE (NEXT_INSN (insn)) == JUMP_INSN
-       && (GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_VEC
- 	  || GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_DIFF_VEC))
-     next = delete_insn (NEXT_INSN (insn));
- 
-   /* If INSN was a label, delete insns following it if now unreachable.  */
- 
-   if (was_code_label && prev && GET_CODE (prev) == BARRIER)
-     {
-       register RTX_CODE code;
-       while (next != 0
- 	     && (GET_RTX_CLASS (code = GET_CODE (next)) == 'i'
- 		 || code == NOTE || code == BARRIER
- 		 || (code == CODE_LABEL && INSN_DELETED_P (next))))
- 	{
- 	  if (code == NOTE
- 	      && NOTE_LINE_NUMBER (next) != NOTE_INSN_FUNCTION_END)
- 	    next = NEXT_INSN (next);
- 	  /* Keep going past other deleted labels to delete what follows.  */
- 	  else if (code == CODE_LABEL && INSN_DELETED_P (next))
- 	    next = NEXT_INSN (next);
- 	  else
- 	    /* Note: if this deletes a jump, it can cause more
- 	       deletion of unreachable code, after a different label.
- 	       As long as the value from this recursive call is correct,
- 	       this invocation functions correctly.  */
- 	    next = delete_insn (next);
- 	}
-     }
  
    return next;
  }
--- 1807,1816 ----
        if (REG_NOTE_KIND (note) == REG_LABEL
  	  /* This could also be a NOTE_INSN_DELETED_LABEL note.  */
  	  && GET_CODE (XEXP (note, 0)) == CODE_LABEL)
! 	LABEL_NUSES (XEXP (note, 0))--;
  
    while (prev && (INSN_DELETED_P (prev) || GET_CODE (prev) == NOTE))
      prev = PREV_INSN (prev);
  
    return next;
  }
Index: regmove.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/regmove.c,v
retrieving revision 1.113
diff -c -3 -p -r1.113 regmove.c
*** regmove.c	2001/08/22 14:35:33	1.113
--- regmove.c	2001/09/12 15:37:24
*************** combine_stack_adjustments_for_block (bb)
*** 2408,2414 ****
  						  -last_sp_adjust))
  		    {
  		      /* It worked!  */
! 		      flow_delete_insn (last_sp_set);
  		      last_sp_set = insn;
  		      last_sp_adjust += this_adjust;
  		      free_csa_memlist (memlist);
--- 2408,2414 ----
  						  -last_sp_adjust))
  		    {
  		      /* It worked!  */
! 		      delete_insn (last_sp_set);
  		      last_sp_set = insn;
  		      last_sp_adjust += this_adjust;
  		      free_csa_memlist (memlist);
*************** combine_stack_adjustments_for_block (bb)
*** 2450,2456 ****
  	    {
  	      if (last_sp_set == bb->head)
  		bb->head = NEXT_INSN (last_sp_set);
! 	      flow_delete_insn (last_sp_set);
  
  	      free_csa_memlist (memlist);
  	      memlist = NULL;
--- 2450,2456 ----
  	    {
  	      if (last_sp_set == bb->head)
  		bb->head = NEXT_INSN (last_sp_set);
! 	      delete_insn (last_sp_set);
  
  	      free_csa_memlist (memlist);
  	      memlist = NULL;
*************** combine_stack_adjustments_for_block (bb)
*** 2487,2498 ****
  	break;
  
        if (pending_delete)
! 	flow_delete_insn (pending_delete);
      }
  
    if (pending_delete)
      {
        bb->end = PREV_INSN (pending_delete);
!       flow_delete_insn (pending_delete);
      }
  }
--- 2487,2498 ----
  	break;
  
        if (pending_delete)
! 	delete_insn (pending_delete);
      }
  
    if (pending_delete)
      {
        bb->end = PREV_INSN (pending_delete);
!       delete_insn (pending_delete);
      }
  }
Index: reload1.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/reload1.c,v
retrieving revision 1.291
diff -c -3 -p -r1.291 reload1.c
*** reload1.c	2001/09/02 16:38:46	1.291
--- reload1.c	2001/09/12 15:37:26
*************** fixup_abnormal_edges ()
*** 9519,9525 ****
  	      if (INSN_P (insn))
  		{
  	          insert_insn_on_edge (PATTERN (insn), e);
! 	          flow_delete_insn (insn);
  		}
  	      insn = next;
  	    }
--- 9519,9525 ----
  	      if (INSN_P (insn))
  		{
  	          insert_insn_on_edge (PATTERN (insn), e);
! 	          delete_insn (insn);
  		}
  	      insn = next;
  	    }
Index: ssa-ccp.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/ssa-ccp.c,v
retrieving revision 1.9
diff -c -3 -p -r1.9 ssa-ccp.c
*** ssa-ccp.c	2001/08/28 23:38:12	1.9
--- ssa-ccp.c	2001/09/12 15:37:26
*************** ssa_fast_dce (df)
*** 1220,1239 ****
  	      else if (def == BLOCK_FOR_INSN (def)->head)
  	        {
  		  BLOCK_FOR_INSN (def)->head = NEXT_INSN (def);
! 		  flow_delete_insn (def);
  		}
  	      else if (def == BLOCK_FOR_INSN (def)->end)
  		{
  		  BLOCK_FOR_INSN (def)->end = PREV_INSN (def);
! 		  flow_delete_insn (def);
  		}
  	      else
! 		flow_delete_insn (def);
  	    }
  	  else
! 	    {
! 	      flow_delete_insn (def);
! 	    }
  	  VARRAY_RTX (ssa_definition, reg) = NULL;
  	}
      }
--- 1220,1237 ----
  	      else if (def == BLOCK_FOR_INSN (def)->head)
  	        {
  		  BLOCK_FOR_INSN (def)->head = NEXT_INSN (def);
! 		  delete_insn (def);
  		}
  	      else if (def == BLOCK_FOR_INSN (def)->end)
  		{
  		  BLOCK_FOR_INSN (def)->end = PREV_INSN (def);
! 		  delete_insn (def);
  		}
  	      else
! 		delete_insn (def);
  	    }
  	  else
! 	    delete_insn (def);
  	  VARRAY_RTX (ssa_definition, reg) = NULL;
  	}
      }



More information about the Gcc-patches mailing list