OSDN Git Service

PR testsuite/51875
[pf3gnuchains/gcc-fork.git] / gcc / cfgexpand.c
1 /* A pass for lowering trees to RTL.
2    Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
3    Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
11
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "tree.h"
26 #include "rtl.h"
27 #include "tm_p.h"
28 #include "basic-block.h"
29 #include "function.h"
30 #include "expr.h"
31 #include "langhooks.h"
32 #include "tree-flow.h"
33 #include "timevar.h"
34 #include "tree-dump.h"
35 #include "tree-pass.h"
36 #include "except.h"
37 #include "flags.h"
38 #include "diagnostic.h"
39 #include "tree-pretty-print.h"
40 #include "gimple-pretty-print.h"
41 #include "toplev.h"
42 #include "debug.h"
43 #include "params.h"
44 #include "tree-inline.h"
45 #include "value-prof.h"
46 #include "target.h"
47 #include "ssaexpand.h"
48 #include "bitmap.h"
49 #include "sbitmap.h"
50 #include "insn-attr.h" /* For INSN_SCHEDULING.  */
51
52 /* This variable holds information helping the rewriting of SSA trees
53    into RTL.  */
54 struct ssaexpand SA;
55
56 /* This variable holds the currently expanded gimple statement for purposes
57    of comminucating the profile info to the builtin expanders.  */
58 gimple currently_expanding_gimple_stmt;
59
60 static rtx expand_debug_expr (tree);
61
62 /* Return an expression tree corresponding to the RHS of GIMPLE
63    statement STMT.  */
64
65 tree
66 gimple_assign_rhs_to_tree (gimple stmt)
67 {
68   tree t;
69   enum gimple_rhs_class grhs_class;
70
71   grhs_class = get_gimple_rhs_class (gimple_expr_code (stmt));
72
73   if (grhs_class == GIMPLE_TERNARY_RHS)
74     t = build3 (gimple_assign_rhs_code (stmt),
75                 TREE_TYPE (gimple_assign_lhs (stmt)),
76                 gimple_assign_rhs1 (stmt),
77                 gimple_assign_rhs2 (stmt),
78                 gimple_assign_rhs3 (stmt));
79   else if (grhs_class == GIMPLE_BINARY_RHS)
80     t = build2 (gimple_assign_rhs_code (stmt),
81                 TREE_TYPE (gimple_assign_lhs (stmt)),
82                 gimple_assign_rhs1 (stmt),
83                 gimple_assign_rhs2 (stmt));
84   else if (grhs_class == GIMPLE_UNARY_RHS)
85     t = build1 (gimple_assign_rhs_code (stmt),
86                 TREE_TYPE (gimple_assign_lhs (stmt)),
87                 gimple_assign_rhs1 (stmt));
88   else if (grhs_class == GIMPLE_SINGLE_RHS)
89     {
90       t = gimple_assign_rhs1 (stmt);
91       /* Avoid modifying this tree in place below.  */
92       if ((gimple_has_location (stmt) && CAN_HAVE_LOCATION_P (t)
93            && gimple_location (stmt) != EXPR_LOCATION (t))
94           || (gimple_block (stmt)
95               && currently_expanding_to_rtl
96               && EXPR_P (t)
97               && gimple_block (stmt) != TREE_BLOCK (t)))
98         t = copy_node (t);
99     }
100   else
101     gcc_unreachable ();
102
103   if (gimple_has_location (stmt) && CAN_HAVE_LOCATION_P (t))
104     SET_EXPR_LOCATION (t, gimple_location (stmt));
105   if (gimple_block (stmt) && currently_expanding_to_rtl && EXPR_P (t))
106     TREE_BLOCK (t) = gimple_block (stmt);
107
108   return t;
109 }
110
111
112 #ifndef STACK_ALIGNMENT_NEEDED
113 #define STACK_ALIGNMENT_NEEDED 1
114 #endif
115
116 #define SSAVAR(x) (TREE_CODE (x) == SSA_NAME ? SSA_NAME_VAR (x) : x)
117
118 /* Associate declaration T with storage space X.  If T is no
119    SSA name this is exactly SET_DECL_RTL, otherwise make the
120    partition of T associated with X.  */
121 static inline void
122 set_rtl (tree t, rtx x)
123 {
124   if (TREE_CODE (t) == SSA_NAME)
125     {
126       SA.partition_to_pseudo[var_to_partition (SA.map, t)] = x;
127       if (x && !MEM_P (x))
128         set_reg_attrs_for_decl_rtl (SSA_NAME_VAR (t), x);
129       /* For the benefit of debug information at -O0 (where vartracking
130          doesn't run) record the place also in the base DECL if it's
131          a normal variable (not a parameter).  */
132       if (x && x != pc_rtx && TREE_CODE (SSA_NAME_VAR (t)) == VAR_DECL)
133         {
134           tree var = SSA_NAME_VAR (t);
135           /* If we don't yet have something recorded, just record it now.  */
136           if (!DECL_RTL_SET_P (var))
137             SET_DECL_RTL (var, x);
138           /* If we have it set already to "multiple places" don't
139              change this.  */
140           else if (DECL_RTL (var) == pc_rtx)
141             ;
142           /* If we have something recorded and it's not the same place
143              as we want to record now, we have multiple partitions for the
144              same base variable, with different places.  We can't just
145              randomly chose one, hence we have to say that we don't know.
146              This only happens with optimization, and there var-tracking
147              will figure out the right thing.  */
148           else if (DECL_RTL (var) != x)
149             SET_DECL_RTL (var, pc_rtx);
150         }
151     }
152   else
153     SET_DECL_RTL (t, x);
154 }
155
156 /* This structure holds data relevant to one variable that will be
157    placed in a stack slot.  */
158 struct stack_var
159 {
160   /* The Variable.  */
161   tree decl;
162
163   /* Initially, the size of the variable.  Later, the size of the partition,
164      if this variable becomes it's partition's representative.  */
165   HOST_WIDE_INT size;
166
167   /* The *byte* alignment required for this variable.  Or as, with the
168      size, the alignment for this partition.  */
169   unsigned int alignb;
170
171   /* The partition representative.  */
172   size_t representative;
173
174   /* The next stack variable in the partition, or EOC.  */
175   size_t next;
176
177   /* The numbers of conflicting stack variables.  */
178   bitmap conflicts;
179 };
180
181 #define EOC  ((size_t)-1)
182
183 /* We have an array of such objects while deciding allocation.  */
184 static struct stack_var *stack_vars;
185 static size_t stack_vars_alloc;
186 static size_t stack_vars_num;
187 static struct pointer_map_t *decl_to_stack_part;
188
189 /* An array of indices such that stack_vars[stack_vars_sorted[i]].size
190    is non-decreasing.  */
191 static size_t *stack_vars_sorted;
192
193 /* The phase of the stack frame.  This is the known misalignment of
194    virtual_stack_vars_rtx from PREFERRED_STACK_BOUNDARY.  That is,
195    (frame_offset+frame_phase) % PREFERRED_STACK_BOUNDARY == 0.  */
196 static int frame_phase;
197
198 /* Used during expand_used_vars to remember if we saw any decls for
199    which we'd like to enable stack smashing protection.  */
200 static bool has_protected_decls;
201
202 /* Used during expand_used_vars.  Remember if we say a character buffer
203    smaller than our cutoff threshold.  Used for -Wstack-protector.  */
204 static bool has_short_buffer;
205
206 /* Compute the byte alignment to use for DECL.  Ignore alignment
207    we can't do with expected alignment of the stack boundary.  */
208
209 static unsigned int
210 align_local_variable (tree decl)
211 {
212   unsigned int align = LOCAL_DECL_ALIGNMENT (decl);
213   DECL_ALIGN (decl) = align;
214   return align / BITS_PER_UNIT;
215 }
216
217 /* Allocate SIZE bytes at byte alignment ALIGN from the stack frame.
218    Return the frame offset.  */
219
220 static HOST_WIDE_INT
221 alloc_stack_frame_space (HOST_WIDE_INT size, unsigned HOST_WIDE_INT align)
222 {
223   HOST_WIDE_INT offset, new_frame_offset;
224
225   new_frame_offset = frame_offset;
226   if (FRAME_GROWS_DOWNWARD)
227     {
228       new_frame_offset -= size + frame_phase;
229       new_frame_offset &= -align;
230       new_frame_offset += frame_phase;
231       offset = new_frame_offset;
232     }
233   else
234     {
235       new_frame_offset -= frame_phase;
236       new_frame_offset += align - 1;
237       new_frame_offset &= -align;
238       new_frame_offset += frame_phase;
239       offset = new_frame_offset;
240       new_frame_offset += size;
241     }
242   frame_offset = new_frame_offset;
243
244   if (frame_offset_overflow (frame_offset, cfun->decl))
245     frame_offset = offset = 0;
246
247   return offset;
248 }
249
250 /* Accumulate DECL into STACK_VARS.  */
251
252 static void
253 add_stack_var (tree decl)
254 {
255   struct stack_var *v;
256
257   if (stack_vars_num >= stack_vars_alloc)
258     {
259       if (stack_vars_alloc)
260         stack_vars_alloc = stack_vars_alloc * 3 / 2;
261       else
262         stack_vars_alloc = 32;
263       stack_vars
264         = XRESIZEVEC (struct stack_var, stack_vars, stack_vars_alloc);
265     }
266   if (!decl_to_stack_part)
267     decl_to_stack_part = pointer_map_create ();
268
269   v = &stack_vars[stack_vars_num];
270   * (size_t *)pointer_map_insert (decl_to_stack_part, decl) = stack_vars_num;
271
272   v->decl = decl;
273   v->size = tree_low_cst (DECL_SIZE_UNIT (SSAVAR (decl)), 1);
274   /* Ensure that all variables have size, so that &a != &b for any two
275      variables that are simultaneously live.  */
276   if (v->size == 0)
277     v->size = 1;
278   v->alignb = align_local_variable (SSAVAR (decl));
279   /* An alignment of zero can mightily confuse us later.  */
280   gcc_assert (v->alignb != 0);
281
282   /* All variables are initially in their own partition.  */
283   v->representative = stack_vars_num;
284   v->next = EOC;
285
286   /* All variables initially conflict with no other.  */
287   v->conflicts = NULL;
288
289   /* Ensure that this decl doesn't get put onto the list twice.  */
290   set_rtl (decl, pc_rtx);
291
292   stack_vars_num++;
293 }
294
295 /* Make the decls associated with luid's X and Y conflict.  */
296
297 static void
298 add_stack_var_conflict (size_t x, size_t y)
299 {
300   struct stack_var *a = &stack_vars[x];
301   struct stack_var *b = &stack_vars[y];
302   if (!a->conflicts)
303     a->conflicts = BITMAP_ALLOC (NULL);
304   if (!b->conflicts)
305     b->conflicts = BITMAP_ALLOC (NULL);
306   bitmap_set_bit (a->conflicts, y);
307   bitmap_set_bit (b->conflicts, x);
308 }
309
310 /* Check whether the decls associated with luid's X and Y conflict.  */
311
312 static bool
313 stack_var_conflict_p (size_t x, size_t y)
314 {
315   struct stack_var *a = &stack_vars[x];
316   struct stack_var *b = &stack_vars[y];
317   if (x == y)
318     return false;
319   /* Partitions containing an SSA name result from gimple registers
320      with things like unsupported modes.  They are top-level and
321      hence conflict with everything else.  */
322   if (TREE_CODE (a->decl) == SSA_NAME || TREE_CODE (b->decl) == SSA_NAME)
323     return true;
324
325   if (!a->conflicts || !b->conflicts)
326     return false;
327   return bitmap_bit_p (a->conflicts, y);
328 }
329
330 /* Returns true if TYPE is or contains a union type.  */
331
332 static bool
333 aggregate_contains_union_type (tree type)
334 {
335   tree field;
336
337   if (TREE_CODE (type) == UNION_TYPE
338       || TREE_CODE (type) == QUAL_UNION_TYPE)
339     return true;
340   if (TREE_CODE (type) == ARRAY_TYPE)
341     return aggregate_contains_union_type (TREE_TYPE (type));
342   if (TREE_CODE (type) != RECORD_TYPE)
343     return false;
344
345   for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
346     if (TREE_CODE (field) == FIELD_DECL)
347       if (aggregate_contains_union_type (TREE_TYPE (field)))
348         return true;
349
350   return false;
351 }
352
353 /* A subroutine of expand_used_vars.  If two variables X and Y have alias
354    sets that do not conflict, then do add a conflict for these variables
355    in the interference graph.  We also need to make sure to add conflicts
356    for union containing structures.  Else RTL alias analysis comes along
357    and due to type based aliasing rules decides that for two overlapping
358    union temporaries { short s; int i; } accesses to the same mem through
359    different types may not alias and happily reorders stores across
360    life-time boundaries of the temporaries (See PR25654).  */
361
362 static void
363 add_alias_set_conflicts (void)
364 {
365   size_t i, j, n = stack_vars_num;
366
367   for (i = 0; i < n; ++i)
368     {
369       tree type_i = TREE_TYPE (stack_vars[i].decl);
370       bool aggr_i = AGGREGATE_TYPE_P (type_i);
371       bool contains_union;
372
373       contains_union = aggregate_contains_union_type (type_i);
374       for (j = 0; j < i; ++j)
375         {
376           tree type_j = TREE_TYPE (stack_vars[j].decl);
377           bool aggr_j = AGGREGATE_TYPE_P (type_j);
378           if (aggr_i != aggr_j
379               /* Either the objects conflict by means of type based
380                  aliasing rules, or we need to add a conflict.  */
381               || !objects_must_conflict_p (type_i, type_j)
382               /* In case the types do not conflict ensure that access
383                  to elements will conflict.  In case of unions we have
384                  to be careful as type based aliasing rules may say
385                  access to the same memory does not conflict.  So play
386                  safe and add a conflict in this case when
387                  -fstrict-aliasing is used.  */
388               || (contains_union && flag_strict_aliasing))
389             add_stack_var_conflict (i, j);
390         }
391     }
392 }
393
394 /* Callback for walk_stmt_ops.  If OP is a decl touched by add_stack_var
395    enter its partition number into bitmap DATA.  */
396
397 static bool
398 visit_op (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
399 {
400   bitmap active = (bitmap)data;
401   op = get_base_address (op);
402   if (op
403       && DECL_P (op)
404       && DECL_RTL_IF_SET (op) == pc_rtx)
405     {
406       size_t *v = (size_t *) pointer_map_contains (decl_to_stack_part, op);
407       if (v)
408         bitmap_set_bit (active, *v);
409     }
410   return false;
411 }
412
413 /* Callback for walk_stmt_ops.  If OP is a decl touched by add_stack_var
414    record conflicts between it and all currently active other partitions
415    from bitmap DATA.  */
416
417 static bool
418 visit_conflict (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
419 {
420   bitmap active = (bitmap)data;
421   op = get_base_address (op);
422   if (op
423       && DECL_P (op)
424       && DECL_RTL_IF_SET (op) == pc_rtx)
425     {
426       size_t *v =
427         (size_t *) pointer_map_contains (decl_to_stack_part, op);
428       if (v && bitmap_set_bit (active, *v))
429         {
430           size_t num = *v;
431           bitmap_iterator bi;
432           unsigned i;
433           gcc_assert (num < stack_vars_num);
434           EXECUTE_IF_SET_IN_BITMAP (active, 0, i, bi)
435             add_stack_var_conflict (num, i);
436         }
437     }
438   return false;
439 }
440
441 /* Helper routine for add_scope_conflicts, calculating the active partitions
442    at the end of BB, leaving the result in WORK.  We're called to generate
443    conflicts when FOR_CONFLICT is true, otherwise we're just tracking
444    liveness.  */
445
446 static void
447 add_scope_conflicts_1 (basic_block bb, bitmap work, bool for_conflict)
448 {
449   edge e;
450   edge_iterator ei;
451   gimple_stmt_iterator gsi;
452   bool (*visit)(gimple, tree, void *);
453
454   bitmap_clear (work);
455   FOR_EACH_EDGE (e, ei, bb->preds)
456     bitmap_ior_into (work, (bitmap)e->src->aux);
457
458   visit = visit_op;
459
460   for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
461     {
462       gimple stmt = gsi_stmt (gsi);
463       walk_stmt_load_store_addr_ops (stmt, work, NULL, NULL, visit);
464     }
465   for (gsi = gsi_after_labels (bb); !gsi_end_p (gsi); gsi_next (&gsi))
466     {
467       gimple stmt = gsi_stmt (gsi);
468
469       if (gimple_clobber_p (stmt))
470         {
471           tree lhs = gimple_assign_lhs (stmt);
472           size_t *v;
473           /* Nested function lowering might introduce LHSs
474              that are COMPONENT_REFs.  */
475           if (TREE_CODE (lhs) != VAR_DECL)
476             continue;
477           if (DECL_RTL_IF_SET (lhs) == pc_rtx
478               && (v = (size_t *)
479                   pointer_map_contains (decl_to_stack_part, lhs)))
480             bitmap_clear_bit (work, *v);
481         }
482       else if (!is_gimple_debug (stmt))
483         {
484           if (for_conflict
485               && visit == visit_op)
486             {
487               /* If this is the first real instruction in this BB we need
488                  to add conflicts for everything live at this point now.
489                  Unlike classical liveness for named objects we can't
490                  rely on seeing a def/use of the names we're interested in.
491                  There might merely be indirect loads/stores.  We'd not add any
492                  conflicts for such partitions.  */
493               bitmap_iterator bi;
494               unsigned i;
495               EXECUTE_IF_SET_IN_BITMAP (work, 0, i, bi)
496                 {
497                   unsigned j;
498                   bitmap_iterator bj;
499                   EXECUTE_IF_SET_IN_BITMAP (work, i + 1, j, bj)
500                     add_stack_var_conflict (i, j);
501                 }
502               visit = visit_conflict;
503             }
504           walk_stmt_load_store_addr_ops (stmt, work, visit, visit, visit);
505         }
506     }
507 }
508
509 /* Generate stack partition conflicts between all partitions that are
510    simultaneously live.  */
511
512 static void
513 add_scope_conflicts (void)
514 {
515   basic_block bb;
516   bool changed;
517   bitmap work = BITMAP_ALLOC (NULL);
518
519   /* We approximate the live range of a stack variable by taking the first
520      mention of its name as starting point(s), and by the end-of-scope
521      death clobber added by gimplify as ending point(s) of the range.
522      This overapproximates in the case we for instance moved an address-taken
523      operation upward, without also moving a dereference to it upwards.
524      But it's conservatively correct as a variable never can hold values
525      before its name is mentioned at least once.
526
527      We then do a mostly classical bitmap liveness algorithm.  */
528
529   FOR_ALL_BB (bb)
530     bb->aux = BITMAP_ALLOC (NULL);
531
532   changed = true;
533   while (changed)
534     {
535       changed = false;
536       FOR_EACH_BB (bb)
537         {
538           bitmap active = (bitmap)bb->aux;
539           add_scope_conflicts_1 (bb, work, false);
540           if (bitmap_ior_into (active, work))
541             changed = true;
542         }
543     }
544
545   FOR_EACH_BB (bb)
546     add_scope_conflicts_1 (bb, work, true);
547
548   BITMAP_FREE (work);
549   FOR_ALL_BB (bb)
550     BITMAP_FREE (bb->aux);
551 }
552
553 /* A subroutine of partition_stack_vars.  A comparison function for qsort,
554    sorting an array of indices by the properties of the object.  */
555
556 static int
557 stack_var_cmp (const void *a, const void *b)
558 {
559   size_t ia = *(const size_t *)a;
560   size_t ib = *(const size_t *)b;
561   unsigned int aligna = stack_vars[ia].alignb;
562   unsigned int alignb = stack_vars[ib].alignb;
563   HOST_WIDE_INT sizea = stack_vars[ia].size;
564   HOST_WIDE_INT sizeb = stack_vars[ib].size;
565   tree decla = stack_vars[ia].decl;
566   tree declb = stack_vars[ib].decl;
567   bool largea, largeb;
568   unsigned int uida, uidb;
569
570   /* Primary compare on "large" alignment.  Large comes first.  */
571   largea = (aligna * BITS_PER_UNIT > MAX_SUPPORTED_STACK_ALIGNMENT);
572   largeb = (alignb * BITS_PER_UNIT > MAX_SUPPORTED_STACK_ALIGNMENT);
573   if (largea != largeb)
574     return (int)largeb - (int)largea;
575
576   /* Secondary compare on size, decreasing  */
577   if (sizea > sizeb)
578     return -1;
579   if (sizea < sizeb)
580     return 1;
581
582   /* Tertiary compare on true alignment, decreasing.  */
583   if (aligna < alignb)
584     return -1;
585   if (aligna > alignb)
586     return 1;
587
588   /* Final compare on ID for sort stability, increasing.
589      Two SSA names are compared by their version, SSA names come before
590      non-SSA names, and two normal decls are compared by their DECL_UID.  */
591   if (TREE_CODE (decla) == SSA_NAME)
592     {
593       if (TREE_CODE (declb) == SSA_NAME)
594         uida = SSA_NAME_VERSION (decla), uidb = SSA_NAME_VERSION (declb);
595       else
596         return -1;
597     }
598   else if (TREE_CODE (declb) == SSA_NAME)
599     return 1;
600   else
601     uida = DECL_UID (decla), uidb = DECL_UID (declb);
602   if (uida < uidb)
603     return 1;
604   if (uida > uidb)
605     return -1;
606   return 0;
607 }
608
609
610 /* If the points-to solution *PI points to variables that are in a partition
611    together with other variables add all partition members to the pointed-to
612    variables bitmap.  */
613
614 static void
615 add_partitioned_vars_to_ptset (struct pt_solution *pt,
616                                struct pointer_map_t *decls_to_partitions,
617                                struct pointer_set_t *visited, bitmap temp)
618 {
619   bitmap_iterator bi;
620   unsigned i;
621   bitmap *part;
622
623   if (pt->anything
624       || pt->vars == NULL
625       /* The pointed-to vars bitmap is shared, it is enough to
626          visit it once.  */
627       || pointer_set_insert(visited, pt->vars))
628     return;
629
630   bitmap_clear (temp);
631
632   /* By using a temporary bitmap to store all members of the partitions
633      we have to add we make sure to visit each of the partitions only
634      once.  */
635   EXECUTE_IF_SET_IN_BITMAP (pt->vars, 0, i, bi)
636     if ((!temp
637          || !bitmap_bit_p (temp, i))
638         && (part = (bitmap *) pointer_map_contains (decls_to_partitions,
639                                                     (void *)(size_t) i)))
640       bitmap_ior_into (temp, *part);
641   if (!bitmap_empty_p (temp))
642     bitmap_ior_into (pt->vars, temp);
643 }
644
645 /* Update points-to sets based on partition info, so we can use them on RTL.
646    The bitmaps representing stack partitions will be saved until expand,
647    where partitioned decls used as bases in memory expressions will be
648    rewritten.  */
649
650 static void
651 update_alias_info_with_stack_vars (void)
652 {
653   struct pointer_map_t *decls_to_partitions = NULL;
654   size_t i, j;
655   tree var = NULL_TREE;
656
657   for (i = 0; i < stack_vars_num; i++)
658     {
659       bitmap part = NULL;
660       tree name;
661       struct ptr_info_def *pi;
662
663       /* Not interested in partitions with single variable.  */
664       if (stack_vars[i].representative != i
665           || stack_vars[i].next == EOC)
666         continue;
667
668       if (!decls_to_partitions)
669         {
670           decls_to_partitions = pointer_map_create ();
671           cfun->gimple_df->decls_to_pointers = pointer_map_create ();
672         }
673
674       /* Create an SSA_NAME that points to the partition for use
675          as base during alias-oracle queries on RTL for bases that
676          have been partitioned.  */
677       if (var == NULL_TREE)
678         var = create_tmp_var (ptr_type_node, NULL);
679       name = make_ssa_name (var, NULL);
680
681       /* Create bitmaps representing partitions.  They will be used for
682          points-to sets later, so use GGC alloc.  */
683       part = BITMAP_GGC_ALLOC ();
684       for (j = i; j != EOC; j = stack_vars[j].next)
685         {
686           tree decl = stack_vars[j].decl;
687           unsigned int uid = DECL_PT_UID (decl);
688           /* We should never end up partitioning SSA names (though they
689              may end up on the stack).  Neither should we allocate stack
690              space to something that is unused and thus unreferenced, except
691              for -O0 where we are preserving even unreferenced variables.  */
692           gcc_assert (DECL_P (decl)
693                       && (!optimize
694                           || referenced_var_lookup (cfun, DECL_UID (decl))));
695           bitmap_set_bit (part, uid);
696           *((bitmap *) pointer_map_insert (decls_to_partitions,
697                                            (void *)(size_t) uid)) = part;
698           *((tree *) pointer_map_insert (cfun->gimple_df->decls_to_pointers,
699                                          decl)) = name;
700         }
701
702       /* Make the SSA name point to all partition members.  */
703       pi = get_ptr_info (name);
704       pt_solution_set (&pi->pt, part, false);
705     }
706
707   /* Make all points-to sets that contain one member of a partition
708      contain all members of the partition.  */
709   if (decls_to_partitions)
710     {
711       unsigned i;
712       struct pointer_set_t *visited = pointer_set_create ();
713       bitmap temp = BITMAP_ALLOC (NULL);
714
715       for (i = 1; i < num_ssa_names; i++)
716         {
717           tree name = ssa_name (i);
718           struct ptr_info_def *pi;
719
720           if (name
721               && POINTER_TYPE_P (TREE_TYPE (name))
722               && ((pi = SSA_NAME_PTR_INFO (name)) != NULL))
723             add_partitioned_vars_to_ptset (&pi->pt, decls_to_partitions,
724                                            visited, temp);
725         }
726
727       add_partitioned_vars_to_ptset (&cfun->gimple_df->escaped,
728                                      decls_to_partitions, visited, temp);
729
730       pointer_set_destroy (visited);
731       pointer_map_destroy (decls_to_partitions);
732       BITMAP_FREE (temp);
733     }
734 }
735
736 /* A subroutine of partition_stack_vars.  The UNION portion of a UNION/FIND
737    partitioning algorithm.  Partitions A and B are known to be non-conflicting.
738    Merge them into a single partition A.  */
739
740 static void
741 union_stack_vars (size_t a, size_t b)
742 {
743   struct stack_var *vb = &stack_vars[b];
744   bitmap_iterator bi;
745   unsigned u;
746
747   gcc_assert (stack_vars[b].next == EOC);
748    /* Add B to A's partition.  */
749   stack_vars[b].next = stack_vars[a].next;
750   stack_vars[b].representative = a;
751   stack_vars[a].next = b;
752
753   /* Update the required alignment of partition A to account for B.  */
754   if (stack_vars[a].alignb < stack_vars[b].alignb)
755     stack_vars[a].alignb = stack_vars[b].alignb;
756
757   /* Update the interference graph and merge the conflicts.  */
758   if (vb->conflicts)
759     {
760       EXECUTE_IF_SET_IN_BITMAP (vb->conflicts, 0, u, bi)
761         add_stack_var_conflict (a, stack_vars[u].representative);
762       BITMAP_FREE (vb->conflicts);
763     }
764 }
765
766 /* A subroutine of expand_used_vars.  Binpack the variables into
767    partitions constrained by the interference graph.  The overall
768    algorithm used is as follows:
769
770         Sort the objects by size in descending order.
771         For each object A {
772           S = size(A)
773           O = 0
774           loop {
775             Look for the largest non-conflicting object B with size <= S.
776             UNION (A, B)
777           }
778         }
779 */
780
781 static void
782 partition_stack_vars (void)
783 {
784   size_t si, sj, n = stack_vars_num;
785
786   stack_vars_sorted = XNEWVEC (size_t, stack_vars_num);
787   for (si = 0; si < n; ++si)
788     stack_vars_sorted[si] = si;
789
790   if (n == 1)
791     return;
792
793   qsort (stack_vars_sorted, n, sizeof (size_t), stack_var_cmp);
794
795   for (si = 0; si < n; ++si)
796     {
797       size_t i = stack_vars_sorted[si];
798       unsigned int ialign = stack_vars[i].alignb;
799
800       /* Ignore objects that aren't partition representatives. If we
801          see a var that is not a partition representative, it must
802          have been merged earlier.  */
803       if (stack_vars[i].representative != i)
804         continue;
805
806       for (sj = si + 1; sj < n; ++sj)
807         {
808           size_t j = stack_vars_sorted[sj];
809           unsigned int jalign = stack_vars[j].alignb;
810
811           /* Ignore objects that aren't partition representatives.  */
812           if (stack_vars[j].representative != j)
813             continue;
814
815           /* Ignore conflicting objects.  */
816           if (stack_var_conflict_p (i, j))
817             continue;
818
819           /* Do not mix objects of "small" (supported) alignment
820              and "large" (unsupported) alignment.  */
821           if ((ialign * BITS_PER_UNIT <= MAX_SUPPORTED_STACK_ALIGNMENT)
822               != (jalign * BITS_PER_UNIT <= MAX_SUPPORTED_STACK_ALIGNMENT))
823             continue;
824
825           /* UNION the objects, placing J at OFFSET.  */
826           union_stack_vars (i, j);
827         }
828     }
829
830   update_alias_info_with_stack_vars ();
831 }
832
833 /* A debugging aid for expand_used_vars.  Dump the generated partitions.  */
834
835 static void
836 dump_stack_var_partition (void)
837 {
838   size_t si, i, j, n = stack_vars_num;
839
840   for (si = 0; si < n; ++si)
841     {
842       i = stack_vars_sorted[si];
843
844       /* Skip variables that aren't partition representatives, for now.  */
845       if (stack_vars[i].representative != i)
846         continue;
847
848       fprintf (dump_file, "Partition %lu: size " HOST_WIDE_INT_PRINT_DEC
849                " align %u\n", (unsigned long) i, stack_vars[i].size,
850                stack_vars[i].alignb);
851
852       for (j = i; j != EOC; j = stack_vars[j].next)
853         {
854           fputc ('\t', dump_file);
855           print_generic_expr (dump_file, stack_vars[j].decl, dump_flags);
856         }
857       fputc ('\n', dump_file);
858     }
859 }
860
861 /* Assign rtl to DECL at BASE + OFFSET.  */
862
863 static void
864 expand_one_stack_var_at (tree decl, rtx base, unsigned base_align,
865                          HOST_WIDE_INT offset)
866 {
867   unsigned align;
868   rtx x;
869
870   /* If this fails, we've overflowed the stack frame.  Error nicely?  */
871   gcc_assert (offset == trunc_int_for_mode (offset, Pmode));
872
873   x = plus_constant (base, offset);
874   x = gen_rtx_MEM (DECL_MODE (SSAVAR (decl)), x);
875
876   if (TREE_CODE (decl) != SSA_NAME)
877     {
878       /* Set alignment we actually gave this decl if it isn't an SSA name.
879          If it is we generate stack slots only accidentally so it isn't as
880          important, we'll simply use the alignment that is already set.  */
881       if (base == virtual_stack_vars_rtx)
882         offset -= frame_phase;
883       align = offset & -offset;
884       align *= BITS_PER_UNIT;
885       if (align == 0 || align > base_align)
886         align = base_align;
887
888       /* One would think that we could assert that we're not decreasing
889          alignment here, but (at least) the i386 port does exactly this
890          via the MINIMUM_ALIGNMENT hook.  */
891
892       DECL_ALIGN (decl) = align;
893       DECL_USER_ALIGN (decl) = 0;
894     }
895
896   set_mem_attributes (x, SSAVAR (decl), true);
897   set_rtl (decl, x);
898 }
899
900 /* A subroutine of expand_used_vars.  Give each partition representative
901    a unique location within the stack frame.  Update each partition member
902    with that location.  */
903
904 static void
905 expand_stack_vars (bool (*pred) (tree))
906 {
907   size_t si, i, j, n = stack_vars_num;
908   HOST_WIDE_INT large_size = 0, large_alloc = 0;
909   rtx large_base = NULL;
910   unsigned large_align = 0;
911   tree decl;
912
913   /* Determine if there are any variables requiring "large" alignment.
914      Since these are dynamically allocated, we only process these if
915      no predicate involved.  */
916   large_align = stack_vars[stack_vars_sorted[0]].alignb * BITS_PER_UNIT;
917   if (pred == NULL && large_align > MAX_SUPPORTED_STACK_ALIGNMENT)
918     {
919       /* Find the total size of these variables.  */
920       for (si = 0; si < n; ++si)
921         {
922           unsigned alignb;
923
924           i = stack_vars_sorted[si];
925           alignb = stack_vars[i].alignb;
926
927           /* Stop when we get to the first decl with "small" alignment.  */
928           if (alignb * BITS_PER_UNIT <= MAX_SUPPORTED_STACK_ALIGNMENT)
929             break;
930
931           /* Skip variables that aren't partition representatives.  */
932           if (stack_vars[i].representative != i)
933             continue;
934
935           /* Skip variables that have already had rtl assigned.  See also
936              add_stack_var where we perpetrate this pc_rtx hack.  */
937           decl = stack_vars[i].decl;
938           if ((TREE_CODE (decl) == SSA_NAME
939               ? SA.partition_to_pseudo[var_to_partition (SA.map, decl)]
940               : DECL_RTL (decl)) != pc_rtx)
941             continue;
942
943           large_size += alignb - 1;
944           large_size &= -(HOST_WIDE_INT)alignb;
945           large_size += stack_vars[i].size;
946         }
947
948       /* If there were any, allocate space.  */
949       if (large_size > 0)
950         large_base = allocate_dynamic_stack_space (GEN_INT (large_size), 0,
951                                                    large_align, true);
952     }
953
954   for (si = 0; si < n; ++si)
955     {
956       rtx base;
957       unsigned base_align, alignb;
958       HOST_WIDE_INT offset;
959
960       i = stack_vars_sorted[si];
961
962       /* Skip variables that aren't partition representatives, for now.  */
963       if (stack_vars[i].representative != i)
964         continue;
965
966       /* Skip variables that have already had rtl assigned.  See also
967          add_stack_var where we perpetrate this pc_rtx hack.  */
968       decl = stack_vars[i].decl;
969       if ((TREE_CODE (decl) == SSA_NAME
970            ? SA.partition_to_pseudo[var_to_partition (SA.map, decl)]
971            : DECL_RTL (decl)) != pc_rtx)
972         continue;
973
974       /* Check the predicate to see whether this variable should be
975          allocated in this pass.  */
976       if (pred && !pred (decl))
977         continue;
978
979       alignb = stack_vars[i].alignb;
980       if (alignb * BITS_PER_UNIT <= MAX_SUPPORTED_STACK_ALIGNMENT)
981         {
982           offset = alloc_stack_frame_space (stack_vars[i].size, alignb);
983           base = virtual_stack_vars_rtx;
984           base_align = crtl->max_used_stack_slot_alignment;
985         }
986       else
987         {
988           /* Large alignment is only processed in the last pass.  */
989           if (pred)
990             continue;
991           gcc_assert (large_base != NULL);
992
993           large_alloc += alignb - 1;
994           large_alloc &= -(HOST_WIDE_INT)alignb;
995           offset = large_alloc;
996           large_alloc += stack_vars[i].size;
997
998           base = large_base;
999           base_align = large_align;
1000         }
1001
1002       /* Create rtl for each variable based on their location within the
1003          partition.  */
1004       for (j = i; j != EOC; j = stack_vars[j].next)
1005         {
1006           expand_one_stack_var_at (stack_vars[j].decl,
1007                                    base, base_align,
1008                                    offset);
1009         }
1010     }
1011
1012   gcc_assert (large_alloc == large_size);
1013 }
1014
1015 /* Take into account all sizes of partitions and reset DECL_RTLs.  */
1016 static HOST_WIDE_INT
1017 account_stack_vars (void)
1018 {
1019   size_t si, j, i, n = stack_vars_num;
1020   HOST_WIDE_INT size = 0;
1021
1022   for (si = 0; si < n; ++si)
1023     {
1024       i = stack_vars_sorted[si];
1025
1026       /* Skip variables that aren't partition representatives, for now.  */
1027       if (stack_vars[i].representative != i)
1028         continue;
1029
1030       size += stack_vars[i].size;
1031       for (j = i; j != EOC; j = stack_vars[j].next)
1032         set_rtl (stack_vars[j].decl, NULL);
1033     }
1034   return size;
1035 }
1036
1037 /* A subroutine of expand_one_var.  Called to immediately assign rtl
1038    to a variable to be allocated in the stack frame.  */
1039
1040 static void
1041 expand_one_stack_var (tree var)
1042 {
1043   HOST_WIDE_INT size, offset;
1044   unsigned byte_align;
1045
1046   size = tree_low_cst (DECL_SIZE_UNIT (SSAVAR (var)), 1);
1047   byte_align = align_local_variable (SSAVAR (var));
1048
1049   /* We handle highly aligned variables in expand_stack_vars.  */
1050   gcc_assert (byte_align * BITS_PER_UNIT <= MAX_SUPPORTED_STACK_ALIGNMENT);
1051
1052   offset = alloc_stack_frame_space (size, byte_align);
1053
1054   expand_one_stack_var_at (var, virtual_stack_vars_rtx,
1055                            crtl->max_used_stack_slot_alignment, offset);
1056 }
1057
1058 /* A subroutine of expand_one_var.  Called to assign rtl to a VAR_DECL
1059    that will reside in a hard register.  */
1060
1061 static void
1062 expand_one_hard_reg_var (tree var)
1063 {
1064   rest_of_decl_compilation (var, 0, 0);
1065 }
1066
1067 /* A subroutine of expand_one_var.  Called to assign rtl to a VAR_DECL
1068    that will reside in a pseudo register.  */
1069
1070 static void
1071 expand_one_register_var (tree var)
1072 {
1073   tree decl = SSAVAR (var);
1074   tree type = TREE_TYPE (decl);
1075   enum machine_mode reg_mode = promote_decl_mode (decl, NULL);
1076   rtx x = gen_reg_rtx (reg_mode);
1077
1078   set_rtl (var, x);
1079
1080   /* Note if the object is a user variable.  */
1081   if (!DECL_ARTIFICIAL (decl))
1082     mark_user_reg (x);
1083
1084   if (POINTER_TYPE_P (type))
1085     mark_reg_pointer (x, get_pointer_alignment (var));
1086 }
1087
1088 /* A subroutine of expand_one_var.  Called to assign rtl to a VAR_DECL that
1089    has some associated error, e.g. its type is error-mark.  We just need
1090    to pick something that won't crash the rest of the compiler.  */
1091
1092 static void
1093 expand_one_error_var (tree var)
1094 {
1095   enum machine_mode mode = DECL_MODE (var);
1096   rtx x;
1097
1098   if (mode == BLKmode)
1099     x = gen_rtx_MEM (BLKmode, const0_rtx);
1100   else if (mode == VOIDmode)
1101     x = const0_rtx;
1102   else
1103     x = gen_reg_rtx (mode);
1104
1105   SET_DECL_RTL (var, x);
1106 }
1107
1108 /* A subroutine of expand_one_var.  VAR is a variable that will be
1109    allocated to the local stack frame.  Return true if we wish to
1110    add VAR to STACK_VARS so that it will be coalesced with other
1111    variables.  Return false to allocate VAR immediately.
1112
1113    This function is used to reduce the number of variables considered
1114    for coalescing, which reduces the size of the quadratic problem.  */
1115
1116 static bool
1117 defer_stack_allocation (tree var, bool toplevel)
1118 {
1119   /* If stack protection is enabled, *all* stack variables must be deferred,
1120      so that we can re-order the strings to the top of the frame.  */
1121   if (flag_stack_protect)
1122     return true;
1123
1124   /* We handle "large" alignment via dynamic allocation.  We want to handle
1125      this extra complication in only one place, so defer them.  */
1126   if (DECL_ALIGN (var) > MAX_SUPPORTED_STACK_ALIGNMENT)
1127     return true;
1128
1129   /* Variables in the outermost scope automatically conflict with
1130      every other variable.  The only reason to want to defer them
1131      at all is that, after sorting, we can more efficiently pack
1132      small variables in the stack frame.  Continue to defer at -O2.  */
1133   if (toplevel && optimize < 2)
1134     return false;
1135
1136   /* Without optimization, *most* variables are allocated from the
1137      stack, which makes the quadratic problem large exactly when we
1138      want compilation to proceed as quickly as possible.  On the
1139      other hand, we don't want the function's stack frame size to
1140      get completely out of hand.  So we avoid adding scalars and
1141      "small" aggregates to the list at all.  */
1142   if (optimize == 0 && tree_low_cst (DECL_SIZE_UNIT (var), 1) < 32)
1143     return false;
1144
1145   return true;
1146 }
1147
1148 /* A subroutine of expand_used_vars.  Expand one variable according to
1149    its flavor.  Variables to be placed on the stack are not actually
1150    expanded yet, merely recorded.
1151    When REALLY_EXPAND is false, only add stack values to be allocated.
1152    Return stack usage this variable is supposed to take.
1153 */
1154
1155 static HOST_WIDE_INT
1156 expand_one_var (tree var, bool toplevel, bool really_expand)
1157 {
1158   unsigned int align = BITS_PER_UNIT;
1159   tree origvar = var;
1160
1161   var = SSAVAR (var);
1162
1163   if (TREE_TYPE (var) != error_mark_node && TREE_CODE (var) == VAR_DECL)
1164     {
1165       /* Because we don't know if VAR will be in register or on stack,
1166          we conservatively assume it will be on stack even if VAR is
1167          eventually put into register after RA pass.  For non-automatic
1168          variables, which won't be on stack, we collect alignment of
1169          type and ignore user specified alignment.  */
1170       if (TREE_STATIC (var) || DECL_EXTERNAL (var))
1171         align = MINIMUM_ALIGNMENT (TREE_TYPE (var),
1172                                    TYPE_MODE (TREE_TYPE (var)),
1173                                    TYPE_ALIGN (TREE_TYPE (var)));
1174       else if (DECL_HAS_VALUE_EXPR_P (var)
1175                || (DECL_RTL_SET_P (var) && MEM_P (DECL_RTL (var))))
1176         /* Don't consider debug only variables with DECL_HAS_VALUE_EXPR_P set
1177            or variables which were assigned a stack slot already by
1178            expand_one_stack_var_at - in the latter case DECL_ALIGN has been
1179            changed from the offset chosen to it.  */
1180         align = crtl->stack_alignment_estimated;
1181       else
1182         align = MINIMUM_ALIGNMENT (var, DECL_MODE (var), DECL_ALIGN (var));
1183
1184       /* If the variable alignment is very large we'll dynamicaly allocate
1185          it, which means that in-frame portion is just a pointer.  */
1186       if (align > MAX_SUPPORTED_STACK_ALIGNMENT)
1187         align = POINTER_SIZE;
1188     }
1189
1190   if (SUPPORTS_STACK_ALIGNMENT
1191       && crtl->stack_alignment_estimated < align)
1192     {
1193       /* stack_alignment_estimated shouldn't change after stack
1194          realign decision made */
1195       gcc_assert(!crtl->stack_realign_processed);
1196       crtl->stack_alignment_estimated = align;
1197     }
1198
1199   /* stack_alignment_needed > PREFERRED_STACK_BOUNDARY is permitted.
1200      So here we only make sure stack_alignment_needed >= align.  */
1201   if (crtl->stack_alignment_needed < align)
1202     crtl->stack_alignment_needed = align;
1203   if (crtl->max_used_stack_slot_alignment < align)
1204     crtl->max_used_stack_slot_alignment = align;
1205
1206   if (TREE_CODE (origvar) == SSA_NAME)
1207     {
1208       gcc_assert (TREE_CODE (var) != VAR_DECL
1209                   || (!DECL_EXTERNAL (var)
1210                       && !DECL_HAS_VALUE_EXPR_P (var)
1211                       && !TREE_STATIC (var)
1212                       && TREE_TYPE (var) != error_mark_node
1213                       && !DECL_HARD_REGISTER (var)
1214                       && really_expand));
1215     }
1216   if (TREE_CODE (var) != VAR_DECL && TREE_CODE (origvar) != SSA_NAME)
1217     ;
1218   else if (DECL_EXTERNAL (var))
1219     ;
1220   else if (DECL_HAS_VALUE_EXPR_P (var))
1221     ;
1222   else if (TREE_STATIC (var))
1223     ;
1224   else if (TREE_CODE (origvar) != SSA_NAME && DECL_RTL_SET_P (var))
1225     ;
1226   else if (TREE_TYPE (var) == error_mark_node)
1227     {
1228       if (really_expand)
1229         expand_one_error_var (var);
1230     }
1231   else if (TREE_CODE (var) == VAR_DECL && DECL_HARD_REGISTER (var))
1232     {
1233       if (really_expand)
1234         expand_one_hard_reg_var (var);
1235     }
1236   else if (use_register_for_decl (var))
1237     {
1238       if (really_expand)
1239         expand_one_register_var (origvar);
1240     }
1241   else if (!host_integerp (DECL_SIZE_UNIT (var), 1))
1242     {
1243       if (really_expand)
1244         {
1245           error ("size of variable %q+D is too large", var);
1246           expand_one_error_var (var);
1247         }
1248     }
1249   else if (defer_stack_allocation (var, toplevel))
1250     add_stack_var (origvar);
1251   else
1252     {
1253       if (really_expand)
1254         expand_one_stack_var (origvar);
1255       return tree_low_cst (DECL_SIZE_UNIT (var), 1);
1256     }
1257   return 0;
1258 }
1259
1260 /* A subroutine of expand_used_vars.  Walk down through the BLOCK tree
1261    expanding variables.  Those variables that can be put into registers
1262    are allocated pseudos; those that can't are put on the stack.
1263
1264    TOPLEVEL is true if this is the outermost BLOCK.  */
1265
1266 static void
1267 expand_used_vars_for_block (tree block, bool toplevel)
1268 {
1269   tree t;
1270
1271   /* Expand all variables at this level.  */
1272   for (t = BLOCK_VARS (block); t ; t = DECL_CHAIN (t))
1273     if (TREE_USED (t)
1274         && ((TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != RESULT_DECL)
1275             || !DECL_NONSHAREABLE (t)))
1276       expand_one_var (t, toplevel, true);
1277
1278   /* Expand all variables at containing levels.  */
1279   for (t = BLOCK_SUBBLOCKS (block); t ; t = BLOCK_CHAIN (t))
1280     expand_used_vars_for_block (t, false);
1281 }
1282
1283 /* A subroutine of expand_used_vars.  Walk down through the BLOCK tree
1284    and clear TREE_USED on all local variables.  */
1285
1286 static void
1287 clear_tree_used (tree block)
1288 {
1289   tree t;
1290
1291   for (t = BLOCK_VARS (block); t ; t = DECL_CHAIN (t))
1292     /* if (!TREE_STATIC (t) && !DECL_EXTERNAL (t)) */
1293     if ((TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != RESULT_DECL)
1294         || !DECL_NONSHAREABLE (t))
1295       TREE_USED (t) = 0;
1296
1297   for (t = BLOCK_SUBBLOCKS (block); t ; t = BLOCK_CHAIN (t))
1298     clear_tree_used (t);
1299 }
1300
1301 /* Examine TYPE and determine a bit mask of the following features.  */
1302
1303 #define SPCT_HAS_LARGE_CHAR_ARRAY       1
1304 #define SPCT_HAS_SMALL_CHAR_ARRAY       2
1305 #define SPCT_HAS_ARRAY                  4
1306 #define SPCT_HAS_AGGREGATE              8
1307
1308 static unsigned int
1309 stack_protect_classify_type (tree type)
1310 {
1311   unsigned int ret = 0;
1312   tree t;
1313
1314   switch (TREE_CODE (type))
1315     {
1316     case ARRAY_TYPE:
1317       t = TYPE_MAIN_VARIANT (TREE_TYPE (type));
1318       if (t == char_type_node
1319           || t == signed_char_type_node
1320           || t == unsigned_char_type_node)
1321         {
1322           unsigned HOST_WIDE_INT max = PARAM_VALUE (PARAM_SSP_BUFFER_SIZE);
1323           unsigned HOST_WIDE_INT len;
1324
1325           if (!TYPE_SIZE_UNIT (type)
1326               || !host_integerp (TYPE_SIZE_UNIT (type), 1))
1327             len = max;
1328           else
1329             len = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
1330
1331           if (len < max)
1332             ret = SPCT_HAS_SMALL_CHAR_ARRAY | SPCT_HAS_ARRAY;
1333           else
1334             ret = SPCT_HAS_LARGE_CHAR_ARRAY | SPCT_HAS_ARRAY;
1335         }
1336       else
1337         ret = SPCT_HAS_ARRAY;
1338       break;
1339
1340     case UNION_TYPE:
1341     case QUAL_UNION_TYPE:
1342     case RECORD_TYPE:
1343       ret = SPCT_HAS_AGGREGATE;
1344       for (t = TYPE_FIELDS (type); t ; t = TREE_CHAIN (t))
1345         if (TREE_CODE (t) == FIELD_DECL)
1346           ret |= stack_protect_classify_type (TREE_TYPE (t));
1347       break;
1348
1349     default:
1350       break;
1351     }
1352
1353   return ret;
1354 }
1355
1356 /* Return nonzero if DECL should be segregated into the "vulnerable" upper
1357    part of the local stack frame.  Remember if we ever return nonzero for
1358    any variable in this function.  The return value is the phase number in
1359    which the variable should be allocated.  */
1360
1361 static int
1362 stack_protect_decl_phase (tree decl)
1363 {
1364   unsigned int bits = stack_protect_classify_type (TREE_TYPE (decl));
1365   int ret = 0;
1366
1367   if (bits & SPCT_HAS_SMALL_CHAR_ARRAY)
1368     has_short_buffer = true;
1369
1370   if (flag_stack_protect == 2)
1371     {
1372       if ((bits & (SPCT_HAS_SMALL_CHAR_ARRAY | SPCT_HAS_LARGE_CHAR_ARRAY))
1373           && !(bits & SPCT_HAS_AGGREGATE))
1374         ret = 1;
1375       else if (bits & SPCT_HAS_ARRAY)
1376         ret = 2;
1377     }
1378   else
1379     ret = (bits & SPCT_HAS_LARGE_CHAR_ARRAY) != 0;
1380
1381   if (ret)
1382     has_protected_decls = true;
1383
1384   return ret;
1385 }
1386
1387 /* Two helper routines that check for phase 1 and phase 2.  These are used
1388    as callbacks for expand_stack_vars.  */
1389
1390 static bool
1391 stack_protect_decl_phase_1 (tree decl)
1392 {
1393   return stack_protect_decl_phase (decl) == 1;
1394 }
1395
1396 static bool
1397 stack_protect_decl_phase_2 (tree decl)
1398 {
1399   return stack_protect_decl_phase (decl) == 2;
1400 }
1401
1402 /* Ensure that variables in different stack protection phases conflict
1403    so that they are not merged and share the same stack slot.  */
1404
1405 static void
1406 add_stack_protection_conflicts (void)
1407 {
1408   size_t i, j, n = stack_vars_num;
1409   unsigned char *phase;
1410
1411   phase = XNEWVEC (unsigned char, n);
1412   for (i = 0; i < n; ++i)
1413     phase[i] = stack_protect_decl_phase (stack_vars[i].decl);
1414
1415   for (i = 0; i < n; ++i)
1416     {
1417       unsigned char ph_i = phase[i];
1418       for (j = 0; j < i; ++j)
1419         if (ph_i != phase[j])
1420           add_stack_var_conflict (i, j);
1421     }
1422
1423   XDELETEVEC (phase);
1424 }
1425
1426 /* Create a decl for the guard at the top of the stack frame.  */
1427
1428 static void
1429 create_stack_guard (void)
1430 {
1431   tree guard = build_decl (DECL_SOURCE_LOCATION (current_function_decl),
1432                            VAR_DECL, NULL, ptr_type_node);
1433   TREE_THIS_VOLATILE (guard) = 1;
1434   TREE_USED (guard) = 1;
1435   expand_one_stack_var (guard);
1436   crtl->stack_protect_guard = guard;
1437 }
1438
1439 /* Prepare for expanding variables.  */
1440 static void
1441 init_vars_expansion (void)
1442 {
1443   tree t;
1444   unsigned ix;
1445   /* Set TREE_USED on all variables in the local_decls.  */
1446   FOR_EACH_LOCAL_DECL (cfun, ix, t)
1447     TREE_USED (t) = 1;
1448
1449   /* Clear TREE_USED on all variables associated with a block scope.  */
1450   clear_tree_used (DECL_INITIAL (current_function_decl));
1451
1452   /* Initialize local stack smashing state.  */
1453   has_protected_decls = false;
1454   has_short_buffer = false;
1455 }
1456
1457 /* Free up stack variable graph data.  */
1458 static void
1459 fini_vars_expansion (void)
1460 {
1461   size_t i, n = stack_vars_num;
1462   for (i = 0; i < n; i++)
1463     BITMAP_FREE (stack_vars[i].conflicts);
1464   XDELETEVEC (stack_vars);
1465   XDELETEVEC (stack_vars_sorted);
1466   stack_vars = NULL;
1467   stack_vars_alloc = stack_vars_num = 0;
1468   pointer_map_destroy (decl_to_stack_part);
1469   decl_to_stack_part = NULL;
1470 }
1471
1472 /* Make a fair guess for the size of the stack frame of the function
1473    in NODE.  This doesn't have to be exact, the result is only used in
1474    the inline heuristics.  So we don't want to run the full stack var
1475    packing algorithm (which is quadratic in the number of stack vars).
1476    Instead, we calculate the total size of all stack vars.  This turns
1477    out to be a pretty fair estimate -- packing of stack vars doesn't
1478    happen very often.  */
1479
1480 HOST_WIDE_INT
1481 estimated_stack_frame_size (struct cgraph_node *node)
1482 {
1483   HOST_WIDE_INT size = 0;
1484   size_t i;
1485   tree var;
1486   tree old_cur_fun_decl = current_function_decl;
1487   referenced_var_iterator rvi;
1488   struct function *fn = DECL_STRUCT_FUNCTION (node->decl);
1489
1490   current_function_decl = node->decl;
1491   push_cfun (fn);
1492
1493   gcc_checking_assert (gimple_referenced_vars (fn));
1494   FOR_EACH_REFERENCED_VAR (fn, var, rvi)
1495     size += expand_one_var (var, true, false);
1496
1497   if (stack_vars_num > 0)
1498     {
1499       /* Fake sorting the stack vars for account_stack_vars ().  */
1500       stack_vars_sorted = XNEWVEC (size_t, stack_vars_num);
1501       for (i = 0; i < stack_vars_num; ++i)
1502         stack_vars_sorted[i] = i;
1503       size += account_stack_vars ();
1504       fini_vars_expansion ();
1505     }
1506   pop_cfun ();
1507   current_function_decl = old_cur_fun_decl;
1508   return size;
1509 }
1510
1511 /* Expand all variables used in the function.  */
1512
1513 static void
1514 expand_used_vars (void)
1515 {
1516   tree var, outer_block = DECL_INITIAL (current_function_decl);
1517   VEC(tree,heap) *maybe_local_decls = NULL;
1518   unsigned i;
1519   unsigned len;
1520
1521   /* Compute the phase of the stack frame for this function.  */
1522   {
1523     int align = PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT;
1524     int off = STARTING_FRAME_OFFSET % align;
1525     frame_phase = off ? align - off : 0;
1526   }
1527
1528   init_vars_expansion ();
1529
1530   for (i = 0; i < SA.map->num_partitions; i++)
1531     {
1532       tree var = partition_to_var (SA.map, i);
1533
1534       gcc_assert (is_gimple_reg (var));
1535       if (TREE_CODE (SSA_NAME_VAR (var)) == VAR_DECL)
1536         expand_one_var (var, true, true);
1537       else
1538         {
1539           /* This is a PARM_DECL or RESULT_DECL.  For those partitions that
1540              contain the default def (representing the parm or result itself)
1541              we don't do anything here.  But those which don't contain the
1542              default def (representing a temporary based on the parm/result)
1543              we need to allocate space just like for normal VAR_DECLs.  */
1544           if (!bitmap_bit_p (SA.partition_has_default_def, i))
1545             {
1546               expand_one_var (var, true, true);
1547               gcc_assert (SA.partition_to_pseudo[i]);
1548             }
1549         }
1550     }
1551
1552   /* At this point all variables on the local_decls with TREE_USED
1553      set are not associated with any block scope.  Lay them out.  */
1554
1555   len = VEC_length (tree, cfun->local_decls);
1556   FOR_EACH_LOCAL_DECL (cfun, i, var)
1557     {
1558       bool expand_now = false;
1559
1560       /* Expanded above already.  */
1561       if (is_gimple_reg (var))
1562         {
1563           TREE_USED (var) = 0;
1564           goto next;
1565         }
1566       /* We didn't set a block for static or extern because it's hard
1567          to tell the difference between a global variable (re)declared
1568          in a local scope, and one that's really declared there to
1569          begin with.  And it doesn't really matter much, since we're
1570          not giving them stack space.  Expand them now.  */
1571       else if (TREE_STATIC (var) || DECL_EXTERNAL (var))
1572         expand_now = true;
1573
1574       /* If the variable is not associated with any block, then it
1575          was created by the optimizers, and could be live anywhere
1576          in the function.  */
1577       else if (TREE_USED (var))
1578         expand_now = true;
1579
1580       /* Finally, mark all variables on the list as used.  We'll use
1581          this in a moment when we expand those associated with scopes.  */
1582       TREE_USED (var) = 1;
1583
1584       if (expand_now)
1585         expand_one_var (var, true, true);
1586
1587     next:
1588       if (DECL_ARTIFICIAL (var) && !DECL_IGNORED_P (var))
1589         {
1590           rtx rtl = DECL_RTL_IF_SET (var);
1591
1592           /* Keep artificial non-ignored vars in cfun->local_decls
1593              chain until instantiate_decls.  */
1594           if (rtl && (MEM_P (rtl) || GET_CODE (rtl) == CONCAT))
1595             add_local_decl (cfun, var);
1596           else if (rtl == NULL_RTX)
1597             /* If rtl isn't set yet, which can happen e.g. with
1598                -fstack-protector, retry before returning from this
1599                function.  */
1600             VEC_safe_push (tree, heap, maybe_local_decls, var);
1601         }
1602     }
1603
1604   /* We duplicated some of the decls in CFUN->LOCAL_DECLS.
1605
1606      +-----------------+-----------------+
1607      | ...processed... | ...duplicates...|
1608      +-----------------+-----------------+
1609                        ^
1610                        +-- LEN points here.
1611
1612      We just want the duplicates, as those are the artificial
1613      non-ignored vars that we want to keep until instantiate_decls.
1614      Move them down and truncate the array.  */
1615   if (!VEC_empty (tree, cfun->local_decls))
1616     VEC_block_remove (tree, cfun->local_decls, 0, len);
1617
1618   /* At this point, all variables within the block tree with TREE_USED
1619      set are actually used by the optimized function.  Lay them out.  */
1620   expand_used_vars_for_block (outer_block, true);
1621
1622   if (stack_vars_num > 0)
1623     {
1624       add_scope_conflicts ();
1625       /* Due to the way alias sets work, no variables with non-conflicting
1626          alias sets may be assigned the same address.  Add conflicts to
1627          reflect this.  */
1628       add_alias_set_conflicts ();
1629
1630       /* If stack protection is enabled, we don't share space between
1631          vulnerable data and non-vulnerable data.  */
1632       if (flag_stack_protect)
1633         add_stack_protection_conflicts ();
1634
1635       /* Now that we have collected all stack variables, and have computed a
1636          minimal interference graph, attempt to save some stack space.  */
1637       partition_stack_vars ();
1638       if (dump_file)
1639         dump_stack_var_partition ();
1640     }
1641
1642   /* There are several conditions under which we should create a
1643      stack guard: protect-all, alloca used, protected decls present.  */
1644   if (flag_stack_protect == 2
1645       || (flag_stack_protect
1646           && (cfun->calls_alloca || has_protected_decls)))
1647     create_stack_guard ();
1648
1649   /* Assign rtl to each variable based on these partitions.  */
1650   if (stack_vars_num > 0)
1651     {
1652       /* Reorder decls to be protected by iterating over the variables
1653          array multiple times, and allocating out of each phase in turn.  */
1654       /* ??? We could probably integrate this into the qsort we did
1655          earlier, such that we naturally see these variables first,
1656          and thus naturally allocate things in the right order.  */
1657       if (has_protected_decls)
1658         {
1659           /* Phase 1 contains only character arrays.  */
1660           expand_stack_vars (stack_protect_decl_phase_1);
1661
1662           /* Phase 2 contains other kinds of arrays.  */
1663           if (flag_stack_protect == 2)
1664             expand_stack_vars (stack_protect_decl_phase_2);
1665         }
1666
1667       expand_stack_vars (NULL);
1668
1669       fini_vars_expansion ();
1670     }
1671
1672   /* If there were any artificial non-ignored vars without rtl
1673      found earlier, see if deferred stack allocation hasn't assigned
1674      rtl to them.  */
1675   FOR_EACH_VEC_ELT_REVERSE (tree, maybe_local_decls, i, var)
1676     {
1677       rtx rtl = DECL_RTL_IF_SET (var);
1678
1679       /* Keep artificial non-ignored vars in cfun->local_decls
1680          chain until instantiate_decls.  */
1681       if (rtl && (MEM_P (rtl) || GET_CODE (rtl) == CONCAT))
1682         add_local_decl (cfun, var);
1683     }
1684   VEC_free (tree, heap, maybe_local_decls);
1685
1686   /* If the target requires that FRAME_OFFSET be aligned, do it.  */
1687   if (STACK_ALIGNMENT_NEEDED)
1688     {
1689       HOST_WIDE_INT align = PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT;
1690       if (!FRAME_GROWS_DOWNWARD)
1691         frame_offset += align - 1;
1692       frame_offset &= -align;
1693     }
1694 }
1695
1696
1697 /* If we need to produce a detailed dump, print the tree representation
1698    for STMT to the dump file.  SINCE is the last RTX after which the RTL
1699    generated for STMT should have been appended.  */
1700
1701 static void
1702 maybe_dump_rtl_for_gimple_stmt (gimple stmt, rtx since)
1703 {
1704   if (dump_file && (dump_flags & TDF_DETAILS))
1705     {
1706       fprintf (dump_file, "\n;; ");
1707       print_gimple_stmt (dump_file, stmt, 0,
1708                          TDF_SLIM | (dump_flags & TDF_LINENO));
1709       fprintf (dump_file, "\n");
1710
1711       print_rtl (dump_file, since ? NEXT_INSN (since) : since);
1712     }
1713 }
1714
1715 /* Maps the blocks that do not contain tree labels to rtx labels.  */
1716
1717 static struct pointer_map_t *lab_rtx_for_bb;
1718
1719 /* Returns the label_rtx expression for a label starting basic block BB.  */
1720
1721 static rtx
1722 label_rtx_for_bb (basic_block bb ATTRIBUTE_UNUSED)
1723 {
1724   gimple_stmt_iterator gsi;
1725   tree lab;
1726   gimple lab_stmt;
1727   void **elt;
1728
1729   if (bb->flags & BB_RTL)
1730     return block_label (bb);
1731
1732   elt = pointer_map_contains (lab_rtx_for_bb, bb);
1733   if (elt)
1734     return (rtx) *elt;
1735
1736   /* Find the tree label if it is present.  */
1737
1738   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
1739     {
1740       lab_stmt = gsi_stmt (gsi);
1741       if (gimple_code (lab_stmt) != GIMPLE_LABEL)
1742         break;
1743
1744       lab = gimple_label_label (lab_stmt);
1745       if (DECL_NONLOCAL (lab))
1746         break;
1747
1748       return label_rtx (lab);
1749     }
1750
1751   elt = pointer_map_insert (lab_rtx_for_bb, bb);
1752   *elt = gen_label_rtx ();
1753   return (rtx) *elt;
1754 }
1755
1756
1757 /* A subroutine of expand_gimple_cond.  Given E, a fallthrough edge
1758    of a basic block where we just expanded the conditional at the end,
1759    possibly clean up the CFG and instruction sequence.  LAST is the
1760    last instruction before the just emitted jump sequence.  */
1761
1762 static void
1763 maybe_cleanup_end_of_block (edge e, rtx last)
1764 {
1765   /* Special case: when jumpif decides that the condition is
1766      trivial it emits an unconditional jump (and the necessary
1767      barrier).  But we still have two edges, the fallthru one is
1768      wrong.  purge_dead_edges would clean this up later.  Unfortunately
1769      we have to insert insns (and split edges) before
1770      find_many_sub_basic_blocks and hence before purge_dead_edges.
1771      But splitting edges might create new blocks which depend on the
1772      fact that if there are two edges there's no barrier.  So the
1773      barrier would get lost and verify_flow_info would ICE.  Instead
1774      of auditing all edge splitters to care for the barrier (which
1775      normally isn't there in a cleaned CFG), fix it here.  */
1776   if (BARRIER_P (get_last_insn ()))
1777     {
1778       rtx insn;
1779       remove_edge (e);
1780       /* Now, we have a single successor block, if we have insns to
1781          insert on the remaining edge we potentially will insert
1782          it at the end of this block (if the dest block isn't feasible)
1783          in order to avoid splitting the edge.  This insertion will take
1784          place in front of the last jump.  But we might have emitted
1785          multiple jumps (conditional and one unconditional) to the
1786          same destination.  Inserting in front of the last one then
1787          is a problem.  See PR 40021.  We fix this by deleting all
1788          jumps except the last unconditional one.  */
1789       insn = PREV_INSN (get_last_insn ());
1790       /* Make sure we have an unconditional jump.  Otherwise we're
1791          confused.  */
1792       gcc_assert (JUMP_P (insn) && !any_condjump_p (insn));
1793       for (insn = PREV_INSN (insn); insn != last;)
1794         {
1795           insn = PREV_INSN (insn);
1796           if (JUMP_P (NEXT_INSN (insn)))
1797             {
1798               if (!any_condjump_p (NEXT_INSN (insn)))
1799                 {
1800                   gcc_assert (BARRIER_P (NEXT_INSN (NEXT_INSN (insn))));
1801                   delete_insn (NEXT_INSN (NEXT_INSN (insn)));
1802                 }
1803               delete_insn (NEXT_INSN (insn));
1804             }
1805         }
1806     }
1807 }
1808
1809 /* A subroutine of expand_gimple_basic_block.  Expand one GIMPLE_COND.
1810    Returns a new basic block if we've terminated the current basic
1811    block and created a new one.  */
1812
1813 static basic_block
1814 expand_gimple_cond (basic_block bb, gimple stmt)
1815 {
1816   basic_block new_bb, dest;
1817   edge new_edge;
1818   edge true_edge;
1819   edge false_edge;
1820   rtx last2, last;
1821   enum tree_code code;
1822   tree op0, op1;
1823
1824   code = gimple_cond_code (stmt);
1825   op0 = gimple_cond_lhs (stmt);
1826   op1 = gimple_cond_rhs (stmt);
1827   /* We're sometimes presented with such code:
1828        D.123_1 = x < y;
1829        if (D.123_1 != 0)
1830          ...
1831      This would expand to two comparisons which then later might
1832      be cleaned up by combine.  But some pattern matchers like if-conversion
1833      work better when there's only one compare, so make up for this
1834      here as special exception if TER would have made the same change.  */
1835   if (gimple_cond_single_var_p (stmt)
1836       && SA.values
1837       && TREE_CODE (op0) == SSA_NAME
1838       && bitmap_bit_p (SA.values, SSA_NAME_VERSION (op0)))
1839     {
1840       gimple second = SSA_NAME_DEF_STMT (op0);
1841       if (gimple_code (second) == GIMPLE_ASSIGN)
1842         {
1843           enum tree_code code2 = gimple_assign_rhs_code (second);
1844           if (TREE_CODE_CLASS (code2) == tcc_comparison)
1845             {
1846               code = code2;
1847               op0 = gimple_assign_rhs1 (second);
1848               op1 = gimple_assign_rhs2 (second);
1849             }
1850           /* If jumps are cheap turn some more codes into
1851              jumpy sequences.  */
1852           else if (BRANCH_COST (optimize_insn_for_speed_p (), false) < 4)
1853             {
1854               if ((code2 == BIT_AND_EXPR
1855                    && TYPE_PRECISION (TREE_TYPE (op0)) == 1
1856                    && TREE_CODE (gimple_assign_rhs2 (second)) != INTEGER_CST)
1857                   || code2 == TRUTH_AND_EXPR)
1858                 {
1859                   code = TRUTH_ANDIF_EXPR;
1860                   op0 = gimple_assign_rhs1 (second);
1861                   op1 = gimple_assign_rhs2 (second);
1862                 }
1863               else if (code2 == BIT_IOR_EXPR || code2 == TRUTH_OR_EXPR)
1864                 {
1865                   code = TRUTH_ORIF_EXPR;
1866                   op0 = gimple_assign_rhs1 (second);
1867                   op1 = gimple_assign_rhs2 (second);
1868                 }
1869             }
1870         }
1871     }
1872
1873   last2 = last = get_last_insn ();
1874
1875   extract_true_false_edges_from_block (bb, &true_edge, &false_edge);
1876   set_curr_insn_source_location (gimple_location (stmt));
1877   set_curr_insn_block (gimple_block (stmt));
1878
1879   /* These flags have no purpose in RTL land.  */
1880   true_edge->flags &= ~EDGE_TRUE_VALUE;
1881   false_edge->flags &= ~EDGE_FALSE_VALUE;
1882
1883   /* We can either have a pure conditional jump with one fallthru edge or
1884      two-way jump that needs to be decomposed into two basic blocks.  */
1885   if (false_edge->dest == bb->next_bb)
1886     {
1887       jumpif_1 (code, op0, op1, label_rtx_for_bb (true_edge->dest),
1888                 true_edge->probability);
1889       maybe_dump_rtl_for_gimple_stmt (stmt, last);
1890       if (true_edge->goto_locus)
1891         {
1892           set_curr_insn_source_location (true_edge->goto_locus);
1893           set_curr_insn_block (true_edge->goto_block);
1894           true_edge->goto_locus = curr_insn_locator ();
1895         }
1896       true_edge->goto_block = NULL;
1897       false_edge->flags |= EDGE_FALLTHRU;
1898       maybe_cleanup_end_of_block (false_edge, last);
1899       return NULL;
1900     }
1901   if (true_edge->dest == bb->next_bb)
1902     {
1903       jumpifnot_1 (code, op0, op1, label_rtx_for_bb (false_edge->dest),
1904                    false_edge->probability);
1905       maybe_dump_rtl_for_gimple_stmt (stmt, last);
1906       if (false_edge->goto_locus)
1907         {
1908           set_curr_insn_source_location (false_edge->goto_locus);
1909           set_curr_insn_block (false_edge->goto_block);
1910           false_edge->goto_locus = curr_insn_locator ();
1911         }
1912       false_edge->goto_block = NULL;
1913       true_edge->flags |= EDGE_FALLTHRU;
1914       maybe_cleanup_end_of_block (true_edge, last);
1915       return NULL;
1916     }
1917
1918   jumpif_1 (code, op0, op1, label_rtx_for_bb (true_edge->dest),
1919             true_edge->probability);
1920   last = get_last_insn ();
1921   if (false_edge->goto_locus)
1922     {
1923       set_curr_insn_source_location (false_edge->goto_locus);
1924       set_curr_insn_block (false_edge->goto_block);
1925       false_edge->goto_locus = curr_insn_locator ();
1926     }
1927   false_edge->goto_block = NULL;
1928   emit_jump (label_rtx_for_bb (false_edge->dest));
1929
1930   BB_END (bb) = last;
1931   if (BARRIER_P (BB_END (bb)))
1932     BB_END (bb) = PREV_INSN (BB_END (bb));
1933   update_bb_for_insn (bb);
1934
1935   new_bb = create_basic_block (NEXT_INSN (last), get_last_insn (), bb);
1936   dest = false_edge->dest;
1937   redirect_edge_succ (false_edge, new_bb);
1938   false_edge->flags |= EDGE_FALLTHRU;
1939   new_bb->count = false_edge->count;
1940   new_bb->frequency = EDGE_FREQUENCY (false_edge);
1941   new_edge = make_edge (new_bb, dest, 0);
1942   new_edge->probability = REG_BR_PROB_BASE;
1943   new_edge->count = new_bb->count;
1944   if (BARRIER_P (BB_END (new_bb)))
1945     BB_END (new_bb) = PREV_INSN (BB_END (new_bb));
1946   update_bb_for_insn (new_bb);
1947
1948   maybe_dump_rtl_for_gimple_stmt (stmt, last2);
1949
1950   if (true_edge->goto_locus)
1951     {
1952       set_curr_insn_source_location (true_edge->goto_locus);
1953       set_curr_insn_block (true_edge->goto_block);
1954       true_edge->goto_locus = curr_insn_locator ();
1955     }
1956   true_edge->goto_block = NULL;
1957
1958   return new_bb;
1959 }
1960
1961 /* Mark all calls that can have a transaction restart.  */
1962
1963 static void
1964 mark_transaction_restart_calls (gimple stmt)
1965 {
1966   struct tm_restart_node dummy;
1967   void **slot;
1968
1969   if (!cfun->gimple_df->tm_restart)
1970     return;
1971
1972   dummy.stmt = stmt;
1973   slot = htab_find_slot (cfun->gimple_df->tm_restart, &dummy, NO_INSERT);
1974   if (slot)
1975     {
1976       struct tm_restart_node *n = (struct tm_restart_node *) *slot;
1977       tree list = n->label_or_list;
1978       rtx insn;
1979
1980       for (insn = next_real_insn (get_last_insn ());
1981            !CALL_P (insn);
1982            insn = next_real_insn (insn))
1983         continue;
1984
1985       if (TREE_CODE (list) == LABEL_DECL)
1986         add_reg_note (insn, REG_TM, label_rtx (list));
1987       else
1988         for (; list ; list = TREE_CHAIN (list))
1989           add_reg_note (insn, REG_TM, label_rtx (TREE_VALUE (list)));
1990     }
1991 }
1992
1993 /* A subroutine of expand_gimple_stmt_1, expanding one GIMPLE_CALL
1994    statement STMT.  */
1995
1996 static void
1997 expand_call_stmt (gimple stmt)
1998 {
1999   tree exp, decl, lhs;
2000   bool builtin_p;
2001   size_t i;
2002
2003   if (gimple_call_internal_p (stmt))
2004     {
2005       expand_internal_call (stmt);
2006       return;
2007     }
2008
2009   exp = build_vl_exp (CALL_EXPR, gimple_call_num_args (stmt) + 3);
2010
2011   CALL_EXPR_FN (exp) = gimple_call_fn (stmt);
2012   decl = gimple_call_fndecl (stmt);
2013   builtin_p = decl && DECL_BUILT_IN (decl);
2014
2015   /* If this is not a builtin function, the function type through which the
2016      call is made may be different from the type of the function.  */
2017   if (!builtin_p)
2018     CALL_EXPR_FN (exp)
2019       = fold_convert (build_pointer_type (gimple_call_fntype (stmt)),
2020                       CALL_EXPR_FN (exp));
2021
2022   TREE_TYPE (exp) = gimple_call_return_type (stmt);
2023   CALL_EXPR_STATIC_CHAIN (exp) = gimple_call_chain (stmt);
2024
2025   for (i = 0; i < gimple_call_num_args (stmt); i++)
2026     {
2027       tree arg = gimple_call_arg (stmt, i);
2028       gimple def;
2029       /* TER addresses into arguments of builtin functions so we have a
2030          chance to infer more correct alignment information.  See PR39954.  */
2031       if (builtin_p
2032           && TREE_CODE (arg) == SSA_NAME
2033           && (def = get_gimple_for_ssa_name (arg))
2034           && gimple_assign_rhs_code (def) == ADDR_EXPR)
2035         arg = gimple_assign_rhs1 (def);
2036       CALL_EXPR_ARG (exp, i) = arg;
2037     }
2038
2039   if (gimple_has_side_effects (stmt))
2040     TREE_SIDE_EFFECTS (exp) = 1;
2041
2042   if (gimple_call_nothrow_p (stmt))
2043     TREE_NOTHROW (exp) = 1;
2044
2045   CALL_EXPR_TAILCALL (exp) = gimple_call_tail_p (stmt);
2046   CALL_EXPR_RETURN_SLOT_OPT (exp) = gimple_call_return_slot_opt_p (stmt);
2047   if (decl
2048       && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
2049       && (DECL_FUNCTION_CODE (decl) == BUILT_IN_ALLOCA
2050           || DECL_FUNCTION_CODE (decl) == BUILT_IN_ALLOCA_WITH_ALIGN))
2051     CALL_ALLOCA_FOR_VAR_P (exp) = gimple_call_alloca_for_var_p (stmt);
2052   else
2053     CALL_FROM_THUNK_P (exp) = gimple_call_from_thunk_p (stmt);
2054   CALL_EXPR_VA_ARG_PACK (exp) = gimple_call_va_arg_pack_p (stmt);
2055   SET_EXPR_LOCATION (exp, gimple_location (stmt));
2056   TREE_BLOCK (exp) = gimple_block (stmt);
2057
2058   /* Ensure RTL is created for debug args.  */
2059   if (decl && DECL_HAS_DEBUG_ARGS_P (decl))
2060     {
2061       VEC(tree, gc) **debug_args = decl_debug_args_lookup (decl);
2062       unsigned int ix;
2063       tree dtemp;
2064
2065       if (debug_args)
2066         for (ix = 1; VEC_iterate (tree, *debug_args, ix, dtemp); ix += 2)
2067           {
2068             gcc_assert (TREE_CODE (dtemp) == DEBUG_EXPR_DECL);
2069             expand_debug_expr (dtemp);
2070           }
2071     }
2072
2073   lhs = gimple_call_lhs (stmt);
2074   if (lhs)
2075     expand_assignment (lhs, exp, false);
2076   else
2077     expand_expr_real_1 (exp, const0_rtx, VOIDmode, EXPAND_NORMAL, NULL);
2078
2079   mark_transaction_restart_calls (stmt);
2080 }
2081
2082 /* A subroutine of expand_gimple_stmt, expanding one gimple statement
2083    STMT that doesn't require special handling for outgoing edges.  That
2084    is no tailcalls and no GIMPLE_COND.  */
2085
2086 static void
2087 expand_gimple_stmt_1 (gimple stmt)
2088 {
2089   tree op0;
2090
2091   set_curr_insn_source_location (gimple_location (stmt));
2092   set_curr_insn_block (gimple_block (stmt));
2093
2094   switch (gimple_code (stmt))
2095     {
2096     case GIMPLE_GOTO:
2097       op0 = gimple_goto_dest (stmt);
2098       if (TREE_CODE (op0) == LABEL_DECL)
2099         expand_goto (op0);
2100       else
2101         expand_computed_goto (op0);
2102       break;
2103     case GIMPLE_LABEL:
2104       expand_label (gimple_label_label (stmt));
2105       break;
2106     case GIMPLE_NOP:
2107     case GIMPLE_PREDICT:
2108       break;
2109     case GIMPLE_SWITCH:
2110       expand_case (stmt);
2111       break;
2112     case GIMPLE_ASM:
2113       expand_asm_stmt (stmt);
2114       break;
2115     case GIMPLE_CALL:
2116       expand_call_stmt (stmt);
2117       break;
2118
2119     case GIMPLE_RETURN:
2120       op0 = gimple_return_retval (stmt);
2121
2122       if (op0 && op0 != error_mark_node)
2123         {
2124           tree result = DECL_RESULT (current_function_decl);
2125
2126           /* If we are not returning the current function's RESULT_DECL,
2127              build an assignment to it.  */
2128           if (op0 != result)
2129             {
2130               /* I believe that a function's RESULT_DECL is unique.  */
2131               gcc_assert (TREE_CODE (op0) != RESULT_DECL);
2132
2133               /* ??? We'd like to use simply expand_assignment here,
2134                  but this fails if the value is of BLKmode but the return
2135                  decl is a register.  expand_return has special handling
2136                  for this combination, which eventually should move
2137                  to common code.  See comments there.  Until then, let's
2138                  build a modify expression :-/  */
2139               op0 = build2 (MODIFY_EXPR, TREE_TYPE (result),
2140                             result, op0);
2141             }
2142         }
2143       if (!op0)
2144         expand_null_return ();
2145       else
2146         expand_return (op0);
2147       break;
2148
2149     case GIMPLE_ASSIGN:
2150       {
2151         tree lhs = gimple_assign_lhs (stmt);
2152
2153         /* Tree expand used to fiddle with |= and &= of two bitfield
2154            COMPONENT_REFs here.  This can't happen with gimple, the LHS
2155            of binary assigns must be a gimple reg.  */
2156
2157         if (TREE_CODE (lhs) != SSA_NAME
2158             || get_gimple_rhs_class (gimple_expr_code (stmt))
2159                == GIMPLE_SINGLE_RHS)
2160           {
2161             tree rhs = gimple_assign_rhs1 (stmt);
2162             gcc_assert (get_gimple_rhs_class (gimple_expr_code (stmt))
2163                         == GIMPLE_SINGLE_RHS);
2164             if (gimple_has_location (stmt) && CAN_HAVE_LOCATION_P (rhs))
2165               SET_EXPR_LOCATION (rhs, gimple_location (stmt));
2166             if (TREE_CLOBBER_P (rhs))
2167               /* This is a clobber to mark the going out of scope for
2168                  this LHS.  */
2169               ;
2170             else
2171               expand_assignment (lhs, rhs,
2172                                  gimple_assign_nontemporal_move_p (stmt));
2173           }
2174         else
2175           {
2176             rtx target, temp;
2177             bool nontemporal = gimple_assign_nontemporal_move_p (stmt);
2178             struct separate_ops ops;
2179             bool promoted = false;
2180
2181             target = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
2182             if (GET_CODE (target) == SUBREG && SUBREG_PROMOTED_VAR_P (target))
2183               promoted = true;
2184
2185             ops.code = gimple_assign_rhs_code (stmt);
2186             ops.type = TREE_TYPE (lhs);
2187             switch (get_gimple_rhs_class (gimple_expr_code (stmt)))
2188               {
2189                 case GIMPLE_TERNARY_RHS:
2190                   ops.op2 = gimple_assign_rhs3 (stmt);
2191                   /* Fallthru */
2192                 case GIMPLE_BINARY_RHS:
2193                   ops.op1 = gimple_assign_rhs2 (stmt);
2194                   /* Fallthru */
2195                 case GIMPLE_UNARY_RHS:
2196                   ops.op0 = gimple_assign_rhs1 (stmt);
2197                   break;
2198                 default:
2199                   gcc_unreachable ();
2200               }
2201             ops.location = gimple_location (stmt);
2202
2203             /* If we want to use a nontemporal store, force the value to
2204                register first.  If we store into a promoted register,
2205                don't directly expand to target.  */
2206             temp = nontemporal || promoted ? NULL_RTX : target;
2207             temp = expand_expr_real_2 (&ops, temp, GET_MODE (target),
2208                                        EXPAND_NORMAL);
2209
2210             if (temp == target)
2211               ;
2212             else if (promoted)
2213               {
2214                 int unsignedp = SUBREG_PROMOTED_UNSIGNED_P (target);
2215                 /* If TEMP is a VOIDmode constant, use convert_modes to make
2216                    sure that we properly convert it.  */
2217                 if (CONSTANT_P (temp) && GET_MODE (temp) == VOIDmode)
2218                   {
2219                     temp = convert_modes (GET_MODE (target),
2220                                           TYPE_MODE (ops.type),
2221                                           temp, unsignedp);
2222                     temp = convert_modes (GET_MODE (SUBREG_REG (target)),
2223                                           GET_MODE (target), temp, unsignedp);
2224                   }
2225
2226                 convert_move (SUBREG_REG (target), temp, unsignedp);
2227               }
2228             else if (nontemporal && emit_storent_insn (target, temp))
2229               ;
2230             else
2231               {
2232                 temp = force_operand (temp, target);
2233                 if (temp != target)
2234                   emit_move_insn (target, temp);
2235               }
2236           }
2237       }
2238       break;
2239
2240     default:
2241       gcc_unreachable ();
2242     }
2243 }
2244
2245 /* Expand one gimple statement STMT and return the last RTL instruction
2246    before any of the newly generated ones.
2247
2248    In addition to generating the necessary RTL instructions this also
2249    sets REG_EH_REGION notes if necessary and sets the current source
2250    location for diagnostics.  */
2251
2252 static rtx
2253 expand_gimple_stmt (gimple stmt)
2254 {
2255   location_t saved_location = input_location;
2256   rtx last = get_last_insn ();
2257   int lp_nr;
2258
2259   gcc_assert (cfun);
2260
2261   /* We need to save and restore the current source location so that errors
2262      discovered during expansion are emitted with the right location.  But
2263      it would be better if the diagnostic routines used the source location
2264      embedded in the tree nodes rather than globals.  */
2265   if (gimple_has_location (stmt))
2266     input_location = gimple_location (stmt);
2267
2268   expand_gimple_stmt_1 (stmt);
2269
2270   /* Free any temporaries used to evaluate this statement.  */
2271   free_temp_slots ();
2272
2273   input_location = saved_location;
2274
2275   /* Mark all insns that may trap.  */
2276   lp_nr = lookup_stmt_eh_lp (stmt);
2277   if (lp_nr)
2278     {
2279       rtx insn;
2280       for (insn = next_real_insn (last); insn;
2281            insn = next_real_insn (insn))
2282         {
2283           if (! find_reg_note (insn, REG_EH_REGION, NULL_RTX)
2284               /* If we want exceptions for non-call insns, any
2285                  may_trap_p instruction may throw.  */
2286               && GET_CODE (PATTERN (insn)) != CLOBBER
2287               && GET_CODE (PATTERN (insn)) != USE
2288               && insn_could_throw_p (insn))
2289             make_reg_eh_region_note (insn, 0, lp_nr);
2290         }
2291     }
2292
2293   return last;
2294 }
2295
2296 /* A subroutine of expand_gimple_basic_block.  Expand one GIMPLE_CALL
2297    that has CALL_EXPR_TAILCALL set.  Returns non-null if we actually
2298    generated a tail call (something that might be denied by the ABI
2299    rules governing the call; see calls.c).
2300
2301    Sets CAN_FALLTHRU if we generated a *conditional* tail call, and
2302    can still reach the rest of BB.  The case here is __builtin_sqrt,
2303    where the NaN result goes through the external function (with a
2304    tailcall) and the normal result happens via a sqrt instruction.  */
2305
2306 static basic_block
2307 expand_gimple_tailcall (basic_block bb, gimple stmt, bool *can_fallthru)
2308 {
2309   rtx last2, last;
2310   edge e;
2311   edge_iterator ei;
2312   int probability;
2313   gcov_type count;
2314
2315   last2 = last = expand_gimple_stmt (stmt);
2316
2317   for (last = NEXT_INSN (last); last; last = NEXT_INSN (last))
2318     if (CALL_P (last) && SIBLING_CALL_P (last))
2319       goto found;
2320
2321   maybe_dump_rtl_for_gimple_stmt (stmt, last2);
2322
2323   *can_fallthru = true;
2324   return NULL;
2325
2326  found:
2327   /* ??? Wouldn't it be better to just reset any pending stack adjust?
2328      Any instructions emitted here are about to be deleted.  */
2329   do_pending_stack_adjust ();
2330
2331   /* Remove any non-eh, non-abnormal edges that don't go to exit.  */
2332   /* ??? I.e. the fallthrough edge.  HOWEVER!  If there were to be
2333      EH or abnormal edges, we shouldn't have created a tail call in
2334      the first place.  So it seems to me we should just be removing
2335      all edges here, or redirecting the existing fallthru edge to
2336      the exit block.  */
2337
2338   probability = 0;
2339   count = 0;
2340
2341   for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); )
2342     {
2343       if (!(e->flags & (EDGE_ABNORMAL | EDGE_EH)))
2344         {
2345           if (e->dest != EXIT_BLOCK_PTR)
2346             {
2347               e->dest->count -= e->count;
2348               e->dest->frequency -= EDGE_FREQUENCY (e);
2349               if (e->dest->count < 0)
2350                 e->dest->count = 0;
2351               if (e->dest->frequency < 0)
2352                 e->dest->frequency = 0;
2353             }
2354           count += e->count;
2355           probability += e->probability;
2356           remove_edge (e);
2357         }
2358       else
2359         ei_next (&ei);
2360     }
2361
2362   /* This is somewhat ugly: the call_expr expander often emits instructions
2363      after the sibcall (to perform the function return).  These confuse the
2364      find_many_sub_basic_blocks code, so we need to get rid of these.  */
2365   last = NEXT_INSN (last);
2366   gcc_assert (BARRIER_P (last));
2367
2368   *can_fallthru = false;
2369   while (NEXT_INSN (last))
2370     {
2371       /* For instance an sqrt builtin expander expands if with
2372          sibcall in the then and label for `else`.  */
2373       if (LABEL_P (NEXT_INSN (last)))
2374         {
2375           *can_fallthru = true;
2376           break;
2377         }
2378       delete_insn (NEXT_INSN (last));
2379     }
2380
2381   e = make_edge (bb, EXIT_BLOCK_PTR, EDGE_ABNORMAL | EDGE_SIBCALL);
2382   e->probability += probability;
2383   e->count += count;
2384   BB_END (bb) = last;
2385   update_bb_for_insn (bb);
2386
2387   if (NEXT_INSN (last))
2388     {
2389       bb = create_basic_block (NEXT_INSN (last), get_last_insn (), bb);
2390
2391       last = BB_END (bb);
2392       if (BARRIER_P (last))
2393         BB_END (bb) = PREV_INSN (last);
2394     }
2395
2396   maybe_dump_rtl_for_gimple_stmt (stmt, last2);
2397
2398   return bb;
2399 }
2400
2401 /* Return the difference between the floor and the truncated result of
2402    a signed division by OP1 with remainder MOD.  */
2403 static rtx
2404 floor_sdiv_adjust (enum machine_mode mode, rtx mod, rtx op1)
2405 {
2406   /* (mod != 0 ? (op1 / mod < 0 ? -1 : 0) : 0) */
2407   return gen_rtx_IF_THEN_ELSE
2408     (mode, gen_rtx_NE (BImode, mod, const0_rtx),
2409      gen_rtx_IF_THEN_ELSE
2410      (mode, gen_rtx_LT (BImode,
2411                         gen_rtx_DIV (mode, op1, mod),
2412                         const0_rtx),
2413       constm1_rtx, const0_rtx),
2414      const0_rtx);
2415 }
2416
2417 /* Return the difference between the ceil and the truncated result of
2418    a signed division by OP1 with remainder MOD.  */
2419 static rtx
2420 ceil_sdiv_adjust (enum machine_mode mode, rtx mod, rtx op1)
2421 {
2422   /* (mod != 0 ? (op1 / mod > 0 ? 1 : 0) : 0) */
2423   return gen_rtx_IF_THEN_ELSE
2424     (mode, gen_rtx_NE (BImode, mod, const0_rtx),
2425      gen_rtx_IF_THEN_ELSE
2426      (mode, gen_rtx_GT (BImode,
2427                         gen_rtx_DIV (mode, op1, mod),
2428                         const0_rtx),
2429       const1_rtx, const0_rtx),
2430      const0_rtx);
2431 }
2432
2433 /* Return the difference between the ceil and the truncated result of
2434    an unsigned division by OP1 with remainder MOD.  */
2435 static rtx
2436 ceil_udiv_adjust (enum machine_mode mode, rtx mod, rtx op1 ATTRIBUTE_UNUSED)
2437 {
2438   /* (mod != 0 ? 1 : 0) */
2439   return gen_rtx_IF_THEN_ELSE
2440     (mode, gen_rtx_NE (BImode, mod, const0_rtx),
2441      const1_rtx, const0_rtx);
2442 }
2443
2444 /* Return the difference between the rounded and the truncated result
2445    of a signed division by OP1 with remainder MOD.  Halfway cases are
2446    rounded away from zero, rather than to the nearest even number.  */
2447 static rtx
2448 round_sdiv_adjust (enum machine_mode mode, rtx mod, rtx op1)
2449 {
2450   /* (abs (mod) >= abs (op1) - abs (mod)
2451       ? (op1 / mod > 0 ? 1 : -1)
2452       : 0) */
2453   return gen_rtx_IF_THEN_ELSE
2454     (mode, gen_rtx_GE (BImode, gen_rtx_ABS (mode, mod),
2455                        gen_rtx_MINUS (mode,
2456                                       gen_rtx_ABS (mode, op1),
2457                                       gen_rtx_ABS (mode, mod))),
2458      gen_rtx_IF_THEN_ELSE
2459      (mode, gen_rtx_GT (BImode,
2460                         gen_rtx_DIV (mode, op1, mod),
2461                         const0_rtx),
2462       const1_rtx, constm1_rtx),
2463      const0_rtx);
2464 }
2465
2466 /* Return the difference between the rounded and the truncated result
2467    of a unsigned division by OP1 with remainder MOD.  Halfway cases
2468    are rounded away from zero, rather than to the nearest even
2469    number.  */
2470 static rtx
2471 round_udiv_adjust (enum machine_mode mode, rtx mod, rtx op1)
2472 {
2473   /* (mod >= op1 - mod ? 1 : 0) */
2474   return gen_rtx_IF_THEN_ELSE
2475     (mode, gen_rtx_GE (BImode, mod,
2476                        gen_rtx_MINUS (mode, op1, mod)),
2477      const1_rtx, const0_rtx);
2478 }
2479
2480 /* Convert X to MODE, that must be Pmode or ptr_mode, without emitting
2481    any rtl.  */
2482
2483 static rtx
2484 convert_debug_memory_address (enum machine_mode mode, rtx x,
2485                               addr_space_t as)
2486 {
2487   enum machine_mode xmode = GET_MODE (x);
2488
2489 #ifndef POINTERS_EXTEND_UNSIGNED
2490   gcc_assert (mode == Pmode
2491               || mode == targetm.addr_space.address_mode (as));
2492   gcc_assert (xmode == mode || xmode == VOIDmode);
2493 #else
2494   rtx temp;
2495
2496   gcc_assert (targetm.addr_space.valid_pointer_mode (mode, as));
2497
2498   if (GET_MODE (x) == mode || GET_MODE (x) == VOIDmode)
2499     return x;
2500
2501   if (GET_MODE_PRECISION (mode) < GET_MODE_PRECISION (xmode))
2502     x = simplify_gen_subreg (mode, x, xmode,
2503                              subreg_lowpart_offset
2504                              (mode, xmode));
2505   else if (POINTERS_EXTEND_UNSIGNED > 0)
2506     x = gen_rtx_ZERO_EXTEND (mode, x);
2507   else if (!POINTERS_EXTEND_UNSIGNED)
2508     x = gen_rtx_SIGN_EXTEND (mode, x);
2509   else
2510     {
2511       switch (GET_CODE (x))
2512         {
2513         case SUBREG:
2514           if ((SUBREG_PROMOTED_VAR_P (x)
2515                || (REG_P (SUBREG_REG (x)) && REG_POINTER (SUBREG_REG (x)))
2516                || (GET_CODE (SUBREG_REG (x)) == PLUS
2517                    && REG_P (XEXP (SUBREG_REG (x), 0))
2518                    && REG_POINTER (XEXP (SUBREG_REG (x), 0))
2519                    && CONST_INT_P (XEXP (SUBREG_REG (x), 1))))
2520               && GET_MODE (SUBREG_REG (x)) == mode)
2521             return SUBREG_REG (x);
2522           break;
2523         case LABEL_REF:
2524           temp = gen_rtx_LABEL_REF (mode, XEXP (x, 0));
2525           LABEL_REF_NONLOCAL_P (temp) = LABEL_REF_NONLOCAL_P (x);
2526           return temp;
2527         case SYMBOL_REF:
2528           temp = shallow_copy_rtx (x);
2529           PUT_MODE (temp, mode);
2530           return temp;
2531         case CONST:
2532           temp = convert_debug_memory_address (mode, XEXP (x, 0), as);
2533           if (temp)
2534             temp = gen_rtx_CONST (mode, temp);
2535           return temp;
2536         case PLUS:
2537         case MINUS:
2538           if (CONST_INT_P (XEXP (x, 1)))
2539             {
2540               temp = convert_debug_memory_address (mode, XEXP (x, 0), as);
2541               if (temp)
2542                 return gen_rtx_fmt_ee (GET_CODE (x), mode, temp, XEXP (x, 1));
2543             }
2544           break;
2545         default:
2546           break;
2547         }
2548       /* Don't know how to express ptr_extend as operation in debug info.  */
2549       return NULL;
2550     }
2551 #endif /* POINTERS_EXTEND_UNSIGNED */
2552
2553   return x;
2554 }
2555
2556 /* Return an RTX equivalent to the value of the parameter DECL.  */
2557
2558 static rtx
2559 expand_debug_parm_decl (tree decl)
2560 {
2561   rtx incoming = DECL_INCOMING_RTL (decl);
2562
2563   if (incoming
2564       && GET_MODE (incoming) != BLKmode
2565       && ((REG_P (incoming) && HARD_REGISTER_P (incoming))
2566           || (MEM_P (incoming)
2567               && REG_P (XEXP (incoming, 0))
2568               && HARD_REGISTER_P (XEXP (incoming, 0)))))
2569     {
2570       rtx rtl = gen_rtx_ENTRY_VALUE (GET_MODE (incoming));
2571
2572 #ifdef HAVE_window_save
2573       /* DECL_INCOMING_RTL uses the INCOMING_REGNO of parameter registers.
2574          If the target machine has an explicit window save instruction, the
2575          actual entry value is the corresponding OUTGOING_REGNO instead.  */
2576       if (REG_P (incoming)
2577           && OUTGOING_REGNO (REGNO (incoming)) != REGNO (incoming))
2578         incoming
2579           = gen_rtx_REG_offset (incoming, GET_MODE (incoming),
2580                                 OUTGOING_REGNO (REGNO (incoming)), 0);
2581       else if (MEM_P (incoming))
2582         {
2583           rtx reg = XEXP (incoming, 0);
2584           if (OUTGOING_REGNO (REGNO (reg)) != REGNO (reg))
2585             {
2586               reg = gen_raw_REG (GET_MODE (reg), OUTGOING_REGNO (REGNO (reg)));
2587               incoming = replace_equiv_address_nv (incoming, reg);
2588             }
2589         }
2590 #endif
2591
2592       ENTRY_VALUE_EXP (rtl) = incoming;
2593       return rtl;
2594     }
2595
2596   if (incoming
2597       && GET_MODE (incoming) != BLKmode
2598       && !TREE_ADDRESSABLE (decl)
2599       && MEM_P (incoming)
2600       && (XEXP (incoming, 0) == virtual_incoming_args_rtx
2601           || (GET_CODE (XEXP (incoming, 0)) == PLUS
2602               && XEXP (XEXP (incoming, 0), 0) == virtual_incoming_args_rtx
2603               && CONST_INT_P (XEXP (XEXP (incoming, 0), 1)))))
2604     return incoming;
2605
2606   return NULL_RTX;
2607 }
2608
2609 /* Return an RTX equivalent to the value of the tree expression EXP.  */
2610
2611 static rtx
2612 expand_debug_expr (tree exp)
2613 {
2614   rtx op0 = NULL_RTX, op1 = NULL_RTX, op2 = NULL_RTX;
2615   enum machine_mode mode = TYPE_MODE (TREE_TYPE (exp));
2616   enum machine_mode inner_mode = VOIDmode;
2617   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (exp));
2618   addr_space_t as;
2619
2620   switch (TREE_CODE_CLASS (TREE_CODE (exp)))
2621     {
2622     case tcc_expression:
2623       switch (TREE_CODE (exp))
2624         {
2625         case COND_EXPR:
2626         case DOT_PROD_EXPR:
2627         case WIDEN_MULT_PLUS_EXPR:
2628         case WIDEN_MULT_MINUS_EXPR:
2629         case FMA_EXPR:
2630           goto ternary;
2631
2632         case TRUTH_ANDIF_EXPR:
2633         case TRUTH_ORIF_EXPR:
2634         case TRUTH_AND_EXPR:
2635         case TRUTH_OR_EXPR:
2636         case TRUTH_XOR_EXPR:
2637           goto binary;
2638
2639         case TRUTH_NOT_EXPR:
2640           goto unary;
2641
2642         default:
2643           break;
2644         }
2645       break;
2646
2647     ternary:
2648       op2 = expand_debug_expr (TREE_OPERAND (exp, 2));
2649       if (!op2)
2650         return NULL_RTX;
2651       /* Fall through.  */
2652
2653     binary:
2654     case tcc_binary:
2655     case tcc_comparison:
2656       op1 = expand_debug_expr (TREE_OPERAND (exp, 1));
2657       if (!op1)
2658         return NULL_RTX;
2659       /* Fall through.  */
2660
2661     unary:
2662     case tcc_unary:
2663       inner_mode = TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)));
2664       op0 = expand_debug_expr (TREE_OPERAND (exp, 0));
2665       if (!op0)
2666         return NULL_RTX;
2667       break;
2668
2669     case tcc_type:
2670     case tcc_statement:
2671       gcc_unreachable ();
2672
2673     case tcc_constant:
2674     case tcc_exceptional:
2675     case tcc_declaration:
2676     case tcc_reference:
2677     case tcc_vl_exp:
2678       break;
2679     }
2680
2681   switch (TREE_CODE (exp))
2682     {
2683     case STRING_CST:
2684       if (!lookup_constant_def (exp))
2685         {
2686           if (strlen (TREE_STRING_POINTER (exp)) + 1
2687               != (size_t) TREE_STRING_LENGTH (exp))
2688             return NULL_RTX;
2689           op0 = gen_rtx_CONST_STRING (Pmode, TREE_STRING_POINTER (exp));
2690           op0 = gen_rtx_MEM (BLKmode, op0);
2691           set_mem_attributes (op0, exp, 0);
2692           return op0;
2693         }
2694       /* Fall through...  */
2695
2696     case INTEGER_CST:
2697     case REAL_CST:
2698     case FIXED_CST:
2699       op0 = expand_expr (exp, NULL_RTX, mode, EXPAND_INITIALIZER);
2700       return op0;
2701
2702     case COMPLEX_CST:
2703       gcc_assert (COMPLEX_MODE_P (mode));
2704       op0 = expand_debug_expr (TREE_REALPART (exp));
2705       op1 = expand_debug_expr (TREE_IMAGPART (exp));
2706       return gen_rtx_CONCAT (mode, op0, op1);
2707
2708     case DEBUG_EXPR_DECL:
2709       op0 = DECL_RTL_IF_SET (exp);
2710
2711       if (op0)
2712         return op0;
2713
2714       op0 = gen_rtx_DEBUG_EXPR (mode);
2715       DEBUG_EXPR_TREE_DECL (op0) = exp;
2716       SET_DECL_RTL (exp, op0);
2717
2718       return op0;
2719
2720     case VAR_DECL:
2721     case PARM_DECL:
2722     case FUNCTION_DECL:
2723     case LABEL_DECL:
2724     case CONST_DECL:
2725     case RESULT_DECL:
2726       op0 = DECL_RTL_IF_SET (exp);
2727
2728       /* This decl was probably optimized away.  */
2729       if (!op0)
2730         {
2731           if (TREE_CODE (exp) != VAR_DECL
2732               || DECL_EXTERNAL (exp)
2733               || !TREE_STATIC (exp)
2734               || !DECL_NAME (exp)
2735               || DECL_HARD_REGISTER (exp)
2736               || DECL_IN_CONSTANT_POOL (exp)
2737               || mode == VOIDmode)
2738             return NULL;
2739
2740           op0 = make_decl_rtl_for_debug (exp);
2741           if (!MEM_P (op0)
2742               || GET_CODE (XEXP (op0, 0)) != SYMBOL_REF
2743               || SYMBOL_REF_DECL (XEXP (op0, 0)) != exp)
2744             return NULL;
2745         }
2746       else
2747         op0 = copy_rtx (op0);
2748
2749       if (GET_MODE (op0) == BLKmode
2750           /* If op0 is not BLKmode, but BLKmode is, adjust_mode
2751              below would ICE.  While it is likely a FE bug,
2752              try to be robust here.  See PR43166.  */
2753           || mode == BLKmode
2754           || (mode == VOIDmode && GET_MODE (op0) != VOIDmode))
2755         {
2756           gcc_assert (MEM_P (op0));
2757           op0 = adjust_address_nv (op0, mode, 0);
2758           return op0;
2759         }
2760
2761       /* Fall through.  */
2762
2763     adjust_mode:
2764     case PAREN_EXPR:
2765     case NOP_EXPR:
2766     case CONVERT_EXPR:
2767       {
2768         inner_mode = GET_MODE (op0);
2769
2770         if (mode == inner_mode)
2771           return op0;
2772
2773         if (inner_mode == VOIDmode)
2774           {
2775             if (TREE_CODE (exp) == SSA_NAME)
2776               inner_mode = TYPE_MODE (TREE_TYPE (exp));
2777             else
2778               inner_mode = TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)));
2779             if (mode == inner_mode)
2780               return op0;
2781           }
2782
2783         if (FLOAT_MODE_P (mode) && FLOAT_MODE_P (inner_mode))
2784           {
2785             if (GET_MODE_BITSIZE (mode) == GET_MODE_BITSIZE (inner_mode))
2786               op0 = simplify_gen_subreg (mode, op0, inner_mode, 0);
2787             else if (GET_MODE_BITSIZE (mode) < GET_MODE_BITSIZE (inner_mode))
2788               op0 = simplify_gen_unary (FLOAT_TRUNCATE, mode, op0, inner_mode);
2789             else
2790               op0 = simplify_gen_unary (FLOAT_EXTEND, mode, op0, inner_mode);
2791           }
2792         else if (FLOAT_MODE_P (mode))
2793           {
2794             gcc_assert (TREE_CODE (exp) != SSA_NAME);
2795             if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0))))
2796               op0 = simplify_gen_unary (UNSIGNED_FLOAT, mode, op0, inner_mode);
2797             else
2798               op0 = simplify_gen_unary (FLOAT, mode, op0, inner_mode);
2799           }
2800         else if (FLOAT_MODE_P (inner_mode))
2801           {
2802             if (unsignedp)
2803               op0 = simplify_gen_unary (UNSIGNED_FIX, mode, op0, inner_mode);
2804             else
2805               op0 = simplify_gen_unary (FIX, mode, op0, inner_mode);
2806           }
2807         else if (CONSTANT_P (op0)
2808                  || GET_MODE_PRECISION (mode) <= GET_MODE_PRECISION (inner_mode))
2809           op0 = simplify_gen_subreg (mode, op0, inner_mode,
2810                                      subreg_lowpart_offset (mode,
2811                                                             inner_mode));
2812         else if (TREE_CODE_CLASS (TREE_CODE (exp)) == tcc_unary
2813                  ? TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0)))
2814                  : unsignedp)
2815           op0 = simplify_gen_unary (ZERO_EXTEND, mode, op0, inner_mode);
2816         else
2817           op0 = simplify_gen_unary (SIGN_EXTEND, mode, op0, inner_mode);
2818
2819         return op0;
2820       }
2821
2822     case MEM_REF:
2823       if (!is_gimple_mem_ref_addr (TREE_OPERAND (exp, 0)))
2824         {
2825           tree newexp = fold_binary (MEM_REF, TREE_TYPE (exp),
2826                                      TREE_OPERAND (exp, 0),
2827                                      TREE_OPERAND (exp, 1));
2828           if (newexp)
2829             return expand_debug_expr (newexp);
2830         }
2831       /* FALLTHROUGH */
2832     case INDIRECT_REF:
2833       op0 = expand_debug_expr (TREE_OPERAND (exp, 0));
2834       if (!op0)
2835         return NULL;
2836
2837       if (TREE_CODE (exp) == MEM_REF)
2838         {
2839           if (GET_CODE (op0) == DEBUG_IMPLICIT_PTR
2840               || (GET_CODE (op0) == PLUS
2841                   && GET_CODE (XEXP (op0, 0)) == DEBUG_IMPLICIT_PTR))
2842             /* (mem (debug_implicit_ptr)) might confuse aliasing.
2843                Instead just use get_inner_reference.  */
2844             goto component_ref;
2845
2846           op1 = expand_debug_expr (TREE_OPERAND (exp, 1));
2847           if (!op1 || !CONST_INT_P (op1))
2848             return NULL;
2849
2850           op0 = plus_constant (op0, INTVAL (op1));
2851         }
2852
2853       if (POINTER_TYPE_P (TREE_TYPE (exp)))
2854         as = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp)));
2855       else
2856         as = ADDR_SPACE_GENERIC;
2857
2858       op0 = convert_debug_memory_address (targetm.addr_space.address_mode (as),
2859                                           op0, as);
2860       if (op0 == NULL_RTX)
2861         return NULL;
2862
2863       op0 = gen_rtx_MEM (mode, op0);
2864       set_mem_attributes (op0, exp, 0);
2865       if (TREE_CODE (exp) == MEM_REF
2866           && !is_gimple_mem_ref_addr (TREE_OPERAND (exp, 0)))
2867         set_mem_expr (op0, NULL_TREE);
2868       set_mem_addr_space (op0, as);
2869
2870       return op0;
2871
2872     case TARGET_MEM_REF:
2873       if (TREE_CODE (TMR_BASE (exp)) == ADDR_EXPR
2874           && !DECL_RTL_SET_P (TREE_OPERAND (TMR_BASE (exp), 0)))
2875         return NULL;
2876
2877       op0 = expand_debug_expr
2878             (tree_mem_ref_addr (build_pointer_type (TREE_TYPE (exp)), exp));
2879       if (!op0)
2880         return NULL;
2881
2882       if (POINTER_TYPE_P (TREE_TYPE (exp)))
2883         as = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp)));
2884       else
2885         as = ADDR_SPACE_GENERIC;
2886
2887       op0 = convert_debug_memory_address (targetm.addr_space.address_mode (as),
2888                                           op0, as);
2889       if (op0 == NULL_RTX)
2890         return NULL;
2891
2892       op0 = gen_rtx_MEM (mode, op0);
2893
2894       set_mem_attributes (op0, exp, 0);
2895       set_mem_addr_space (op0, as);
2896
2897       return op0;
2898
2899     component_ref:
2900     case ARRAY_REF:
2901     case ARRAY_RANGE_REF:
2902     case COMPONENT_REF:
2903     case BIT_FIELD_REF:
2904     case REALPART_EXPR:
2905     case IMAGPART_EXPR:
2906     case VIEW_CONVERT_EXPR:
2907       {
2908         enum machine_mode mode1;
2909         HOST_WIDE_INT bitsize, bitpos;
2910         tree offset;
2911         int volatilep = 0;
2912         tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset,
2913                                         &mode1, &unsignedp, &volatilep, false);
2914         rtx orig_op0;
2915
2916         if (bitsize == 0)
2917           return NULL;
2918
2919         orig_op0 = op0 = expand_debug_expr (tem);
2920
2921         if (!op0)
2922           return NULL;
2923
2924         if (offset)
2925           {
2926             enum machine_mode addrmode, offmode;
2927
2928             if (!MEM_P (op0))
2929               return NULL;
2930
2931             op0 = XEXP (op0, 0);
2932             addrmode = GET_MODE (op0);
2933             if (addrmode == VOIDmode)
2934               addrmode = Pmode;
2935
2936             op1 = expand_debug_expr (offset);
2937             if (!op1)
2938               return NULL;
2939
2940             offmode = GET_MODE (op1);
2941             if (offmode == VOIDmode)
2942               offmode = TYPE_MODE (TREE_TYPE (offset));
2943
2944             if (addrmode != offmode)
2945               op1 = simplify_gen_subreg (addrmode, op1, offmode,
2946                                          subreg_lowpart_offset (addrmode,
2947                                                                 offmode));
2948
2949             /* Don't use offset_address here, we don't need a
2950                recognizable address, and we don't want to generate
2951                code.  */
2952             op0 = gen_rtx_MEM (mode, simplify_gen_binary (PLUS, addrmode,
2953                                                           op0, op1));
2954           }
2955
2956         if (MEM_P (op0))
2957           {
2958             if (mode1 == VOIDmode)
2959               /* Bitfield.  */
2960               mode1 = smallest_mode_for_size (bitsize, MODE_INT);
2961             if (bitpos >= BITS_PER_UNIT)
2962               {
2963                 op0 = adjust_address_nv (op0, mode1, bitpos / BITS_PER_UNIT);
2964                 bitpos %= BITS_PER_UNIT;
2965               }
2966             else if (bitpos < 0)
2967               {
2968                 HOST_WIDE_INT units
2969                   = (-bitpos + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
2970                 op0 = adjust_address_nv (op0, mode1, units);
2971                 bitpos += units * BITS_PER_UNIT;
2972               }
2973             else if (bitpos == 0 && bitsize == GET_MODE_BITSIZE (mode))
2974               op0 = adjust_address_nv (op0, mode, 0);
2975             else if (GET_MODE (op0) != mode1)
2976               op0 = adjust_address_nv (op0, mode1, 0);
2977             else
2978               op0 = copy_rtx (op0);
2979             if (op0 == orig_op0)
2980               op0 = shallow_copy_rtx (op0);
2981             set_mem_attributes (op0, exp, 0);
2982           }
2983
2984         if (bitpos == 0 && mode == GET_MODE (op0))
2985           return op0;
2986
2987         if (bitpos < 0)
2988           return NULL;
2989
2990         if (GET_MODE (op0) == BLKmode)
2991           return NULL;
2992
2993         if ((bitpos % BITS_PER_UNIT) == 0
2994             && bitsize == GET_MODE_BITSIZE (mode1))
2995           {
2996             enum machine_mode opmode = GET_MODE (op0);
2997
2998             if (opmode == VOIDmode)
2999               opmode = TYPE_MODE (TREE_TYPE (tem));
3000
3001             /* This condition may hold if we're expanding the address
3002                right past the end of an array that turned out not to
3003                be addressable (i.e., the address was only computed in
3004                debug stmts).  The gen_subreg below would rightfully
3005                crash, and the address doesn't really exist, so just
3006                drop it.  */
3007             if (bitpos >= GET_MODE_BITSIZE (opmode))
3008               return NULL;
3009
3010             if ((bitpos % GET_MODE_BITSIZE (mode)) == 0)
3011               return simplify_gen_subreg (mode, op0, opmode,
3012                                           bitpos / BITS_PER_UNIT);
3013           }
3014
3015         return simplify_gen_ternary (SCALAR_INT_MODE_P (GET_MODE (op0))
3016                                      && TYPE_UNSIGNED (TREE_TYPE (exp))
3017                                      ? SIGN_EXTRACT
3018                                      : ZERO_EXTRACT, mode,
3019                                      GET_MODE (op0) != VOIDmode
3020                                      ? GET_MODE (op0)
3021                                      : TYPE_MODE (TREE_TYPE (tem)),
3022                                      op0, GEN_INT (bitsize), GEN_INT (bitpos));
3023       }
3024
3025     case ABS_EXPR:
3026       return simplify_gen_unary (ABS, mode, op0, mode);
3027
3028     case NEGATE_EXPR:
3029       return simplify_gen_unary (NEG, mode, op0, mode);
3030
3031     case BIT_NOT_EXPR:
3032       return simplify_gen_unary (NOT, mode, op0, mode);
3033
3034     case FLOAT_EXPR:
3035       return simplify_gen_unary (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp,
3036                                                                          0)))
3037                                  ? UNSIGNED_FLOAT : FLOAT, mode, op0,
3038                                  inner_mode);
3039
3040     case FIX_TRUNC_EXPR:
3041       return simplify_gen_unary (unsignedp ? UNSIGNED_FIX : FIX, mode, op0,
3042                                  inner_mode);
3043
3044     case POINTER_PLUS_EXPR:
3045       /* For the rare target where pointers are not the same size as
3046          size_t, we need to check for mis-matched modes and correct
3047          the addend.  */
3048       if (op0 && op1
3049           && GET_MODE (op0) != VOIDmode && GET_MODE (op1) != VOIDmode
3050           && GET_MODE (op0) != GET_MODE (op1))
3051         {
3052           if (GET_MODE_BITSIZE (GET_MODE (op0)) < GET_MODE_BITSIZE (GET_MODE (op1)))
3053             op1 = simplify_gen_unary (TRUNCATE, GET_MODE (op0), op1,
3054                                       GET_MODE (op1));
3055           else
3056             /* We always sign-extend, regardless of the signedness of
3057                the operand, because the operand is always unsigned
3058                here even if the original C expression is signed.  */
3059             op1 = simplify_gen_unary (SIGN_EXTEND, GET_MODE (op0), op1,
3060                                       GET_MODE (op1));
3061         }
3062       /* Fall through.  */
3063     case PLUS_EXPR:
3064       return simplify_gen_binary (PLUS, mode, op0, op1);
3065
3066     case MINUS_EXPR:
3067       return simplify_gen_binary (MINUS, mode, op0, op1);
3068
3069     case MULT_EXPR:
3070       return simplify_gen_binary (MULT, mode, op0, op1);
3071
3072     case RDIV_EXPR:
3073     case TRUNC_DIV_EXPR:
3074     case EXACT_DIV_EXPR:
3075       if (unsignedp)
3076         return simplify_gen_binary (UDIV, mode, op0, op1);
3077       else
3078         return simplify_gen_binary (DIV, mode, op0, op1);
3079
3080     case TRUNC_MOD_EXPR:
3081       return simplify_gen_binary (unsignedp ? UMOD : MOD, mode, op0, op1);
3082
3083     case FLOOR_DIV_EXPR:
3084       if (unsignedp)
3085         return simplify_gen_binary (UDIV, mode, op0, op1);
3086       else
3087         {
3088           rtx div = simplify_gen_binary (DIV, mode, op0, op1);
3089           rtx mod = simplify_gen_binary (MOD, mode, op0, op1);
3090           rtx adj = floor_sdiv_adjust (mode, mod, op1);
3091           return simplify_gen_binary (PLUS, mode, div, adj);
3092         }
3093
3094     case FLOOR_MOD_EXPR:
3095       if (unsignedp)
3096         return simplify_gen_binary (UMOD, mode, op0, op1);
3097       else
3098         {
3099           rtx mod = simplify_gen_binary (MOD, mode, op0, op1);
3100           rtx adj = floor_sdiv_adjust (mode, mod, op1);
3101           adj = simplify_gen_unary (NEG, mode,
3102                                     simplify_gen_binary (MULT, mode, adj, op1),
3103                                     mode);
3104           return simplify_gen_binary (PLUS, mode, mod, adj);
3105         }
3106
3107     case CEIL_DIV_EXPR:
3108       if (unsignedp)
3109         {
3110           rtx div = simplify_gen_binary (UDIV, mode, op0, op1);
3111           rtx mod = simplify_gen_binary (UMOD, mode, op0, op1);
3112           rtx adj = ceil_udiv_adjust (mode, mod, op1);
3113           return simplify_gen_binary (PLUS, mode, div, adj);
3114         }
3115       else
3116         {
3117           rtx div = simplify_gen_binary (DIV, mode, op0, op1);
3118           rtx mod = simplify_gen_binary (MOD, mode, op0, op1);
3119           rtx adj = ceil_sdiv_adjust (mode, mod, op1);
3120           return simplify_gen_binary (PLUS, mode, div, adj);
3121         }
3122
3123     case CEIL_MOD_EXPR:
3124       if (unsignedp)
3125         {
3126           rtx mod = simplify_gen_binary (UMOD, mode, op0, op1);
3127           rtx adj = ceil_udiv_adjust (mode, mod, op1);
3128           adj = simplify_gen_unary (NEG, mode,
3129                                     simplify_gen_binary (MULT, mode, adj, op1),
3130                                     mode);
3131           return simplify_gen_binary (PLUS, mode, mod, adj);
3132         }
3133       else
3134         {
3135           rtx mod = simplify_gen_binary (MOD, mode, op0, op1);
3136           rtx adj = ceil_sdiv_adjust (mode, mod, op1);
3137           adj = simplify_gen_unary (NEG, mode,
3138                                     simplify_gen_binary (MULT, mode, adj, op1),
3139                                     mode);
3140           return simplify_gen_binary (PLUS, mode, mod, adj);
3141         }
3142
3143     case ROUND_DIV_EXPR:
3144       if (unsignedp)
3145         {
3146           rtx div = simplify_gen_binary (UDIV, mode, op0, op1);
3147           rtx mod = simplify_gen_binary (UMOD, mode, op0, op1);
3148           rtx adj = round_udiv_adjust (mode, mod, op1);
3149           return simplify_gen_binary (PLUS, mode, div, adj);
3150         }
3151       else
3152         {
3153           rtx div = simplify_gen_binary (DIV, mode, op0, op1);
3154           rtx mod = simplify_gen_binary (MOD, mode, op0, op1);
3155           rtx adj = round_sdiv_adjust (mode, mod, op1);
3156           return simplify_gen_binary (PLUS, mode, div, adj);
3157         }
3158
3159     case ROUND_MOD_EXPR:
3160       if (unsignedp)
3161         {
3162           rtx mod = simplify_gen_binary (UMOD, mode, op0, op1);
3163           rtx adj = round_udiv_adjust (mode, mod, op1);
3164           adj = simplify_gen_unary (NEG, mode,
3165                                     simplify_gen_binary (MULT, mode, adj, op1),
3166                                     mode);
3167           return simplify_gen_binary (PLUS, mode, mod, adj);
3168         }
3169       else
3170         {
3171           rtx mod = simplify_gen_binary (MOD, mode, op0, op1);
3172           rtx adj = round_sdiv_adjust (mode, mod, op1);
3173           adj = simplify_gen_unary (NEG, mode,
3174                                     simplify_gen_binary (MULT, mode, adj, op1),
3175                                     mode);
3176           return simplify_gen_binary (PLUS, mode, mod, adj);
3177         }
3178
3179     case LSHIFT_EXPR:
3180       return simplify_gen_binary (ASHIFT, mode, op0, op1);
3181
3182     case RSHIFT_EXPR:
3183       if (unsignedp)
3184         return simplify_gen_binary (LSHIFTRT, mode, op0, op1);
3185       else
3186         return simplify_gen_binary (ASHIFTRT, mode, op0, op1);
3187
3188     case LROTATE_EXPR:
3189       return simplify_gen_binary (ROTATE, mode, op0, op1);
3190
3191     case RROTATE_EXPR:
3192       return simplify_gen_binary (ROTATERT, mode, op0, op1);
3193
3194     case MIN_EXPR:
3195       return simplify_gen_binary (unsignedp ? UMIN : SMIN, mode, op0, op1);
3196
3197     case MAX_EXPR:
3198       return simplify_gen_binary (unsignedp ? UMAX : SMAX, mode, op0, op1);
3199
3200     case BIT_AND_EXPR:
3201     case TRUTH_AND_EXPR:
3202       return simplify_gen_binary (AND, mode, op0, op1);
3203
3204     case BIT_IOR_EXPR:
3205     case TRUTH_OR_EXPR:
3206       return simplify_gen_binary (IOR, mode, op0, op1);
3207
3208     case BIT_XOR_EXPR:
3209     case TRUTH_XOR_EXPR:
3210       return simplify_gen_binary (XOR, mode, op0, op1);
3211
3212     case TRUTH_ANDIF_EXPR:
3213       return gen_rtx_IF_THEN_ELSE (mode, op0, op1, const0_rtx);
3214
3215     case TRUTH_ORIF_EXPR:
3216       return gen_rtx_IF_THEN_ELSE (mode, op0, const_true_rtx, op1);
3217
3218     case TRUTH_NOT_EXPR:
3219       return simplify_gen_relational (EQ, mode, inner_mode, op0, const0_rtx);
3220
3221     case LT_EXPR:
3222       return simplify_gen_relational (unsignedp ? LTU : LT, mode, inner_mode,
3223                                       op0, op1);
3224
3225     case LE_EXPR:
3226       return simplify_gen_relational (unsignedp ? LEU : LE, mode, inner_mode,
3227                                       op0, op1);
3228
3229     case GT_EXPR:
3230       return simplify_gen_relational (unsignedp ? GTU : GT, mode, inner_mode,
3231                                       op0, op1);
3232
3233     case GE_EXPR:
3234       return simplify_gen_relational (unsignedp ? GEU : GE, mode, inner_mode,
3235                                       op0, op1);
3236
3237     case EQ_EXPR:
3238       return simplify_gen_relational (EQ, mode, inner_mode, op0, op1);
3239
3240     case NE_EXPR:
3241       return simplify_gen_relational (NE, mode, inner_mode, op0, op1);
3242
3243     case UNORDERED_EXPR:
3244       return simplify_gen_relational (UNORDERED, mode, inner_mode, op0, op1);
3245
3246     case ORDERED_EXPR:
3247       return simplify_gen_relational (ORDERED, mode, inner_mode, op0, op1);
3248
3249     case UNLT_EXPR:
3250       return simplify_gen_relational (UNLT, mode, inner_mode, op0, op1);
3251
3252     case UNLE_EXPR:
3253       return simplify_gen_relational (UNLE, mode, inner_mode, op0, op1);
3254
3255     case UNGT_EXPR:
3256       return simplify_gen_relational (UNGT, mode, inner_mode, op0, op1);
3257
3258     case UNGE_EXPR:
3259       return simplify_gen_relational (UNGE, mode, inner_mode, op0, op1);
3260
3261     case UNEQ_EXPR:
3262       return simplify_gen_relational (UNEQ, mode, inner_mode, op0, op1);
3263
3264     case LTGT_EXPR:
3265       return simplify_gen_relational (LTGT, mode, inner_mode, op0, op1);
3266
3267     case COND_EXPR:
3268       return gen_rtx_IF_THEN_ELSE (mode, op0, op1, op2);
3269
3270     case COMPLEX_EXPR:
3271       gcc_assert (COMPLEX_MODE_P (mode));
3272       if (GET_MODE (op0) == VOIDmode)
3273         op0 = gen_rtx_CONST (GET_MODE_INNER (mode), op0);
3274       if (GET_MODE (op1) == VOIDmode)
3275         op1 = gen_rtx_CONST (GET_MODE_INNER (mode), op1);
3276       return gen_rtx_CONCAT (mode, op0, op1);
3277
3278     case CONJ_EXPR:
3279       if (GET_CODE (op0) == CONCAT)
3280         return gen_rtx_CONCAT (mode, XEXP (op0, 0),
3281                                simplify_gen_unary (NEG, GET_MODE_INNER (mode),
3282                                                    XEXP (op0, 1),
3283                                                    GET_MODE_INNER (mode)));
3284       else
3285         {
3286           enum machine_mode imode = GET_MODE_INNER (mode);
3287           rtx re, im;
3288
3289           if (MEM_P (op0))
3290             {
3291               re = adjust_address_nv (op0, imode, 0);
3292               im = adjust_address_nv (op0, imode, GET_MODE_SIZE (imode));
3293             }
3294           else
3295             {
3296               enum machine_mode ifmode = int_mode_for_mode (mode);
3297               enum machine_mode ihmode = int_mode_for_mode (imode);
3298               rtx halfsize;
3299               if (ifmode == BLKmode || ihmode == BLKmode)
3300                 return NULL;
3301               halfsize = GEN_INT (GET_MODE_BITSIZE (ihmode));
3302               re = op0;
3303               if (mode != ifmode)
3304                 re = gen_rtx_SUBREG (ifmode, re, 0);
3305               re = gen_rtx_ZERO_EXTRACT (ihmode, re, halfsize, const0_rtx);
3306               if (imode != ihmode)
3307                 re = gen_rtx_SUBREG (imode, re, 0);
3308               im = copy_rtx (op0);
3309               if (mode != ifmode)
3310                 im = gen_rtx_SUBREG (ifmode, im, 0);
3311               im = gen_rtx_ZERO_EXTRACT (ihmode, im, halfsize, halfsize);
3312               if (imode != ihmode)
3313                 im = gen_rtx_SUBREG (imode, im, 0);
3314             }
3315           im = gen_rtx_NEG (imode, im);
3316           return gen_rtx_CONCAT (mode, re, im);
3317         }
3318
3319     case ADDR_EXPR:
3320       op0 = expand_debug_expr (TREE_OPERAND (exp, 0));
3321       if (!op0 || !MEM_P (op0))
3322         {
3323           if ((TREE_CODE (TREE_OPERAND (exp, 0)) == VAR_DECL
3324                || TREE_CODE (TREE_OPERAND (exp, 0)) == PARM_DECL
3325                || TREE_CODE (TREE_OPERAND (exp, 0)) == RESULT_DECL)
3326               && (!TREE_ADDRESSABLE (TREE_OPERAND (exp, 0))
3327                   || target_for_debug_bind (TREE_OPERAND (exp, 0))))
3328             return gen_rtx_DEBUG_IMPLICIT_PTR (mode, TREE_OPERAND (exp, 0));
3329
3330           if (handled_component_p (TREE_OPERAND (exp, 0)))
3331             {
3332               HOST_WIDE_INT bitoffset, bitsize, maxsize;
3333               tree decl
3334                 = get_ref_base_and_extent (TREE_OPERAND (exp, 0),
3335                                            &bitoffset, &bitsize, &maxsize);
3336               if ((TREE_CODE (decl) == VAR_DECL
3337                    || TREE_CODE (decl) == PARM_DECL
3338                    || TREE_CODE (decl) == RESULT_DECL)
3339                   && (!TREE_ADDRESSABLE (decl)
3340                       || target_for_debug_bind (decl))
3341                   && (bitoffset % BITS_PER_UNIT) == 0
3342                   && bitsize > 0
3343                   && bitsize == maxsize)
3344                 return plus_constant (gen_rtx_DEBUG_IMPLICIT_PTR (mode, decl),
3345                                       bitoffset / BITS_PER_UNIT);
3346             }
3347
3348           return NULL;
3349         }
3350
3351       as = TYPE_ADDR_SPACE (TREE_TYPE (exp));
3352       op0 = convert_debug_memory_address (mode, XEXP (op0, 0), as);
3353
3354       return op0;
3355
3356     case VECTOR_CST:
3357       exp = build_constructor_from_list (TREE_TYPE (exp),
3358                                          TREE_VECTOR_CST_ELTS (exp));
3359       /* Fall through.  */
3360
3361     case CONSTRUCTOR:
3362       if (TREE_CLOBBER_P (exp))
3363         return NULL;
3364       else if (TREE_CODE (TREE_TYPE (exp)) == VECTOR_TYPE)
3365         {
3366           unsigned i;
3367           tree val;
3368
3369           op0 = gen_rtx_CONCATN
3370             (mode, rtvec_alloc (TYPE_VECTOR_SUBPARTS (TREE_TYPE (exp))));
3371
3372           FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (exp), i, val)
3373             {
3374               op1 = expand_debug_expr (val);
3375               if (!op1)
3376                 return NULL;
3377               XVECEXP (op0, 0, i) = op1;
3378             }
3379
3380           if (i < TYPE_VECTOR_SUBPARTS (TREE_TYPE (exp)))
3381             {
3382               op1 = expand_debug_expr
3383                 (build_zero_cst (TREE_TYPE (TREE_TYPE (exp))));
3384
3385               if (!op1)
3386                 return NULL;
3387
3388               for (; i < TYPE_VECTOR_SUBPARTS (TREE_TYPE (exp)); i++)
3389                 XVECEXP (op0, 0, i) = op1;
3390             }
3391
3392           return op0;
3393         }
3394       else
3395         goto flag_unsupported;
3396
3397     case CALL_EXPR:
3398       /* ??? Maybe handle some builtins?  */
3399       return NULL;
3400
3401     case SSA_NAME:
3402       {
3403         gimple g = get_gimple_for_ssa_name (exp);
3404         if (g)
3405           {
3406             op0 = expand_debug_expr (gimple_assign_rhs_to_tree (g));
3407             if (!op0)
3408               return NULL;
3409           }
3410         else
3411           {
3412             int part = var_to_partition (SA.map, exp);
3413
3414             if (part == NO_PARTITION)
3415               {
3416                 /* If this is a reference to an incoming value of parameter
3417                    that is never used in the code or where the incoming
3418                    value is never used in the code, use PARM_DECL's
3419                    DECL_RTL if set.  */
3420                 if (SSA_NAME_IS_DEFAULT_DEF (exp)
3421                     && TREE_CODE (SSA_NAME_VAR (exp)) == PARM_DECL)
3422                   {
3423                     op0 = expand_debug_parm_decl (SSA_NAME_VAR (exp));
3424                     if (op0)
3425                       goto adjust_mode;
3426                     op0 = expand_debug_expr (SSA_NAME_VAR (exp));
3427                     if (op0)
3428                       goto adjust_mode;
3429                   }
3430                 return NULL;
3431               }
3432
3433             gcc_assert (part >= 0 && (unsigned)part < SA.map->num_partitions);
3434
3435             op0 = copy_rtx (SA.partition_to_pseudo[part]);
3436           }
3437         goto adjust_mode;
3438       }
3439
3440     case ERROR_MARK:
3441       return NULL;
3442
3443     /* Vector stuff.  For most of the codes we don't have rtl codes.  */
3444     case REALIGN_LOAD_EXPR:
3445     case REDUC_MAX_EXPR:
3446     case REDUC_MIN_EXPR:
3447     case REDUC_PLUS_EXPR:
3448     case VEC_COND_EXPR:
3449     case VEC_LSHIFT_EXPR:
3450     case VEC_PACK_FIX_TRUNC_EXPR:
3451     case VEC_PACK_SAT_EXPR:
3452     case VEC_PACK_TRUNC_EXPR:
3453     case VEC_RSHIFT_EXPR:
3454     case VEC_UNPACK_FLOAT_HI_EXPR:
3455     case VEC_UNPACK_FLOAT_LO_EXPR:
3456     case VEC_UNPACK_HI_EXPR:
3457     case VEC_UNPACK_LO_EXPR:
3458     case VEC_WIDEN_MULT_HI_EXPR:
3459     case VEC_WIDEN_MULT_LO_EXPR:
3460     case VEC_WIDEN_LSHIFT_HI_EXPR:
3461     case VEC_WIDEN_LSHIFT_LO_EXPR:
3462     case VEC_PERM_EXPR:
3463       return NULL;
3464
3465    /* Misc codes.  */
3466     case ADDR_SPACE_CONVERT_EXPR:
3467     case FIXED_CONVERT_EXPR:
3468     case OBJ_TYPE_REF:
3469     case WITH_SIZE_EXPR:
3470       return NULL;
3471
3472     case DOT_PROD_EXPR:
3473       if (SCALAR_INT_MODE_P (GET_MODE (op0))
3474           && SCALAR_INT_MODE_P (mode))
3475         {
3476           op0
3477             = simplify_gen_unary (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp,
3478                                                                           0)))
3479                                   ? ZERO_EXTEND : SIGN_EXTEND, mode, op0,
3480                                   inner_mode);
3481           op1
3482             = simplify_gen_unary (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp,
3483                                                                           1)))
3484                                   ? ZERO_EXTEND : SIGN_EXTEND, mode, op1,
3485                                   inner_mode);
3486           op0 = simplify_gen_binary (MULT, mode, op0, op1);
3487           return simplify_gen_binary (PLUS, mode, op0, op2);
3488         }
3489       return NULL;
3490
3491     case WIDEN_MULT_EXPR:
3492     case WIDEN_MULT_PLUS_EXPR:
3493     case WIDEN_MULT_MINUS_EXPR:
3494       if (SCALAR_INT_MODE_P (GET_MODE (op0))
3495           && SCALAR_INT_MODE_P (mode))
3496         {
3497           inner_mode = GET_MODE (op0);
3498           if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0))))
3499             op0 = simplify_gen_unary (ZERO_EXTEND, mode, op0, inner_mode);
3500           else
3501             op0 = simplify_gen_unary (SIGN_EXTEND, mode, op0, inner_mode);
3502           if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 1))))
3503             op1 = simplify_gen_unary (ZERO_EXTEND, mode, op1, inner_mode);
3504           else
3505             op1 = simplify_gen_unary (SIGN_EXTEND, mode, op1, inner_mode);
3506           op0 = simplify_gen_binary (MULT, mode, op0, op1);
3507           if (TREE_CODE (exp) == WIDEN_MULT_EXPR)
3508             return op0;
3509           else if (TREE_CODE (exp) == WIDEN_MULT_PLUS_EXPR)
3510             return simplify_gen_binary (PLUS, mode, op0, op2);
3511           else
3512             return simplify_gen_binary (MINUS, mode, op2, op0);
3513         }
3514       return NULL;
3515
3516     case WIDEN_SUM_EXPR:
3517     case WIDEN_LSHIFT_EXPR:
3518       if (SCALAR_INT_MODE_P (GET_MODE (op0))
3519           && SCALAR_INT_MODE_P (mode))
3520         {
3521           op0
3522             = simplify_gen_unary (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp,
3523                                                                           0)))
3524                                   ? ZERO_EXTEND : SIGN_EXTEND, mode, op0,
3525                                   inner_mode);
3526           return simplify_gen_binary (TREE_CODE (exp) == WIDEN_LSHIFT_EXPR
3527                                       ? ASHIFT : PLUS, mode, op0, op1);
3528         }
3529       return NULL;
3530
3531     case FMA_EXPR:
3532       return simplify_gen_ternary (FMA, mode, inner_mode, op0, op1, op2);
3533
3534     default:
3535     flag_unsupported:
3536 #ifdef ENABLE_CHECKING
3537       debug_tree (exp);
3538       gcc_unreachable ();
3539 #else
3540       return NULL;
3541 #endif
3542     }
3543 }
3544
3545 /* Return an RTX equivalent to the source bind value of the tree expression
3546    EXP.  */
3547
3548 static rtx
3549 expand_debug_source_expr (tree exp)
3550 {
3551   rtx op0 = NULL_RTX;
3552   enum machine_mode mode = VOIDmode, inner_mode;
3553
3554   switch (TREE_CODE (exp))
3555     {
3556     case PARM_DECL:
3557       {
3558         mode = DECL_MODE (exp);
3559         op0 = expand_debug_parm_decl (exp);
3560         if (op0)
3561            break;
3562         /* See if this isn't an argument that has been completely
3563            optimized out.  */
3564         if (!DECL_RTL_SET_P (exp)
3565             && !DECL_INCOMING_RTL (exp)
3566             && DECL_ABSTRACT_ORIGIN (current_function_decl))
3567           {
3568             tree aexp = exp;
3569             if (DECL_ABSTRACT_ORIGIN (exp))
3570               aexp = DECL_ABSTRACT_ORIGIN (exp);
3571             if (DECL_CONTEXT (aexp)
3572                 == DECL_ABSTRACT_ORIGIN (current_function_decl))
3573               {
3574                 VEC(tree, gc) **debug_args;
3575                 unsigned int ix;
3576                 tree ddecl;
3577 #ifdef ENABLE_CHECKING
3578                 tree parm;
3579                 for (parm = DECL_ARGUMENTS (current_function_decl);
3580                      parm; parm = DECL_CHAIN (parm))
3581                   gcc_assert (parm != exp
3582                               && DECL_ABSTRACT_ORIGIN (parm) != aexp);
3583 #endif
3584                 debug_args = decl_debug_args_lookup (current_function_decl);
3585                 if (debug_args != NULL)
3586                   {
3587                     for (ix = 0; VEC_iterate (tree, *debug_args, ix, ddecl);
3588                          ix += 2)
3589                       if (ddecl == aexp)
3590                         return gen_rtx_DEBUG_PARAMETER_REF (mode, aexp);
3591                   }
3592               }
3593           }
3594         break;
3595       }
3596     default:
3597       break;
3598     }
3599
3600   if (op0 == NULL_RTX)
3601     return NULL_RTX;
3602
3603   inner_mode = GET_MODE (op0);
3604   if (mode == inner_mode)
3605     return op0;
3606
3607   if (FLOAT_MODE_P (mode) && FLOAT_MODE_P (inner_mode))
3608     {
3609       if (GET_MODE_BITSIZE (mode) == GET_MODE_BITSIZE (inner_mode))
3610         op0 = simplify_gen_subreg (mode, op0, inner_mode, 0);
3611       else if (GET_MODE_BITSIZE (mode) < GET_MODE_BITSIZE (inner_mode))
3612         op0 = simplify_gen_unary (FLOAT_TRUNCATE, mode, op0, inner_mode);
3613       else
3614         op0 = simplify_gen_unary (FLOAT_EXTEND, mode, op0, inner_mode);
3615     }
3616   else if (FLOAT_MODE_P (mode))
3617     gcc_unreachable ();
3618   else if (FLOAT_MODE_P (inner_mode))
3619     {
3620       if (TYPE_UNSIGNED (TREE_TYPE (exp)))
3621         op0 = simplify_gen_unary (UNSIGNED_FIX, mode, op0, inner_mode);
3622       else
3623         op0 = simplify_gen_unary (FIX, mode, op0, inner_mode);
3624     }
3625   else if (CONSTANT_P (op0)
3626            || GET_MODE_BITSIZE (mode) <= GET_MODE_BITSIZE (inner_mode))
3627     op0 = simplify_gen_subreg (mode, op0, inner_mode,
3628                                subreg_lowpart_offset (mode, inner_mode));
3629   else if (TYPE_UNSIGNED (TREE_TYPE (exp)))
3630     op0 = simplify_gen_unary (ZERO_EXTEND, mode, op0, inner_mode);
3631   else
3632     op0 = simplify_gen_unary (SIGN_EXTEND, mode, op0, inner_mode);
3633
3634   return op0;
3635 }
3636
3637 /* Expand the _LOCs in debug insns.  We run this after expanding all
3638    regular insns, so that any variables referenced in the function
3639    will have their DECL_RTLs set.  */
3640
3641 static void
3642 expand_debug_locations (void)
3643 {
3644   rtx insn;
3645   rtx last = get_last_insn ();
3646   int save_strict_alias = flag_strict_aliasing;
3647
3648   /* New alias sets while setting up memory attributes cause
3649      -fcompare-debug failures, even though it doesn't bring about any
3650      codegen changes.  */
3651   flag_strict_aliasing = 0;
3652
3653   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
3654     if (DEBUG_INSN_P (insn))
3655       {
3656         tree value = (tree)INSN_VAR_LOCATION_LOC (insn);
3657         rtx val;
3658         enum machine_mode mode;
3659
3660         if (value == NULL_TREE)
3661           val = NULL_RTX;
3662         else
3663           {
3664             if (INSN_VAR_LOCATION_STATUS (insn)
3665                 == VAR_INIT_STATUS_UNINITIALIZED)
3666               val = expand_debug_source_expr (value);
3667             else
3668               val = expand_debug_expr (value);
3669             gcc_assert (last == get_last_insn ());
3670           }
3671
3672         if (!val)
3673           val = gen_rtx_UNKNOWN_VAR_LOC ();
3674         else
3675           {
3676             mode = GET_MODE (INSN_VAR_LOCATION (insn));
3677
3678             gcc_assert (mode == GET_MODE (val)
3679                         || (GET_MODE (val) == VOIDmode
3680                             && (CONST_INT_P (val)
3681                                 || GET_CODE (val) == CONST_FIXED
3682                                 || GET_CODE (val) == CONST_DOUBLE
3683                                 || GET_CODE (val) == LABEL_REF)));
3684           }
3685
3686         INSN_VAR_LOCATION_LOC (insn) = val;
3687       }
3688
3689   flag_strict_aliasing = save_strict_alias;
3690 }
3691
3692 /* Expand basic block BB from GIMPLE trees to RTL.  */
3693
3694 static basic_block
3695 expand_gimple_basic_block (basic_block bb)
3696 {
3697   gimple_stmt_iterator gsi;
3698   gimple_seq stmts;
3699   gimple stmt = NULL;
3700   rtx note, last;
3701   edge e;
3702   edge_iterator ei;
3703   void **elt;
3704
3705   if (dump_file)
3706     fprintf (dump_file, "\n;; Generating RTL for gimple basic block %d\n",
3707              bb->index);
3708
3709   /* Note that since we are now transitioning from GIMPLE to RTL, we
3710      cannot use the gsi_*_bb() routines because they expect the basic
3711      block to be in GIMPLE, instead of RTL.  Therefore, we need to
3712      access the BB sequence directly.  */
3713   stmts = bb_seq (bb);
3714   bb->il.gimple = NULL;
3715   rtl_profile_for_bb (bb);
3716   init_rtl_bb_info (bb);
3717   bb->flags |= BB_RTL;
3718
3719   /* Remove the RETURN_EXPR if we may fall though to the exit
3720      instead.  */
3721   gsi = gsi_last (stmts);
3722   if (!gsi_end_p (gsi)
3723       && gimple_code (gsi_stmt (gsi)) == GIMPLE_RETURN)
3724     {
3725       gimple ret_stmt = gsi_stmt (gsi);
3726
3727       gcc_assert (single_succ_p (bb));
3728       gcc_assert (single_succ (bb) == EXIT_BLOCK_PTR);
3729
3730       if (bb->next_bb == EXIT_BLOCK_PTR
3731           && !gimple_return_retval (ret_stmt))
3732         {
3733           gsi_remove (&gsi, false);
3734           single_succ_edge (bb)->flags |= EDGE_FALLTHRU;
3735         }
3736     }
3737
3738   gsi = gsi_start (stmts);
3739   if (!gsi_end_p (gsi))
3740     {
3741       stmt = gsi_stmt (gsi);
3742       if (gimple_code (stmt) != GIMPLE_LABEL)
3743         stmt = NULL;
3744     }
3745
3746   elt = pointer_map_contains (lab_rtx_for_bb, bb);
3747
3748   if (stmt || elt)
3749     {
3750       last = get_last_insn ();
3751
3752       if (stmt)
3753         {
3754           expand_gimple_stmt (stmt);
3755           gsi_next (&gsi);
3756         }
3757
3758       if (elt)
3759         emit_label ((rtx) *elt);
3760
3761       /* Java emits line number notes in the top of labels.
3762          ??? Make this go away once line number notes are obsoleted.  */
3763       BB_HEAD (bb) = NEXT_INSN (last);
3764       if (NOTE_P (BB_HEAD (bb)))
3765         BB_HEAD (bb) = NEXT_INSN (BB_HEAD (bb));
3766       note = emit_note_after (NOTE_INSN_BASIC_BLOCK, BB_HEAD (bb));
3767
3768       maybe_dump_rtl_for_gimple_stmt (stmt, last);
3769     }
3770   else
3771     note = BB_HEAD (bb) = emit_note (NOTE_INSN_BASIC_BLOCK);
3772
3773   NOTE_BASIC_BLOCK (note) = bb;
3774
3775   for (; !gsi_end_p (gsi); gsi_next (&gsi))
3776     {
3777       basic_block new_bb;
3778
3779       stmt = gsi_stmt (gsi);
3780
3781       /* If this statement is a non-debug one, and we generate debug
3782          insns, then this one might be the last real use of a TERed
3783          SSA_NAME, but where there are still some debug uses further
3784          down.  Expanding the current SSA name in such further debug
3785          uses by their RHS might lead to wrong debug info, as coalescing
3786          might make the operands of such RHS be placed into the same
3787          pseudo as something else.  Like so:
3788            a_1 = a_0 + 1;   // Assume a_1 is TERed and a_0 is dead
3789            use(a_1);
3790            a_2 = ...
3791            #DEBUG ... => a_1
3792          As a_0 and a_2 don't overlap in lifetime, assume they are coalesced.
3793          If we now would expand a_1 by it's RHS (a_0 + 1) in the debug use,
3794          the write to a_2 would actually have clobbered the place which
3795          formerly held a_0.
3796
3797          So, instead of that, we recognize the situation, and generate
3798          debug temporaries at the last real use of TERed SSA names:
3799            a_1 = a_0 + 1;
3800            #DEBUG #D1 => a_1
3801            use(a_1);
3802            a_2 = ...
3803            #DEBUG ... => #D1
3804          */
3805       if (MAY_HAVE_DEBUG_INSNS
3806           && SA.values
3807           && !is_gimple_debug (stmt))
3808         {
3809           ssa_op_iter iter;
3810           tree op;
3811           gimple def;
3812
3813           location_t sloc = get_curr_insn_source_location ();
3814           tree sblock = get_curr_insn_block ();
3815
3816           /* Look for SSA names that have their last use here (TERed
3817              names always have only one real use).  */
3818           FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_USE)
3819             if ((def = get_gimple_for_ssa_name (op)))
3820               {
3821                 imm_use_iterator imm_iter;
3822                 use_operand_p use_p;
3823                 bool have_debug_uses = false;
3824
3825                 FOR_EACH_IMM_USE_FAST (use_p, imm_iter, op)
3826                   {
3827                     if (gimple_debug_bind_p (USE_STMT (use_p)))
3828                       {
3829                         have_debug_uses = true;
3830                         break;
3831                       }
3832                   }
3833
3834                 if (have_debug_uses)
3835                   {
3836                     /* OP is a TERed SSA name, with DEF it's defining
3837                        statement, and where OP is used in further debug
3838                        instructions.  Generate a debug temporary, and
3839                        replace all uses of OP in debug insns with that
3840                        temporary.  */
3841                     gimple debugstmt;
3842                     tree value = gimple_assign_rhs_to_tree (def);
3843                     tree vexpr = make_node (DEBUG_EXPR_DECL);
3844                     rtx val;
3845                     enum machine_mode mode;
3846
3847                     set_curr_insn_source_location (gimple_location (def));
3848                     set_curr_insn_block (gimple_block (def));
3849
3850                     DECL_ARTIFICIAL (vexpr) = 1;
3851                     TREE_TYPE (vexpr) = TREE_TYPE (value);
3852                     if (DECL_P (value))
3853                       mode = DECL_MODE (value);
3854                     else
3855                       mode = TYPE_MODE (TREE_TYPE (value));
3856                     DECL_MODE (vexpr) = mode;
3857
3858                     val = gen_rtx_VAR_LOCATION
3859                         (mode, vexpr, (rtx)value, VAR_INIT_STATUS_INITIALIZED);
3860
3861                     emit_debug_insn (val);
3862
3863                     FOR_EACH_IMM_USE_STMT (debugstmt, imm_iter, op)
3864                       {
3865                         if (!gimple_debug_bind_p (debugstmt))
3866                           continue;
3867
3868                         FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter)
3869                           SET_USE (use_p, vexpr);
3870
3871                         update_stmt (debugstmt);
3872                       }
3873                   }
3874               }
3875           set_curr_insn_source_location (sloc);
3876           set_curr_insn_block (sblock);
3877         }
3878
3879       currently_expanding_gimple_stmt = stmt;
3880
3881       /* Expand this statement, then evaluate the resulting RTL and
3882          fixup the CFG accordingly.  */
3883       if (gimple_code (stmt) == GIMPLE_COND)
3884         {
3885           new_bb = expand_gimple_cond (bb, stmt);
3886           if (new_bb)
3887             return new_bb;
3888         }
3889       else if (gimple_debug_bind_p (stmt))
3890         {
3891           location_t sloc = get_curr_insn_source_location ();
3892           tree sblock = get_curr_insn_block ();
3893           gimple_stmt_iterator nsi = gsi;
3894
3895           for (;;)
3896             {
3897               tree var = gimple_debug_bind_get_var (stmt);
3898               tree value;
3899               rtx val;
3900               enum machine_mode mode;
3901
3902               if (TREE_CODE (var) != DEBUG_EXPR_DECL
3903                   && TREE_CODE (var) != LABEL_DECL
3904                   && !target_for_debug_bind (var))
3905                 goto delink_debug_stmt;
3906
3907               if (gimple_debug_bind_has_value_p (stmt))
3908                 value = gimple_debug_bind_get_value (stmt);
3909               else
3910                 value = NULL_TREE;
3911
3912               last = get_last_insn ();
3913
3914               set_curr_insn_source_location (gimple_location (stmt));
3915               set_curr_insn_block (gimple_block (stmt));
3916
3917               if (DECL_P (var))
3918                 mode = DECL_MODE (var);
3919               else
3920                 mode = TYPE_MODE (TREE_TYPE (var));
3921
3922               val = gen_rtx_VAR_LOCATION
3923                 (mode, var, (rtx)value, VAR_INIT_STATUS_INITIALIZED);
3924
3925               emit_debug_insn (val);
3926
3927               if (dump_file && (dump_flags & TDF_DETAILS))
3928                 {
3929                   /* We can't dump the insn with a TREE where an RTX
3930                      is expected.  */
3931                   PAT_VAR_LOCATION_LOC (val) = const0_rtx;
3932                   maybe_dump_rtl_for_gimple_stmt (stmt, last);
3933                   PAT_VAR_LOCATION_LOC (val) = (rtx)value;
3934                 }
3935
3936             delink_debug_stmt:
3937               /* In order not to generate too many debug temporaries,
3938                  we delink all uses of debug statements we already expanded.
3939                  Therefore debug statements between definition and real
3940                  use of TERed SSA names will continue to use the SSA name,
3941                  and not be replaced with debug temps.  */
3942               delink_stmt_imm_use (stmt);
3943
3944               gsi = nsi;
3945               gsi_next (&nsi);
3946               if (gsi_end_p (nsi))
3947                 break;
3948               stmt = gsi_stmt (nsi);
3949               if (!gimple_debug_bind_p (stmt))
3950                 break;
3951             }
3952
3953           set_curr_insn_source_location (sloc);
3954           set_curr_insn_block (sblock);
3955         }
3956       else if (gimple_debug_source_bind_p (stmt))
3957         {
3958           location_t sloc = get_curr_insn_source_location ();
3959           tree sblock = get_curr_insn_block ();
3960           tree var = gimple_debug_source_bind_get_var (stmt);
3961           tree value = gimple_debug_source_bind_get_value (stmt);
3962           rtx val;
3963           enum machine_mode mode;
3964
3965           last = get_last_insn ();
3966
3967           set_curr_insn_source_location (gimple_location (stmt));
3968           set_curr_insn_block (gimple_block (stmt));
3969
3970           mode = DECL_MODE (var);
3971
3972           val = gen_rtx_VAR_LOCATION (mode, var, (rtx)value,
3973                                       VAR_INIT_STATUS_UNINITIALIZED);
3974
3975           emit_debug_insn (val);
3976
3977           if (dump_file && (dump_flags & TDF_DETAILS))
3978             {
3979               /* We can't dump the insn with a TREE where an RTX
3980                  is expected.  */
3981               PAT_VAR_LOCATION_LOC (val) = const0_rtx;
3982               maybe_dump_rtl_for_gimple_stmt (stmt, last);
3983               PAT_VAR_LOCATION_LOC (val) = (rtx)value;
3984             }
3985
3986           set_curr_insn_source_location (sloc);
3987           set_curr_insn_block (sblock);
3988         }
3989       else
3990         {
3991           if (is_gimple_call (stmt) && gimple_call_tail_p (stmt))
3992             {
3993               bool can_fallthru;
3994               new_bb = expand_gimple_tailcall (bb, stmt, &can_fallthru);
3995               if (new_bb)
3996                 {
3997                   if (can_fallthru)
3998                     bb = new_bb;
3999                   else
4000                     return new_bb;
4001                 }
4002             }
4003           else
4004             {
4005               def_operand_p def_p;
4006               def_p = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_DEF);
4007
4008               if (def_p != NULL)
4009                 {
4010                   /* Ignore this stmt if it is in the list of
4011                      replaceable expressions.  */
4012                   if (SA.values
4013                       && bitmap_bit_p (SA.values,
4014                                        SSA_NAME_VERSION (DEF_FROM_PTR (def_p))))
4015                     continue;
4016                 }
4017               last = expand_gimple_stmt (stmt);
4018               maybe_dump_rtl_for_gimple_stmt (stmt, last);
4019             }
4020         }
4021     }
4022
4023   currently_expanding_gimple_stmt = NULL;
4024
4025   /* Expand implicit goto and convert goto_locus.  */
4026   FOR_EACH_EDGE (e, ei, bb->succs)
4027     {
4028       if (e->goto_locus && e->goto_block)
4029         {
4030           set_curr_insn_source_location (e->goto_locus);
4031           set_curr_insn_block (e->goto_block);
4032           e->goto_locus = curr_insn_locator ();
4033         }
4034       e->goto_block = NULL;
4035       if ((e->flags & EDGE_FALLTHRU) && e->dest != bb->next_bb)
4036         {
4037           emit_jump (label_rtx_for_bb (e->dest));
4038           e->flags &= ~EDGE_FALLTHRU;
4039         }
4040     }
4041
4042   /* Expanded RTL can create a jump in the last instruction of block.
4043      This later might be assumed to be a jump to successor and break edge insertion.
4044      We need to insert dummy move to prevent this. PR41440. */
4045   if (single_succ_p (bb)
4046       && (single_succ_edge (bb)->flags & EDGE_FALLTHRU)
4047       && (last = get_last_insn ())
4048       && JUMP_P (last))
4049     {
4050       rtx dummy = gen_reg_rtx (SImode);
4051       emit_insn_after_noloc (gen_move_insn (dummy, dummy), last, NULL);
4052     }
4053
4054   do_pending_stack_adjust ();
4055
4056   /* Find the block tail.  The last insn in the block is the insn
4057      before a barrier and/or table jump insn.  */
4058   last = get_last_insn ();
4059   if (BARRIER_P (last))
4060     last = PREV_INSN (last);
4061   if (JUMP_TABLE_DATA_P (last))
4062     last = PREV_INSN (PREV_INSN (last));
4063   BB_END (bb) = last;
4064
4065   update_bb_for_insn (bb);
4066
4067   return bb;
4068 }
4069
4070
4071 /* Create a basic block for initialization code.  */
4072
4073 static basic_block
4074 construct_init_block (void)
4075 {
4076   basic_block init_block, first_block;
4077   edge e = NULL;
4078   int flags;
4079
4080   /* Multiple entry points not supported yet.  */
4081   gcc_assert (EDGE_COUNT (ENTRY_BLOCK_PTR->succs) == 1);
4082   init_rtl_bb_info (ENTRY_BLOCK_PTR);
4083   init_rtl_bb_info (EXIT_BLOCK_PTR);
4084   ENTRY_BLOCK_PTR->flags |= BB_RTL;
4085   EXIT_BLOCK_PTR->flags |= BB_RTL;
4086
4087   e = EDGE_SUCC (ENTRY_BLOCK_PTR, 0);
4088
4089   /* When entry edge points to first basic block, we don't need jump,
4090      otherwise we have to jump into proper target.  */
4091   if (e && e->dest != ENTRY_BLOCK_PTR->next_bb)
4092     {
4093       tree label = gimple_block_label (e->dest);
4094
4095       emit_jump (label_rtx (label));
4096       flags = 0;
4097     }
4098   else
4099     flags = EDGE_FALLTHRU;
4100
4101   init_block = create_basic_block (NEXT_INSN (get_insns ()),
4102                                    get_last_insn (),
4103                                    ENTRY_BLOCK_PTR);
4104   init_block->frequency = ENTRY_BLOCK_PTR->frequency;
4105   init_block->count = ENTRY_BLOCK_PTR->count;
4106   if (e)
4107     {
4108       first_block = e->dest;
4109       redirect_edge_succ (e, init_block);
4110       e = make_edge (init_block, first_block, flags);
4111     }
4112   else
4113     e = make_edge (init_block, EXIT_BLOCK_PTR, EDGE_FALLTHRU);
4114   e->probability = REG_BR_PROB_BASE;
4115   e->count = ENTRY_BLOCK_PTR->count;
4116
4117   update_bb_for_insn (init_block);
4118   return init_block;
4119 }
4120
4121 /* For each lexical block, set BLOCK_NUMBER to the depth at which it is
4122    found in the block tree.  */
4123
4124 static void
4125 set_block_levels (tree block, int level)
4126 {
4127   while (block)
4128     {
4129       BLOCK_NUMBER (block) = level;
4130       set_block_levels (BLOCK_SUBBLOCKS (block), level + 1);
4131       block = BLOCK_CHAIN (block);
4132     }
4133 }
4134
4135 /* Create a block containing landing pads and similar stuff.  */
4136
4137 static void
4138 construct_exit_block (void)
4139 {
4140   rtx head = get_last_insn ();
4141   rtx end;
4142   basic_block exit_block;
4143   edge e, e2;
4144   unsigned ix;
4145   edge_iterator ei;
4146   rtx orig_end = BB_END (EXIT_BLOCK_PTR->prev_bb);
4147
4148   rtl_profile_for_bb (EXIT_BLOCK_PTR);
4149
4150   /* Make sure the locus is set to the end of the function, so that
4151      epilogue line numbers and warnings are set properly.  */
4152   if (cfun->function_end_locus != UNKNOWN_LOCATION)
4153     input_location = cfun->function_end_locus;
4154
4155   /* The following insns belong to the top scope.  */
4156   set_curr_insn_block (DECL_INITIAL (current_function_decl));
4157
4158   /* Generate rtl for function exit.  */
4159   expand_function_end ();
4160
4161   end = get_last_insn ();
4162   if (head == end)
4163     return;
4164   /* While emitting the function end we could move end of the last basic block.
4165    */
4166   BB_END (EXIT_BLOCK_PTR->prev_bb) = orig_end;
4167   while (NEXT_INSN (head) && NOTE_P (NEXT_INSN (head)))
4168     head = NEXT_INSN (head);
4169   exit_block = create_basic_block (NEXT_INSN (head), end,
4170                                    EXIT_BLOCK_PTR->prev_bb);
4171   exit_block->frequency = EXIT_BLOCK_PTR->frequency;
4172   exit_block->count = EXIT_BLOCK_PTR->count;
4173
4174   ix = 0;
4175   while (ix < EDGE_COUNT (EXIT_BLOCK_PTR->preds))
4176     {
4177       e = EDGE_PRED (EXIT_BLOCK_PTR, ix);
4178       if (!(e->flags & EDGE_ABNORMAL))
4179         redirect_edge_succ (e, exit_block);
4180       else
4181         ix++;
4182     }
4183
4184   e = make_edge (exit_block, EXIT_BLOCK_PTR, EDGE_FALLTHRU);
4185   e->probability = REG_BR_PROB_BASE;
4186   e->count = EXIT_BLOCK_PTR->count;
4187   FOR_EACH_EDGE (e2, ei, EXIT_BLOCK_PTR->preds)
4188     if (e2 != e)
4189       {
4190         e->count -= e2->count;
4191         exit_block->count -= e2->count;
4192         exit_block->frequency -= EDGE_FREQUENCY (e2);
4193       }
4194   if (e->count < 0)
4195     e->count = 0;
4196   if (exit_block->count < 0)
4197     exit_block->count = 0;
4198   if (exit_block->frequency < 0)
4199     exit_block->frequency = 0;
4200   update_bb_for_insn (exit_block);
4201 }
4202
4203 /* Helper function for discover_nonconstant_array_refs.
4204    Look for ARRAY_REF nodes with non-constant indexes and mark them
4205    addressable.  */
4206
4207 static tree
4208 discover_nonconstant_array_refs_r (tree * tp, int *walk_subtrees,
4209                                    void *data ATTRIBUTE_UNUSED)
4210 {
4211   tree t = *tp;
4212
4213   if (IS_TYPE_OR_DECL_P (t))
4214     *walk_subtrees = 0;
4215   else if (TREE_CODE (t) == ARRAY_REF || TREE_CODE (t) == ARRAY_RANGE_REF)
4216     {
4217       while (((TREE_CODE (t) == ARRAY_REF || TREE_CODE (t) == ARRAY_RANGE_REF)
4218               && is_gimple_min_invariant (TREE_OPERAND (t, 1))
4219               && (!TREE_OPERAND (t, 2)
4220                   || is_gimple_min_invariant (TREE_OPERAND (t, 2))))
4221              || (TREE_CODE (t) == COMPONENT_REF
4222                  && (!TREE_OPERAND (t,2)
4223                      || is_gimple_min_invariant (TREE_OPERAND (t, 2))))
4224              || TREE_CODE (t) == BIT_FIELD_REF
4225              || TREE_CODE (t) == REALPART_EXPR
4226              || TREE_CODE (t) == IMAGPART_EXPR
4227              || TREE_CODE (t) == VIEW_CONVERT_EXPR
4228              || CONVERT_EXPR_P (t))
4229         t = TREE_OPERAND (t, 0);
4230
4231       if (TREE_CODE (t) == ARRAY_REF || TREE_CODE (t) == ARRAY_RANGE_REF)
4232         {
4233           t = get_base_address (t);
4234           if (t && DECL_P (t)
4235               && DECL_MODE (t) != BLKmode)
4236             TREE_ADDRESSABLE (t) = 1;
4237         }
4238
4239       *walk_subtrees = 0;
4240     }
4241
4242   return NULL_TREE;
4243 }
4244
4245 /* RTL expansion is not able to compile array references with variable
4246    offsets for arrays stored in single register.  Discover such
4247    expressions and mark variables as addressable to avoid this
4248    scenario.  */
4249
4250 static void
4251 discover_nonconstant_array_refs (void)
4252 {
4253   basic_block bb;
4254   gimple_stmt_iterator gsi;
4255
4256   FOR_EACH_BB (bb)
4257     for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
4258       {
4259         gimple stmt = gsi_stmt (gsi);
4260         if (!is_gimple_debug (stmt))
4261           walk_gimple_op (stmt, discover_nonconstant_array_refs_r, NULL);
4262       }
4263 }
4264
4265 /* This function sets crtl->args.internal_arg_pointer to a virtual
4266    register if DRAP is needed.  Local register allocator will replace
4267    virtual_incoming_args_rtx with the virtual register.  */
4268
4269 static void
4270 expand_stack_alignment (void)
4271 {
4272   rtx drap_rtx;
4273   unsigned int preferred_stack_boundary;
4274
4275   if (! SUPPORTS_STACK_ALIGNMENT)
4276     return;
4277
4278   if (cfun->calls_alloca
4279       || cfun->has_nonlocal_label
4280       || crtl->has_nonlocal_goto)
4281     crtl->need_drap = true;
4282
4283   /* Call update_stack_boundary here again to update incoming stack
4284      boundary.  It may set incoming stack alignment to a different
4285      value after RTL expansion.  TARGET_FUNCTION_OK_FOR_SIBCALL may
4286      use the minimum incoming stack alignment to check if it is OK
4287      to perform sibcall optimization since sibcall optimization will
4288      only align the outgoing stack to incoming stack boundary.  */
4289   if (targetm.calls.update_stack_boundary)
4290     targetm.calls.update_stack_boundary ();
4291
4292   /* The incoming stack frame has to be aligned at least at
4293      parm_stack_boundary.  */
4294   gcc_assert (crtl->parm_stack_boundary <= INCOMING_STACK_BOUNDARY);
4295
4296   /* Update crtl->stack_alignment_estimated and use it later to align
4297      stack.  We check PREFERRED_STACK_BOUNDARY if there may be non-call
4298      exceptions since callgraph doesn't collect incoming stack alignment
4299      in this case.  */
4300   if (cfun->can_throw_non_call_exceptions
4301       && PREFERRED_STACK_BOUNDARY > crtl->preferred_stack_boundary)
4302     preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
4303   else
4304     preferred_stack_boundary = crtl->preferred_stack_boundary;
4305   if (preferred_stack_boundary > crtl->stack_alignment_estimated)
4306     crtl->stack_alignment_estimated = preferred_stack_boundary;
4307   if (preferred_stack_boundary > crtl->stack_alignment_needed)
4308     crtl->stack_alignment_needed = preferred_stack_boundary;
4309
4310   gcc_assert (crtl->stack_alignment_needed
4311               <= crtl->stack_alignment_estimated);
4312
4313   crtl->stack_realign_needed
4314     = INCOMING_STACK_BOUNDARY < crtl->stack_alignment_estimated;
4315   crtl->stack_realign_tried = crtl->stack_realign_needed;
4316
4317   crtl->stack_realign_processed = true;
4318
4319   /* Target has to redefine TARGET_GET_DRAP_RTX to support stack
4320      alignment.  */
4321   gcc_assert (targetm.calls.get_drap_rtx != NULL);
4322   drap_rtx = targetm.calls.get_drap_rtx ();
4323
4324   /* stack_realign_drap and drap_rtx must match.  */
4325   gcc_assert ((stack_realign_drap != 0) == (drap_rtx != NULL));
4326
4327   /* Do nothing if NULL is returned, which means DRAP is not needed.  */
4328   if (NULL != drap_rtx)
4329     {
4330       crtl->args.internal_arg_pointer = drap_rtx;
4331
4332       /* Call fixup_tail_calls to clean up REG_EQUIV note if DRAP is
4333          needed. */
4334       fixup_tail_calls ();
4335     }
4336 }
4337
4338 /* Translate the intermediate representation contained in the CFG
4339    from GIMPLE trees to RTL.
4340
4341    We do conversion per basic block and preserve/update the tree CFG.
4342    This implies we have to do some magic as the CFG can simultaneously
4343    consist of basic blocks containing RTL and GIMPLE trees.  This can
4344    confuse the CFG hooks, so be careful to not manipulate CFG during
4345    the expansion.  */
4346
4347 static unsigned int
4348 gimple_expand_cfg (void)
4349 {
4350   basic_block bb, init_block;
4351   sbitmap blocks;
4352   edge_iterator ei;
4353   edge e;
4354   rtx var_seq;
4355   unsigned i;
4356
4357   timevar_push (TV_OUT_OF_SSA);
4358   rewrite_out_of_ssa (&SA);
4359   timevar_pop (TV_OUT_OF_SSA);
4360   SA.partition_to_pseudo = (rtx *)xcalloc (SA.map->num_partitions,
4361                                            sizeof (rtx));
4362
4363   /* Some backends want to know that we are expanding to RTL.  */
4364   currently_expanding_to_rtl = 1;
4365
4366   rtl_profile_for_bb (ENTRY_BLOCK_PTR);
4367
4368   insn_locators_alloc ();
4369   if (!DECL_IS_BUILTIN (current_function_decl))
4370     {
4371       /* Eventually, all FEs should explicitly set function_start_locus.  */
4372       if (cfun->function_start_locus == UNKNOWN_LOCATION)
4373        set_curr_insn_source_location
4374          (DECL_SOURCE_LOCATION (current_function_decl));
4375       else
4376        set_curr_insn_source_location (cfun->function_start_locus);
4377     }
4378   else
4379     set_curr_insn_source_location (UNKNOWN_LOCATION);
4380   set_curr_insn_block (DECL_INITIAL (current_function_decl));
4381   prologue_locator = curr_insn_locator ();
4382
4383 #ifdef INSN_SCHEDULING
4384   init_sched_attrs ();
4385 #endif
4386
4387   /* Make sure first insn is a note even if we don't want linenums.
4388      This makes sure the first insn will never be deleted.
4389      Also, final expects a note to appear there.  */
4390   emit_note (NOTE_INSN_DELETED);
4391
4392   /* Mark arrays indexed with non-constant indices with TREE_ADDRESSABLE.  */
4393   discover_nonconstant_array_refs ();
4394
4395   targetm.expand_to_rtl_hook ();
4396   crtl->stack_alignment_needed = STACK_BOUNDARY;
4397   crtl->max_used_stack_slot_alignment = STACK_BOUNDARY;
4398   crtl->stack_alignment_estimated = 0;
4399   crtl->preferred_stack_boundary = STACK_BOUNDARY;
4400   cfun->cfg->max_jumptable_ents = 0;
4401
4402   /* Resovle the function section.  Some targets, like ARM EABI rely on knowledge
4403      of the function section at exapnsion time to predict distance of calls.  */
4404   resolve_unique_section (current_function_decl, 0, flag_function_sections);
4405
4406   /* Expand the variables recorded during gimple lowering.  */
4407   timevar_push (TV_VAR_EXPAND);
4408   start_sequence ();
4409
4410   expand_used_vars ();
4411
4412   var_seq = get_insns ();
4413   end_sequence ();
4414   timevar_pop (TV_VAR_EXPAND);
4415
4416   /* Honor stack protection warnings.  */
4417   if (warn_stack_protect)
4418     {
4419       if (cfun->calls_alloca)
4420         warning (OPT_Wstack_protector,
4421                  "stack protector not protecting local variables: "
4422                  "variable length buffer");
4423       if (has_short_buffer && !crtl->stack_protect_guard)
4424         warning (OPT_Wstack_protector,
4425                  "stack protector not protecting function: "
4426                  "all local arrays are less than %d bytes long",
4427                  (int) PARAM_VALUE (PARAM_SSP_BUFFER_SIZE));
4428     }
4429
4430   /* Set up parameters and prepare for return, for the function.  */
4431   expand_function_start (current_function_decl);
4432
4433   /* If we emitted any instructions for setting up the variables,
4434      emit them before the FUNCTION_START note.  */
4435   if (var_seq)
4436     {
4437       emit_insn_before (var_seq, parm_birth_insn);
4438
4439       /* In expand_function_end we'll insert the alloca save/restore
4440          before parm_birth_insn.  We've just insertted an alloca call.
4441          Adjust the pointer to match.  */
4442       parm_birth_insn = var_seq;
4443     }
4444
4445   /* Now that we also have the parameter RTXs, copy them over to our
4446      partitions.  */
4447   for (i = 0; i < SA.map->num_partitions; i++)
4448     {
4449       tree var = SSA_NAME_VAR (partition_to_var (SA.map, i));
4450
4451       if (TREE_CODE (var) != VAR_DECL
4452           && !SA.partition_to_pseudo[i])
4453         SA.partition_to_pseudo[i] = DECL_RTL_IF_SET (var);
4454       gcc_assert (SA.partition_to_pseudo[i]);
4455
4456       /* If this decl was marked as living in multiple places, reset
4457          this now to NULL.  */
4458       if (DECL_RTL_IF_SET (var) == pc_rtx)
4459         SET_DECL_RTL (var, NULL);
4460
4461       /* Some RTL parts really want to look at DECL_RTL(x) when x
4462          was a decl marked in REG_ATTR or MEM_ATTR.  We could use
4463          SET_DECL_RTL here making this available, but that would mean
4464          to select one of the potentially many RTLs for one DECL.  Instead
4465          of doing that we simply reset the MEM_EXPR of the RTL in question,
4466          then nobody can get at it and hence nobody can call DECL_RTL on it.  */
4467       if (!DECL_RTL_SET_P (var))
4468         {
4469           if (MEM_P (SA.partition_to_pseudo[i]))
4470             set_mem_expr (SA.partition_to_pseudo[i], NULL);
4471         }
4472     }
4473
4474   /* If we have a class containing differently aligned pointers
4475      we need to merge those into the corresponding RTL pointer
4476      alignment.  */
4477   for (i = 1; i < num_ssa_names; i++)
4478     {
4479       tree name = ssa_name (i);
4480       int part;
4481       rtx r;
4482
4483       if (!name
4484           || !POINTER_TYPE_P (TREE_TYPE (name))
4485           /* We might have generated new SSA names in
4486              update_alias_info_with_stack_vars.  They will have a NULL
4487              defining statements, and won't be part of the partitioning,
4488              so ignore those.  */
4489           || !SSA_NAME_DEF_STMT (name))
4490         continue;
4491       part = var_to_partition (SA.map, name);
4492       if (part == NO_PARTITION)
4493         continue;
4494       r = SA.partition_to_pseudo[part];
4495       if (REG_P (r))
4496         mark_reg_pointer (r, get_pointer_alignment (name));
4497     }
4498
4499   /* If this function is `main', emit a call to `__main'
4500      to run global initializers, etc.  */
4501   if (DECL_NAME (current_function_decl)
4502       && MAIN_NAME_P (DECL_NAME (current_function_decl))
4503       && DECL_FILE_SCOPE_P (current_function_decl))
4504     expand_main_function ();
4505
4506   /* Initialize the stack_protect_guard field.  This must happen after the
4507      call to __main (if any) so that the external decl is initialized.  */
4508   if (crtl->stack_protect_guard)
4509     stack_protect_prologue ();
4510
4511   expand_phi_nodes (&SA);
4512
4513   /* Register rtl specific functions for cfg.  */
4514   rtl_register_cfg_hooks ();
4515
4516   init_block = construct_init_block ();
4517
4518   /* Clear EDGE_EXECUTABLE on the entry edge(s).  It is cleaned from the
4519      remaining edges later.  */
4520   FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR->succs)
4521     e->flags &= ~EDGE_EXECUTABLE;
4522
4523   lab_rtx_for_bb = pointer_map_create ();
4524   FOR_BB_BETWEEN (bb, init_block->next_bb, EXIT_BLOCK_PTR, next_bb)
4525     bb = expand_gimple_basic_block (bb);
4526
4527   if (MAY_HAVE_DEBUG_INSNS)
4528     expand_debug_locations ();
4529
4530   execute_free_datastructures ();
4531   timevar_push (TV_OUT_OF_SSA);
4532   finish_out_of_ssa (&SA);
4533   timevar_pop (TV_OUT_OF_SSA);
4534
4535   timevar_push (TV_POST_EXPAND);
4536   /* We are no longer in SSA form.  */
4537   cfun->gimple_df->in_ssa_p = false;
4538
4539   /* Expansion is used by optimization passes too, set maybe_hot_insn_p
4540      conservatively to true until they are all profile aware.  */
4541   pointer_map_destroy (lab_rtx_for_bb);
4542   free_histograms ();
4543
4544   construct_exit_block ();
4545   set_curr_insn_block (DECL_INITIAL (current_function_decl));
4546   insn_locators_finalize ();
4547
4548   /* Zap the tree EH table.  */
4549   set_eh_throw_stmt_table (cfun, NULL);
4550
4551   /* We need JUMP_LABEL be set in order to redirect jumps, and hence
4552      split edges which edge insertions might do.  */
4553   rebuild_jump_labels (get_insns ());
4554
4555   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
4556     {
4557       edge e;
4558       edge_iterator ei;
4559       for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); )
4560         {
4561           if (e->insns.r)
4562             {
4563               rebuild_jump_labels_chain (e->insns.r);
4564               /* Avoid putting insns before parm_birth_insn.  */
4565               if (e->src == ENTRY_BLOCK_PTR
4566                   && single_succ_p (ENTRY_BLOCK_PTR)
4567                   && parm_birth_insn)
4568                 {
4569                   rtx insns = e->insns.r;
4570                   e->insns.r = NULL_RTX;
4571                   emit_insn_after_noloc (insns, parm_birth_insn, e->dest);
4572                 }
4573               else
4574                 commit_one_edge_insertion (e);
4575             }
4576           else
4577             ei_next (&ei);
4578         }
4579     }
4580
4581   /* We're done expanding trees to RTL.  */
4582   currently_expanding_to_rtl = 0;
4583
4584   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR->next_bb, EXIT_BLOCK_PTR, next_bb)
4585     {
4586       edge e;
4587       edge_iterator ei;
4588       for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); )
4589         {
4590           /* Clear EDGE_EXECUTABLE.  This flag is never used in the backend.  */
4591           e->flags &= ~EDGE_EXECUTABLE;
4592
4593           /* At the moment not all abnormal edges match the RTL
4594              representation.  It is safe to remove them here as
4595              find_many_sub_basic_blocks will rediscover them.
4596              In the future we should get this fixed properly.  */
4597           if ((e->flags & EDGE_ABNORMAL)
4598               && !(e->flags & EDGE_SIBCALL))
4599             remove_edge (e);
4600           else
4601             ei_next (&ei);
4602         }
4603     }
4604
4605   blocks = sbitmap_alloc (last_basic_block);
4606   sbitmap_ones (blocks);
4607   find_many_sub_basic_blocks (blocks);
4608   sbitmap_free (blocks);
4609   purge_all_dead_edges ();
4610
4611   compact_blocks ();
4612
4613   expand_stack_alignment ();
4614
4615 #ifdef ENABLE_CHECKING
4616   verify_flow_info ();
4617 #endif
4618
4619   /* There's no need to defer outputting this function any more; we
4620      know we want to output it.  */
4621   DECL_DEFER_OUTPUT (current_function_decl) = 0;
4622
4623   /* Now that we're done expanding trees to RTL, we shouldn't have any
4624      more CONCATs anywhere.  */
4625   generating_concat_p = 0;
4626
4627   if (dump_file)
4628     {
4629       fprintf (dump_file,
4630                "\n\n;;\n;; Full RTL generated for this function:\n;;\n");
4631       /* And the pass manager will dump RTL for us.  */
4632     }
4633
4634   /* If we're emitting a nested function, make sure its parent gets
4635      emitted as well.  Doing otherwise confuses debug info.  */
4636   {
4637     tree parent;
4638     for (parent = DECL_CONTEXT (current_function_decl);
4639          parent != NULL_TREE;
4640          parent = get_containing_scope (parent))
4641       if (TREE_CODE (parent) == FUNCTION_DECL)
4642         TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (parent)) = 1;
4643   }
4644
4645   /* We are now committed to emitting code for this function.  Do any
4646      preparation, such as emitting abstract debug info for the inline
4647      before it gets mangled by optimization.  */
4648   if (cgraph_function_possibly_inlined_p (current_function_decl))
4649     (*debug_hooks->outlining_inline_function) (current_function_decl);
4650
4651   TREE_ASM_WRITTEN (current_function_decl) = 1;
4652
4653   /* After expanding, the return labels are no longer needed. */
4654   return_label = NULL;
4655   naked_return_label = NULL;
4656
4657   /* After expanding, the tm_restart map is no longer needed.  */
4658   if (cfun->gimple_df->tm_restart)
4659     {
4660       htab_delete (cfun->gimple_df->tm_restart);
4661       cfun->gimple_df->tm_restart = NULL;
4662     }
4663
4664   /* Tag the blocks with a depth number so that change_scope can find
4665      the common parent easily.  */
4666   set_block_levels (DECL_INITIAL (cfun->decl), 0);
4667   default_rtl_profile ();
4668   timevar_pop (TV_POST_EXPAND);
4669   return 0;
4670 }
4671
4672 struct rtl_opt_pass pass_expand =
4673 {
4674  {
4675   RTL_PASS,
4676   "expand",                             /* name */
4677   NULL,                                 /* gate */
4678   gimple_expand_cfg,                    /* execute */
4679   NULL,                                 /* sub */
4680   NULL,                                 /* next */
4681   0,                                    /* static_pass_number */
4682   TV_EXPAND,                            /* tv_id */
4683   PROP_ssa | PROP_gimple_leh | PROP_cfg
4684     | PROP_gimple_lcx,                  /* properties_required */
4685   PROP_rtl,                             /* properties_provided */
4686   PROP_ssa | PROP_trees,                /* properties_destroyed */
4687   TODO_verify_ssa | TODO_verify_flow
4688     | TODO_verify_stmts,                /* todo_flags_start */
4689   TODO_ggc_collect                      /* todo_flags_finish */
4690  }
4691 };