+2004-11-29  Steven Bosscher  <stevenb@suse.de>
+
+       * cfgcleanup.c (outgoing_edges_match, try_crossjump_to_edge):
+       Remove CASE_DROPS_THROUGH checks, it is never defined.
+       * cfglyout.c (fixup_reorder_chain): Likewise.
+       * cfgrtl.c (rtl_verify_flow_info): Likewise.
+       * stmt.c (expand_case): Likewise.
+       * cfgbuild.c (make_edges): Likewise.  Also remove force_fallthru,
+       it is now always 0.
+       * system.h (CASE_DROPS_THROUGH): Poison.
+       * doc/md.texi (casesi): Remove documentation of CASE_DROPS_THROUGH.
+       * doc/tm.texi (casesi): Remove documentation of CASE_DROPS_THROUGH.
+
+       * config/v850/v850.h: Remove commented out CASE_DROPS_THROUGH.
+
 2004-11-29  Andrew Pinski  <pinskia@physics.uc.edu>
 
        PR middle-end/18725
        Use amd64 instead of 64.
 
 2004-11-24  Mark Mitchell  <mark@codesourcery.com>
-            Joseph Myers  <joseph@codesourcery.com>
+           Joseph Myers  <joseph@codesourcery.com>
 
        * crtstuff.c (IN_LIBGCC2): Define it.
        (EH_FRAME_SECTION_CONST): Check EH_TABLES_CAN_BE_READ_ONLY
 
     {
       rtx insn, x;
       enum rtx_code code;
-      int force_fallthru = 0;
       edge e;
 
       if (LABEL_P (BB_HEAD (bb))
                  && GET_CODE (XEXP (SET_SRC (tmp), 2)) == LABEL_REF)
                make_label_edge (edge_cache, bb,
                                 XEXP (XEXP (SET_SRC (tmp), 2), 0), 0);
-
-#ifdef CASE_DROPS_THROUGH
-             /* Silly VAXen.  The ADDR_VEC is going to be in the way of
-                us naturally detecting fallthru into the next block.  */
-             force_fallthru = 1;
-#endif
            }
 
          /* If this is a computed jump, then mark it as reaching
             && NOTE_LINE_NUMBER (insn) != NOTE_INSN_BASIC_BLOCK)
        insn = NEXT_INSN (insn);
 
-      if (!insn || (bb->next_bb == EXIT_BLOCK_PTR && force_fallthru))
+      if (!insn)
        cached_make_edge (edge_cache, bb, EXIT_BLOCK_PTR, EDGE_FALLTHRU);
       else if (bb->next_bb != EXIT_BLOCK_PTR)
        {
-         if (force_fallthru || insn == BB_HEAD (bb->next_bb))
+         if (insn == BB_HEAD (bb->next_bb))
            cached_make_edge (edge_cache, bb, bb->next_bb, EDGE_FALLTHRU);
        }
     }
 
   /* Generic case - we are seeing a computed jump, table jump or trapping
      instruction.  */
 
-#ifndef CASE_DROPS_THROUGH
   /* Check whether there are tablejumps in the end of BB1 and BB2.
      Return true if they are identical.  */
     {
          return false;
        }
     }
-#endif
 
   /* First ensure that the instructions match.  There may be many outgoing
      edges so this test is generally cheaper.  */
       && (newpos1 != BB_HEAD (src1)))
     return false;
 
-#ifndef CASE_DROPS_THROUGH
   /* Here we know that the insns in the end of SRC1 which are common with SRC2
      will be deleted.
      If we have tablejumps in the end of SRC1 and SRC2
            }
        }
     }
-#endif
 
   /* Avoid splitting if possible.  */
   if (newpos2 == BB_HEAD (src2))
 
            }
          else
            {
-#ifndef CASE_DROPS_THROUGH
              /* Otherwise we have some return, switch or computed
                 jump.  In the 99% case, there should not have been a
                 fallthru edge.  */
              gcc_assert (returnjump_p (bb_end_insn) || !e_fall);
              continue;
-#else
-             if (returnjump_p (bb_end_insn) || !e_fall)
-               continue;
-             /* Except for VAX.  Since we didn't have predication for the
-                tablejump, the fallthru block should not have moved.  */
-             if (bb->rbi->next == e_fall->dest)
-               continue;
-             bb_end_insn = skip_insns_after_block (bb);
-#endif
            }
        }
       else
 
          else
            for (insn = NEXT_INSN (BB_END (e->src)); insn != BB_HEAD (e->dest);
                 insn = NEXT_INSN (insn))
-             if (BARRIER_P (insn)
-#ifndef CASE_DROPS_THROUGH
-                 || INSN_P (insn)
-#else
-                 || (INSN_P (insn) && ! JUMP_TABLE_DATA_P (insn))
-#endif
-                 )
+             if (BARRIER_P (insn) || INSN_P (insn))
                {
                  error ("verify_flow_info: Incorrect fallthru %i->%i",
                         e->src->index, e->dest->index);
 
    for the index in the tablejump instruction.  */
 #define CASE_VECTOR_MODE (TARGET_BIG_SWITCH ? SImode : HImode)
 
-/* Define this if the case instruction drops through after the table
-   when the index is out of range.  Don't define it if the case insn
-   jumps to the default label instead.  */
-/* #define CASE_DROPS_THROUGH */
-
 /* Define as C expression which evaluates to nonzero if the tablejump
    instruction expects the table to contain offsets from the address of the
    table.
 
 
 @item
 A label to jump to if the index has a value outside the bounds.
-(If the machine-description macro @code{CASE_DROPS_THROUGH} is defined,
-then an out-of-bounds index drops through to the code following
-the jump table instead of jumping to this label.  In that case,
-this label is not actually used by the @samp{casesi} instruction,
-but it is always provided as an operand.)
 @end enumerate
 
 The table is a @code{addr_vec} or @code{addr_diff_vec} inside of a
 
 is in effect.
 @end defmac
 
-@defmac CASE_DROPS_THROUGH
-Define this if control falls through a @code{case} insn when the index
-value is out of range.  This means the specified default-label is
-actually ignored by the @code{case} insn proper.
-@end defmac
-
 @defmac CASE_VALUES_THRESHOLD
 Define this to be the smallest number of different values for which it
 is best to use a jump-table instead of a tree of conditional branches.
 
            emit_jump_insn (gen_rtx_ADDR_VEC (CASE_VECTOR_MODE,
                                              gen_rtvec_v (ncases, labelvec)));
 
-         /* If the case insn drops through the table,
-            after the table we must jump to the default-label.
-            Otherwise record no drop-through after the table.  */
-#ifdef CASE_DROPS_THROUGH
-         emit_jump (default_label);
-#else
+         /* Record no drop-through after the table.  */
          emit_barrier ();
-#endif
        }
 
       before_case = NEXT_INSN (before_case);
 
        GDB_INV_REF_REGPARM_STABS_LETTER DBX_MEMPARM_STABS_LETTER          \
        PUT_SDB_SRC_FILE STABS_GCC_MARKER DBX_OUTPUT_FUNCTION_END          \
        DBX_OUTPUT_GCC_MARKER DBX_FINISH_SYMBOL SDB_GENERATE_FAKE          \
-       NON_SAVING_SETJMP TARGET_LATE_RTL_PROLOGUE_EPILOGUE
+       NON_SAVING_SETJMP TARGET_LATE_RTL_PROLOGUE_EPILOGUE                \
+       CASE_DROPS_THROUGH
 
 /* Hooks that are no longer used.  */
  #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE  \