analyzer: fix feasibility false +ve on jumps through function ptrs [PR107582]
[platform/upstream/gcc.git] / gcc / tree-ssa-dce.cc
1 /* Dead code elimination pass for the GNU compiler.
2    Copyright (C) 2002-2022 Free Software Foundation, Inc.
3    Contributed by Ben Elliston <bje@redhat.com>
4    and Andrew MacLeod <amacleod@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 (!loops_state_satisfies_p (LOOP_CLOSED_SSA)
1030               && degenerate_phi_p (phi))
1031             {
1032               tree vdef = gimple_phi_result (phi);
1033               tree vuse = gimple_phi_arg_def (phi, 0);
1034
1035               use_operand_p use_p;
1036               imm_use_iterator iter;
1037               gimple *use_stmt;
1038               FOR_EACH_IMM_USE_STMT (use_stmt, iter, vdef)
1039                 FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
1040                   SET_USE (use_p, vuse);
1041               if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (vdef)
1042                   && TREE_CODE (vuse) == SSA_NAME)
1043                 SSA_NAME_OCCURS_IN_ABNORMAL_PHI (vuse) = 1;
1044             }
1045           else
1046             gimple_set_plf (phi, STMT_NECESSARY, true);
1047         }
1048
1049       if (!gimple_plf (phi, STMT_NECESSARY))
1050         {
1051           something_changed = true;
1052           if (dump_file && (dump_flags & TDF_DETAILS))
1053             {
1054               fprintf (dump_file, "Deleting : ");
1055               print_gimple_stmt (dump_file, phi, 0, TDF_SLIM);
1056               fprintf (dump_file, "\n");
1057             }
1058
1059           remove_phi_node (&gsi, true);
1060           stats.removed_phis++;
1061           continue;
1062         }
1063
1064       gsi_next (&gsi);
1065     }
1066   return something_changed;
1067 }
1068
1069
1070 /* Remove dead statement pointed to by iterator I.  Receives the basic block BB
1071    containing I so that we don't have to look it up.  */
1072
1073 static void
1074 remove_dead_stmt (gimple_stmt_iterator *i, basic_block bb,
1075                   vec<edge> &to_remove_edges)
1076 {
1077   gimple *stmt = gsi_stmt (*i);
1078
1079   if (dump_file && (dump_flags & TDF_DETAILS))
1080     {
1081       fprintf (dump_file, "Deleting : ");
1082       print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
1083       fprintf (dump_file, "\n");
1084     }
1085
1086   stats.removed++;
1087
1088   /* If we have determined that a conditional branch statement contributes
1089      nothing to the program, then we not only remove it, but we need to update
1090      the CFG.  We can chose any of edges out of BB as long as we are sure to not
1091      close infinite loops.  This is done by always choosing the edge closer to
1092      exit in inverted_post_order_compute order.  */
1093   if (is_ctrl_stmt (stmt))
1094     {
1095       edge_iterator ei;
1096       edge e = NULL, e2;
1097
1098       /* See if there is only one non-abnormal edge.  */
1099       if (single_succ_p (bb))
1100         e = single_succ_edge (bb);
1101       /* Otherwise chose one that is closer to bb with live statement in it.
1102          To be able to chose one, we compute inverted post order starting from
1103          all BBs with live statements.  */
1104       if (!e)
1105         {
1106           if (!bb_postorder)
1107             {
1108               auto_vec<int, 20> postorder;
1109                  inverted_post_order_compute (&postorder,
1110                                               &bb_contains_live_stmts);
1111               bb_postorder = XNEWVEC (int, last_basic_block_for_fn (cfun));
1112               for (unsigned int i = 0; i < postorder.length (); ++i)
1113                  bb_postorder[postorder[i]] = i;
1114             }
1115           FOR_EACH_EDGE (e2, ei, bb->succs)
1116             if (!e || e2->dest == EXIT_BLOCK_PTR_FOR_FN (cfun)
1117                 || bb_postorder [e->dest->index]
1118                    < bb_postorder [e2->dest->index])
1119               e = e2;
1120         }
1121       gcc_assert (e);
1122       e->probability = profile_probability::always ();
1123
1124       /* The edge is no longer associated with a conditional, so it does
1125          not have TRUE/FALSE flags.
1126          We are also safe to drop EH/ABNORMAL flags and turn them into
1127          normal control flow, because we know that all the destinations (including
1128          those odd edges) are equivalent for program execution.  */
1129       e->flags &= ~(EDGE_TRUE_VALUE | EDGE_FALSE_VALUE | EDGE_EH | EDGE_ABNORMAL);
1130
1131       /* The lone outgoing edge from BB will be a fallthru edge.  */
1132       e->flags |= EDGE_FALLTHRU;
1133
1134       /* Remove the remaining outgoing edges.  */
1135       FOR_EACH_EDGE (e2, ei, bb->succs)
1136         if (e != e2)
1137           {
1138             /* If we made a BB unconditionally exit a loop or removed
1139                an entry into an irreducible region, then this transform
1140                alters the set of BBs in the loop.  Schedule a fixup.  */
1141             if (loop_exit_edge_p (bb->loop_father, e)
1142                 || (e2->dest->flags & BB_IRREDUCIBLE_LOOP))
1143               loops_state_set (LOOPS_NEED_FIXUP);
1144             to_remove_edges.safe_push (e2);
1145           }
1146     }
1147
1148   /* If this is a store into a variable that is being optimized away,
1149      add a debug bind stmt if possible.  */
1150   if (MAY_HAVE_DEBUG_BIND_STMTS
1151       && gimple_assign_single_p (stmt)
1152       && is_gimple_val (gimple_assign_rhs1 (stmt)))
1153     {
1154       tree lhs = gimple_assign_lhs (stmt);
1155       if ((VAR_P (lhs) || TREE_CODE (lhs) == PARM_DECL)
1156           && !DECL_IGNORED_P (lhs)
1157           && is_gimple_reg_type (TREE_TYPE (lhs))
1158           && !is_global_var (lhs)
1159           && !DECL_HAS_VALUE_EXPR_P (lhs))
1160         {
1161           tree rhs = gimple_assign_rhs1 (stmt);
1162           gdebug *note
1163             = gimple_build_debug_bind (lhs, unshare_expr (rhs), stmt);
1164           gsi_insert_after (i, note, GSI_SAME_STMT);
1165         }
1166     }
1167
1168   unlink_stmt_vdef (stmt);
1169   gsi_remove (i, true);
1170   release_defs (stmt);
1171 }
1172
1173 /* Helper for maybe_optimize_arith_overflow.  Find in *TP if there are any
1174    uses of data (SSA_NAME) other than REALPART_EXPR referencing it.  */
1175
1176 static tree
1177 find_non_realpart_uses (tree *tp, int *walk_subtrees, void *data)
1178 {
1179   if (TYPE_P (*tp) || TREE_CODE (*tp) == REALPART_EXPR)
1180     *walk_subtrees = 0;
1181   if (*tp == (tree) data)
1182     return *tp;
1183   return NULL_TREE;
1184 }
1185
1186 /* If the IMAGPART_EXPR of the {ADD,SUB,MUL}_OVERFLOW result is never used,
1187    but REALPART_EXPR is, optimize the {ADD,SUB,MUL}_OVERFLOW internal calls
1188    into plain unsigned {PLUS,MINUS,MULT}_EXPR, and if needed reset debug
1189    uses.  */
1190
1191 static void
1192 maybe_optimize_arith_overflow (gimple_stmt_iterator *gsi,
1193                                enum tree_code subcode)
1194 {
1195   gimple *stmt = gsi_stmt (*gsi);
1196   tree lhs = gimple_call_lhs (stmt);
1197
1198   if (lhs == NULL || TREE_CODE (lhs) != SSA_NAME)
1199     return;
1200
1201   imm_use_iterator imm_iter;
1202   use_operand_p use_p;
1203   bool has_debug_uses = false;
1204   bool has_realpart_uses = false;
1205   bool has_other_uses = false;
1206   FOR_EACH_IMM_USE_FAST (use_p, imm_iter, lhs)
1207     {
1208       gimple *use_stmt = USE_STMT (use_p);
1209       if (is_gimple_debug (use_stmt))
1210         has_debug_uses = true;
1211       else if (is_gimple_assign (use_stmt)
1212                && gimple_assign_rhs_code (use_stmt) == REALPART_EXPR
1213                && TREE_OPERAND (gimple_assign_rhs1 (use_stmt), 0) == lhs)
1214         has_realpart_uses = true;
1215       else
1216         {
1217           has_other_uses = true;
1218           break;
1219         }
1220     }
1221
1222   if (!has_realpart_uses || has_other_uses)
1223     return;
1224
1225   tree arg0 = gimple_call_arg (stmt, 0);
1226   tree arg1 = gimple_call_arg (stmt, 1);
1227   location_t loc = gimple_location (stmt);
1228   tree type = TREE_TYPE (TREE_TYPE (lhs));
1229   tree utype = type;
1230   if (!TYPE_UNSIGNED (type))
1231     utype = build_nonstandard_integer_type (TYPE_PRECISION (type), 1);
1232   tree result = fold_build2_loc (loc, subcode, utype,
1233                                  fold_convert_loc (loc, utype, arg0),
1234                                  fold_convert_loc (loc, utype, arg1));
1235   result = fold_convert_loc (loc, type, result);
1236
1237   if (has_debug_uses)
1238     {
1239       gimple *use_stmt;
1240       FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, lhs)
1241         {
1242           if (!gimple_debug_bind_p (use_stmt))
1243             continue;
1244           tree v = gimple_debug_bind_get_value (use_stmt);
1245           if (walk_tree (&v, find_non_realpart_uses, lhs, NULL))
1246             {
1247               gimple_debug_bind_reset_value (use_stmt);
1248               update_stmt (use_stmt);
1249             }
1250         }
1251     }
1252
1253   if (TREE_CODE (result) == INTEGER_CST && TREE_OVERFLOW (result))
1254     result = drop_tree_overflow (result);
1255   tree overflow = build_zero_cst (type);
1256   tree ctype = build_complex_type (type);
1257   if (TREE_CODE (result) == INTEGER_CST)
1258     result = build_complex (ctype, result, overflow);
1259   else
1260     result = build2_loc (gimple_location (stmt), COMPLEX_EXPR,
1261                          ctype, result, overflow);
1262
1263   if (dump_file && (dump_flags & TDF_DETAILS))
1264     {
1265       fprintf (dump_file, "Transforming call: ");
1266       print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
1267       fprintf (dump_file, "because the overflow result is never used into: ");
1268       print_generic_stmt (dump_file, result, TDF_SLIM);
1269       fprintf (dump_file, "\n");
1270     }
1271
1272   gimplify_and_update_call_from_tree (gsi, result);
1273 }
1274
1275 /* Returns whether the control parents of BB are preserved.  */
1276
1277 static bool
1278 control_parents_preserved_p (basic_block bb)
1279 {
1280   /* If we marked the control parents from BB they are preserved.  */
1281   if (bitmap_bit_p (visited_control_parents, bb->index))
1282     return true;
1283
1284   /* But they can also end up being marked from elsewhere.  */
1285   bitmap_iterator bi;
1286   unsigned edge_number;
1287   EXECUTE_IF_SET_IN_BITMAP (cd->get_edges_dependent_on (bb->index),
1288                             0, edge_number, bi)
1289     {
1290       basic_block cd_bb = cd->get_edge_src (edge_number);
1291       if (cd_bb != bb
1292           && !bitmap_bit_p (last_stmt_necessary, cd_bb->index))
1293         return false;
1294     }
1295   /* And cache the result.  */
1296   bitmap_set_bit (visited_control_parents, bb->index);
1297   return true;
1298 }
1299
1300 /* Eliminate unnecessary statements. Any instruction not marked as necessary
1301    contributes nothing to the program, and can be deleted.  */
1302
1303 static bool
1304 eliminate_unnecessary_stmts (bool aggressive)
1305 {
1306   bool something_changed = false;
1307   basic_block bb;
1308   gimple_stmt_iterator gsi, psi;
1309   gimple *stmt;
1310   tree call;
1311   auto_vec<edge> to_remove_edges;
1312
1313   if (dump_file && (dump_flags & TDF_DETAILS))
1314     fprintf (dump_file, "\nEliminating unnecessary statements:\n");
1315
1316   bool had_setjmp = cfun->calls_setjmp;
1317   clear_special_calls ();
1318
1319   /* Walking basic blocks and statements in reverse order avoids
1320      releasing SSA names before any other DEFs that refer to them are
1321      released.  This helps avoid loss of debug information, as we get
1322      a chance to propagate all RHSs of removed SSAs into debug uses,
1323      rather than only the latest ones.  E.g., consider:
1324
1325      x_3 = y_1 + z_2;
1326      a_5 = x_3 - b_4;
1327      # DEBUG a => a_5
1328
1329      If we were to release x_3 before a_5, when we reached a_5 and
1330      tried to substitute it into the debug stmt, we'd see x_3 there,
1331      but x_3's DEF, type, etc would have already been disconnected.
1332      By going backwards, the debug stmt first changes to:
1333
1334      # DEBUG a => x_3 - b_4
1335
1336      and then to:
1337
1338      # DEBUG a => y_1 + z_2 - b_4
1339
1340      as desired.  */
1341   gcc_assert (dom_info_available_p (CDI_DOMINATORS));
1342   auto_vec<basic_block> h;
1343   h = get_all_dominated_blocks (CDI_DOMINATORS,
1344                                 single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun)));
1345
1346   while (h.length ())
1347     {
1348       bb = h.pop ();
1349
1350       /* Remove dead statements.  */
1351       auto_bitmap debug_seen;
1352       for (gsi = gsi_last_bb (bb); !gsi_end_p (gsi); gsi = psi)
1353         {
1354           stmt = gsi_stmt (gsi);
1355
1356           psi = gsi;
1357           gsi_prev (&psi);
1358
1359           stats.total++;
1360
1361           /* We can mark a call to free as not necessary if the
1362              defining statement of its argument is not necessary
1363              (and thus is getting removed).  */
1364           if (gimple_plf (stmt, STMT_NECESSARY)
1365               && (gimple_call_builtin_p (stmt, BUILT_IN_FREE)
1366                   || (is_gimple_call (stmt)
1367                       && gimple_call_from_new_or_delete (as_a <gcall *> (stmt))
1368                       && gimple_call_operator_delete_p (as_a <gcall *> (stmt)))))
1369             {
1370               tree ptr = gimple_call_arg (stmt, 0);
1371               if (TREE_CODE (ptr) == SSA_NAME)
1372                 {
1373                   gimple *def_stmt = SSA_NAME_DEF_STMT (ptr);
1374                   if (!gimple_nop_p (def_stmt)
1375                       && !gimple_plf (def_stmt, STMT_NECESSARY))
1376                     gimple_set_plf (stmt, STMT_NECESSARY, false);
1377                 }
1378             }
1379
1380           /* If GSI is not necessary then remove it.  */
1381           if (!gimple_plf (stmt, STMT_NECESSARY))
1382             {
1383               /* Keep clobbers that we can keep live live.  */
1384               if (gimple_clobber_p (stmt))
1385                 {
1386                   ssa_op_iter iter;
1387                   use_operand_p use_p;
1388                   bool dead = false;
1389                   FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, SSA_OP_USE)
1390                     {
1391                       tree name = USE_FROM_PTR (use_p);
1392                       if (!SSA_NAME_IS_DEFAULT_DEF (name)
1393                           && !bitmap_bit_p (processed, SSA_NAME_VERSION (name)))
1394                         {
1395                           dead = true;
1396                           break;
1397                         }
1398                     }
1399                   if (!dead
1400                       /* When doing CD-DCE we have to ensure all controls
1401                          of the stmt are still live.  */
1402                       && (!aggressive || control_parents_preserved_p (bb)))
1403                     {
1404                       bitmap_clear (debug_seen);
1405                       continue;
1406                     }
1407                 }
1408               if (!is_gimple_debug (stmt))
1409                 something_changed = true;
1410               remove_dead_stmt (&gsi, bb, to_remove_edges);
1411               continue;
1412             }
1413           else if (is_gimple_call (stmt))
1414             {
1415               tree name = gimple_call_lhs (stmt);
1416
1417               notice_special_calls (as_a <gcall *> (stmt));
1418
1419               /* When LHS of var = call (); is dead, simplify it into
1420                  call (); saving one operand.  */
1421               if (name
1422                   && TREE_CODE (name) == SSA_NAME
1423                   && !bitmap_bit_p (processed, SSA_NAME_VERSION (name))
1424                   /* Avoid doing so for allocation calls which we
1425                      did not mark as necessary, it will confuse the
1426                      special logic we apply to malloc/free pair removal.  */
1427                   && (!(call = gimple_call_fndecl (stmt))
1428                       || ((DECL_BUILT_IN_CLASS (call) != BUILT_IN_NORMAL
1429                            || (DECL_FUNCTION_CODE (call) != BUILT_IN_ALIGNED_ALLOC
1430                                && DECL_FUNCTION_CODE (call) != BUILT_IN_MALLOC
1431                                && DECL_FUNCTION_CODE (call) != BUILT_IN_CALLOC
1432                                && !ALLOCA_FUNCTION_CODE_P
1433                                (DECL_FUNCTION_CODE (call))))
1434                           && !DECL_IS_REPLACEABLE_OPERATOR_NEW_P (call))))
1435                 {
1436                   something_changed = true;
1437                   if (dump_file && (dump_flags & TDF_DETAILS))
1438                     {
1439                       fprintf (dump_file, "Deleting LHS of call: ");
1440                       print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
1441                       fprintf (dump_file, "\n");
1442                     }
1443
1444                   gimple_call_set_lhs (stmt, NULL_TREE);
1445                   maybe_clean_or_replace_eh_stmt (stmt, stmt);
1446                   update_stmt (stmt);
1447                   release_ssa_name (name);
1448
1449                   /* GOMP_SIMD_LANE (unless three argument) or ASAN_POISON
1450                      without lhs is not needed.  */
1451                   if (gimple_call_internal_p (stmt))
1452                     switch (gimple_call_internal_fn (stmt))
1453                       {
1454                       case IFN_GOMP_SIMD_LANE:
1455                         if (gimple_call_num_args (stmt) >= 3
1456                             && !integer_nonzerop (gimple_call_arg (stmt, 2)))
1457                           break;
1458                         /* FALLTHRU */
1459                       case IFN_ASAN_POISON:
1460                         remove_dead_stmt (&gsi, bb, to_remove_edges);
1461                         break;
1462                       default:
1463                         break;
1464                       }
1465                 }
1466               else if (gimple_call_internal_p (stmt))
1467                 switch (gimple_call_internal_fn (stmt))
1468                   {
1469                   case IFN_ADD_OVERFLOW:
1470                     maybe_optimize_arith_overflow (&gsi, PLUS_EXPR);
1471                     break;
1472                   case IFN_SUB_OVERFLOW:
1473                     maybe_optimize_arith_overflow (&gsi, MINUS_EXPR);
1474                     break;
1475                   case IFN_MUL_OVERFLOW:
1476                     maybe_optimize_arith_overflow (&gsi, MULT_EXPR);
1477                     break;
1478                   default:
1479                     break;
1480                   }
1481             }
1482           else if (gimple_debug_bind_p (stmt))
1483             {
1484               /* We are only keeping the last debug-bind of a
1485                  non-DEBUG_EXPR_DECL variable in a series of
1486                  debug-bind stmts.  */
1487               tree var = gimple_debug_bind_get_var (stmt);
1488               if (TREE_CODE (var) != DEBUG_EXPR_DECL
1489                   && !bitmap_set_bit (debug_seen, DECL_UID (var)))
1490                 remove_dead_stmt (&gsi, bb, to_remove_edges);
1491               continue;
1492             }
1493           bitmap_clear (debug_seen);
1494         }
1495
1496       /* Remove dead PHI nodes.  */
1497       something_changed |= remove_dead_phis (bb);
1498     }
1499
1500   /* First remove queued edges.  */
1501   if (!to_remove_edges.is_empty ())
1502     {
1503       /* Remove edges.  We've delayed this to not get bogus debug stmts
1504          during PHI node removal.  */
1505       for (unsigned i = 0; i < to_remove_edges.length (); ++i)
1506         remove_edge (to_remove_edges[i]);
1507       cfg_altered = true;
1508     }
1509   /* When we cleared calls_setjmp we can purge all abnormal edges.  Do so.  */
1510   if (cfun->calls_setjmp != had_setjmp)
1511     {
1512       gcc_assert (!cfun->calls_setjmp);
1513       /* Make sure we only remove the edges, not dominated blocks.  Using
1514          gimple_purge_dead_abnormal_call_edges would do that and we
1515          cannot free dominators yet.  */
1516       FOR_EACH_BB_FN (bb, cfun)
1517         if (gcall *stmt = safe_dyn_cast <gcall *> (last_stmt (bb)))
1518           if (!stmt_can_make_abnormal_goto (stmt))
1519             {
1520               edge_iterator ei;
1521               edge e;
1522               for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); )
1523                 {
1524                   if (e->flags & EDGE_ABNORMAL)
1525                     {
1526                       if (e->flags & EDGE_FALLTHRU)
1527                         e->flags &= ~EDGE_ABNORMAL;
1528                       else
1529                         remove_edge (e);
1530                       cfg_altered = true;
1531                     }
1532                   else
1533                     ei_next (&ei);
1534                 }
1535             }
1536     }
1537
1538   /* Now remove the unreachable blocks.  */
1539   if (cfg_altered)
1540     {
1541       basic_block prev_bb;
1542
1543       find_unreachable_blocks ();
1544
1545       /* Delete all unreachable basic blocks in reverse dominator order.  */
1546       for (bb = EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb;
1547            bb != ENTRY_BLOCK_PTR_FOR_FN (cfun); bb = prev_bb)
1548         {
1549           prev_bb = bb->prev_bb;
1550
1551           if ((bb_contains_live_stmts
1552                && !bitmap_bit_p (bb_contains_live_stmts, bb->index))
1553               || !(bb->flags & BB_REACHABLE))
1554             {
1555               /* Since we don't track liveness of virtual PHI nodes, it is
1556                  possible that we rendered some PHI nodes unreachable while
1557                  they are still in use.  Mark them for renaming.  */
1558               for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi);
1559                    gsi_next (&gsi))
1560                 if (virtual_operand_p (gimple_phi_result (gsi.phi ())))
1561                   {
1562                     bool found = false;
1563                     imm_use_iterator iter;
1564
1565                     FOR_EACH_IMM_USE_STMT (stmt, iter,
1566                                            gimple_phi_result (gsi.phi ()))
1567                       {
1568                         if (!(gimple_bb (stmt)->flags & BB_REACHABLE))
1569                           continue;
1570                         if (gimple_code (stmt) == GIMPLE_PHI
1571                             || gimple_plf (stmt, STMT_NECESSARY))
1572                           {
1573                             found = true;
1574                             break;
1575                           }
1576                       }
1577                     if (found)
1578                       mark_virtual_phi_result_for_renaming (gsi.phi ());
1579                   }
1580
1581               if (!(bb->flags & BB_REACHABLE))
1582                 {
1583                   /* Speed up the removal of blocks that don't
1584                      dominate others.  Walking backwards, this should
1585                      be the common case.  ??? Do we need to recompute
1586                      dominators because of cfg_altered?  */
1587                   if (!first_dom_son (CDI_DOMINATORS, bb))
1588                     delete_basic_block (bb);
1589                   else
1590                     {
1591                       h = get_all_dominated_blocks (CDI_DOMINATORS, bb);
1592
1593                       while (h.length ())
1594                         {
1595                           bb = h.pop ();
1596                           prev_bb = bb->prev_bb;
1597                           /* Rearrangements to the CFG may have failed
1598                              to update the dominators tree, so that
1599                              formerly-dominated blocks are now
1600                              otherwise reachable.  */
1601                           if (!!(bb->flags & BB_REACHABLE))
1602                             continue;
1603                           delete_basic_block (bb);
1604                         }
1605
1606                       h.release ();
1607                     }
1608                 }
1609             }
1610         }
1611     }
1612
1613   if (bb_postorder)
1614     free (bb_postorder);
1615   bb_postorder = NULL;
1616
1617   return something_changed;
1618 }
1619
1620
1621 /* Print out removed statement statistics.  */
1622
1623 static void
1624 print_stats (void)
1625 {
1626   float percg;
1627
1628   percg = ((float) stats.removed / (float) stats.total) * 100;
1629   fprintf (dump_file, "Removed %d of %d statements (%d%%)\n",
1630            stats.removed, stats.total, (int) percg);
1631
1632   if (stats.total_phis == 0)
1633     percg = 0;
1634   else
1635     percg = ((float) stats.removed_phis / (float) stats.total_phis) * 100;
1636
1637   fprintf (dump_file, "Removed %d of %d PHI nodes (%d%%)\n",
1638            stats.removed_phis, stats.total_phis, (int) percg);
1639 }
1640
1641 /* Initialization for this pass.  Set up the used data structures.  */
1642
1643 static void
1644 tree_dce_init (bool aggressive)
1645 {
1646   memset ((void *) &stats, 0, sizeof (stats));
1647
1648   if (aggressive)
1649     {
1650       last_stmt_necessary = sbitmap_alloc (last_basic_block_for_fn (cfun));
1651       bitmap_clear (last_stmt_necessary);
1652       bb_contains_live_stmts = sbitmap_alloc (last_basic_block_for_fn (cfun));
1653       bitmap_clear (bb_contains_live_stmts);
1654     }
1655
1656   processed = sbitmap_alloc (num_ssa_names + 1);
1657   bitmap_clear (processed);
1658
1659   worklist.create (64);
1660   cfg_altered = false;
1661 }
1662
1663 /* Cleanup after this pass.  */
1664
1665 static void
1666 tree_dce_done (bool aggressive)
1667 {
1668   if (aggressive)
1669     {
1670       delete cd;
1671       sbitmap_free (visited_control_parents);
1672       sbitmap_free (last_stmt_necessary);
1673       sbitmap_free (bb_contains_live_stmts);
1674       bb_contains_live_stmts = NULL;
1675     }
1676
1677   sbitmap_free (processed);
1678
1679   worklist.release ();
1680 }
1681
1682 /* Sort PHI argument values for make_forwarders_with_degenerate_phis.  */
1683
1684 static int
1685 sort_phi_args (const void *a_, const void *b_)
1686 {
1687   auto *a = (const std::pair<edge, hashval_t> *) a_;
1688   auto *b = (const std::pair<edge, hashval_t> *) b_;
1689   hashval_t ha = a->second;
1690   hashval_t hb = b->second;
1691   if (ha < hb)
1692     return -1;
1693   else if (ha > hb)
1694     return 1;
1695   else if (a->first->dest_idx < b->first->dest_idx)
1696     return -1;
1697   else if (a->first->dest_idx > b->first->dest_idx)
1698     return 1;
1699   else
1700     return 0;
1701 }
1702
1703 /* Look for a non-virtual PHIs and make a forwarder block when all PHIs
1704    have the same argument on a set of edges.  This is to not consider
1705    control dependences of individual edges for same values but only for
1706    the common set.  */
1707
1708 static unsigned
1709 make_forwarders_with_degenerate_phis (function *fn)
1710 {
1711   unsigned todo = 0;
1712
1713   basic_block bb;
1714   FOR_EACH_BB_FN (bb, fn)
1715     {
1716       /* Only PHIs with three or more arguments have opportunities.  */
1717       if (EDGE_COUNT (bb->preds) < 3)
1718         continue;
1719       /* Do not touch loop headers or blocks with abnormal predecessors.
1720          ???  This is to avoid creating valid loops here, see PR103458.
1721          We might want to improve things to either explicitely add those
1722          loops or at least consider blocks with no backedges.  */
1723       if (bb->loop_father->header == bb
1724           || bb_has_abnormal_pred (bb))
1725         continue;
1726
1727       /* Take one PHI node as template to look for identical
1728          arguments.  Build a vector of candidates forming sets
1729          of argument edges with equal values.  Note optimality
1730          depends on the particular choice of the template PHI
1731          since equal arguments are unordered leaving other PHIs
1732          with more than one set of equal arguments within this
1733          argument range unsorted.  We'd have to break ties by
1734          looking at other PHI nodes.  */
1735       gphi_iterator gsi = gsi_start_nonvirtual_phis (bb);
1736       if (gsi_end_p (gsi))
1737         continue;
1738       gphi *phi = gsi.phi ();
1739       auto_vec<std::pair<edge, hashval_t>, 8> args;
1740       bool need_resort = false;
1741       for (unsigned i = 0; i < gimple_phi_num_args (phi); ++i)
1742         {
1743           edge e = gimple_phi_arg_edge (phi, i);
1744           /* Skip abnormal edges since we cannot redirect them.  */
1745           if (e->flags & EDGE_ABNORMAL)
1746             continue;
1747           /* Skip loop exit edges when we are in loop-closed SSA form
1748              since the forwarder we'd create does not have a PHI node.  */
1749           if (loops_state_satisfies_p (LOOP_CLOSED_SSA)
1750               && loop_exit_edge_p (e->src->loop_father, e))
1751             continue;
1752
1753           tree arg = gimple_phi_arg_def (phi, i);
1754           if (!CONSTANT_CLASS_P (arg) && TREE_CODE (arg) != SSA_NAME)
1755             need_resort = true;
1756           args.safe_push (std::make_pair (e, iterative_hash_expr (arg, 0)));
1757         }
1758       if (args.length () < 2)
1759         continue;
1760       args.qsort (sort_phi_args);
1761       /* The above sorting can be different between -g and -g0, as e.g. decls
1762          can have different uids (-g could have bigger gaps in between them).
1763          So, only use that to determine which args are equal, then change
1764          second from hash value to smallest dest_idx of the edges which have
1765          equal argument and sort again.  If all the phi arguments are
1766          constants or SSA_NAME, there is no need for the second sort, the hash
1767          values are stable in that case.  */
1768       hashval_t hash = args[0].second;
1769       args[0].second = args[0].first->dest_idx;
1770       bool any_equal = false;
1771       for (unsigned i = 1; i < args.length (); ++i)
1772         if (hash == args[i].second
1773             && operand_equal_p (PHI_ARG_DEF_FROM_EDGE (phi, args[i - 1].first),
1774                                 PHI_ARG_DEF_FROM_EDGE (phi, args[i].first)))
1775           {
1776             args[i].second = args[i - 1].second;
1777             any_equal = true;
1778           }
1779         else
1780           {
1781             hash = args[i].second;
1782             args[i].second = args[i].first->dest_idx;
1783           }
1784       if (!any_equal)
1785         continue;
1786       if (need_resort)
1787         args.qsort (sort_phi_args);
1788
1789       /* From the candidates vector now verify true candidates for
1790          forwarders and create them.  */
1791       gphi *vphi = get_virtual_phi (bb);
1792       unsigned start = 0;
1793       while (start < args.length () - 1)
1794         {
1795           unsigned i;
1796           for (i = start + 1; i < args.length (); ++i)
1797             if (args[start].second != args[i].second)
1798               break;
1799           /* args[start]..args[i-1] are equal.  */
1800           if (start != i - 1)
1801             {
1802               /* Check all PHI nodes for argument equality.  */
1803               bool equal = true;
1804               gphi_iterator gsi2 = gsi;
1805               gsi_next (&gsi2);
1806               for (; !gsi_end_p (gsi2); gsi_next (&gsi2))
1807                 {
1808                   gphi *phi2 = gsi2.phi ();
1809                   if (virtual_operand_p (gimple_phi_result (phi2)))
1810                     continue;
1811                   tree start_arg
1812                     = PHI_ARG_DEF_FROM_EDGE (phi2, args[start].first);
1813                   for (unsigned j = start + 1; j < i; ++j)
1814                     {
1815                       if (!operand_equal_p (start_arg,
1816                                             PHI_ARG_DEF_FROM_EDGE
1817                                               (phi2, args[j].first)))
1818                         {
1819                           /* Another PHI might have a shorter set of
1820                              equivalent args.  Go for that.  */
1821                           i = j;
1822                           if (j == start + 1)
1823                             equal = false;
1824                           break;
1825                         }
1826                     }
1827                   if (!equal)
1828                     break;
1829                 }
1830               if (equal)
1831                 {
1832                   /* If we are asked to forward all edges the block
1833                      has all degenerate PHIs.  Do nothing in that case.  */
1834                   if (start == 0
1835                       && i == args.length ()
1836                       && args.length () == gimple_phi_num_args (phi))
1837                     break;
1838                   /* Instead of using make_forwarder_block we are
1839                      rolling our own variant knowing that the forwarder
1840                      does not need PHI nodes apart from eventually
1841                      a virtual one.  */
1842                   auto_vec<tree, 8> vphi_args;
1843                   if (vphi)
1844                     {
1845                       vphi_args.reserve_exact (i - start);
1846                       for (unsigned j = start; j < i; ++j)
1847                         vphi_args.quick_push
1848                           (PHI_ARG_DEF_FROM_EDGE (vphi, args[j].first));
1849                     }
1850                   free_dominance_info (fn, CDI_DOMINATORS);
1851                   basic_block forwarder = split_edge (args[start].first);
1852                   for (unsigned j = start + 1; j < i; ++j)
1853                     {
1854                       edge e = args[j].first;
1855                       redirect_edge_and_branch_force (e, forwarder);
1856                       redirect_edge_var_map_clear (e);
1857                     }
1858                   if (vphi)
1859                     {
1860                       tree def = copy_ssa_name (vphi_args[0]);
1861                       gphi *vphi_copy = create_phi_node (def, forwarder);
1862                       for (unsigned j = start; j < i; ++j)
1863                         add_phi_arg (vphi_copy, vphi_args[j - start],
1864                                      args[j].first, UNKNOWN_LOCATION);
1865                       SET_PHI_ARG_DEF
1866                         (vphi, single_succ_edge (forwarder)->dest_idx, def);
1867                     }
1868                   todo |= TODO_cleanup_cfg;
1869                 }
1870             }
1871           /* Continue searching for more opportunities.  */
1872           start = i;
1873         }
1874     }
1875   return todo;
1876 }
1877
1878 /* Main routine to eliminate dead code.
1879
1880    AGGRESSIVE controls the aggressiveness of the algorithm.
1881    In conservative mode, we ignore control dependence and simply declare
1882    all but the most trivially dead branches necessary.  This mode is fast.
1883    In aggressive mode, control dependences are taken into account, which
1884    results in more dead code elimination, but at the cost of some time.
1885
1886    FIXME: Aggressive mode before PRE doesn't work currently because
1887           the dominance info is not invalidated after DCE1.  This is
1888           not an issue right now because we only run aggressive DCE
1889           as the last tree SSA pass, but keep this in mind when you
1890           start experimenting with pass ordering.  */
1891
1892 static unsigned int
1893 perform_tree_ssa_dce (bool aggressive)
1894 {
1895   bool something_changed = 0;
1896   unsigned todo = 0;
1897
1898   /* Preheaders are needed for SCEV to work.
1899      Simple lateches and recorded exits improve chances that loop will
1900      proved to be finite in testcases such as in loop-15.c and loop-24.c  */
1901   bool in_loop_pipeline = scev_initialized_p ();
1902   if (aggressive && ! in_loop_pipeline)
1903     {
1904       loop_optimizer_init (LOOPS_NORMAL
1905                            | LOOPS_HAVE_RECORDED_EXITS);
1906       scev_initialize ();
1907     }
1908
1909   if (aggressive)
1910     todo |= make_forwarders_with_degenerate_phis (cfun);
1911
1912   calculate_dominance_info (CDI_DOMINATORS);
1913
1914   tree_dce_init (aggressive);
1915
1916   if (aggressive)
1917     {
1918       /* Compute control dependence.  */
1919       calculate_dominance_info (CDI_POST_DOMINATORS);
1920       cd = new control_dependences ();
1921
1922       visited_control_parents =
1923         sbitmap_alloc (last_basic_block_for_fn (cfun));
1924       bitmap_clear (visited_control_parents);
1925
1926       mark_dfs_back_edges ();
1927     }
1928
1929   find_obviously_necessary_stmts (aggressive);
1930
1931   if (aggressive && ! in_loop_pipeline)
1932     {
1933       scev_finalize ();
1934       loop_optimizer_finalize ();
1935     }
1936
1937   longest_chain = 0;
1938   total_chain = 0;
1939   nr_walks = 0;
1940   chain_ovfl = false;
1941   visited = BITMAP_ALLOC (NULL);
1942   propagate_necessity (aggressive);
1943   BITMAP_FREE (visited);
1944
1945   something_changed |= eliminate_unnecessary_stmts (aggressive);
1946   something_changed |= cfg_altered;
1947
1948   /* We do not update postdominators, so free them unconditionally.  */
1949   free_dominance_info (CDI_POST_DOMINATORS);
1950
1951   /* If we removed paths in the CFG, then we need to update
1952      dominators as well.  I haven't investigated the possibility
1953      of incrementally updating dominators.  */
1954   if (cfg_altered)
1955     free_dominance_info (CDI_DOMINATORS);
1956
1957   statistics_counter_event (cfun, "Statements deleted", stats.removed);
1958   statistics_counter_event (cfun, "PHI nodes deleted", stats.removed_phis);
1959
1960   /* Debugging dumps.  */
1961   if (dump_file && (dump_flags & (TDF_STATS|TDF_DETAILS)))
1962     print_stats ();
1963
1964   tree_dce_done (aggressive);
1965
1966   if (something_changed)
1967     {
1968       free_numbers_of_iterations_estimates (cfun);
1969       if (in_loop_pipeline)
1970         scev_reset ();
1971       todo |= TODO_update_ssa | TODO_cleanup_cfg;
1972     }
1973   return todo;
1974 }
1975
1976 /* Pass entry points.  */
1977 static unsigned int
1978 tree_ssa_dce (void)
1979 {
1980   return perform_tree_ssa_dce (/*aggressive=*/false);
1981 }
1982
1983 static unsigned int
1984 tree_ssa_cd_dce (void)
1985 {
1986   return perform_tree_ssa_dce (/*aggressive=*/optimize >= 2);
1987 }
1988
1989 namespace {
1990
1991 const pass_data pass_data_dce =
1992 {
1993   GIMPLE_PASS, /* type */
1994   "dce", /* name */
1995   OPTGROUP_NONE, /* optinfo_flags */
1996   TV_TREE_DCE, /* tv_id */
1997   ( PROP_cfg | PROP_ssa ), /* properties_required */
1998   0, /* properties_provided */
1999   0, /* properties_destroyed */
2000   0, /* todo_flags_start */
2001   0, /* todo_flags_finish */
2002 };
2003
2004 class pass_dce : public gimple_opt_pass
2005 {
2006 public:
2007   pass_dce (gcc::context *ctxt)
2008     : gimple_opt_pass (pass_data_dce, ctxt), update_address_taken_p (false)
2009   {}
2010
2011   /* opt_pass methods: */
2012   opt_pass * clone () final override { return new pass_dce (m_ctxt); }
2013   void set_pass_param (unsigned n, bool param) final override
2014     {
2015       gcc_assert (n == 0);
2016       update_address_taken_p = param;
2017     }
2018   bool gate (function *) final override { return flag_tree_dce != 0; }
2019   unsigned int execute (function *) final override
2020     {
2021       return (tree_ssa_dce ()
2022               | (update_address_taken_p ? TODO_update_address_taken : 0));
2023     }
2024
2025 private:
2026   bool update_address_taken_p;
2027 }; // class pass_dce
2028
2029 } // anon namespace
2030
2031 gimple_opt_pass *
2032 make_pass_dce (gcc::context *ctxt)
2033 {
2034   return new pass_dce (ctxt);
2035 }
2036
2037 namespace {
2038
2039 const pass_data pass_data_cd_dce =
2040 {
2041   GIMPLE_PASS, /* type */
2042   "cddce", /* name */
2043   OPTGROUP_NONE, /* optinfo_flags */
2044   TV_TREE_CD_DCE, /* tv_id */
2045   ( PROP_cfg | PROP_ssa ), /* properties_required */
2046   0, /* properties_provided */
2047   0, /* properties_destroyed */
2048   0, /* todo_flags_start */
2049   0, /* todo_flags_finish */
2050 };
2051
2052 class pass_cd_dce : public gimple_opt_pass
2053 {
2054 public:
2055   pass_cd_dce (gcc::context *ctxt)
2056     : gimple_opt_pass (pass_data_cd_dce, ctxt), update_address_taken_p (false)
2057   {}
2058
2059   /* opt_pass methods: */
2060   opt_pass * clone () final override { return new pass_cd_dce (m_ctxt); }
2061   void set_pass_param (unsigned n, bool param) final override
2062     {
2063       gcc_assert (n == 0);
2064       update_address_taken_p = param;
2065     }
2066   bool gate (function *) final override { return flag_tree_dce != 0; }
2067   unsigned int execute (function *) final override
2068     {
2069       return (tree_ssa_cd_dce ()
2070               | (update_address_taken_p ? TODO_update_address_taken : 0));
2071     }
2072
2073 private:
2074   bool update_address_taken_p;
2075 }; // class pass_cd_dce
2076
2077 } // anon namespace
2078
2079 gimple_opt_pass *
2080 make_pass_cd_dce (gcc::context *ctxt)
2081 {
2082   return new pass_cd_dce (ctxt);
2083 }
2084
2085
2086 /* A cheap DCE interface.  WORKLIST is a list of possibly dead stmts and
2087    is consumed by this function.  The function has linear complexity in
2088    the number of dead stmts with a constant factor like the average SSA
2089    use operands number.  */
2090
2091 void
2092 simple_dce_from_worklist (bitmap worklist)
2093 {
2094   while (! bitmap_empty_p (worklist))
2095     {
2096       /* Pop item.  */
2097       unsigned i = bitmap_first_set_bit (worklist);
2098       bitmap_clear_bit (worklist, i);
2099
2100       tree def = ssa_name (i);
2101       /* Removed by somebody else or still in use.  */
2102       if (! def || ! has_zero_uses (def))
2103         continue;
2104
2105       gimple *t = SSA_NAME_DEF_STMT (def);
2106       if (gimple_has_side_effects (t))
2107         continue;
2108
2109       /* The defining statement needs to be defining only this name.
2110          ASM is the only statement that can define more than one
2111          (non-virtual) name. */
2112       if (is_a<gasm *>(t)
2113           && !single_ssa_def_operand (t, SSA_OP_DEF))
2114         continue;
2115
2116       /* Don't remove statements that are needed for non-call
2117          eh to work.  */
2118       if (stmt_unremovable_because_of_non_call_eh_p (cfun, t))
2119         continue;
2120
2121       /* Add uses to the worklist.  */
2122       ssa_op_iter iter;
2123       use_operand_p use_p;
2124       FOR_EACH_PHI_OR_STMT_USE (use_p, t, iter, SSA_OP_USE)
2125         {
2126           tree use = USE_FROM_PTR (use_p);
2127           if (TREE_CODE (use) == SSA_NAME
2128               && ! SSA_NAME_IS_DEFAULT_DEF (use))
2129             bitmap_set_bit (worklist, SSA_NAME_VERSION (use));
2130         }
2131
2132       /* Remove stmt.  */
2133       if (dump_file && (dump_flags & TDF_DETAILS))
2134         {
2135           fprintf (dump_file, "Removing dead stmt:");
2136           print_gimple_stmt (dump_file, t, 0);
2137         }
2138       gimple_stmt_iterator gsi = gsi_for_stmt (t);
2139       if (gimple_code (t) == GIMPLE_PHI)
2140         remove_phi_node (&gsi, true);
2141       else
2142         {
2143           gsi_remove (&gsi, true);
2144           release_defs (t);
2145         }
2146     }
2147 }