Home | History | Annotate | Line # | Download | only in gcc
      1 /* Dead code elimination pass for the GNU compiler.
      2    Copyright (C) 2002-2022 Free Software Foundation, Inc.
      3    Contributed by Ben Elliston <bje (at) redhat.com>
      4    and Andrew MacLeod <amacleod (at) redhat.com>
      5    Adapted to use control dependence by Steven Bosscher, SUSE Labs.
      6 
      7 This file is part of GCC.
      8 
      9 GCC is free software; you can redistribute it and/or modify it
     10 under the terms of the GNU General Public License as published by the
     11 Free Software Foundation; either version 3, or (at your option) any
     12 later version.
     13 
     14 GCC is distributed in the hope that it will be useful, but WITHOUT
     15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     16 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     17 for more details.
     18 
     19 You should have received a copy of the GNU General Public License
     20 along with GCC; see the file COPYING3.  If not see
     21 <http://www.gnu.org/licenses/>.  */
     22 
     23 /* Dead code elimination.
     24 
     25    References:
     26 
     27      Building an Optimizing Compiler,
     28      Robert Morgan, Butterworth-Heinemann, 1998, Section 8.9.
     29 
     30      Advanced Compiler Design and Implementation,
     31      Steven Muchnick, Morgan Kaufmann, 1997, Section 18.10.
     32 
     33    Dead-code elimination is the removal of statements which have no
     34    impact on the program's output.  "Dead statements" have no impact
     35    on the program's output, while "necessary statements" may have
     36    impact on the output.
     37 
     38    The algorithm consists of three phases:
     39    1. Marking as necessary all statements known to be necessary,
     40       e.g. most function calls, writing a value to memory, etc;
     41    2. Propagating necessary statements, e.g., the statements
     42       giving values to operands in necessary statements; and
     43    3. Removing dead statements.  */
     44 
     45 #include "config.h"
     46 #include "system.h"
     47 #include "coretypes.h"
     48 #include "backend.h"
     49 #include "rtl.h"
     50 #include "tree.h"
     51 #include "gimple.h"
     52 #include "cfghooks.h"
     53 #include "tree-pass.h"
     54 #include "ssa.h"
     55 #include "gimple-pretty-print.h"
     56 #include "fold-const.h"
     57 #include "calls.h"
     58 #include "cfganal.h"
     59 #include "tree-eh.h"
     60 #include "gimplify.h"
     61 #include "gimple-iterator.h"
     62 #include "tree-cfg.h"
     63 #include "tree-ssa-loop-niter.h"
     64 #include "tree-into-ssa.h"
     65 #include "tree-dfa.h"
     66 #include "cfgloop.h"
     67 #include "tree-scalar-evolution.h"
     68 #include "tree-ssa-propagate.h"
     69 #include "gimple-fold.h"
     70 #include "tree-ssa.h"
     71 
     72 static struct stmt_stats
     73 {
     74   int total;
     75   int total_phis;
     76   int removed;
     77   int removed_phis;
     78 } stats;
     79 
     80 #define STMT_NECESSARY GF_PLF_1
     81 
     82 static vec<gimple *> worklist;
     83 
     84 /* Vector indicating an SSA name has already been processed and marked
     85    as necessary.  */
     86 static sbitmap processed;
     87 
     88 /* Vector indicating that the last statement of a basic block has already
     89    been marked as necessary.  */
     90 static sbitmap last_stmt_necessary;
     91 
     92 /* Vector indicating that BB contains statements that are live.  */
     93 static sbitmap bb_contains_live_stmts;
     94 
     95 /* Before we can determine whether a control branch is dead, we need to
     96    compute which blocks are control dependent on which edges.
     97 
     98    We expect each block to be control dependent on very few edges so we
     99    use a bitmap for each block recording its edges.  An array holds the
    100    bitmap.  The Ith bit in the bitmap is set if that block is dependent
    101    on the Ith edge.  */
    102 static control_dependences *cd;
    103 
    104 /* Vector indicating that a basic block has already had all the edges
    105    processed that it is control dependent on.  */
    106 static sbitmap visited_control_parents;
    107 
    108 /* TRUE if this pass alters the CFG (by removing control statements).
    109    FALSE otherwise.
    110 
    111    If this pass alters the CFG, then it will arrange for the dominators
    112    to be recomputed.  */
    113 static bool cfg_altered;
    114 
    115 /* When non-NULL holds map from basic block index into the postorder.  */
    116 static int *bb_postorder;
    117 
    118 
    119 /* True if we should treat any stmt with a vdef as necessary.  */
    120 
    121 static inline bool
    122 keep_all_vdefs_p ()
    123 {
    124   return optimize_debug;
    125 }
    126 
    127 /* If STMT is not already marked necessary, mark it, and add it to the
    128    worklist if ADD_TO_WORKLIST is true.  */
    129 
    130 static inline void
    131 mark_stmt_necessary (gimple *stmt, bool add_to_worklist)
    132 {
    133   gcc_assert (stmt);
    134 
    135   if (gimple_plf (stmt, STMT_NECESSARY))
    136     return;
    137 
    138   if (dump_file && (dump_flags & TDF_DETAILS))
    139     {
    140       fprintf (dump_file, "Marking useful stmt: ");
    141       print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
    142       fprintf (dump_file, "\n");
    143     }
    144 
    145   gimple_set_plf (stmt, STMT_NECESSARY, true);
    146   if (add_to_worklist)
    147     worklist.safe_push (stmt);
    148   if (add_to_worklist && bb_contains_live_stmts && !is_gimple_debug (stmt))
    149     bitmap_set_bit (bb_contains_live_stmts, gimple_bb (stmt)->index);
    150 }
    151 
    152 
    153 /* Mark the statement defining operand OP as necessary.  */
    154 
    155 static inline void
    156 mark_operand_necessary (tree op)
    157 {
    158   gimple *stmt;
    159   int ver;
    160 
    161   gcc_assert (op);
    162 
    163   ver = SSA_NAME_VERSION (op);
    164   if (bitmap_bit_p (processed, ver))
    165     {
    166       stmt = SSA_NAME_DEF_STMT (op);
    167       gcc_assert (gimple_nop_p (stmt)
    168 		  || gimple_plf (stmt, STMT_NECESSARY));
    169       return;
    170     }
    171   bitmap_set_bit (processed, ver);
    172 
    173   stmt = SSA_NAME_DEF_STMT (op);
    174   gcc_assert (stmt);
    175 
    176   if (gimple_plf (stmt, STMT_NECESSARY) || gimple_nop_p (stmt))
    177     return;
    178 
    179   if (dump_file && (dump_flags & TDF_DETAILS))
    180     {
    181       fprintf (dump_file, "marking necessary through ");
    182       print_generic_expr (dump_file, op);
    183       fprintf (dump_file, " stmt ");
    184       print_gimple_stmt (dump_file, stmt, 0);
    185     }
    186 
    187   gimple_set_plf (stmt, STMT_NECESSARY, true);
    188   if (bb_contains_live_stmts)
    189     bitmap_set_bit (bb_contains_live_stmts, gimple_bb (stmt)->index);
    190   worklist.safe_push (stmt);
    191 }
    192 
    193 
    194 /* Mark STMT as necessary if it obviously is.  Add it to the worklist if
    195    it can make other statements necessary.
    196 
    197    If AGGRESSIVE is false, control statements are conservatively marked as
    198    necessary.  */
    199 
    200 static void
    201 mark_stmt_if_obviously_necessary (gimple *stmt, bool aggressive)
    202 {
    203   /* Statements that are implicitly live.  Most function calls, asm
    204      and return statements are required.  Labels and GIMPLE_BIND nodes
    205      are kept because they are control flow, and we have no way of
    206      knowing whether they can be removed.  DCE can eliminate all the
    207      other statements in a block, and CFG can then remove the block
    208      and labels.  */
    209   switch (gimple_code (stmt))
    210     {
    211     case GIMPLE_PREDICT:
    212     case GIMPLE_LABEL:
    213       mark_stmt_necessary (stmt, false);
    214       return;
    215 
    216     case GIMPLE_ASM:
    217     case GIMPLE_RESX:
    218     case GIMPLE_RETURN:
    219       mark_stmt_necessary (stmt, true);
    220       return;
    221 
    222     case GIMPLE_CALL:
    223       {
    224 	tree callee = gimple_call_fndecl (stmt);
    225 	if (callee != NULL_TREE
    226 	    && fndecl_built_in_p (callee, BUILT_IN_NORMAL))
    227 	  switch (DECL_FUNCTION_CODE (callee))
    228 	    {
    229 	    case BUILT_IN_MALLOC:
    230 	    case BUILT_IN_ALIGNED_ALLOC:
    231 	    case BUILT_IN_CALLOC:
    232 	    CASE_BUILT_IN_ALLOCA:
    233 	    case BUILT_IN_STRDUP:
    234 	    case BUILT_IN_STRNDUP:
    235 	    case BUILT_IN_GOMP_ALLOC:
    236 	      return;
    237 
    238 	    default:;
    239 	    }
    240 
    241 	if (callee != NULL_TREE
    242 	    && flag_allocation_dce
    243 	    && DECL_IS_REPLACEABLE_OPERATOR_NEW_P (callee))
    244 	  return;
    245 
    246 	/* IFN_GOACC_LOOP calls are necessary in that they are used to
    247 	   represent parameter (i.e. step, bound) of a lowered OpenACC
    248 	   partitioned loop.  But this kind of partitioned loop might not
    249 	   survive from aggressive loop removal for it has loop exit and
    250 	   is assumed to be finite.  Therefore, we need to explicitly mark
    251 	   these calls. (An example is libgomp.oacc-c-c++-common/pr84955.c) */
    252 	if (gimple_call_internal_p (stmt, IFN_GOACC_LOOP))
    253 	  {
    254 	    mark_stmt_necessary (stmt, true);
    255 	    return;
    256 	  }
    257 	break;
    258       }
    259 
    260     case GIMPLE_DEBUG:
    261       /* Debug temps without a value are not useful.  ??? If we could
    262 	 easily locate the debug temp bind stmt for a use thereof,
    263 	 would could refrain from marking all debug temps here, and
    264 	 mark them only if they're used.  */
    265       if (gimple_debug_nonbind_marker_p (stmt)
    266 	  || !gimple_debug_bind_p (stmt)
    267 	  || gimple_debug_bind_has_value_p (stmt)
    268 	  || TREE_CODE (gimple_debug_bind_get_var (stmt)) != DEBUG_EXPR_DECL)
    269 	mark_stmt_necessary (stmt, false);
    270       return;
    271 
    272     case GIMPLE_GOTO:
    273       gcc_assert (!simple_goto_p (stmt));
    274       mark_stmt_necessary (stmt, true);
    275       return;
    276 
    277     case GIMPLE_COND:
    278       gcc_assert (EDGE_COUNT (gimple_bb (stmt)->succs) == 2);
    279       /* Fall through.  */
    280 
    281     case GIMPLE_SWITCH:
    282       if (! aggressive)
    283 	mark_stmt_necessary (stmt, true);
    284       break;
    285 
    286     case GIMPLE_ASSIGN:
    287       /* Mark indirect CLOBBERs to be lazily removed if their SSA operands
    288 	 do not prevail.  That also makes control flow leading to them
    289 	 not necessary in aggressive mode.  */
    290       if (gimple_clobber_p (stmt) && !zero_ssa_operands (stmt, SSA_OP_USE))
    291 	return;
    292       break;
    293 
    294     default:
    295       break;
    296     }
    297 
    298   /* If the statement has volatile operands, it needs to be preserved.
    299      Same for statements that can alter control flow in unpredictable
    300      ways.  */
    301   if (gimple_has_side_effects (stmt) || is_ctrl_altering_stmt (stmt))
    302     {
    303       mark_stmt_necessary (stmt, true);
    304       return;
    305     }
    306 
    307   /* If a statement could throw, it can be deemed necessary unless we
    308      are allowed to remove dead EH.  Test this after checking for
    309      new/delete operators since we always elide their EH.  */
    310   if (!cfun->can_delete_dead_exceptions
    311       && stmt_could_throw_p (cfun, stmt))
    312     {
    313       mark_stmt_necessary (stmt, true);
    314       return;
    315     }
    316 
    317   if ((gimple_vdef (stmt) && keep_all_vdefs_p ())
    318       || stmt_may_clobber_global_p (stmt, false))
    319     {
    320       mark_stmt_necessary (stmt, true);
    321       return;
    322     }
    323 
    324   return;
    325 }
    326 
    327 
    328 /* Mark the last statement of BB as necessary.  */
    329 
    330 static void
    331 mark_last_stmt_necessary (basic_block bb)
    332 {
    333   gimple *stmt = last_stmt (bb);
    334 
    335   bitmap_set_bit (last_stmt_necessary, bb->index);
    336   bitmap_set_bit (bb_contains_live_stmts, bb->index);
    337 
    338   /* We actually mark the statement only if it is a control statement.  */
    339   if (stmt && is_ctrl_stmt (stmt))
    340     mark_stmt_necessary (stmt, true);
    341 }
    342 
    343 
    344 /* Mark control dependent edges of BB as necessary.  We have to do this only
    345    once for each basic block so we set the appropriate bit after we're done.
    346 
    347    When IGNORE_SELF is true, ignore BB in the list of control dependences.  */
    348 
    349 static void
    350 mark_control_dependent_edges_necessary (basic_block bb, bool ignore_self)
    351 {
    352   bitmap_iterator bi;
    353   unsigned edge_number;
    354   bool skipped = false;
    355 
    356   gcc_assert (bb != EXIT_BLOCK_PTR_FOR_FN (cfun));
    357 
    358   if (bb == ENTRY_BLOCK_PTR_FOR_FN (cfun))
    359     return;
    360 
    361   EXECUTE_IF_SET_IN_BITMAP (cd->get_edges_dependent_on (bb->index),
    362 			    0, edge_number, bi)
    363     {
    364       basic_block cd_bb = cd->get_edge_src (edge_number);
    365 
    366       if (ignore_self && cd_bb == bb)
    367 	{
    368 	  skipped = true;
    369 	  continue;
    370 	}
    371 
    372       if (!bitmap_bit_p (last_stmt_necessary, cd_bb->index))
    373 	mark_last_stmt_necessary (cd_bb);
    374     }
    375 
    376   if (!skipped)
    377     bitmap_set_bit (visited_control_parents, bb->index);
    378 }
    379 
    380 
    381 /* Find obviously necessary statements.  These are things like most function
    382    calls, and stores to file level variables.
    383 
    384    If EL is NULL, control statements are conservatively marked as
    385    necessary.  Otherwise it contains the list of edges used by control
    386    dependence analysis.  */
    387 
    388 static void
    389 find_obviously_necessary_stmts (bool aggressive)
    390 {
    391   basic_block bb;
    392   gimple_stmt_iterator gsi;
    393   edge e;
    394   gimple *phi, *stmt;
    395   int flags;
    396 
    397   FOR_EACH_BB_FN (bb, cfun)
    398     {
    399       /* PHI nodes are never inherently necessary.  */
    400       for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
    401 	{
    402 	  phi = gsi_stmt (gsi);
    403 	  gimple_set_plf (phi, STMT_NECESSARY, false);
    404 	}
    405 
    406       /* Check all statements in the block.  */
    407       for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
    408 	{
    409 	  stmt = gsi_stmt (gsi);
    410 	  gimple_set_plf (stmt, STMT_NECESSARY, false);
    411 	  mark_stmt_if_obviously_necessary (stmt, aggressive);
    412 	}
    413     }
    414 
    415   /* Pure and const functions are finite and thus have no infinite loops in
    416      them.  */
    417   flags = flags_from_decl_or_type (current_function_decl);
    418   if ((flags & (ECF_CONST|ECF_PURE)) && !(flags & ECF_LOOPING_CONST_OR_PURE))
    419     return;
    420 
    421   /* Prevent the empty possibly infinite loops from being removed.  This is
    422      needed to make the logic in remove_dead_stmt work to identify the
    423      correct edge to keep when removing a controlling condition.  */
    424   if (aggressive)
    425     {
    426       if (mark_irreducible_loops ())
    427 	FOR_EACH_BB_FN (bb, cfun)
    428 	  {
    429 	    edge_iterator ei;
    430 	    FOR_EACH_EDGE (e, ei, bb->succs)
    431 	      if ((e->flags & EDGE_DFS_BACK)
    432 		  && (e->flags & EDGE_IRREDUCIBLE_LOOP))
    433 		{
    434 	          if (dump_file)
    435 		    fprintf (dump_file, "Marking back edge of irreducible "
    436 			     "loop %i->%i\n", e->src->index, e->dest->index);
    437 		  mark_control_dependent_edges_necessary (e->dest, false);
    438 		}
    439 	  }
    440 
    441       for (auto loop : loops_list (cfun, 0))
    442 	/* For loops without an exit do not mark any condition.  */
    443 	if (loop->exits->next->e && !finite_loop_p (loop))
    444 	  {
    445 	    if (dump_file)
    446 	      fprintf (dump_file, "cannot prove finiteness of loop %i\n",
    447 		       loop->num);
    448 	    mark_control_dependent_edges_necessary (loop->latch, false);
    449 	  }
    450     }
    451 }
    452 
    453 
    454 /* Return true if REF is based on an aliased base, otherwise false.  */
    455 
    456 static bool
    457 ref_may_be_aliased (tree ref)
    458 {
    459   gcc_assert (TREE_CODE (ref) != WITH_SIZE_EXPR);
    460   while (handled_component_p (ref))
    461     ref = TREE_OPERAND (ref, 0);
    462   if ((TREE_CODE (ref) == MEM_REF || TREE_CODE (ref) == TARGET_MEM_REF)
    463       && TREE_CODE (TREE_OPERAND (ref, 0)) == ADDR_EXPR)
    464     ref = TREE_OPERAND (TREE_OPERAND (ref, 0), 0);
    465   return !(DECL_P (ref)
    466 	   && !may_be_aliased (ref));
    467 }
    468 
    469 static bitmap visited = NULL;
    470 static unsigned int longest_chain = 0;
    471 static unsigned int total_chain = 0;
    472 static unsigned int nr_walks = 0;
    473 static bool chain_ovfl = false;
    474 
    475 /* Worker for the walker that marks reaching definitions of REF,
    476    which is based on a non-aliased decl, necessary.  It returns
    477    true whenever the defining statement of the current VDEF is
    478    a kill for REF, as no dominating may-defs are necessary for REF
    479    anymore.  DATA points to the basic-block that contains the
    480    stmt that refers to REF.  */
    481 
    482 static bool
    483 mark_aliased_reaching_defs_necessary_1 (ao_ref *ref, tree vdef, void *data)
    484 {
    485   gimple *def_stmt = SSA_NAME_DEF_STMT (vdef);
    486 
    487   /* All stmts we visit are necessary.  */
    488   if (! gimple_clobber_p (def_stmt))
    489     mark_operand_necessary (vdef);
    490 
    491   /* If the stmt lhs kills ref, then we can stop walking.  */
    492   if (gimple_has_lhs (def_stmt)
    493       && TREE_CODE (gimple_get_lhs (def_stmt)) != SSA_NAME
    494       /* The assignment is not necessarily carried out if it can throw
    495          and we can catch it in the current function where we could inspect
    496 	 the previous value.
    497          ???  We only need to care about the RHS throwing.  For aggregate
    498 	 assignments or similar calls and non-call exceptions the LHS
    499 	 might throw as well.  */
    500       && !stmt_can_throw_internal (cfun, def_stmt))
    501     {
    502       tree base, lhs = gimple_get_lhs (def_stmt);
    503       poly_int64 size, offset, max_size;
    504       bool reverse;
    505       ao_ref_base (ref);
    506       base
    507 	= get_ref_base_and_extent (lhs, &offset, &size, &max_size, &reverse);
    508       /* We can get MEM[symbol: sZ, index: D.8862_1] here,
    509 	 so base == refd->base does not always hold.  */
    510       if (base == ref->base)
    511 	{
    512 	  /* For a must-alias check we need to be able to constrain
    513 	     the accesses properly.  */
    514 	  if (known_eq (size, max_size)
    515 	      && known_subrange_p (ref->offset, ref->max_size, offset, size))
    516 	    return true;
    517 	  /* Or they need to be exactly the same.  */
    518 	  else if (ref->ref
    519 		   /* Make sure there is no induction variable involved
    520 		      in the references (gcc.c-torture/execute/pr42142.c).
    521 		      The simplest way is to check if the kill dominates
    522 		      the use.  */
    523 		   /* But when both are in the same block we cannot
    524 		      easily tell whether we came from a backedge
    525 		      unless we decide to compute stmt UIDs
    526 		      (see PR58246).  */
    527 		   && (basic_block) data != gimple_bb (def_stmt)
    528 		   && dominated_by_p (CDI_DOMINATORS, (basic_block) data,
    529 				      gimple_bb (def_stmt))
    530 		   && operand_equal_p (ref->ref, lhs, 0))
    531 	    return true;
    532 	}
    533     }
    534 
    535   /* Otherwise keep walking.  */
    536   return false;
    537 }
    538 
    539 static void
    540 mark_aliased_reaching_defs_necessary (gimple *stmt, tree ref)
    541 {
    542   /* Should have been caught before calling this function.  */
    543   gcc_checking_assert (!keep_all_vdefs_p ());
    544 
    545   unsigned int chain;
    546   ao_ref refd;
    547   gcc_assert (!chain_ovfl);
    548   ao_ref_init (&refd, ref);
    549   chain = walk_aliased_vdefs (&refd, gimple_vuse (stmt),
    550 			      mark_aliased_reaching_defs_necessary_1,
    551 			      gimple_bb (stmt), NULL);
    552   if (chain > longest_chain)
    553     longest_chain = chain;
    554   total_chain += chain;
    555   nr_walks++;
    556 }
    557 
    558 /* Worker for the walker that marks reaching definitions of REF, which
    559    is not based on a non-aliased decl.  For simplicity we need to end
    560    up marking all may-defs necessary that are not based on a non-aliased
    561    decl.  The only job of this walker is to skip may-defs based on
    562    a non-aliased decl.  */
    563 
    564 static bool
    565 mark_all_reaching_defs_necessary_1 (ao_ref *ref ATTRIBUTE_UNUSED,
    566 				    tree vdef, void *data ATTRIBUTE_UNUSED)
    567 {
    568   gimple *def_stmt = SSA_NAME_DEF_STMT (vdef);
    569 
    570   /* We have to skip already visited (and thus necessary) statements
    571      to make the chaining work after we dropped back to simple mode.  */
    572   if (chain_ovfl
    573       && bitmap_bit_p (processed, SSA_NAME_VERSION (vdef)))
    574     {
    575       gcc_assert (gimple_nop_p (def_stmt)
    576 		  || gimple_plf (def_stmt, STMT_NECESSARY));
    577       return false;
    578     }
    579 
    580   /* We want to skip stores to non-aliased variables.  */
    581   if (!chain_ovfl
    582       && gimple_assign_single_p (def_stmt))
    583     {
    584       tree lhs = gimple_assign_lhs (def_stmt);
    585       if (!ref_may_be_aliased (lhs))
    586 	return false;
    587     }
    588 
    589   /* We want to skip statments that do not constitute stores but have
    590      a virtual definition.  */
    591   if (gcall *call = dyn_cast <gcall *> (def_stmt))
    592     {
    593       tree callee = gimple_call_fndecl (call);
    594       if (callee != NULL_TREE
    595 	  && fndecl_built_in_p (callee, BUILT_IN_NORMAL))
    596 	switch (DECL_FUNCTION_CODE (callee))
    597 	  {
    598 	  case BUILT_IN_MALLOC:
    599 	  case BUILT_IN_ALIGNED_ALLOC:
    600 	  case BUILT_IN_CALLOC:
    601 	  CASE_BUILT_IN_ALLOCA:
    602 	  case BUILT_IN_FREE:
    603 	  case BUILT_IN_GOMP_ALLOC:
    604 	  case BUILT_IN_GOMP_FREE:
    605 	    return false;
    606 
    607 	  default:;
    608 	  }
    609 
    610       if (callee != NULL_TREE
    611 	  && (DECL_IS_REPLACEABLE_OPERATOR_NEW_P (callee)
    612 	      || DECL_IS_OPERATOR_DELETE_P (callee))
    613 	  && gimple_call_from_new_or_delete (call))
    614 	return false;
    615     }
    616 
    617   if (! gimple_clobber_p (def_stmt))
    618     mark_operand_necessary (vdef);
    619 
    620   return false;
    621 }
    622 
    623 static void
    624 mark_all_reaching_defs_necessary (gimple *stmt)
    625 {
    626   /* Should have been caught before calling this function.  */
    627   gcc_checking_assert (!keep_all_vdefs_p ());
    628   walk_aliased_vdefs (NULL, gimple_vuse (stmt),
    629 		      mark_all_reaching_defs_necessary_1, NULL, &visited);
    630 }
    631 
    632 /* Return true for PHI nodes with one or identical arguments
    633    can be removed.  */
    634 static bool
    635 degenerate_phi_p (gimple *phi)
    636 {
    637   unsigned int i;
    638   tree op = gimple_phi_arg_def (phi, 0);
    639   for (i = 1; i < gimple_phi_num_args (phi); i++)
    640     if (gimple_phi_arg_def (phi, i) != op)
    641       return false;
    642   return true;
    643 }
    644 
    645 /* Return that NEW_CALL and DELETE_CALL are a valid pair of new
    646    and delete  operators.  */
    647 
    648 static bool
    649 valid_new_delete_pair_p (gimple *new_call, gimple *delete_call)
    650 {
    651   tree new_asm = DECL_ASSEMBLER_NAME (gimple_call_fndecl (new_call));
    652   tree delete_asm = DECL_ASSEMBLER_NAME (gimple_call_fndecl (delete_call));
    653   return valid_new_delete_pair_p (new_asm, delete_asm);
    654 }
    655 
    656 /* Propagate necessity using the operands of necessary statements.
    657    Process the uses on each statement in the worklist, and add all
    658    feeding statements which contribute to the calculation of this
    659    value to the worklist.
    660 
    661    In conservative mode, EL is NULL.  */
    662 
    663 static void
    664 propagate_necessity (bool aggressive)
    665 {
    666   gimple *stmt;
    667 
    668   if (dump_file && (dump_flags & TDF_DETAILS))
    669     fprintf (dump_file, "\nProcessing worklist:\n");
    670 
    671   while (worklist.length () > 0)
    672     {
    673       /* Take STMT from worklist.  */
    674       stmt = worklist.pop ();
    675 
    676       if (dump_file && (dump_flags & TDF_DETAILS))
    677 	{
    678 	  fprintf (dump_file, "processing: ");
    679 	  print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
    680 	  fprintf (dump_file, "\n");
    681 	}
    682 
    683       if (aggressive)
    684 	{
    685 	  /* Mark the last statement of the basic blocks on which the block
    686 	     containing STMT is control dependent, but only if we haven't
    687 	     already done so.  */
    688 	  basic_block bb = gimple_bb (stmt);
    689 	  if (bb != ENTRY_BLOCK_PTR_FOR_FN (cfun)
    690 	      && !bitmap_bit_p (visited_control_parents, bb->index))
    691 	    mark_control_dependent_edges_necessary (bb, false);
    692 	}
    693 
    694       if (gimple_code (stmt) == GIMPLE_PHI
    695 	  /* We do not process virtual PHI nodes nor do we track their
    696 	     necessity.  */
    697 	  && !virtual_operand_p (gimple_phi_result (stmt)))
    698 	{
    699 	  /* PHI nodes are somewhat special in that each PHI alternative has
    700 	     data and control dependencies.  All the statements feeding the
    701 	     PHI node's arguments are always necessary.  In aggressive mode,
    702 	     we also consider the control dependent edges leading to the
    703 	     predecessor block associated with each PHI alternative as
    704 	     necessary.  */
    705 	  gphi *phi = as_a <gphi *> (stmt);
    706 	  size_t k;
    707 
    708 	  for (k = 0; k < gimple_phi_num_args (stmt); k++)
    709             {
    710 	      tree arg = PHI_ARG_DEF (stmt, k);
    711 	      if (TREE_CODE (arg) == SSA_NAME)
    712 		mark_operand_necessary (arg);
    713 	    }
    714 
    715 	  /* For PHI operands it matters from where the control flow arrives
    716 	     to the BB.  Consider the following example:
    717 
    718 	     a=exp1;
    719 	     b=exp2;
    720 	     if (test)
    721 		;
    722 	     else
    723 		;
    724 	     c=PHI(a,b)
    725 
    726 	     We need to mark control dependence of the empty basic blocks, since they
    727 	     contains computation of PHI operands.
    728 
    729 	     Doing so is too restrictive in the case the predecestor block is in
    730 	     the loop. Consider:
    731 
    732 	      if (b)
    733 		{
    734 		  int i;
    735 		  for (i = 0; i<1000; ++i)
    736 		    ;
    737 		  j = 0;
    738 		}
    739 	      return j;
    740 
    741 	     There is PHI for J in the BB containing return statement.
    742 	     In this case the control dependence of predecestor block (that is
    743 	     within the empty loop) also contains the block determining number
    744 	     of iterations of the block that would prevent removing of empty
    745 	     loop in this case.
    746 
    747 	     This scenario can be avoided by splitting critical edges.
    748 	     To save the critical edge splitting pass we identify how the control
    749 	     dependence would look like if the edge was split.
    750 
    751 	     Consider the modified CFG created from current CFG by splitting
    752 	     edge B->C.  In the postdominance tree of modified CFG, C' is
    753 	     always child of C.  There are two cases how chlids of C' can look
    754 	     like:
    755 
    756 		1) C' is leaf
    757 
    758 		   In this case the only basic block C' is control dependent on is B.
    759 
    760 		2) C' has single child that is B
    761 
    762 		   In this case control dependence of C' is same as control
    763 		   dependence of B in original CFG except for block B itself.
    764 		   (since C' postdominate B in modified CFG)
    765 
    766 	     Now how to decide what case happens?  There are two basic options:
    767 
    768 		a) C postdominate B.  Then C immediately postdominate B and
    769 		   case 2 happens iff there is no other way from B to C except
    770 		   the edge B->C.
    771 
    772 		   There is other way from B to C iff there is succesor of B that
    773 		   is not postdominated by B.  Testing this condition is somewhat
    774 		   expensive, because we need to iterate all succesors of B.
    775 		   We are safe to assume that this does not happen: we will mark B
    776 		   as needed when processing the other path from B to C that is
    777 		   conrol dependent on B and marking control dependencies of B
    778 		   itself is harmless because they will be processed anyway after
    779 		   processing control statement in B.
    780 
    781 		b) C does not postdominate B.  Always case 1 happens since there is
    782 		   path from C to exit that does not go through B and thus also C'.  */
    783 
    784 	  if (aggressive && !degenerate_phi_p (stmt))
    785 	    {
    786 	      for (k = 0; k < gimple_phi_num_args (stmt); k++)
    787 		{
    788 		  basic_block arg_bb = gimple_phi_arg_edge (phi, k)->src;
    789 
    790 		  if (gimple_bb (stmt)
    791 		      != get_immediate_dominator (CDI_POST_DOMINATORS, arg_bb))
    792 		    {
    793 		      if (!bitmap_bit_p (last_stmt_necessary, arg_bb->index))
    794 			mark_last_stmt_necessary (arg_bb);
    795 		    }
    796 		  else if (arg_bb != ENTRY_BLOCK_PTR_FOR_FN (cfun)
    797 		           && !bitmap_bit_p (visited_control_parents,
    798 					 arg_bb->index))
    799 		    mark_control_dependent_edges_necessary (arg_bb, true);
    800 		}
    801 	    }
    802 	}
    803       else
    804 	{
    805 	  /* Propagate through the operands.  Examine all the USE, VUSE and
    806 	     VDEF operands in this statement.  Mark all the statements
    807 	     which feed this statement's uses as necessary.  */
    808 	  ssa_op_iter iter;
    809 	  tree use;
    810 
    811 	  /* If this is a call to free which is directly fed by an
    812 	     allocation function do not mark that necessary through
    813 	     processing the argument.  */
    814 	  bool is_delete_operator
    815 	    = (is_gimple_call (stmt)
    816 	       && gimple_call_from_new_or_delete (as_a <gcall *> (stmt))
    817 	       && gimple_call_operator_delete_p (as_a <gcall *> (stmt)));
    818 	  if (is_delete_operator
    819 	      || gimple_call_builtin_p (stmt, BUILT_IN_FREE)
    820 	      || gimple_call_builtin_p (stmt, BUILT_IN_GOMP_FREE))
    821 	    {
    822 	      tree ptr = gimple_call_arg (stmt, 0);
    823 	      gcall *def_stmt;
    824 	      tree def_callee;
    825 	      /* If the pointer we free is defined by an allocation
    826 		 function do not add the call to the worklist.  */
    827 	      if (TREE_CODE (ptr) == SSA_NAME
    828 		  && (def_stmt = dyn_cast <gcall *> (SSA_NAME_DEF_STMT (ptr)))
    829 		  && (def_callee = gimple_call_fndecl (def_stmt))
    830 		  && ((DECL_BUILT_IN_CLASS (def_callee) == BUILT_IN_NORMAL
    831 		       && (DECL_FUNCTION_CODE (def_callee) == BUILT_IN_ALIGNED_ALLOC
    832 			   || DECL_FUNCTION_CODE (def_callee) == BUILT_IN_MALLOC
    833 			   || DECL_FUNCTION_CODE (def_callee) == BUILT_IN_CALLOC
    834 			   || DECL_FUNCTION_CODE (def_callee) == BUILT_IN_GOMP_ALLOC))
    835 		      || (DECL_IS_REPLACEABLE_OPERATOR_NEW_P (def_callee)
    836 			  && gimple_call_from_new_or_delete (def_stmt))))
    837 		{
    838 		  if (is_delete_operator
    839 		      && !valid_new_delete_pair_p (def_stmt, stmt))
    840 		    mark_operand_necessary (gimple_call_arg (stmt, 0));
    841 
    842 		  /* Delete operators can have alignment and (or) size
    843 		     as next arguments.  When being a SSA_NAME, they
    844 		     must be marked as necessary.  Similarly GOMP_free.  */
    845 		  if (gimple_call_num_args (stmt) >= 2)
    846 		    for (unsigned i = 1; i < gimple_call_num_args (stmt);
    847 			 i++)
    848 		      {
    849 			tree arg = gimple_call_arg (stmt, i);
    850 			if (TREE_CODE (arg) == SSA_NAME)
    851 			  mark_operand_necessary (arg);
    852 		      }
    853 
    854 		  continue;
    855 		}
    856 	    }
    857 
    858 	  FOR_EACH_SSA_TREE_OPERAND (use, stmt, iter, SSA_OP_USE)
    859 	    mark_operand_necessary (use);
    860 
    861 	  use = gimple_vuse (stmt);
    862 	  if (!use)
    863 	    continue;
    864 
    865 	  /* No need to search for vdefs if we intrinsicly keep them all.  */
    866 	  if (keep_all_vdefs_p ())
    867 	    continue;
    868 
    869 	  /* If we dropped to simple mode make all immediately
    870 	     reachable definitions necessary.  */
    871 	  if (chain_ovfl)
    872 	    {
    873 	      mark_all_reaching_defs_necessary (stmt);
    874 	      continue;
    875 	    }
    876 
    877 	  /* For statements that may load from memory (have a VUSE) we
    878 	     have to mark all reaching (may-)definitions as necessary.
    879 	     We partition this task into two cases:
    880 	      1) explicit loads based on decls that are not aliased
    881 	      2) implicit loads (like calls) and explicit loads not
    882 	         based on decls that are not aliased (like indirect
    883 		 references or loads from globals)
    884 	     For 1) we mark all reaching may-defs as necessary, stopping
    885 	     at dominating kills.  For 2) we want to mark all dominating
    886 	     references necessary, but non-aliased ones which we handle
    887 	     in 1).  By keeping a global visited bitmap for references
    888 	     we walk for 2) we avoid quadratic behavior for those.  */
    889 
    890 	  if (gcall *call = dyn_cast <gcall *> (stmt))
    891 	    {
    892 	      tree callee = gimple_call_fndecl (call);
    893 	      unsigned i;
    894 
    895 	      /* Calls to functions that are merely acting as barriers
    896 		 or that only store to memory do not make any previous
    897 		 stores necessary.  */
    898 	      if (callee != NULL_TREE
    899 		  && DECL_BUILT_IN_CLASS (callee) == BUILT_IN_NORMAL
    900 		  && (DECL_FUNCTION_CODE (callee) == BUILT_IN_MEMSET
    901 		      || DECL_FUNCTION_CODE (callee) == BUILT_IN_MEMSET_CHK
    902 		      || DECL_FUNCTION_CODE (callee) == BUILT_IN_MALLOC
    903 		      || DECL_FUNCTION_CODE (callee) == BUILT_IN_ALIGNED_ALLOC
    904 		      || DECL_FUNCTION_CODE (callee) == BUILT_IN_CALLOC
    905 		      || DECL_FUNCTION_CODE (callee) == BUILT_IN_FREE
    906 		      || DECL_FUNCTION_CODE (callee) == BUILT_IN_VA_END
    907 		      || ALLOCA_FUNCTION_CODE_P (DECL_FUNCTION_CODE (callee))
    908 		      || DECL_FUNCTION_CODE (callee) == BUILT_IN_STACK_SAVE
    909 		      || DECL_FUNCTION_CODE (callee) == BUILT_IN_STACK_RESTORE
    910 		      || DECL_FUNCTION_CODE (callee) == BUILT_IN_ASSUME_ALIGNED))
    911 		continue;
    912 
    913 	      if (callee != NULL_TREE
    914 		  && (DECL_IS_REPLACEABLE_OPERATOR_NEW_P (callee)
    915 		      || DECL_IS_OPERATOR_DELETE_P (callee))
    916 		  && gimple_call_from_new_or_delete (call))
    917 		continue;
    918 
    919 	      /* Calls implicitly load from memory, their arguments
    920 	         in addition may explicitly perform memory loads.  */
    921 	      mark_all_reaching_defs_necessary (call);
    922 	      for (i = 0; i < gimple_call_num_args (call); ++i)
    923 		{
    924 		  tree arg = gimple_call_arg (call, i);
    925 		  if (TREE_CODE (arg) == SSA_NAME
    926 		      || is_gimple_min_invariant (arg))
    927 		    continue;
    928 		  if (TREE_CODE (arg) == WITH_SIZE_EXPR)
    929 		    arg = TREE_OPERAND (arg, 0);
    930 		  if (!ref_may_be_aliased (arg))
    931 		    mark_aliased_reaching_defs_necessary (call, arg);
    932 		}
    933 	    }
    934 	  else if (gimple_assign_single_p (stmt))
    935 	    {
    936 	      tree rhs;
    937 	      /* If this is a load mark things necessary.  */
    938 	      rhs = gimple_assign_rhs1 (stmt);
    939 	      if (TREE_CODE (rhs) != SSA_NAME
    940 		  && !is_gimple_min_invariant (rhs)
    941 		  && TREE_CODE (rhs) != CONSTRUCTOR)
    942 		{
    943 		  if (!ref_may_be_aliased (rhs))
    944 		    mark_aliased_reaching_defs_necessary (stmt, rhs);
    945 		  else
    946 		    mark_all_reaching_defs_necessary (stmt);
    947 		}
    948 	    }
    949 	  else if (greturn *return_stmt = dyn_cast <greturn *> (stmt))
    950 	    {
    951 	      tree rhs = gimple_return_retval (return_stmt);
    952 	      /* A return statement may perform a load.  */
    953 	      if (rhs
    954 		  && TREE_CODE (rhs) != SSA_NAME
    955 		  && !is_gimple_min_invariant (rhs)
    956 		  && TREE_CODE (rhs) != CONSTRUCTOR)
    957 		{
    958 		  if (!ref_may_be_aliased (rhs))
    959 		    mark_aliased_reaching_defs_necessary (stmt, rhs);
    960 		  else
    961 		    mark_all_reaching_defs_necessary (stmt);
    962 		}
    963 	    }
    964 	  else if (gasm *asm_stmt = dyn_cast <gasm *> (stmt))
    965 	    {
    966 	      unsigned i;
    967 	      mark_all_reaching_defs_necessary (stmt);
    968 	      /* Inputs may perform loads.  */
    969 	      for (i = 0; i < gimple_asm_ninputs (asm_stmt); ++i)
    970 		{
    971 		  tree op = TREE_VALUE (gimple_asm_input_op (asm_stmt, i));
    972 		  if (TREE_CODE (op) != SSA_NAME
    973 		      && !is_gimple_min_invariant (op)
    974 		      && TREE_CODE (op) != CONSTRUCTOR
    975 		      && !ref_may_be_aliased (op))
    976 		    mark_aliased_reaching_defs_necessary (stmt, op);
    977 		}
    978 	    }
    979 	  else if (gimple_code (stmt) == GIMPLE_TRANSACTION)
    980 	    {
    981 	      /* The beginning of a transaction is a memory barrier.  */
    982 	      /* ??? If we were really cool, we'd only be a barrier
    983 		 for the memories touched within the transaction.  */
    984 	      mark_all_reaching_defs_necessary (stmt);
    985 	    }
    986 	  else
    987 	    gcc_unreachable ();
    988 
    989 	  /* If we over-used our alias oracle budget drop to simple
    990 	     mode.  The cost metric allows quadratic behavior
    991 	     (number of uses times number of may-defs queries) up to
    992 	     a constant maximal number of queries and after that falls back to
    993 	     super-linear complexity.  */
    994 	  if (/* Constant but quadratic for small functions.  */
    995 	      total_chain > 128 * 128
    996 	      /* Linear in the number of may-defs.  */
    997 	      && total_chain > 32 * longest_chain
    998 	      /* Linear in the number of uses.  */
    999 	      && total_chain > nr_walks * 32)
   1000 	    {
   1001 	      chain_ovfl = true;
   1002 	      if (visited)
   1003 		bitmap_clear (visited);
   1004 	    }
   1005 	}
   1006     }
   1007 }
   1008 
   1009 /* Remove dead PHI nodes from block BB.  */
   1010 
   1011 static bool
   1012 remove_dead_phis (basic_block bb)
   1013 {
   1014   bool something_changed = false;
   1015   gphi *phi;
   1016   gphi_iterator gsi;
   1017 
   1018   for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi);)
   1019     {
   1020       stats.total_phis++;
   1021       phi = gsi.phi ();
   1022 
   1023       /* We do not track necessity of virtual PHI nodes.  Instead do
   1024          very simple dead PHI removal here.  */
   1025       if (virtual_operand_p (gimple_phi_result (phi)))
   1026 	{
   1027 	  /* Virtual PHI nodes with one or identical arguments
   1028 	     can be removed.  */
   1029 	  if (degenerate_phi_p (phi))
   1030 	    {
   1031 	      tree vdef = gimple_phi_result (phi);
   1032 	      tree vuse = gimple_phi_arg_def (phi, 0);
   1033 
   1034 	      use_operand_p use_p;
   1035 	      imm_use_iterator iter;
   1036 	      gimple *use_stmt;
   1037 	      FOR_EACH_IMM_USE_STMT (use_stmt, iter, vdef)
   1038 		FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
   1039 		  SET_USE (use_p, vuse);
   1040 	      if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (vdef)
   1041 	          && TREE_CODE (vuse) == SSA_NAME)
   1042 		SSA_NAME_OCCURS_IN_ABNORMAL_PHI (vuse) = 1;
   1043 	    }
   1044 	  else
   1045 	    gimple_set_plf (phi, STMT_NECESSARY, true);
   1046 	}
   1047 
   1048       if (!gimple_plf (phi, STMT_NECESSARY))
   1049 	{
   1050 	  something_changed = true;
   1051 	  if (dump_file && (dump_flags & TDF_DETAILS))
   1052 	    {
   1053 	      fprintf (dump_file, "Deleting : ");
   1054 	      print_gimple_stmt (dump_file, phi, 0, TDF_SLIM);
   1055 	      fprintf (dump_file, "\n");
   1056 	    }
   1057 
   1058 	  remove_phi_node (&gsi, true);
   1059 	  stats.removed_phis++;
   1060 	  continue;
   1061 	}
   1062 
   1063       gsi_next (&gsi);
   1064     }
   1065   return something_changed;
   1066 }
   1067 
   1068 
   1069 /* Remove dead statement pointed to by iterator I.  Receives the basic block BB
   1070    containing I so that we don't have to look it up.  */
   1071 
   1072 static void
   1073 remove_dead_stmt (gimple_stmt_iterator *i, basic_block bb,
   1074 		  vec<edge> &to_remove_edges)
   1075 {
   1076   gimple *stmt = gsi_stmt (*i);
   1077 
   1078   if (dump_file && (dump_flags & TDF_DETAILS))
   1079     {
   1080       fprintf (dump_file, "Deleting : ");
   1081       print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
   1082       fprintf (dump_file, "\n");
   1083     }
   1084 
   1085   stats.removed++;
   1086 
   1087   /* If we have determined that a conditional branch statement contributes
   1088      nothing to the program, then we not only remove it, but we need to update
   1089      the CFG.  We can chose any of edges out of BB as long as we are sure to not
   1090      close infinite loops.  This is done by always choosing the edge closer to
   1091      exit in inverted_post_order_compute order.  */
   1092   if (is_ctrl_stmt (stmt))
   1093     {
   1094       edge_iterator ei;
   1095       edge e = NULL, e2;
   1096 
   1097       /* See if there is only one non-abnormal edge.  */
   1098       if (single_succ_p (bb))
   1099         e = single_succ_edge (bb);
   1100       /* Otherwise chose one that is closer to bb with live statement in it.
   1101          To be able to chose one, we compute inverted post order starting from
   1102 	 all BBs with live statements.  */
   1103       if (!e)
   1104 	{
   1105 	  if (!bb_postorder)
   1106 	    {
   1107 	      auto_vec<int, 20> postorder;
   1108 		 inverted_post_order_compute (&postorder,
   1109 					      &bb_contains_live_stmts);
   1110 	      bb_postorder = XNEWVEC (int, last_basic_block_for_fn (cfun));
   1111 	      for (unsigned int i = 0; i < postorder.length (); ++i)
   1112 		 bb_postorder[postorder[i]] = i;
   1113 	    }
   1114           FOR_EACH_EDGE (e2, ei, bb->succs)
   1115 	    if (!e || e2->dest == EXIT_BLOCK_PTR_FOR_FN (cfun)
   1116 		|| bb_postorder [e->dest->index]
   1117 		   < bb_postorder [e2->dest->index])
   1118 	      e = e2;
   1119 	}
   1120       gcc_assert (e);
   1121       e->probability = profile_probability::always ();
   1122 
   1123       /* The edge is no longer associated with a conditional, so it does
   1124 	 not have TRUE/FALSE flags.
   1125 	 We are also safe to drop EH/ABNORMAL flags and turn them into
   1126 	 normal control flow, because we know that all the destinations (including
   1127 	 those odd edges) are equivalent for program execution.  */
   1128       e->flags &= ~(EDGE_TRUE_VALUE | EDGE_FALSE_VALUE | EDGE_EH | EDGE_ABNORMAL);
   1129 
   1130       /* The lone outgoing edge from BB will be a fallthru edge.  */
   1131       e->flags |= EDGE_FALLTHRU;
   1132 
   1133       /* Remove the remaining outgoing edges.  */
   1134       FOR_EACH_EDGE (e2, ei, bb->succs)
   1135 	if (e != e2)
   1136 	  {
   1137 	    /* If we made a BB unconditionally exit a loop or removed
   1138 	       an entry into an irreducible region, then this transform
   1139 	       alters the set of BBs in the loop.  Schedule a fixup.  */
   1140 	    if (loop_exit_edge_p (bb->loop_father, e)
   1141 		|| (e2->dest->flags & BB_IRREDUCIBLE_LOOP))
   1142 	      loops_state_set (LOOPS_NEED_FIXUP);
   1143 	    to_remove_edges.safe_push (e2);
   1144 	  }
   1145     }
   1146 
   1147   /* If this is a store into a variable that is being optimized away,
   1148      add a debug bind stmt if possible.  */
   1149   if (MAY_HAVE_DEBUG_BIND_STMTS
   1150       && gimple_assign_single_p (stmt)
   1151       && is_gimple_val (gimple_assign_rhs1 (stmt)))
   1152     {
   1153       tree lhs = gimple_assign_lhs (stmt);
   1154       if ((VAR_P (lhs) || TREE_CODE (lhs) == PARM_DECL)
   1155 	  && !DECL_IGNORED_P (lhs)
   1156 	  && is_gimple_reg_type (TREE_TYPE (lhs))
   1157 	  && !is_global_var (lhs)
   1158 	  && !DECL_HAS_VALUE_EXPR_P (lhs))
   1159 	{
   1160 	  tree rhs = gimple_assign_rhs1 (stmt);
   1161 	  gdebug *note
   1162 	    = gimple_build_debug_bind (lhs, unshare_expr (rhs), stmt);
   1163 	  gsi_insert_after (i, note, GSI_SAME_STMT);
   1164 	}
   1165     }
   1166 
   1167   unlink_stmt_vdef (stmt);
   1168   gsi_remove (i, true);
   1169   release_defs (stmt);
   1170 }
   1171 
   1172 /* Helper for maybe_optimize_arith_overflow.  Find in *TP if there are any
   1173    uses of data (SSA_NAME) other than REALPART_EXPR referencing it.  */
   1174 
   1175 static tree
   1176 find_non_realpart_uses (tree *tp, int *walk_subtrees, void *data)
   1177 {
   1178   if (TYPE_P (*tp) || TREE_CODE (*tp) == REALPART_EXPR)
   1179     *walk_subtrees = 0;
   1180   if (*tp == (tree) data)
   1181     return *tp;
   1182   return NULL_TREE;
   1183 }
   1184 
   1185 /* If the IMAGPART_EXPR of the {ADD,SUB,MUL}_OVERFLOW result is never used,
   1186    but REALPART_EXPR is, optimize the {ADD,SUB,MUL}_OVERFLOW internal calls
   1187    into plain unsigned {PLUS,MINUS,MULT}_EXPR, and if needed reset debug
   1188    uses.  */
   1189 
   1190 static void
   1191 maybe_optimize_arith_overflow (gimple_stmt_iterator *gsi,
   1192 			       enum tree_code subcode)
   1193 {
   1194   gimple *stmt = gsi_stmt (*gsi);
   1195   tree lhs = gimple_call_lhs (stmt);
   1196 
   1197   if (lhs == NULL || TREE_CODE (lhs) != SSA_NAME)
   1198     return;
   1199 
   1200   imm_use_iterator imm_iter;
   1201   use_operand_p use_p;
   1202   bool has_debug_uses = false;
   1203   bool has_realpart_uses = false;
   1204   bool has_other_uses = false;
   1205   FOR_EACH_IMM_USE_FAST (use_p, imm_iter, lhs)
   1206     {
   1207       gimple *use_stmt = USE_STMT (use_p);
   1208       if (is_gimple_debug (use_stmt))
   1209 	has_debug_uses = true;
   1210       else if (is_gimple_assign (use_stmt)
   1211 	       && gimple_assign_rhs_code (use_stmt) == REALPART_EXPR
   1212 	       && TREE_OPERAND (gimple_assign_rhs1 (use_stmt), 0) == lhs)
   1213 	has_realpart_uses = true;
   1214       else
   1215 	{
   1216 	  has_other_uses = true;
   1217 	  break;
   1218 	}
   1219     }
   1220 
   1221   if (!has_realpart_uses || has_other_uses)
   1222     return;
   1223 
   1224   tree arg0 = gimple_call_arg (stmt, 0);
   1225   tree arg1 = gimple_call_arg (stmt, 1);
   1226   location_t loc = gimple_location (stmt);
   1227   tree type = TREE_TYPE (TREE_TYPE (lhs));
   1228   tree utype = type;
   1229   if (!TYPE_UNSIGNED (type))
   1230     utype = build_nonstandard_integer_type (TYPE_PRECISION (type), 1);
   1231   tree result = fold_build2_loc (loc, subcode, utype,
   1232 				 fold_convert_loc (loc, utype, arg0),
   1233 				 fold_convert_loc (loc, utype, arg1));
   1234   result = fold_convert_loc (loc, type, result);
   1235 
   1236   if (has_debug_uses)
   1237     {
   1238       gimple *use_stmt;
   1239       FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, lhs)
   1240 	{
   1241 	  if (!gimple_debug_bind_p (use_stmt))
   1242 	    continue;
   1243 	  tree v = gimple_debug_bind_get_value (use_stmt);
   1244 	  if (walk_tree (&v, find_non_realpart_uses, lhs, NULL))
   1245 	    {
   1246 	      gimple_debug_bind_reset_value (use_stmt);
   1247 	      update_stmt (use_stmt);
   1248 	    }
   1249 	}
   1250     }
   1251 
   1252   if (TREE_CODE (result) == INTEGER_CST && TREE_OVERFLOW (result))
   1253     result = drop_tree_overflow (result);
   1254   tree overflow = build_zero_cst (type);
   1255   tree ctype = build_complex_type (type);
   1256   if (TREE_CODE (result) == INTEGER_CST)
   1257     result = build_complex (ctype, result, overflow);
   1258   else
   1259     result = build2_loc (gimple_location (stmt), COMPLEX_EXPR,
   1260 			 ctype, result, overflow);
   1261 
   1262   if (dump_file && (dump_flags & TDF_DETAILS))
   1263     {
   1264       fprintf (dump_file, "Transforming call: ");
   1265       print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
   1266       fprintf (dump_file, "because the overflow result is never used into: ");
   1267       print_generic_stmt (dump_file, result, TDF_SLIM);
   1268       fprintf (dump_file, "\n");
   1269     }
   1270 
   1271   gimplify_and_update_call_from_tree (gsi, result);
   1272 }
   1273 
   1274 /* Returns whether the control parents of BB are preserved.  */
   1275 
   1276 static bool
   1277 control_parents_preserved_p (basic_block bb)
   1278 {
   1279   /* If we marked the control parents from BB they are preserved.  */
   1280   if (bitmap_bit_p (visited_control_parents, bb->index))
   1281     return true;
   1282 
   1283   /* But they can also end up being marked from elsewhere.  */
   1284   bitmap_iterator bi;
   1285   unsigned edge_number;
   1286   EXECUTE_IF_SET_IN_BITMAP (cd->get_edges_dependent_on (bb->index),
   1287 			    0, edge_number, bi)
   1288     {
   1289       basic_block cd_bb = cd->get_edge_src (edge_number);
   1290       if (cd_bb != bb
   1291 	  && !bitmap_bit_p (last_stmt_necessary, cd_bb->index))
   1292 	return false;
   1293     }
   1294   /* And cache the result.  */
   1295   bitmap_set_bit (visited_control_parents, bb->index);
   1296   return true;
   1297 }
   1298 
   1299 /* Eliminate unnecessary statements. Any instruction not marked as necessary
   1300    contributes nothing to the program, and can be deleted.  */
   1301 
   1302 static bool
   1303 eliminate_unnecessary_stmts (bool aggressive)
   1304 {
   1305   bool something_changed = false;
   1306   basic_block bb;
   1307   gimple_stmt_iterator gsi, psi;
   1308   gimple *stmt;
   1309   tree call;
   1310   auto_vec<edge> to_remove_edges;
   1311 
   1312   if (dump_file && (dump_flags & TDF_DETAILS))
   1313     fprintf (dump_file, "\nEliminating unnecessary statements:\n");
   1314 
   1315   clear_special_calls ();
   1316 
   1317   /* Walking basic blocks and statements in reverse order avoids
   1318      releasing SSA names before any other DEFs that refer to them are
   1319      released.  This helps avoid loss of debug information, as we get
   1320      a chance to propagate all RHSs of removed SSAs into debug uses,
   1321      rather than only the latest ones.  E.g., consider:
   1322 
   1323      x_3 = y_1 + z_2;
   1324      a_5 = x_3 - b_4;
   1325      # DEBUG a => a_5
   1326 
   1327      If we were to release x_3 before a_5, when we reached a_5 and
   1328      tried to substitute it into the debug stmt, we'd see x_3 there,
   1329      but x_3's DEF, type, etc would have already been disconnected.
   1330      By going backwards, the debug stmt first changes to:
   1331 
   1332      # DEBUG a => x_3 - b_4
   1333 
   1334      and then to:
   1335 
   1336      # DEBUG a => y_1 + z_2 - b_4
   1337 
   1338      as desired.  */
   1339   gcc_assert (dom_info_available_p (CDI_DOMINATORS));
   1340   auto_vec<basic_block> h;
   1341   h = get_all_dominated_blocks (CDI_DOMINATORS,
   1342 				single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun)));
   1343 
   1344   while (h.length ())
   1345     {
   1346       bb = h.pop ();
   1347 
   1348       /* Remove dead statements.  */
   1349       auto_bitmap debug_seen;
   1350       for (gsi = gsi_last_bb (bb); !gsi_end_p (gsi); gsi = psi)
   1351 	{
   1352 	  stmt = gsi_stmt (gsi);
   1353 
   1354 	  psi = gsi;
   1355 	  gsi_prev (&psi);
   1356 
   1357 	  stats.total++;
   1358 
   1359 	  /* We can mark a call to free as not necessary if the
   1360 	     defining statement of its argument is not necessary
   1361 	     (and thus is getting removed).  */
   1362 	  if (gimple_plf (stmt, STMT_NECESSARY)
   1363 	      && (gimple_call_builtin_p (stmt, BUILT_IN_FREE)
   1364 		  || (is_gimple_call (stmt)
   1365 		      && gimple_call_from_new_or_delete (as_a <gcall *> (stmt))
   1366 		      && gimple_call_operator_delete_p (as_a <gcall *> (stmt)))))
   1367 	    {
   1368 	      tree ptr = gimple_call_arg (stmt, 0);
   1369 	      if (TREE_CODE (ptr) == SSA_NAME)
   1370 		{
   1371 		  gimple *def_stmt = SSA_NAME_DEF_STMT (ptr);
   1372 		  if (!gimple_nop_p (def_stmt)
   1373 		      && !gimple_plf (def_stmt, STMT_NECESSARY))
   1374 		    gimple_set_plf (stmt, STMT_NECESSARY, false);
   1375 		}
   1376 	    }
   1377 
   1378 	  /* If GSI is not necessary then remove it.  */
   1379 	  if (!gimple_plf (stmt, STMT_NECESSARY))
   1380 	    {
   1381 	      /* Keep clobbers that we can keep live live.  */
   1382 	      if (gimple_clobber_p (stmt))
   1383 		{
   1384 		  ssa_op_iter iter;
   1385 		  use_operand_p use_p;
   1386 		  bool dead = false;
   1387 		  FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_USE)
   1388 		    {
   1389 		      tree name = USE_FROM_PTR (use_p);
   1390 		      if (!SSA_NAME_IS_DEFAULT_DEF (name)
   1391 			  && !bitmap_bit_p (processed, SSA_NAME_VERSION (name)))
   1392 			{
   1393 			  dead = true;
   1394 			  break;
   1395 			}
   1396 		    }
   1397 		  if (!dead
   1398 		      /* When doing CD-DCE we have to ensure all controls
   1399 			 of the stmt are still live.  */
   1400 		      && (!aggressive || control_parents_preserved_p (bb)))
   1401 		    {
   1402 		      bitmap_clear (debug_seen);
   1403 		      continue;
   1404 		    }
   1405 		}
   1406 	      if (!is_gimple_debug (stmt))
   1407 		something_changed = true;
   1408 	      remove_dead_stmt (&gsi, bb, to_remove_edges);
   1409 	      continue;
   1410 	    }
   1411 	  else if (is_gimple_call (stmt))
   1412 	    {
   1413 	      tree name = gimple_call_lhs (stmt);
   1414 
   1415 	      notice_special_calls (as_a <gcall *> (stmt));
   1416 
   1417 	      /* When LHS of var = call (); is dead, simplify it into
   1418 		 call (); saving one operand.  */
   1419 	      if (name
   1420 		  && TREE_CODE (name) == SSA_NAME
   1421 		  && !bitmap_bit_p (processed, SSA_NAME_VERSION (name))
   1422 		  /* Avoid doing so for allocation calls which we
   1423 		     did not mark as necessary, it will confuse the
   1424 		     special logic we apply to malloc/free pair removal.  */
   1425 		  && (!(call = gimple_call_fndecl (stmt))
   1426 		      || ((DECL_BUILT_IN_CLASS (call) != BUILT_IN_NORMAL
   1427 			   || (DECL_FUNCTION_CODE (call) != BUILT_IN_ALIGNED_ALLOC
   1428 			       && DECL_FUNCTION_CODE (call) != BUILT_IN_MALLOC
   1429 			       && DECL_FUNCTION_CODE (call) != BUILT_IN_CALLOC
   1430 			       && !ALLOCA_FUNCTION_CODE_P
   1431 			       (DECL_FUNCTION_CODE (call))))
   1432 			  && !DECL_IS_REPLACEABLE_OPERATOR_NEW_P (call))))
   1433 		{
   1434 		  something_changed = true;
   1435 		  if (dump_file && (dump_flags & TDF_DETAILS))
   1436 		    {
   1437 		      fprintf (dump_file, "Deleting LHS of call: ");
   1438 		      print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
   1439 		      fprintf (dump_file, "\n");
   1440 		    }
   1441 
   1442 		  gimple_call_set_lhs (stmt, NULL_TREE);
   1443 		  maybe_clean_or_replace_eh_stmt (stmt, stmt);
   1444 		  update_stmt (stmt);
   1445 		  release_ssa_name (name);
   1446 
   1447 		  /* GOMP_SIMD_LANE (unless three argument) or ASAN_POISON
   1448 		     without lhs is not needed.  */
   1449 		  if (gimple_call_internal_p (stmt))
   1450 		    switch (gimple_call_internal_fn (stmt))
   1451 		      {
   1452 		      case IFN_GOMP_SIMD_LANE:
   1453 			if (gimple_call_num_args (stmt) >= 3
   1454 			    && !integer_nonzerop (gimple_call_arg (stmt, 2)))
   1455 			  break;
   1456 			/* FALLTHRU */
   1457 		      case IFN_ASAN_POISON:
   1458 			remove_dead_stmt (&gsi, bb, to_remove_edges);
   1459 			break;
   1460 		      default:
   1461 			break;
   1462 		      }
   1463 		}
   1464 	      else if (gimple_call_internal_p (stmt))
   1465 		switch (gimple_call_internal_fn (stmt))
   1466 		  {
   1467 		  case IFN_ADD_OVERFLOW:
   1468 		    maybe_optimize_arith_overflow (&gsi, PLUS_EXPR);
   1469 		    break;
   1470 		  case IFN_SUB_OVERFLOW:
   1471 		    maybe_optimize_arith_overflow (&gsi, MINUS_EXPR);
   1472 		    break;
   1473 		  case IFN_MUL_OVERFLOW:
   1474 		    maybe_optimize_arith_overflow (&gsi, MULT_EXPR);
   1475 		    break;
   1476 		  default:
   1477 		    break;
   1478 		  }
   1479 	    }
   1480 	  else if (gimple_debug_bind_p (stmt))
   1481 	    {
   1482 	      /* We are only keeping the last debug-bind of a
   1483 	         non-DEBUG_EXPR_DECL variable in a series of
   1484 		 debug-bind stmts.  */
   1485 	      tree var = gimple_debug_bind_get_var (stmt);
   1486 	      if (TREE_CODE (var) != DEBUG_EXPR_DECL
   1487 		  && !bitmap_set_bit (debug_seen, DECL_UID (var)))
   1488 		remove_dead_stmt (&gsi, bb, to_remove_edges);
   1489 	      continue;
   1490 	    }
   1491 	  bitmap_clear (debug_seen);
   1492 	}
   1493 
   1494       /* Remove dead PHI nodes.  */
   1495       something_changed |= remove_dead_phis (bb);
   1496     }
   1497 
   1498 
   1499   /* Since we don't track liveness of virtual PHI nodes, it is possible that we
   1500      rendered some PHI nodes unreachable while they are still in use.
   1501      Mark them for renaming.  */
   1502   if (!to_remove_edges.is_empty ())
   1503     {
   1504       basic_block prev_bb;
   1505 
   1506       /* Remove edges.  We've delayed this to not get bogus debug stmts
   1507          during PHI node removal.  */
   1508       for (unsigned i = 0; i < to_remove_edges.length (); ++i)
   1509 	remove_edge (to_remove_edges[i]);
   1510       cfg_altered = true;
   1511 
   1512       find_unreachable_blocks ();
   1513 
   1514       /* Delete all unreachable basic blocks in reverse dominator order.  */
   1515       for (bb = EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb;
   1516 	   bb != ENTRY_BLOCK_PTR_FOR_FN (cfun); bb = prev_bb)
   1517 	{
   1518 	  prev_bb = bb->prev_bb;
   1519 
   1520 	  if (!bitmap_bit_p (bb_contains_live_stmts, bb->index)
   1521 	      || !(bb->flags & BB_REACHABLE))
   1522 	    {
   1523 	      for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
   1524 		   gsi_next (&gsi))
   1525 		if (virtual_operand_p (gimple_phi_result (gsi.phi ())))
   1526 		  {
   1527 		    bool found = false;
   1528 		    imm_use_iterator iter;
   1529 
   1530 		    FOR_EACH_IMM_USE_STMT (stmt, iter,
   1531 					   gimple_phi_result (gsi.phi ()))
   1532 		      {
   1533 			if (!(gimple_bb (stmt)->flags & BB_REACHABLE))
   1534 			  continue;
   1535 			if (gimple_code (stmt) == GIMPLE_PHI
   1536 			    || gimple_plf (stmt, STMT_NECESSARY))
   1537 			  {
   1538 			    found = true;
   1539 			    break;
   1540 			  }
   1541 		      }
   1542 		    if (found)
   1543 		      mark_virtual_phi_result_for_renaming (gsi.phi ());
   1544 		  }
   1545 
   1546 	      if (!(bb->flags & BB_REACHABLE))
   1547 		{
   1548 		  /* Speed up the removal of blocks that don't
   1549 		     dominate others.  Walking backwards, this should
   1550 		     be the common case.  ??? Do we need to recompute
   1551 		     dominators because of cfg_altered?  */
   1552 		  if (!first_dom_son (CDI_DOMINATORS, bb))
   1553 		    delete_basic_block (bb);
   1554 		  else
   1555 		    {
   1556 		      h = get_all_dominated_blocks (CDI_DOMINATORS, bb);
   1557 
   1558 		      while (h.length ())
   1559 			{
   1560 			  bb = h.pop ();
   1561 			  prev_bb = bb->prev_bb;
   1562 			  /* Rearrangements to the CFG may have failed
   1563 			     to update the dominators tree, so that
   1564 			     formerly-dominated blocks are now
   1565 			     otherwise reachable.  */
   1566 			  if (!!(bb->flags & BB_REACHABLE))
   1567 			    continue;
   1568 			  delete_basic_block (bb);
   1569 			}
   1570 
   1571 		      h.release ();
   1572 		    }
   1573 		}
   1574 	    }
   1575 	}
   1576     }
   1577 
   1578   if (bb_postorder)
   1579     free (bb_postorder);
   1580   bb_postorder = NULL;
   1581 
   1582   return something_changed;
   1583 }
   1584 
   1585 
   1586 /* Print out removed statement statistics.  */
   1587 
   1588 static void
   1589 print_stats (void)
   1590 {
   1591   float percg;
   1592 
   1593   percg = ((float) stats.removed / (float) stats.total) * 100;
   1594   fprintf (dump_file, "Removed %d of %d statements (%d%%)\n",
   1595 	   stats.removed, stats.total, (int) percg);
   1596 
   1597   if (stats.total_phis == 0)
   1598     percg = 0;
   1599   else
   1600     percg = ((float) stats.removed_phis / (float) stats.total_phis) * 100;
   1601 
   1602   fprintf (dump_file, "Removed %d of %d PHI nodes (%d%%)\n",
   1603 	   stats.removed_phis, stats.total_phis, (int) percg);
   1604 }
   1605 
   1606 /* Initialization for this pass.  Set up the used data structures.  */
   1607 
   1608 static void
   1609 tree_dce_init (bool aggressive)
   1610 {
   1611   memset ((void *) &stats, 0, sizeof (stats));
   1612 
   1613   if (aggressive)
   1614     {
   1615       last_stmt_necessary = sbitmap_alloc (last_basic_block_for_fn (cfun));
   1616       bitmap_clear (last_stmt_necessary);
   1617       bb_contains_live_stmts = sbitmap_alloc (last_basic_block_for_fn (cfun));
   1618       bitmap_clear (bb_contains_live_stmts);
   1619     }
   1620 
   1621   processed = sbitmap_alloc (num_ssa_names + 1);
   1622   bitmap_clear (processed);
   1623 
   1624   worklist.create (64);
   1625   cfg_altered = false;
   1626 }
   1627 
   1628 /* Cleanup after this pass.  */
   1629 
   1630 static void
   1631 tree_dce_done (bool aggressive)
   1632 {
   1633   if (aggressive)
   1634     {
   1635       delete cd;
   1636       sbitmap_free (visited_control_parents);
   1637       sbitmap_free (last_stmt_necessary);
   1638       sbitmap_free (bb_contains_live_stmts);
   1639       bb_contains_live_stmts = NULL;
   1640     }
   1641 
   1642   sbitmap_free (processed);
   1643 
   1644   worklist.release ();
   1645 }
   1646 
   1647 /* Sort PHI argument values for make_forwarders_with_degenerate_phis.  */
   1648 
   1649 static int
   1650 sort_phi_args (const void *a_, const void *b_)
   1651 {
   1652   auto *a = (const std::pair<edge, hashval_t> *) a_;
   1653   auto *b = (const std::pair<edge, hashval_t> *) b_;
   1654   hashval_t ha = a->second;
   1655   hashval_t hb = b->second;
   1656   if (ha < hb)
   1657     return -1;
   1658   else if (ha > hb)
   1659     return 1;
   1660   else if (a->first->dest_idx < b->first->dest_idx)
   1661     return -1;
   1662   else if (a->first->dest_idx > b->first->dest_idx)
   1663     return 1;
   1664   else
   1665     return 0;
   1666 }
   1667 
   1668 /* Look for a non-virtual PHIs and make a forwarder block when all PHIs
   1669    have the same argument on a set of edges.  This is to not consider
   1670    control dependences of individual edges for same values but only for
   1671    the common set.  */
   1672 
   1673 static unsigned
   1674 make_forwarders_with_degenerate_phis (function *fn)
   1675 {
   1676   unsigned todo = 0;
   1677 
   1678   basic_block bb;
   1679   FOR_EACH_BB_FN (bb, fn)
   1680     {
   1681       /* Only PHIs with three or more arguments have opportunities.  */
   1682       if (EDGE_COUNT (bb->preds) < 3)
   1683 	continue;
   1684       /* Do not touch loop headers or blocks with abnormal predecessors.
   1685 	 ???  This is to avoid creating valid loops here, see PR103458.
   1686 	 We might want to improve things to either explicitely add those
   1687 	 loops or at least consider blocks with no backedges.  */
   1688       if (bb->loop_father->header == bb
   1689 	  || bb_has_abnormal_pred (bb))
   1690 	continue;
   1691 
   1692       /* Take one PHI node as template to look for identical
   1693 	 arguments.  Build a vector of candidates forming sets
   1694 	 of argument edges with equal values.  Note optimality
   1695 	 depends on the particular choice of the template PHI
   1696 	 since equal arguments are unordered leaving other PHIs
   1697 	 with more than one set of equal arguments within this
   1698 	 argument range unsorted.  We'd have to break ties by
   1699 	 looking at other PHI nodes.  */
   1700       gphi_iterator gsi = gsi_start_nonvirtual_phis (bb);
   1701       if (gsi_end_p (gsi))
   1702 	continue;
   1703       gphi *phi = gsi.phi ();
   1704       auto_vec<std::pair<edge, hashval_t>, 8> args;
   1705       bool need_resort = false;
   1706       for (unsigned i = 0; i < gimple_phi_num_args (phi); ++i)
   1707 	{
   1708 	  edge e = gimple_phi_arg_edge (phi, i);
   1709 	  /* Skip abnormal edges since we cannot redirect them.  */
   1710 	  if (e->flags & EDGE_ABNORMAL)
   1711 	    continue;
   1712 	  /* Skip loop exit edges when we are in loop-closed SSA form
   1713 	     since the forwarder we'd create does not have a PHI node.  */
   1714 	  if (loops_state_satisfies_p (LOOP_CLOSED_SSA)
   1715 	      && loop_exit_edge_p (e->src->loop_father, e))
   1716 	    continue;
   1717 
   1718 	  tree arg = gimple_phi_arg_def (phi, i);
   1719 	  if (!CONSTANT_CLASS_P (arg) && TREE_CODE (arg) != SSA_NAME)
   1720 	    need_resort = true;
   1721 	  args.safe_push (std::make_pair (e, iterative_hash_expr (arg, 0)));
   1722 	}
   1723       if (args.length () < 2)
   1724 	continue;
   1725       args.qsort (sort_phi_args);
   1726       /* The above sorting can be different between -g and -g0, as e.g. decls
   1727 	 can have different uids (-g could have bigger gaps in between them).
   1728 	 So, only use that to determine which args are equal, then change
   1729 	 second from hash value to smallest dest_idx of the edges which have
   1730 	 equal argument and sort again.  If all the phi arguments are
   1731 	 constants or SSA_NAME, there is no need for the second sort, the hash
   1732 	 values are stable in that case.  */
   1733       hashval_t hash = args[0].second;
   1734       args[0].second = args[0].first->dest_idx;
   1735       bool any_equal = false;
   1736       for (unsigned i = 1; i < args.length (); ++i)
   1737 	if (hash == args[i].second
   1738 	    && operand_equal_p (PHI_ARG_DEF_FROM_EDGE (phi, args[i - 1].first),
   1739 				PHI_ARG_DEF_FROM_EDGE (phi, args[i].first)))
   1740 	  {
   1741 	    args[i].second = args[i - 1].second;
   1742 	    any_equal = true;
   1743 	  }
   1744 	else
   1745 	  {
   1746 	    hash = args[i].second;
   1747 	    args[i].second = args[i].first->dest_idx;
   1748 	  }
   1749       if (!any_equal)
   1750 	continue;
   1751       if (need_resort)
   1752 	args.qsort (sort_phi_args);
   1753 
   1754       /* From the candidates vector now verify true candidates for
   1755 	 forwarders and create them.  */
   1756       gphi *vphi = get_virtual_phi (bb);
   1757       unsigned start = 0;
   1758       while (start < args.length () - 1)
   1759 	{
   1760 	  unsigned i;
   1761 	  for (i = start + 1; i < args.length (); ++i)
   1762 	    if (args[start].second != args[i].second)
   1763 	      break;
   1764 	  /* args[start]..args[i-1] are equal.  */
   1765 	  if (start != i - 1)
   1766 	    {
   1767 	      /* Check all PHI nodes for argument equality.  */
   1768 	      bool equal = true;
   1769 	      gphi_iterator gsi2 = gsi;
   1770 	      gsi_next (&gsi2);
   1771 	      for (; !gsi_end_p (gsi2); gsi_next (&gsi2))
   1772 		{
   1773 		  gphi *phi2 = gsi2.phi ();
   1774 		  if (virtual_operand_p (gimple_phi_result (phi2)))
   1775 		    continue;
   1776 		  tree start_arg
   1777 		    = PHI_ARG_DEF_FROM_EDGE (phi2, args[start].first);
   1778 		  for (unsigned j = start + 1; j < i; ++j)
   1779 		    {
   1780 		      if (!operand_equal_p (start_arg,
   1781 					    PHI_ARG_DEF_FROM_EDGE
   1782 					      (phi2, args[j].first)))
   1783 			{
   1784 			  /* Another PHI might have a shorter set of
   1785 			     equivalent args.  Go for that.  */
   1786 			  i = j;
   1787 			  if (j == start + 1)
   1788 			    equal = false;
   1789 			  break;
   1790 			}
   1791 		    }
   1792 		  if (!equal)
   1793 		    break;
   1794 		}
   1795 	      if (equal)
   1796 		{
   1797 		  /* If we are asked to forward all edges the block
   1798 		     has all degenerate PHIs.  Do nothing in that case.  */
   1799 		  if (start == 0
   1800 		      && i == args.length ()
   1801 		      && args.length () == gimple_phi_num_args (phi))
   1802 		    break;
   1803 		  /* Instead of using make_forwarder_block we are
   1804 		     rolling our own variant knowing that the forwarder
   1805 		     does not need PHI nodes apart from eventually
   1806 		     a virtual one.  */
   1807 		  auto_vec<tree, 8> vphi_args;
   1808 		  if (vphi)
   1809 		    {
   1810 		      vphi_args.reserve_exact (i - start);
   1811 		      for (unsigned j = start; j < i; ++j)
   1812 			vphi_args.quick_push
   1813 			  (PHI_ARG_DEF_FROM_EDGE (vphi, args[j].first));
   1814 		    }
   1815 		  free_dominance_info (fn, CDI_DOMINATORS);
   1816 		  basic_block forwarder = split_edge (args[start].first);
   1817 		  for (unsigned j = start + 1; j < i; ++j)
   1818 		    {
   1819 		      edge e = args[j].first;
   1820 		      redirect_edge_and_branch_force (e, forwarder);
   1821 		      redirect_edge_var_map_clear (e);
   1822 		    }
   1823 		  if (vphi)
   1824 		    {
   1825 		      tree def = copy_ssa_name (vphi_args[0]);
   1826 		      gphi *vphi_copy = create_phi_node (def, forwarder);
   1827 		      for (unsigned j = start; j < i; ++j)
   1828 			add_phi_arg (vphi_copy, vphi_args[j - start],
   1829 				     args[j].first, UNKNOWN_LOCATION);
   1830 		      SET_PHI_ARG_DEF
   1831 			(vphi, single_succ_edge (forwarder)->dest_idx, def);
   1832 		    }
   1833 		  todo |= TODO_cleanup_cfg;
   1834 		}
   1835 	    }
   1836 	  /* Continue searching for more opportunities.  */
   1837 	  start = i;
   1838 	}
   1839     }
   1840   return todo;
   1841 }
   1842 
   1843 /* Main routine to eliminate dead code.
   1844 
   1845    AGGRESSIVE controls the aggressiveness of the algorithm.
   1846    In conservative mode, we ignore control dependence and simply declare
   1847    all but the most trivially dead branches necessary.  This mode is fast.
   1848    In aggressive mode, control dependences are taken into account, which
   1849    results in more dead code elimination, but at the cost of some time.
   1850 
   1851    FIXME: Aggressive mode before PRE doesn't work currently because
   1852 	  the dominance info is not invalidated after DCE1.  This is
   1853 	  not an issue right now because we only run aggressive DCE
   1854 	  as the last tree SSA pass, but keep this in mind when you
   1855 	  start experimenting with pass ordering.  */
   1856 
   1857 static unsigned int
   1858 perform_tree_ssa_dce (bool aggressive)
   1859 {
   1860   bool something_changed = 0;
   1861   unsigned todo = 0;
   1862 
   1863   /* Preheaders are needed for SCEV to work.
   1864      Simple lateches and recorded exits improve chances that loop will
   1865      proved to be finite in testcases such as in loop-15.c and loop-24.c  */
   1866   bool in_loop_pipeline = scev_initialized_p ();
   1867   if (aggressive && ! in_loop_pipeline)
   1868     {
   1869       scev_initialize ();
   1870       loop_optimizer_init (LOOPS_NORMAL
   1871 			   | LOOPS_HAVE_RECORDED_EXITS);
   1872     }
   1873 
   1874   if (aggressive)
   1875     todo |= make_forwarders_with_degenerate_phis (cfun);
   1876 
   1877   calculate_dominance_info (CDI_DOMINATORS);
   1878 
   1879   tree_dce_init (aggressive);
   1880 
   1881   if (aggressive)
   1882     {
   1883       /* Compute control dependence.  */
   1884       calculate_dominance_info (CDI_POST_DOMINATORS);
   1885       cd = new control_dependences ();
   1886 
   1887       visited_control_parents =
   1888 	sbitmap_alloc (last_basic_block_for_fn (cfun));
   1889       bitmap_clear (visited_control_parents);
   1890 
   1891       mark_dfs_back_edges ();
   1892     }
   1893 
   1894   find_obviously_necessary_stmts (aggressive);
   1895 
   1896   if (aggressive && ! in_loop_pipeline)
   1897     {
   1898       loop_optimizer_finalize ();
   1899       scev_finalize ();
   1900     }
   1901 
   1902   longest_chain = 0;
   1903   total_chain = 0;
   1904   nr_walks = 0;
   1905   chain_ovfl = false;
   1906   visited = BITMAP_ALLOC (NULL);
   1907   propagate_necessity (aggressive);
   1908   BITMAP_FREE (visited);
   1909 
   1910   something_changed |= eliminate_unnecessary_stmts (aggressive);
   1911   something_changed |= cfg_altered;
   1912 
   1913   /* We do not update postdominators, so free them unconditionally.  */
   1914   free_dominance_info (CDI_POST_DOMINATORS);
   1915 
   1916   /* If we removed paths in the CFG, then we need to update
   1917      dominators as well.  I haven't investigated the possibility
   1918      of incrementally updating dominators.  */
   1919   if (cfg_altered)
   1920     free_dominance_info (CDI_DOMINATORS);
   1921 
   1922   statistics_counter_event (cfun, "Statements deleted", stats.removed);
   1923   statistics_counter_event (cfun, "PHI nodes deleted", stats.removed_phis);
   1924 
   1925   /* Debugging dumps.  */
   1926   if (dump_file && (dump_flags & (TDF_STATS|TDF_DETAILS)))
   1927     print_stats ();
   1928 
   1929   tree_dce_done (aggressive);
   1930 
   1931   if (something_changed)
   1932     {
   1933       free_numbers_of_iterations_estimates (cfun);
   1934       if (in_loop_pipeline)
   1935 	scev_reset ();
   1936       todo |= TODO_update_ssa | TODO_cleanup_cfg;
   1937     }
   1938   return todo;
   1939 }
   1940 
   1941 /* Pass entry points.  */
   1942 static unsigned int
   1943 tree_ssa_dce (void)
   1944 {
   1945   return perform_tree_ssa_dce (/*aggressive=*/false);
   1946 }
   1947 
   1948 static unsigned int
   1949 tree_ssa_cd_dce (void)
   1950 {
   1951   return perform_tree_ssa_dce (/*aggressive=*/optimize >= 2);
   1952 }
   1953 
   1954 namespace {
   1955 
   1956 const pass_data pass_data_dce =
   1957 {
   1958   GIMPLE_PASS, /* type */
   1959   "dce", /* name */
   1960   OPTGROUP_NONE, /* optinfo_flags */
   1961   TV_TREE_DCE, /* tv_id */
   1962   ( PROP_cfg | PROP_ssa ), /* properties_required */
   1963   0, /* properties_provided */
   1964   0, /* properties_destroyed */
   1965   0, /* todo_flags_start */
   1966   0, /* todo_flags_finish */
   1967 };
   1968 
   1969 class pass_dce : public gimple_opt_pass
   1970 {
   1971 public:
   1972   pass_dce (gcc::context *ctxt)
   1973     : gimple_opt_pass (pass_data_dce, ctxt)
   1974   {}
   1975 
   1976   /* opt_pass methods: */
   1977   opt_pass * clone () { return new pass_dce (m_ctxt); }
   1978   virtual bool gate (function *) { return flag_tree_dce != 0; }
   1979   virtual unsigned int execute (function *) { return tree_ssa_dce (); }
   1980 
   1981 }; // class pass_dce
   1982 
   1983 } // anon namespace
   1984 
   1985 gimple_opt_pass *
   1986 make_pass_dce (gcc::context *ctxt)
   1987 {
   1988   return new pass_dce (ctxt);
   1989 }
   1990 
   1991 namespace {
   1992 
   1993 const pass_data pass_data_cd_dce =
   1994 {
   1995   GIMPLE_PASS, /* type */
   1996   "cddce", /* name */
   1997   OPTGROUP_NONE, /* optinfo_flags */
   1998   TV_TREE_CD_DCE, /* tv_id */
   1999   ( PROP_cfg | PROP_ssa ), /* properties_required */
   2000   0, /* properties_provided */
   2001   0, /* properties_destroyed */
   2002   0, /* todo_flags_start */
   2003   0, /* todo_flags_finish */
   2004 };
   2005 
   2006 class pass_cd_dce : public gimple_opt_pass
   2007 {
   2008 public:
   2009   pass_cd_dce (gcc::context *ctxt)
   2010     : gimple_opt_pass (pass_data_cd_dce, ctxt), update_address_taken_p (false)
   2011   {}
   2012 
   2013   /* opt_pass methods: */
   2014   opt_pass * clone () { return new pass_cd_dce (m_ctxt); }
   2015   void set_pass_param (unsigned n, bool param)
   2016     {
   2017       gcc_assert (n == 0);
   2018       update_address_taken_p = param;
   2019     }
   2020   virtual bool gate (function *) { return flag_tree_dce != 0; }
   2021   virtual unsigned int execute (function *)
   2022     {
   2023       return (tree_ssa_cd_dce ()
   2024 	      | (update_address_taken_p ? TODO_update_address_taken : 0));
   2025     }
   2026 
   2027 private:
   2028   bool update_address_taken_p;
   2029 }; // class pass_cd_dce
   2030 
   2031 } // anon namespace
   2032 
   2033 gimple_opt_pass *
   2034 make_pass_cd_dce (gcc::context *ctxt)
   2035 {
   2036   return new pass_cd_dce (ctxt);
   2037 }
   2038 
   2039 
   2040 /* A cheap DCE interface.  WORKLIST is a list of possibly dead stmts and
   2041    is consumed by this function.  The function has linear complexity in
   2042    the number of dead stmts with a constant factor like the average SSA
   2043    use operands number.  */
   2044 
   2045 void
   2046 simple_dce_from_worklist (bitmap worklist)
   2047 {
   2048   while (! bitmap_empty_p (worklist))
   2049     {
   2050       /* Pop item.  */
   2051       unsigned i = bitmap_first_set_bit (worklist);
   2052       bitmap_clear_bit (worklist, i);
   2053 
   2054       tree def = ssa_name (i);
   2055       /* Removed by somebody else or still in use.  */
   2056       if (! def || ! has_zero_uses (def))
   2057 	continue;
   2058 
   2059       gimple *t = SSA_NAME_DEF_STMT (def);
   2060       if (gimple_has_side_effects (t))
   2061 	continue;
   2062 
   2063       /* The defining statement needs to be defining only this name.
   2064 	 ASM is the only statement that can define more than one
   2065 	 name. */
   2066       if (is_a<gasm *>(t)
   2067 	  && !single_ssa_def_operand (t, SSA_OP_ALL_DEFS))
   2068 	continue;
   2069 
   2070       /* Don't remove statements that are needed for non-call
   2071 	 eh to work.  */
   2072       if (stmt_unremovable_because_of_non_call_eh_p (cfun, t))
   2073 	continue;
   2074 
   2075       /* Add uses to the worklist.  */
   2076       ssa_op_iter iter;
   2077       use_operand_p use_p;
   2078       FOR_EACH_PHI_OR_STMT_USE (use_p, t, iter, SSA_OP_USE)
   2079 	{
   2080 	  tree use = USE_FROM_PTR (use_p);
   2081 	  if (TREE_CODE (use) == SSA_NAME
   2082 	      && ! SSA_NAME_IS_DEFAULT_DEF (use))
   2083 	    bitmap_set_bit (worklist, SSA_NAME_VERSION (use));
   2084 	}
   2085 
   2086       /* Remove stmt.  */
   2087       if (dump_file && (dump_flags & TDF_DETAILS))
   2088 	{
   2089 	  fprintf (dump_file, "Removing dead stmt:");
   2090 	  print_gimple_stmt (dump_file, t, 0);
   2091 	}
   2092       gimple_stmt_iterator gsi = gsi_for_stmt (t);
   2093       if (gimple_code (t) == GIMPLE_PHI)
   2094 	remove_phi_node (&gsi, true);
   2095       else
   2096 	{
   2097 	  unlink_stmt_vdef (t);
   2098 	  gsi_remove (&gsi, true);
   2099 	  release_defs (t);
   2100 	}
   2101     }
   2102 }
   2103