Update change log
[platform/upstream/gcc48.git] / gcc / tree-ssa-dce.c
1 /* Dead code elimination pass for the GNU compiler.
2    Copyright (C) 2002-2013 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 "tm.h"
49
50 #include "tree.h"
51 #include "gimple-pretty-print.h"
52 #include "basic-block.h"
53 #include "tree-flow.h"
54 #include "gimple.h"
55 #include "tree-pass.h"
56 #include "flags.h"
57 #include "cfgloop.h"
58 #include "tree-scalar-evolution.h"
59
60 static struct stmt_stats
61 {
62   int total;
63   int total_phis;
64   int removed;
65   int removed_phis;
66 } stats;
67
68 #define STMT_NECESSARY GF_PLF_1
69
70 static vec<gimple> worklist;
71
72 /* Vector indicating an SSA name has already been processed and marked
73    as necessary.  */
74 static sbitmap processed;
75
76 /* Vector indicating that the last statement of a basic block has already
77    been marked as necessary.  */
78 static sbitmap last_stmt_necessary;
79
80 /* Vector indicating that BB contains statements that are live.  */
81 static sbitmap bb_contains_live_stmts;
82
83 /* Before we can determine whether a control branch is dead, we need to
84    compute which blocks are control dependent on which edges.
85
86    We expect each block to be control dependent on very few edges so we
87    use a bitmap for each block recording its edges.  An array holds the
88    bitmap.  The Ith bit in the bitmap is set if that block is dependent
89    on the Ith edge.  */
90 static bitmap *control_dependence_map;
91
92 /* Vector indicating that a basic block has already had all the edges
93    processed that it is control dependent on.  */
94 static sbitmap visited_control_parents;
95
96 /* TRUE if this pass alters the CFG (by removing control statements).
97    FALSE otherwise.
98
99    If this pass alters the CFG, then it will arrange for the dominators
100    to be recomputed.  */
101 static bool cfg_altered;
102
103 /* Execute code that follows the macro for each edge (given number
104    EDGE_NUMBER within the CODE) for which the block with index N is
105    control dependent.  */
106 #define EXECUTE_IF_CONTROL_DEPENDENT(BI, N, EDGE_NUMBER)        \
107   EXECUTE_IF_SET_IN_BITMAP (control_dependence_map[(N)], 0,     \
108                             (EDGE_NUMBER), (BI))
109
110
111 /* Indicate block BB is control dependent on an edge with index EDGE_INDEX.  */
112 static inline void
113 set_control_dependence_map_bit (basic_block bb, int edge_index)
114 {
115   if (bb == ENTRY_BLOCK_PTR)
116     return;
117   gcc_assert (bb != EXIT_BLOCK_PTR);
118   bitmap_set_bit (control_dependence_map[bb->index], edge_index);
119 }
120
121 /* Clear all control dependences for block BB.  */
122 static inline void
123 clear_control_dependence_bitmap (basic_block bb)
124 {
125   bitmap_clear (control_dependence_map[bb->index]);
126 }
127
128
129 /* Find the immediate postdominator PDOM of the specified basic block BLOCK.
130    This function is necessary because some blocks have negative numbers.  */
131
132 static inline basic_block
133 find_pdom (basic_block block)
134 {
135   gcc_assert (block != ENTRY_BLOCK_PTR);
136
137   if (block == EXIT_BLOCK_PTR)
138     return EXIT_BLOCK_PTR;
139   else
140     {
141       basic_block bb = get_immediate_dominator (CDI_POST_DOMINATORS, block);
142       if (! bb)
143         return EXIT_BLOCK_PTR;
144       return bb;
145     }
146 }
147
148
149 /* Determine all blocks' control dependences on the given edge with edge_list
150    EL index EDGE_INDEX, ala Morgan, Section 3.6.  */
151
152 static void
153 find_control_dependence (struct edge_list *el, int edge_index)
154 {
155   basic_block current_block;
156   basic_block ending_block;
157
158   gcc_assert (INDEX_EDGE_PRED_BB (el, edge_index) != EXIT_BLOCK_PTR);
159
160   if (INDEX_EDGE_PRED_BB (el, edge_index) == ENTRY_BLOCK_PTR)
161     ending_block = single_succ (ENTRY_BLOCK_PTR);
162   else
163     ending_block = find_pdom (INDEX_EDGE_PRED_BB (el, edge_index));
164
165   for (current_block = INDEX_EDGE_SUCC_BB (el, edge_index);
166        current_block != ending_block && current_block != EXIT_BLOCK_PTR;
167        current_block = find_pdom (current_block))
168     {
169       edge e = INDEX_EDGE (el, edge_index);
170
171       /* For abnormal edges, we don't make current_block control
172          dependent because instructions that throw are always necessary
173          anyway.  */
174       if (e->flags & EDGE_ABNORMAL)
175         continue;
176
177       set_control_dependence_map_bit (current_block, edge_index);
178     }
179 }
180
181
182 /* Record all blocks' control dependences on all edges in the edge
183    list EL, ala Morgan, Section 3.6.  */
184
185 static void
186 find_all_control_dependences (struct edge_list *el)
187 {
188   int i;
189
190   for (i = 0; i < NUM_EDGES (el); ++i)
191     find_control_dependence (el, i);
192 }
193
194 /* If STMT is not already marked necessary, mark it, and add it to the
195    worklist if ADD_TO_WORKLIST is true.  */
196
197 static inline void
198 mark_stmt_necessary (gimple stmt, bool add_to_worklist)
199 {
200   gcc_assert (stmt);
201
202   if (gimple_plf (stmt, STMT_NECESSARY))
203     return;
204
205   if (dump_file && (dump_flags & TDF_DETAILS))
206     {
207       fprintf (dump_file, "Marking useful stmt: ");
208       print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
209       fprintf (dump_file, "\n");
210     }
211
212   gimple_set_plf (stmt, STMT_NECESSARY, true);
213   if (add_to_worklist)
214     worklist.safe_push (stmt);
215   if (bb_contains_live_stmts && !is_gimple_debug (stmt))
216     bitmap_set_bit (bb_contains_live_stmts, gimple_bb (stmt)->index);
217 }
218
219
220 /* Mark the statement defining operand OP as necessary.  */
221
222 static inline void
223 mark_operand_necessary (tree op)
224 {
225   gimple stmt;
226   int ver;
227
228   gcc_assert (op);
229
230   ver = SSA_NAME_VERSION (op);
231   if (bitmap_bit_p (processed, ver))
232     {
233       stmt = SSA_NAME_DEF_STMT (op);
234       gcc_assert (gimple_nop_p (stmt)
235                   || gimple_plf (stmt, STMT_NECESSARY));
236       return;
237     }
238   bitmap_set_bit (processed, ver);
239
240   stmt = SSA_NAME_DEF_STMT (op);
241   gcc_assert (stmt);
242
243   if (gimple_plf (stmt, STMT_NECESSARY) || gimple_nop_p (stmt))
244     return;
245
246   if (dump_file && (dump_flags & TDF_DETAILS))
247     {
248       fprintf (dump_file, "marking necessary through ");
249       print_generic_expr (dump_file, op, 0);
250       fprintf (dump_file, " stmt ");
251       print_gimple_stmt (dump_file, stmt, 0, 0);
252     }
253
254   gimple_set_plf (stmt, STMT_NECESSARY, true);
255   if (bb_contains_live_stmts)
256     bitmap_set_bit (bb_contains_live_stmts, gimple_bb (stmt)->index);
257   worklist.safe_push (stmt);
258 }
259
260
261 /* Mark STMT as necessary if it obviously is.  Add it to the worklist if
262    it can make other statements necessary.
263
264    If AGGRESSIVE is false, control statements are conservatively marked as
265    necessary.  */
266
267 static void
268 mark_stmt_if_obviously_necessary (gimple stmt, bool aggressive)
269 {
270   /* With non-call exceptions, we have to assume that all statements could
271      throw.  If a statement could throw, it can be deemed necessary.  */
272   if (cfun->can_throw_non_call_exceptions
273       && !cfun->can_delete_dead_exceptions
274       && stmt_could_throw_p (stmt))
275     {
276       mark_stmt_necessary (stmt, true);
277       return;
278     }
279
280   /* Statements that are implicitly live.  Most function calls, asm
281      and return statements are required.  Labels and GIMPLE_BIND nodes
282      are kept because they are control flow, and we have no way of
283      knowing whether they can be removed.  DCE can eliminate all the
284      other statements in a block, and CFG can then remove the block
285      and labels.  */
286   switch (gimple_code (stmt))
287     {
288     case GIMPLE_PREDICT:
289     case GIMPLE_LABEL:
290       mark_stmt_necessary (stmt, false);
291       return;
292
293     case GIMPLE_ASM:
294     case GIMPLE_RESX:
295     case GIMPLE_RETURN:
296       mark_stmt_necessary (stmt, true);
297       return;
298
299     case GIMPLE_CALL:
300       {
301         tree callee = gimple_call_fndecl (stmt);
302         if (callee != NULL_TREE
303             && DECL_BUILT_IN_CLASS (callee) == BUILT_IN_NORMAL)
304           switch (DECL_FUNCTION_CODE (callee))
305             {
306             case BUILT_IN_MALLOC:
307             case BUILT_IN_CALLOC:
308             case BUILT_IN_ALLOCA:
309             case BUILT_IN_ALLOCA_WITH_ALIGN:
310               return;
311
312             default:;
313             }
314         /* Most, but not all function calls are required.  Function calls that
315            produce no result and have no side effects (i.e. const pure
316            functions) are unnecessary.  */
317         if (gimple_has_side_effects (stmt))
318           {
319             mark_stmt_necessary (stmt, true);
320             return;
321           }
322         if (!gimple_call_lhs (stmt))
323           return;
324         break;
325       }
326
327     case GIMPLE_DEBUG:
328       /* Debug temps without a value are not useful.  ??? If we could
329          easily locate the debug temp bind stmt for a use thereof,
330          would could refrain from marking all debug temps here, and
331          mark them only if they're used.  */
332       if (!gimple_debug_bind_p (stmt)
333           || gimple_debug_bind_has_value_p (stmt)
334           || TREE_CODE (gimple_debug_bind_get_var (stmt)) != DEBUG_EXPR_DECL)
335         mark_stmt_necessary (stmt, false);
336       return;
337
338     case GIMPLE_GOTO:
339       gcc_assert (!simple_goto_p (stmt));
340       mark_stmt_necessary (stmt, true);
341       return;
342
343     case GIMPLE_COND:
344       gcc_assert (EDGE_COUNT (gimple_bb (stmt)->succs) == 2);
345       /* Fall through.  */
346
347     case GIMPLE_SWITCH:
348       if (! aggressive)
349         mark_stmt_necessary (stmt, true);
350       break;
351
352     case GIMPLE_ASSIGN:
353       if (TREE_CODE (gimple_assign_lhs (stmt)) == SSA_NAME
354           && TREE_CLOBBER_P (gimple_assign_rhs1 (stmt)))
355         return;
356       break;
357
358     default:
359       break;
360     }
361
362   /* If the statement has volatile operands, it needs to be preserved.
363      Same for statements that can alter control flow in unpredictable
364      ways.  */
365   if (gimple_has_volatile_ops (stmt) || is_ctrl_altering_stmt (stmt))
366     {
367       mark_stmt_necessary (stmt, true);
368       return;
369     }
370
371   if (stmt_may_clobber_global_p (stmt))
372     {
373       mark_stmt_necessary (stmt, true);
374       return;
375     }
376
377   return;
378 }
379
380
381 /* Mark the last statement of BB as necessary.  */
382
383 static void
384 mark_last_stmt_necessary (basic_block bb)
385 {
386   gimple stmt = last_stmt (bb);
387
388   bitmap_set_bit (last_stmt_necessary, bb->index);
389   bitmap_set_bit (bb_contains_live_stmts, bb->index);
390
391   /* We actually mark the statement only if it is a control statement.  */
392   if (stmt && is_ctrl_stmt (stmt))
393     mark_stmt_necessary (stmt, true);
394 }
395
396
397 /* Mark control dependent edges of BB as necessary.  We have to do this only
398    once for each basic block so we set the appropriate bit after we're done.
399
400    When IGNORE_SELF is true, ignore BB in the list of control dependences.  */
401
402 static void
403 mark_control_dependent_edges_necessary (basic_block bb, struct edge_list *el,
404                                         bool ignore_self)
405 {
406   bitmap_iterator bi;
407   unsigned edge_number;
408   bool skipped = false;
409
410   gcc_assert (bb != EXIT_BLOCK_PTR);
411
412   if (bb == ENTRY_BLOCK_PTR)
413     return;
414
415   EXECUTE_IF_CONTROL_DEPENDENT (bi, bb->index, edge_number)
416     {
417       basic_block cd_bb = INDEX_EDGE_PRED_BB (el, edge_number);
418
419       if (ignore_self && cd_bb == bb)
420         {
421           skipped = true;
422           continue;
423         }
424
425       if (!bitmap_bit_p (last_stmt_necessary, cd_bb->index))
426         mark_last_stmt_necessary (cd_bb);
427     }
428
429   if (!skipped)
430     bitmap_set_bit (visited_control_parents, bb->index);
431 }
432
433
434 /* Find obviously necessary statements.  These are things like most function
435    calls, and stores to file level variables.
436
437    If EL is NULL, control statements are conservatively marked as
438    necessary.  Otherwise it contains the list of edges used by control
439    dependence analysis.  */
440
441 static void
442 find_obviously_necessary_stmts (struct edge_list *el)
443 {
444   basic_block bb;
445   gimple_stmt_iterator gsi;
446   edge e;
447   gimple phi, stmt;
448   int flags;
449
450   FOR_EACH_BB (bb)
451     {
452       /* PHI nodes are never inherently necessary.  */
453       for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
454         {
455           phi = gsi_stmt (gsi);
456           gimple_set_plf (phi, STMT_NECESSARY, false);
457         }
458
459       /* Check all statements in the block.  */
460       for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
461         {
462           stmt = gsi_stmt (gsi);
463           gimple_set_plf (stmt, STMT_NECESSARY, false);
464           mark_stmt_if_obviously_necessary (stmt, el != NULL);
465         }
466     }
467
468   /* Pure and const functions are finite and thus have no infinite loops in
469      them.  */
470   flags = flags_from_decl_or_type (current_function_decl);
471   if ((flags & (ECF_CONST|ECF_PURE)) && !(flags & ECF_LOOPING_CONST_OR_PURE))
472     return;
473
474   /* Prevent the empty possibly infinite loops from being removed.  */
475   if (el)
476     {
477       loop_iterator li;
478       struct loop *loop;
479       scev_initialize ();
480       if (mark_irreducible_loops ())
481         FOR_EACH_BB (bb)
482           {
483             edge_iterator ei;
484             FOR_EACH_EDGE (e, ei, bb->succs)
485               if ((e->flags & EDGE_DFS_BACK)
486                   && (e->flags & EDGE_IRREDUCIBLE_LOOP))
487                 {
488                   if (dump_file)
489                     fprintf (dump_file, "Marking back edge of irreducible loop %i->%i\n",
490                              e->src->index, e->dest->index);
491                   mark_control_dependent_edges_necessary (e->dest, el, false);
492                 }
493           }
494
495       FOR_EACH_LOOP (li, loop, 0)
496         if (!finite_loop_p (loop))
497           {
498             if (dump_file)
499               fprintf (dump_file, "can not prove finiteness of loop %i\n", loop->num);
500             mark_control_dependent_edges_necessary (loop->latch, el, false);
501           }
502       scev_finalize ();
503     }
504 }
505
506
507 /* Return true if REF is based on an aliased base, otherwise false.  */
508
509 static bool
510 ref_may_be_aliased (tree ref)
511 {
512   gcc_assert (TREE_CODE (ref) != WITH_SIZE_EXPR);
513   while (handled_component_p (ref))
514     ref = TREE_OPERAND (ref, 0);
515   if (TREE_CODE (ref) == MEM_REF
516       && TREE_CODE (TREE_OPERAND (ref, 0)) == ADDR_EXPR)
517     ref = TREE_OPERAND (TREE_OPERAND (ref, 0), 0);
518   return !(DECL_P (ref)
519            && !may_be_aliased (ref));
520 }
521
522 static bitmap visited = NULL;
523 static unsigned int longest_chain = 0;
524 static unsigned int total_chain = 0;
525 static unsigned int nr_walks = 0;
526 static bool chain_ovfl = false;
527
528 /* Worker for the walker that marks reaching definitions of REF,
529    which is based on a non-aliased decl, necessary.  It returns
530    true whenever the defining statement of the current VDEF is
531    a kill for REF, as no dominating may-defs are necessary for REF
532    anymore.  DATA points to the basic-block that contains the
533    stmt that refers to REF.  */
534
535 static bool
536 mark_aliased_reaching_defs_necessary_1 (ao_ref *ref, tree vdef, void *data)
537 {
538   gimple def_stmt = SSA_NAME_DEF_STMT (vdef);
539
540   /* All stmts we visit are necessary.  */
541   mark_operand_necessary (vdef);
542
543   /* If the stmt lhs kills ref, then we can stop walking.  */
544   if (gimple_has_lhs (def_stmt)
545       && TREE_CODE (gimple_get_lhs (def_stmt)) != SSA_NAME
546       /* The assignment is not necessarily carried out if it can throw
547          and we can catch it in the current function where we could inspect
548          the previous value.
549          ???  We only need to care about the RHS throwing.  For aggregate
550          assignments or similar calls and non-call exceptions the LHS
551          might throw as well.  */
552       && !stmt_can_throw_internal (def_stmt))
553     {
554       tree base, lhs = gimple_get_lhs (def_stmt);
555       HOST_WIDE_INT size, offset, max_size;
556       ao_ref_base (ref);
557       base = get_ref_base_and_extent (lhs, &offset, &size, &max_size);
558       /* We can get MEM[symbol: sZ, index: D.8862_1] here,
559          so base == refd->base does not always hold.  */
560       if (base == ref->base)
561         {
562           /* For a must-alias check we need to be able to constrain
563              the accesses properly.  */
564           if (size != -1 && size == max_size
565               && ref->max_size != -1)
566             {
567               if (offset <= ref->offset
568                   && offset + size >= ref->offset + ref->max_size)
569                 return true;
570             }
571           /* Or they need to be exactly the same.  */
572           else if (ref->ref
573                    /* Make sure there is no induction variable involved
574                       in the references (gcc.c-torture/execute/pr42142.c).
575                       The simplest way is to check if the kill dominates
576                       the use.  */
577                    /* But when both are in the same block we cannot
578                       easily tell whether we came from a backedge
579                       unless we decide to compute stmt UIDs
580                       (see PR58246).  */
581                    && (basic_block) data != gimple_bb (def_stmt)
582                    && dominated_by_p (CDI_DOMINATORS, (basic_block) data,
583                                       gimple_bb (def_stmt))
584                    && operand_equal_p (ref->ref, lhs, 0))
585             return true;
586         }
587     }
588
589   /* Otherwise keep walking.  */
590   return false;
591 }
592
593 static void
594 mark_aliased_reaching_defs_necessary (gimple stmt, tree ref)
595 {
596   unsigned int chain;
597   ao_ref refd;
598   gcc_assert (!chain_ovfl);
599   ao_ref_init (&refd, ref);
600   chain = walk_aliased_vdefs (&refd, gimple_vuse (stmt),
601                               mark_aliased_reaching_defs_necessary_1,
602                               gimple_bb (stmt), NULL);
603   if (chain > longest_chain)
604     longest_chain = chain;
605   total_chain += chain;
606   nr_walks++;
607 }
608
609 /* Worker for the walker that marks reaching definitions of REF, which
610    is not based on a non-aliased decl.  For simplicity we need to end
611    up marking all may-defs necessary that are not based on a non-aliased
612    decl.  The only job of this walker is to skip may-defs based on
613    a non-aliased decl.  */
614
615 static bool
616 mark_all_reaching_defs_necessary_1 (ao_ref *ref ATTRIBUTE_UNUSED,
617                                     tree vdef, void *data ATTRIBUTE_UNUSED)
618 {
619   gimple def_stmt = SSA_NAME_DEF_STMT (vdef);
620
621   /* We have to skip already visited (and thus necessary) statements
622      to make the chaining work after we dropped back to simple mode.  */
623   if (chain_ovfl
624       && bitmap_bit_p (processed, SSA_NAME_VERSION (vdef)))
625     {
626       gcc_assert (gimple_nop_p (def_stmt)
627                   || gimple_plf (def_stmt, STMT_NECESSARY));
628       return false;
629     }
630
631   /* We want to skip stores to non-aliased variables.  */
632   if (!chain_ovfl
633       && gimple_assign_single_p (def_stmt))
634     {
635       tree lhs = gimple_assign_lhs (def_stmt);
636       if (!ref_may_be_aliased (lhs))
637         return false;
638     }
639
640   /* We want to skip statments that do not constitute stores but have
641      a virtual definition.  */
642   if (is_gimple_call (def_stmt))
643     {
644       tree callee = gimple_call_fndecl (def_stmt);
645       if (callee != NULL_TREE
646           && DECL_BUILT_IN_CLASS (callee) == BUILT_IN_NORMAL)
647         switch (DECL_FUNCTION_CODE (callee))
648           {
649           case BUILT_IN_MALLOC:
650           case BUILT_IN_CALLOC:
651           case BUILT_IN_ALLOCA:
652           case BUILT_IN_ALLOCA_WITH_ALIGN:
653           case BUILT_IN_FREE:
654             return false;
655
656           default:;
657           }
658     }
659
660   mark_operand_necessary (vdef);
661
662   return false;
663 }
664
665 static void
666 mark_all_reaching_defs_necessary (gimple stmt)
667 {
668   walk_aliased_vdefs (NULL, gimple_vuse (stmt),
669                       mark_all_reaching_defs_necessary_1, NULL, &visited);
670 }
671
672 /* Return true for PHI nodes with one or identical arguments
673    can be removed.  */
674 static bool
675 degenerate_phi_p (gimple phi)
676 {
677   unsigned int i;
678   tree op = gimple_phi_arg_def (phi, 0);
679   for (i = 1; i < gimple_phi_num_args (phi); i++)
680     if (gimple_phi_arg_def (phi, i) != op)
681       return false;
682   return true;
683 }
684
685 /* Propagate necessity using the operands of necessary statements.
686    Process the uses on each statement in the worklist, and add all
687    feeding statements which contribute to the calculation of this
688    value to the worklist.
689
690    In conservative mode, EL is NULL.  */
691
692 static void
693 propagate_necessity (struct edge_list *el)
694 {
695   gimple stmt;
696   bool aggressive = (el ? true : false);
697
698   if (dump_file && (dump_flags & TDF_DETAILS))
699     fprintf (dump_file, "\nProcessing worklist:\n");
700
701   while (worklist.length () > 0)
702     {
703       /* Take STMT from worklist.  */
704       stmt = worklist.pop ();
705
706       if (dump_file && (dump_flags & TDF_DETAILS))
707         {
708           fprintf (dump_file, "processing: ");
709           print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
710           fprintf (dump_file, "\n");
711         }
712
713       if (aggressive)
714         {
715           /* Mark the last statement of the basic blocks on which the block
716              containing STMT is control dependent, but only if we haven't
717              already done so.  */
718           basic_block bb = gimple_bb (stmt);
719           if (bb != ENTRY_BLOCK_PTR
720               && !bitmap_bit_p (visited_control_parents, bb->index))
721             mark_control_dependent_edges_necessary (bb, el, false);
722         }
723
724       if (gimple_code (stmt) == GIMPLE_PHI
725           /* We do not process virtual PHI nodes nor do we track their
726              necessity.  */
727           && !virtual_operand_p (gimple_phi_result (stmt)))
728         {
729           /* PHI nodes are somewhat special in that each PHI alternative has
730              data and control dependencies.  All the statements feeding the
731              PHI node's arguments are always necessary.  In aggressive mode,
732              we also consider the control dependent edges leading to the
733              predecessor block associated with each PHI alternative as
734              necessary.  */
735           size_t k;
736
737           for (k = 0; k < gimple_phi_num_args (stmt); k++)
738             {
739               tree arg = PHI_ARG_DEF (stmt, k);
740               if (TREE_CODE (arg) == SSA_NAME)
741                 mark_operand_necessary (arg);
742             }
743
744           /* For PHI operands it matters from where the control flow arrives
745              to the BB.  Consider the following example:
746
747              a=exp1;
748              b=exp2;
749              if (test)
750                 ;
751              else
752                 ;
753              c=PHI(a,b)
754
755              We need to mark control dependence of the empty basic blocks, since they
756              contains computation of PHI operands.
757
758              Doing so is too restrictive in the case the predecestor block is in
759              the loop. Consider:
760
761               if (b)
762                 {
763                   int i;
764                   for (i = 0; i<1000; ++i)
765                     ;
766                   j = 0;
767                 }
768               return j;
769
770              There is PHI for J in the BB containing return statement.
771              In this case the control dependence of predecestor block (that is
772              within the empty loop) also contains the block determining number
773              of iterations of the block that would prevent removing of empty
774              loop in this case.
775
776              This scenario can be avoided by splitting critical edges.
777              To save the critical edge splitting pass we identify how the control
778              dependence would look like if the edge was split.
779
780              Consider the modified CFG created from current CFG by splitting
781              edge B->C.  In the postdominance tree of modified CFG, C' is
782              always child of C.  There are two cases how chlids of C' can look
783              like:
784
785                 1) C' is leaf
786
787                    In this case the only basic block C' is control dependent on is B.
788
789                 2) C' has single child that is B
790
791                    In this case control dependence of C' is same as control
792                    dependence of B in original CFG except for block B itself.
793                    (since C' postdominate B in modified CFG)
794
795              Now how to decide what case happens?  There are two basic options:
796
797                 a) C postdominate B.  Then C immediately postdominate B and
798                    case 2 happens iff there is no other way from B to C except
799                    the edge B->C.
800
801                    There is other way from B to C iff there is succesor of B that
802                    is not postdominated by B.  Testing this condition is somewhat
803                    expensive, because we need to iterate all succesors of B.
804                    We are safe to assume that this does not happen: we will mark B
805                    as needed when processing the other path from B to C that is
806                    conrol dependent on B and marking control dependencies of B
807                    itself is harmless because they will be processed anyway after
808                    processing control statement in B.
809
810                 b) C does not postdominate B.  Always case 1 happens since there is
811                    path from C to exit that does not go through B and thus also C'.  */
812
813           if (aggressive && !degenerate_phi_p (stmt))
814             {
815               for (k = 0; k < gimple_phi_num_args (stmt); k++)
816                 {
817                   basic_block arg_bb = gimple_phi_arg_edge (stmt, k)->src;
818
819                   if (gimple_bb (stmt)
820                       != get_immediate_dominator (CDI_POST_DOMINATORS, arg_bb))
821                     {
822                       if (!bitmap_bit_p (last_stmt_necessary, arg_bb->index))
823                         mark_last_stmt_necessary (arg_bb);
824                     }
825                   else if (arg_bb != ENTRY_BLOCK_PTR
826                            && !bitmap_bit_p (visited_control_parents,
827                                          arg_bb->index))
828                     mark_control_dependent_edges_necessary (arg_bb, el, true);
829                 }
830             }
831         }
832       else
833         {
834           /* Propagate through the operands.  Examine all the USE, VUSE and
835              VDEF operands in this statement.  Mark all the statements
836              which feed this statement's uses as necessary.  */
837           ssa_op_iter iter;
838           tree use;
839
840           /* If this is a call to free which is directly fed by an
841              allocation function do not mark that necessary through
842              processing the argument.  */
843           if (gimple_call_builtin_p (stmt, BUILT_IN_FREE))
844             {
845               tree ptr = gimple_call_arg (stmt, 0);
846               gimple def_stmt;
847               tree def_callee;
848               /* If the pointer we free is defined by an allocation
849                  function do not add the call to the worklist.  */
850               if (TREE_CODE (ptr) == SSA_NAME
851                   && is_gimple_call (def_stmt = SSA_NAME_DEF_STMT (ptr))
852                   && (def_callee = gimple_call_fndecl (def_stmt))
853                   && DECL_BUILT_IN_CLASS (def_callee) == BUILT_IN_NORMAL
854                   && (DECL_FUNCTION_CODE (def_callee) == BUILT_IN_MALLOC
855                       || DECL_FUNCTION_CODE (def_callee) == BUILT_IN_CALLOC))
856                 continue;
857             }
858
859           FOR_EACH_SSA_TREE_OPERAND (use, stmt, iter, SSA_OP_USE)
860             mark_operand_necessary (use);
861
862           use = gimple_vuse (stmt);
863           if (!use)
864             continue;
865
866           /* If we dropped to simple mode make all immediately
867              reachable definitions necessary.  */
868           if (chain_ovfl)
869             {
870               mark_all_reaching_defs_necessary (stmt);
871               continue;
872             }
873
874           /* For statements that may load from memory (have a VUSE) we
875              have to mark all reaching (may-)definitions as necessary.
876              We partition this task into two cases:
877               1) explicit loads based on decls that are not aliased
878               2) implicit loads (like calls) and explicit loads not
879                  based on decls that are not aliased (like indirect
880                  references or loads from globals)
881              For 1) we mark all reaching may-defs as necessary, stopping
882              at dominating kills.  For 2) we want to mark all dominating
883              references necessary, but non-aliased ones which we handle
884              in 1).  By keeping a global visited bitmap for references
885              we walk for 2) we avoid quadratic behavior for those.  */
886
887           if (is_gimple_call (stmt))
888             {
889               tree callee = gimple_call_fndecl (stmt);
890               unsigned i;
891
892               /* Calls to functions that are merely acting as barriers
893                  or that only store to memory do not make any previous
894                  stores necessary.  */
895               if (callee != NULL_TREE
896                   && DECL_BUILT_IN_CLASS (callee) == BUILT_IN_NORMAL
897                   && (DECL_FUNCTION_CODE (callee) == BUILT_IN_MEMSET
898                       || DECL_FUNCTION_CODE (callee) == BUILT_IN_MEMSET_CHK
899                       || DECL_FUNCTION_CODE (callee) == BUILT_IN_MALLOC
900                       || DECL_FUNCTION_CODE (callee) == BUILT_IN_CALLOC
901                       || DECL_FUNCTION_CODE (callee) == BUILT_IN_FREE
902                       || DECL_FUNCTION_CODE (callee) == BUILT_IN_VA_END
903                       || DECL_FUNCTION_CODE (callee) == BUILT_IN_ALLOCA
904                       || (DECL_FUNCTION_CODE (callee)
905                           == BUILT_IN_ALLOCA_WITH_ALIGN)
906                       || DECL_FUNCTION_CODE (callee) == BUILT_IN_STACK_SAVE
907                       || DECL_FUNCTION_CODE (callee) == BUILT_IN_STACK_RESTORE
908                       || DECL_FUNCTION_CODE (callee) == BUILT_IN_ASSUME_ALIGNED))
909                 continue;
910
911               /* Calls implicitly load from memory, their arguments
912                  in addition may explicitly perform memory loads.  */
913               mark_all_reaching_defs_necessary (stmt);
914               for (i = 0; i < gimple_call_num_args (stmt); ++i)
915                 {
916                   tree arg = gimple_call_arg (stmt, i);
917                   if (TREE_CODE (arg) == SSA_NAME
918                       || is_gimple_min_invariant (arg))
919                     continue;
920                   if (TREE_CODE (arg) == WITH_SIZE_EXPR)
921                     arg = TREE_OPERAND (arg, 0);
922                   if (!ref_may_be_aliased (arg))
923                     mark_aliased_reaching_defs_necessary (stmt, arg);
924                 }
925             }
926           else if (gimple_assign_single_p (stmt))
927             {
928               tree rhs;
929               /* If this is a load mark things necessary.  */
930               rhs = gimple_assign_rhs1 (stmt);
931               if (TREE_CODE (rhs) != SSA_NAME
932                   && !is_gimple_min_invariant (rhs)
933                   && TREE_CODE (rhs) != CONSTRUCTOR)
934                 {
935                   if (!ref_may_be_aliased (rhs))
936                     mark_aliased_reaching_defs_necessary (stmt, rhs);
937                   else
938                     mark_all_reaching_defs_necessary (stmt);
939                 }
940             }
941           else if (gimple_code (stmt) == GIMPLE_RETURN)
942             {
943               tree rhs = gimple_return_retval (stmt);
944               /* A return statement may perform a load.  */
945               if (rhs
946                   && TREE_CODE (rhs) != SSA_NAME
947                   && !is_gimple_min_invariant (rhs)
948                   && TREE_CODE (rhs) != CONSTRUCTOR)
949                 {
950                   if (!ref_may_be_aliased (rhs))
951                     mark_aliased_reaching_defs_necessary (stmt, rhs);
952                   else
953                     mark_all_reaching_defs_necessary (stmt);
954                 }
955             }
956           else if (gimple_code (stmt) == GIMPLE_ASM)
957             {
958               unsigned i;
959               mark_all_reaching_defs_necessary (stmt);
960               /* Inputs may perform loads.  */
961               for (i = 0; i < gimple_asm_ninputs (stmt); ++i)
962                 {
963                   tree op = TREE_VALUE (gimple_asm_input_op (stmt, i));
964                   if (TREE_CODE (op) != SSA_NAME
965                       && !is_gimple_min_invariant (op)
966                       && TREE_CODE (op) != CONSTRUCTOR
967                       && !ref_may_be_aliased (op))
968                     mark_aliased_reaching_defs_necessary (stmt, op);
969                 }
970             }
971           else if (gimple_code (stmt) == GIMPLE_TRANSACTION)
972             {
973               /* The beginning of a transaction is a memory barrier.  */
974               /* ??? If we were really cool, we'd only be a barrier
975                  for the memories touched within the transaction.  */
976               mark_all_reaching_defs_necessary (stmt);
977             }
978           else
979             gcc_unreachable ();
980
981           /* If we over-used our alias oracle budget drop to simple
982              mode.  The cost metric allows quadratic behavior
983              (number of uses times number of may-defs queries) up to
984              a constant maximal number of queries and after that falls back to
985              super-linear complexity.  */
986           if (/* Constant but quadratic for small functions.  */
987               total_chain > 128 * 128
988               /* Linear in the number of may-defs.  */
989               && total_chain > 32 * longest_chain
990               /* Linear in the number of uses.  */
991               && total_chain > nr_walks * 32)
992             {
993               chain_ovfl = true;
994               if (visited)
995                 bitmap_clear (visited);
996             }
997         }
998     }
999 }
1000
1001 /* Replace all uses of NAME by underlying variable and mark it
1002    for renaming.  This assumes the defining statement of NAME is
1003    going to be removed.  */
1004
1005 void
1006 mark_virtual_operand_for_renaming (tree name)
1007 {
1008   tree name_var = SSA_NAME_VAR (name);
1009   bool used = false;
1010   imm_use_iterator iter;
1011   use_operand_p use_p;
1012   gimple stmt;
1013
1014   gcc_assert (VAR_DECL_IS_VIRTUAL_OPERAND (name_var));
1015   FOR_EACH_IMM_USE_STMT (stmt, iter, name)
1016     {
1017       FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
1018         SET_USE (use_p, name_var);
1019       used = true;
1020     }
1021   if (used)
1022     mark_virtual_operands_for_renaming (cfun);
1023 }
1024
1025 /* Replace all uses of the virtual PHI result by its underlying variable
1026    and mark it for renaming.  This assumes the PHI node is going to be
1027    removed.  */
1028
1029 void
1030 mark_virtual_phi_result_for_renaming (gimple phi)
1031 {
1032   if (dump_file && (dump_flags & TDF_DETAILS))
1033     {
1034       fprintf (dump_file, "Marking result for renaming : ");
1035       print_gimple_stmt (dump_file, phi, 0, TDF_SLIM);
1036       fprintf (dump_file, "\n");
1037     }
1038
1039   mark_virtual_operand_for_renaming (gimple_phi_result (phi));
1040 }
1041
1042
1043 /* Remove dead PHI nodes from block BB.  */
1044
1045 static bool
1046 remove_dead_phis (basic_block bb)
1047 {
1048   bool something_changed = false;
1049   gimple phi;
1050   gimple_stmt_iterator gsi;
1051
1052   for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi);)
1053     {
1054       stats.total_phis++;
1055       phi = gsi_stmt (gsi);
1056
1057       /* We do not track necessity of virtual PHI nodes.  Instead do
1058          very simple dead PHI removal here.  */
1059       if (virtual_operand_p (gimple_phi_result (phi)))
1060         {
1061           /* Virtual PHI nodes with one or identical arguments
1062              can be removed.  */
1063           if (degenerate_phi_p (phi))
1064             {
1065               tree vdef = gimple_phi_result (phi);
1066               tree vuse = gimple_phi_arg_def (phi, 0);
1067
1068               use_operand_p use_p;
1069               imm_use_iterator iter;
1070               gimple use_stmt;
1071               FOR_EACH_IMM_USE_STMT (use_stmt, iter, vdef)
1072                 FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
1073                   SET_USE (use_p, vuse);
1074               if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (vdef)
1075                   && TREE_CODE (vuse) == SSA_NAME)
1076                 SSA_NAME_OCCURS_IN_ABNORMAL_PHI (vuse) = 1;
1077             }
1078           else
1079             gimple_set_plf (phi, STMT_NECESSARY, true);
1080         }
1081
1082       if (!gimple_plf (phi, STMT_NECESSARY))
1083         {
1084           something_changed = true;
1085           if (dump_file && (dump_flags & TDF_DETAILS))
1086             {
1087               fprintf (dump_file, "Deleting : ");
1088               print_gimple_stmt (dump_file, phi, 0, TDF_SLIM);
1089               fprintf (dump_file, "\n");
1090             }
1091
1092           remove_phi_node (&gsi, true);
1093           stats.removed_phis++;
1094           continue;
1095         }
1096
1097       gsi_next (&gsi);
1098     }
1099   return something_changed;
1100 }
1101
1102 /* Forward edge E to respective POST_DOM_BB and update PHIs.  */
1103
1104 static edge
1105 forward_edge_to_pdom (edge e, basic_block post_dom_bb)
1106 {
1107   gimple_stmt_iterator gsi;
1108   edge e2 = NULL;
1109   edge_iterator ei;
1110
1111   if (dump_file && (dump_flags & TDF_DETAILS))
1112     fprintf (dump_file, "Redirecting edge %i->%i to %i\n", e->src->index,
1113              e->dest->index, post_dom_bb->index);
1114
1115   e2 = redirect_edge_and_branch (e, post_dom_bb);
1116   cfg_altered = true;
1117
1118   /* If edge was already around, no updating is neccesary.  */
1119   if (e2 != e)
1120     return e2;
1121
1122   if (!gimple_seq_empty_p (phi_nodes (post_dom_bb)))
1123     {
1124       /* We are sure that for every live PHI we are seeing control dependent BB.
1125          This means that we can pick any edge to duplicate PHI args from.  */
1126       FOR_EACH_EDGE (e2, ei, post_dom_bb->preds)
1127         if (e2 != e)
1128           break;
1129       for (gsi = gsi_start_phis (post_dom_bb); !gsi_end_p (gsi);)
1130         {
1131           gimple phi = gsi_stmt (gsi);
1132           tree op;
1133           source_location locus;
1134
1135           /* PHIs for virtuals have no control dependency relation on them.
1136              We are lost here and must force renaming of the symbol.  */
1137           if (virtual_operand_p (gimple_phi_result (phi)))
1138             {
1139               mark_virtual_phi_result_for_renaming (phi);
1140               remove_phi_node (&gsi, true);
1141               continue;
1142             }
1143
1144           /* Dead PHI do not imply control dependency.  */
1145           if (!gimple_plf (phi, STMT_NECESSARY))
1146             {
1147               gsi_next (&gsi);
1148               continue;
1149             }
1150
1151           op = gimple_phi_arg_def (phi, e2->dest_idx);
1152           locus = gimple_phi_arg_location (phi, e2->dest_idx);
1153           add_phi_arg (phi, op, e, locus);
1154           /* The resulting PHI if not dead can only be degenerate.  */
1155           gcc_assert (degenerate_phi_p (phi));
1156           gsi_next (&gsi);
1157         }
1158     }
1159   return e;
1160 }
1161
1162 /* Remove dead statement pointed to by iterator I.  Receives the basic block BB
1163    containing I so that we don't have to look it up.  */
1164
1165 static void
1166 remove_dead_stmt (gimple_stmt_iterator *i, basic_block bb)
1167 {
1168   gimple stmt = gsi_stmt (*i);
1169
1170   if (dump_file && (dump_flags & TDF_DETAILS))
1171     {
1172       fprintf (dump_file, "Deleting : ");
1173       print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
1174       fprintf (dump_file, "\n");
1175     }
1176
1177   stats.removed++;
1178
1179   /* If we have determined that a conditional branch statement contributes
1180      nothing to the program, then we not only remove it, but we also change
1181      the flow graph so that the current block will simply fall-thru to its
1182      immediate post-dominator.  The blocks we are circumventing will be
1183      removed by cleanup_tree_cfg if this change in the flow graph makes them
1184      unreachable.  */
1185   if (is_ctrl_stmt (stmt))
1186     {
1187       basic_block post_dom_bb;
1188       edge e, e2;
1189       edge_iterator ei;
1190
1191       post_dom_bb = get_immediate_dominator (CDI_POST_DOMINATORS, bb);
1192
1193       e = find_edge (bb, post_dom_bb);
1194
1195       /* If edge is already there, try to use it.  This avoids need to update
1196          PHI nodes.  Also watch for cases where post dominator does not exists
1197          or is exit block.  These can happen for infinite loops as we create
1198          fake edges in the dominator tree.  */
1199       if (e)
1200         ;
1201       else if (! post_dom_bb || post_dom_bb == EXIT_BLOCK_PTR)
1202         e = EDGE_SUCC (bb, 0);
1203       else
1204         e = forward_edge_to_pdom (EDGE_SUCC (bb, 0), post_dom_bb);
1205       gcc_assert (e);
1206       e->probability = REG_BR_PROB_BASE;
1207       e->count = bb->count;
1208
1209       /* The edge is no longer associated with a conditional, so it does
1210          not have TRUE/FALSE flags.  */
1211       e->flags &= ~(EDGE_TRUE_VALUE | EDGE_FALSE_VALUE);
1212
1213       /* The lone outgoing edge from BB will be a fallthru edge.  */
1214       e->flags |= EDGE_FALLTHRU;
1215
1216       /* Remove the remaining outgoing edges.  */
1217       for (ei = ei_start (bb->succs); (e2 = ei_safe_edge (ei)); )
1218         if (e != e2)
1219           {
1220             cfg_altered = true;
1221             remove_edge (e2);
1222           }
1223         else
1224           ei_next (&ei);
1225     }
1226
1227   /* If this is a store into a variable that is being optimized away,
1228      add a debug bind stmt if possible.  */
1229   if (MAY_HAVE_DEBUG_STMTS
1230       && gimple_assign_single_p (stmt)
1231       && is_gimple_val (gimple_assign_rhs1 (stmt)))
1232     {
1233       tree lhs = gimple_assign_lhs (stmt);
1234       if ((TREE_CODE (lhs) == VAR_DECL || TREE_CODE (lhs) == PARM_DECL)
1235           && !DECL_IGNORED_P (lhs)
1236           && is_gimple_reg_type (TREE_TYPE (lhs))
1237           && !is_global_var (lhs)
1238           && !DECL_HAS_VALUE_EXPR_P (lhs))
1239         {
1240           tree rhs = gimple_assign_rhs1 (stmt);
1241           gimple note
1242             = gimple_build_debug_bind (lhs, unshare_expr (rhs), stmt);
1243           gsi_insert_after (i, note, GSI_SAME_STMT);
1244         }
1245     }
1246
1247   unlink_stmt_vdef (stmt);
1248   gsi_remove (i, true);
1249   release_defs (stmt);
1250 }
1251
1252 /* Eliminate unnecessary statements. Any instruction not marked as necessary
1253    contributes nothing to the program, and can be deleted.  */
1254
1255 static bool
1256 eliminate_unnecessary_stmts (void)
1257 {
1258   bool something_changed = false;
1259   basic_block bb;
1260   gimple_stmt_iterator gsi, psi;
1261   gimple stmt;
1262   tree call;
1263   vec<basic_block> h;
1264
1265   if (dump_file && (dump_flags & TDF_DETAILS))
1266     fprintf (dump_file, "\nEliminating unnecessary statements:\n");
1267
1268   clear_special_calls ();
1269
1270   /* Walking basic blocks and statements in reverse order avoids
1271      releasing SSA names before any other DEFs that refer to them are
1272      released.  This helps avoid loss of debug information, as we get
1273      a chance to propagate all RHSs of removed SSAs into debug uses,
1274      rather than only the latest ones.  E.g., consider:
1275
1276      x_3 = y_1 + z_2;
1277      a_5 = x_3 - b_4;
1278      # DEBUG a => a_5
1279
1280      If we were to release x_3 before a_5, when we reached a_5 and
1281      tried to substitute it into the debug stmt, we'd see x_3 there,
1282      but x_3's DEF, type, etc would have already been disconnected.
1283      By going backwards, the debug stmt first changes to:
1284
1285      # DEBUG a => x_3 - b_4
1286
1287      and then to:
1288
1289      # DEBUG a => y_1 + z_2 - b_4
1290
1291      as desired.  */
1292   gcc_assert (dom_info_available_p (CDI_DOMINATORS));
1293   h = get_all_dominated_blocks (CDI_DOMINATORS, single_succ (ENTRY_BLOCK_PTR));
1294
1295   while (h.length ())
1296     {
1297       bb = h.pop ();
1298
1299       /* Remove dead statements.  */
1300       for (gsi = gsi_last_bb (bb); !gsi_end_p (gsi); gsi = psi)
1301         {
1302           stmt = gsi_stmt (gsi);
1303
1304           psi = gsi;
1305           gsi_prev (&psi);
1306
1307           stats.total++;
1308
1309           /* We can mark a call to free as not necessary if the
1310              defining statement of its argument is an allocation
1311              function and that is not necessary itself.  */
1312           if (gimple_call_builtin_p (stmt, BUILT_IN_FREE))
1313             {
1314               tree ptr = gimple_call_arg (stmt, 0);
1315               tree callee2;
1316               gimple def_stmt;
1317               if (TREE_CODE (ptr) != SSA_NAME)
1318                 continue;
1319               def_stmt = SSA_NAME_DEF_STMT (ptr);
1320               if (!is_gimple_call (def_stmt)
1321                   || gimple_plf (def_stmt, STMT_NECESSARY))
1322                 continue;
1323               callee2 = gimple_call_fndecl (def_stmt);
1324               if (callee2 == NULL_TREE
1325                   || DECL_BUILT_IN_CLASS (callee2) != BUILT_IN_NORMAL
1326                   || (DECL_FUNCTION_CODE (callee2) != BUILT_IN_MALLOC
1327                       && DECL_FUNCTION_CODE (callee2) != BUILT_IN_CALLOC))
1328                 continue;
1329               gimple_set_plf (stmt, STMT_NECESSARY, false);
1330             }
1331
1332           /* If GSI is not necessary then remove it.  */
1333           if (!gimple_plf (stmt, STMT_NECESSARY))
1334             {
1335               if (!is_gimple_debug (stmt))
1336                 something_changed = true;
1337               remove_dead_stmt (&gsi, bb);
1338             }
1339           else if (is_gimple_call (stmt))
1340             {
1341               tree name = gimple_call_lhs (stmt);
1342
1343               notice_special_calls (stmt);
1344
1345               /* When LHS of var = call (); is dead, simplify it into
1346                  call (); saving one operand.  */
1347               if (name
1348                   && TREE_CODE (name) == SSA_NAME
1349                   && !bitmap_bit_p (processed, SSA_NAME_VERSION (name))
1350                   /* Avoid doing so for allocation calls which we
1351                      did not mark as necessary, it will confuse the
1352                      special logic we apply to malloc/free pair removal.  */
1353                   && (!(call = gimple_call_fndecl (stmt))
1354                       || DECL_BUILT_IN_CLASS (call) != BUILT_IN_NORMAL
1355                       || (DECL_FUNCTION_CODE (call) != BUILT_IN_MALLOC
1356                           && DECL_FUNCTION_CODE (call) != BUILT_IN_CALLOC
1357                           && DECL_FUNCTION_CODE (call) != BUILT_IN_ALLOCA
1358                           && (DECL_FUNCTION_CODE (call)
1359                               != BUILT_IN_ALLOCA_WITH_ALIGN))))
1360                 {
1361                   something_changed = true;
1362                   if (dump_file && (dump_flags & TDF_DETAILS))
1363                     {
1364                       fprintf (dump_file, "Deleting LHS of call: ");
1365                       print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
1366                       fprintf (dump_file, "\n");
1367                     }
1368
1369                   gimple_call_set_lhs (stmt, NULL_TREE);
1370                   maybe_clean_or_replace_eh_stmt (stmt, stmt);
1371                   update_stmt (stmt);
1372                   release_ssa_name (name);
1373                 }
1374             }
1375         }
1376     }
1377
1378   h.release ();
1379
1380   /* Since we don't track liveness of virtual PHI nodes, it is possible that we
1381      rendered some PHI nodes unreachable while they are still in use.
1382      Mark them for renaming.  */
1383   if (cfg_altered)
1384     {
1385       basic_block prev_bb;
1386
1387       find_unreachable_blocks ();
1388
1389       /* Delete all unreachable basic blocks in reverse dominator order.  */
1390       for (bb = EXIT_BLOCK_PTR->prev_bb; bb != ENTRY_BLOCK_PTR; bb = prev_bb)
1391         {
1392           prev_bb = bb->prev_bb;
1393
1394           if (!bitmap_bit_p (bb_contains_live_stmts, bb->index)
1395               || !(bb->flags & BB_REACHABLE))
1396             {
1397               for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
1398                 if (virtual_operand_p (gimple_phi_result (gsi_stmt (gsi))))
1399                   {
1400                     bool found = false;
1401                     imm_use_iterator iter;
1402
1403                     FOR_EACH_IMM_USE_STMT (stmt, iter, gimple_phi_result (gsi_stmt (gsi)))
1404                       {
1405                         if (!(gimple_bb (stmt)->flags & BB_REACHABLE))
1406                           continue;
1407                         if (gimple_code (stmt) == GIMPLE_PHI
1408                             || gimple_plf (stmt, STMT_NECESSARY))
1409                           {
1410                             found = true;
1411                             BREAK_FROM_IMM_USE_STMT (iter);
1412                           }
1413                       }
1414                     if (found)
1415                       mark_virtual_phi_result_for_renaming (gsi_stmt (gsi));
1416                   }
1417
1418               if (!(bb->flags & BB_REACHABLE))
1419                 {
1420                   /* Speed up the removal of blocks that don't
1421                      dominate others.  Walking backwards, this should
1422                      be the common case.  ??? Do we need to recompute
1423                      dominators because of cfg_altered?  */
1424                   if (!MAY_HAVE_DEBUG_STMTS
1425                       || !first_dom_son (CDI_DOMINATORS, bb))
1426                     delete_basic_block (bb);
1427                   else
1428                     {
1429                       h = get_all_dominated_blocks (CDI_DOMINATORS, bb);
1430
1431                       while (h.length ())
1432                         {
1433                           bb = h.pop ();
1434                           prev_bb = bb->prev_bb;
1435                           /* Rearrangements to the CFG may have failed
1436                              to update the dominators tree, so that
1437                              formerly-dominated blocks are now
1438                              otherwise reachable.  */
1439                           if (!!(bb->flags & BB_REACHABLE))
1440                             continue;
1441                           delete_basic_block (bb);
1442                         }
1443
1444                       h.release ();
1445                     }
1446                 }
1447             }
1448         }
1449     }
1450   FOR_EACH_BB (bb)
1451     {
1452       /* Remove dead PHI nodes.  */
1453       something_changed |= remove_dead_phis (bb);
1454     }
1455
1456   return something_changed;
1457 }
1458
1459
1460 /* Print out removed statement statistics.  */
1461
1462 static void
1463 print_stats (void)
1464 {
1465   float percg;
1466
1467   percg = ((float) stats.removed / (float) stats.total) * 100;
1468   fprintf (dump_file, "Removed %d of %d statements (%d%%)\n",
1469            stats.removed, stats.total, (int) percg);
1470
1471   if (stats.total_phis == 0)
1472     percg = 0;
1473   else
1474     percg = ((float) stats.removed_phis / (float) stats.total_phis) * 100;
1475
1476   fprintf (dump_file, "Removed %d of %d PHI nodes (%d%%)\n",
1477            stats.removed_phis, stats.total_phis, (int) percg);
1478 }
1479
1480 /* Initialization for this pass.  Set up the used data structures.  */
1481
1482 static void
1483 tree_dce_init (bool aggressive)
1484 {
1485   memset ((void *) &stats, 0, sizeof (stats));
1486
1487   if (aggressive)
1488     {
1489       int i;
1490
1491       control_dependence_map = XNEWVEC (bitmap, last_basic_block);
1492       for (i = 0; i < last_basic_block; ++i)
1493         control_dependence_map[i] = BITMAP_ALLOC (NULL);
1494
1495       last_stmt_necessary = sbitmap_alloc (last_basic_block);
1496       bitmap_clear (last_stmt_necessary);
1497       bb_contains_live_stmts = sbitmap_alloc (last_basic_block);
1498       bitmap_clear (bb_contains_live_stmts);
1499     }
1500
1501   processed = sbitmap_alloc (num_ssa_names + 1);
1502   bitmap_clear (processed);
1503
1504   worklist.create (64);
1505   cfg_altered = false;
1506 }
1507
1508 /* Cleanup after this pass.  */
1509
1510 static void
1511 tree_dce_done (bool aggressive)
1512 {
1513   if (aggressive)
1514     {
1515       int i;
1516
1517       for (i = 0; i < last_basic_block; ++i)
1518         BITMAP_FREE (control_dependence_map[i]);
1519       free (control_dependence_map);
1520
1521       sbitmap_free (visited_control_parents);
1522       sbitmap_free (last_stmt_necessary);
1523       sbitmap_free (bb_contains_live_stmts);
1524       bb_contains_live_stmts = NULL;
1525     }
1526
1527   sbitmap_free (processed);
1528
1529   worklist.release ();
1530 }
1531
1532 /* Main routine to eliminate dead code.
1533
1534    AGGRESSIVE controls the aggressiveness of the algorithm.
1535    In conservative mode, we ignore control dependence and simply declare
1536    all but the most trivially dead branches necessary.  This mode is fast.
1537    In aggressive mode, control dependences are taken into account, which
1538    results in more dead code elimination, but at the cost of some time.
1539
1540    FIXME: Aggressive mode before PRE doesn't work currently because
1541           the dominance info is not invalidated after DCE1.  This is
1542           not an issue right now because we only run aggressive DCE
1543           as the last tree SSA pass, but keep this in mind when you
1544           start experimenting with pass ordering.  */
1545
1546 static unsigned int
1547 perform_tree_ssa_dce (bool aggressive)
1548 {
1549   struct edge_list *el = NULL;
1550   bool something_changed = 0;
1551
1552   calculate_dominance_info (CDI_DOMINATORS);
1553
1554   /* Preheaders are needed for SCEV to work.
1555      Simple lateches and recorded exits improve chances that loop will
1556      proved to be finite in testcases such as in loop-15.c and loop-24.c  */
1557   if (aggressive)
1558     loop_optimizer_init (LOOPS_NORMAL
1559                          | LOOPS_HAVE_RECORDED_EXITS);
1560
1561   tree_dce_init (aggressive);
1562
1563   if (aggressive)
1564     {
1565       /* Compute control dependence.  */
1566       timevar_push (TV_CONTROL_DEPENDENCES);
1567       calculate_dominance_info (CDI_POST_DOMINATORS);
1568       el = create_edge_list ();
1569       find_all_control_dependences (el);
1570       timevar_pop (TV_CONTROL_DEPENDENCES);
1571
1572       visited_control_parents = sbitmap_alloc (last_basic_block);
1573       bitmap_clear (visited_control_parents);
1574
1575       mark_dfs_back_edges ();
1576     }
1577
1578   find_obviously_necessary_stmts (el);
1579
1580   if (aggressive)
1581     loop_optimizer_finalize ();
1582
1583   longest_chain = 0;
1584   total_chain = 0;
1585   nr_walks = 0;
1586   chain_ovfl = false;
1587   visited = BITMAP_ALLOC (NULL);
1588   propagate_necessity (el);
1589   BITMAP_FREE (visited);
1590
1591   something_changed |= eliminate_unnecessary_stmts ();
1592   something_changed |= cfg_altered;
1593
1594   /* We do not update postdominators, so free them unconditionally.  */
1595   free_dominance_info (CDI_POST_DOMINATORS);
1596
1597   /* If we removed paths in the CFG, then we need to update
1598      dominators as well.  I haven't investigated the possibility
1599      of incrementally updating dominators.  */
1600   if (cfg_altered)
1601     free_dominance_info (CDI_DOMINATORS);
1602
1603   statistics_counter_event (cfun, "Statements deleted", stats.removed);
1604   statistics_counter_event (cfun, "PHI nodes deleted", stats.removed_phis);
1605
1606   /* Debugging dumps.  */
1607   if (dump_file && (dump_flags & (TDF_STATS|TDF_DETAILS)))
1608     print_stats ();
1609
1610   tree_dce_done (aggressive);
1611
1612   free_edge_list (el);
1613
1614   if (something_changed)
1615     return TODO_update_ssa | TODO_cleanup_cfg;
1616   return 0;
1617 }
1618
1619 /* Pass entry points.  */
1620 static unsigned int
1621 tree_ssa_dce (void)
1622 {
1623   return perform_tree_ssa_dce (/*aggressive=*/false);
1624 }
1625
1626 static unsigned int
1627 tree_ssa_dce_loop (void)
1628 {
1629   unsigned int todo;
1630   todo = perform_tree_ssa_dce (/*aggressive=*/false);
1631   if (todo)
1632     {
1633       free_numbers_of_iterations_estimates ();
1634       scev_reset ();
1635     }
1636   return todo;
1637 }
1638
1639 static unsigned int
1640 tree_ssa_cd_dce (void)
1641 {
1642   return perform_tree_ssa_dce (/*aggressive=*/optimize >= 2);
1643 }
1644
1645 static bool
1646 gate_dce (void)
1647 {
1648   return flag_tree_dce != 0;
1649 }
1650
1651 struct gimple_opt_pass pass_dce =
1652 {
1653  {
1654   GIMPLE_PASS,
1655   "dce",                                /* name */
1656   OPTGROUP_NONE,                        /* optinfo_flags */
1657   gate_dce,                             /* gate */
1658   tree_ssa_dce,                         /* execute */
1659   NULL,                                 /* sub */
1660   NULL,                                 /* next */
1661   0,                                    /* static_pass_number */
1662   TV_TREE_DCE,                          /* tv_id */
1663   PROP_cfg | PROP_ssa,                  /* properties_required */
1664   0,                                    /* properties_provided */
1665   0,                                    /* properties_destroyed */
1666   0,                                    /* todo_flags_start */
1667   TODO_verify_ssa                       /* todo_flags_finish */
1668  }
1669 };
1670
1671 struct gimple_opt_pass pass_dce_loop =
1672 {
1673  {
1674   GIMPLE_PASS,
1675   "dceloop",                            /* name */
1676   OPTGROUP_NONE,                        /* optinfo_flags */
1677   gate_dce,                             /* gate */
1678   tree_ssa_dce_loop,                    /* execute */
1679   NULL,                                 /* sub */
1680   NULL,                                 /* next */
1681   0,                                    /* static_pass_number */
1682   TV_TREE_DCE,                          /* tv_id */
1683   PROP_cfg | PROP_ssa,                  /* properties_required */
1684   0,                                    /* properties_provided */
1685   0,                                    /* properties_destroyed */
1686   0,                                    /* todo_flags_start */
1687   TODO_verify_ssa                       /* todo_flags_finish */
1688  }
1689 };
1690
1691 struct gimple_opt_pass pass_cd_dce =
1692 {
1693  {
1694   GIMPLE_PASS,
1695   "cddce",                              /* name */
1696   OPTGROUP_NONE,                        /* optinfo_flags */
1697   gate_dce,                             /* gate */
1698   tree_ssa_cd_dce,                      /* execute */
1699   NULL,                                 /* sub */
1700   NULL,                                 /* next */
1701   0,                                    /* static_pass_number */
1702   TV_TREE_CD_DCE,                       /* tv_id */
1703   PROP_cfg | PROP_ssa,                  /* properties_required */
1704   0,                                    /* properties_provided */
1705   0,                                    /* properties_destroyed */
1706   0,                                    /* todo_flags_start */
1707   TODO_verify_ssa
1708   | TODO_verify_flow                    /* todo_flags_finish */
1709  }
1710 };