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