OSDN Git Service

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