OSDN Git Service

Backported from mainline
[pf3gnuchains/gcc-fork.git] / gcc / gimple-low.c
1 /* GIMPLE lowering pass.  Converts High GIMPLE into Low GIMPLE.
2
3    Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4    Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 #include "tree.h"
27 #include "gimple.h"
28 #include "tree-iterator.h"
29 #include "tree-inline.h"
30 #include "tree-flow.h"
31 #include "flags.h"
32 #include "function.h"
33 #include "diagnostic-core.h"
34 #include "tree-pass.h"
35 #include "langhooks.h"
36
37 /* The differences between High GIMPLE and Low GIMPLE are the
38    following:
39
40    1- Lexical scopes are removed (i.e., GIMPLE_BIND disappears).
41
42    2- GIMPLE_TRY and GIMPLE_CATCH are converted to abnormal control
43       flow and exception regions are built as an on-the-side region
44       hierarchy (See tree-eh.c:lower_eh_constructs).
45
46    3- Multiple identical return statements are grouped into a single
47       return and gotos to the unique return site.  */
48
49 /* Match a return statement with a label.  During lowering, we identify
50    identical return statements and replace duplicates with a jump to
51    the corresponding label.  */
52 struct return_statements_t
53 {
54   tree label;
55   gimple stmt;
56 };
57 typedef struct return_statements_t return_statements_t;
58
59 DEF_VEC_O(return_statements_t);
60 DEF_VEC_ALLOC_O(return_statements_t,heap);
61
62 struct lower_data
63 {
64   /* Block the current statement belongs to.  */
65   tree block;
66
67   /* A vector of label and return statements to be moved to the end
68      of the function.  */
69   VEC(return_statements_t,heap) *return_statements;
70
71   /* True if the current statement cannot fall through.  */
72   bool cannot_fallthru;
73
74   /* True if the function calls __builtin_setjmp.  */
75   bool calls_builtin_setjmp;
76 };
77
78 static void lower_stmt (gimple_stmt_iterator *, struct lower_data *);
79 static void lower_gimple_bind (gimple_stmt_iterator *, struct lower_data *);
80 static void lower_gimple_return (gimple_stmt_iterator *, struct lower_data *);
81 static void lower_builtin_setjmp (gimple_stmt_iterator *);
82
83
84 /* Lower the body of current_function_decl from High GIMPLE into Low
85    GIMPLE.  */
86
87 static unsigned int
88 lower_function_body (void)
89 {
90   struct lower_data data;
91   gimple_seq body = gimple_body (current_function_decl);
92   gimple_seq lowered_body;
93   gimple_stmt_iterator i;
94   gimple bind;
95   tree t;
96   gimple x;
97
98   /* The gimplifier should've left a body of exactly one statement,
99      namely a GIMPLE_BIND.  */
100   gcc_assert (gimple_seq_first (body) == gimple_seq_last (body)
101               && gimple_code (gimple_seq_first_stmt (body)) == GIMPLE_BIND);
102
103   memset (&data, 0, sizeof (data));
104   data.block = DECL_INITIAL (current_function_decl);
105   BLOCK_SUBBLOCKS (data.block) = NULL_TREE;
106   BLOCK_CHAIN (data.block) = NULL_TREE;
107   TREE_ASM_WRITTEN (data.block) = 1;
108   data.return_statements = VEC_alloc (return_statements_t, heap, 8);
109
110   bind = gimple_seq_first_stmt (body);
111   lowered_body = NULL;
112   gimple_seq_add_stmt (&lowered_body, bind);
113   i = gsi_start (lowered_body);
114   lower_gimple_bind (&i, &data);
115
116   /* Once the old body has been lowered, replace it with the new
117      lowered sequence.  */
118   gimple_set_body (current_function_decl, lowered_body);
119
120   i = gsi_last (lowered_body);
121
122   /* If the function falls off the end, we need a null return statement.
123      If we've already got one in the return_statements vector, we don't
124      need to do anything special.  Otherwise build one by hand.  */
125   if (gimple_seq_may_fallthru (lowered_body)
126       && (VEC_empty (return_statements_t, data.return_statements)
127           || gimple_return_retval (VEC_last (return_statements_t,
128                                    data.return_statements)->stmt) != NULL))
129     {
130       x = gimple_build_return (NULL);
131       gimple_set_location (x, cfun->function_end_locus);
132       gimple_set_block (x, DECL_INITIAL (current_function_decl));
133       gsi_insert_after (&i, x, GSI_CONTINUE_LINKING);
134     }
135
136   /* If we lowered any return statements, emit the representative
137      at the end of the function.  */
138   while (!VEC_empty (return_statements_t, data.return_statements))
139     {
140       return_statements_t t;
141
142       /* Unfortunately, we can't use VEC_pop because it returns void for
143          objects.  */
144       t = *VEC_last (return_statements_t, data.return_statements);
145       VEC_truncate (return_statements_t,
146                     data.return_statements,
147                     VEC_length (return_statements_t,
148                                 data.return_statements) - 1);
149
150       x = gimple_build_label (t.label);
151       gsi_insert_after (&i, x, GSI_CONTINUE_LINKING);
152       gsi_insert_after (&i, t.stmt, GSI_CONTINUE_LINKING);
153     }
154
155   /* If the function calls __builtin_setjmp, we need to emit the computed
156      goto that will serve as the unique dispatcher for all the receivers.  */
157   if (data.calls_builtin_setjmp)
158     {
159       tree disp_label, disp_var, arg;
160
161       /* Build 'DISP_LABEL:' and insert.  */
162       disp_label = create_artificial_label (cfun->function_end_locus);
163       /* This mark will create forward edges from every call site.  */
164       DECL_NONLOCAL (disp_label) = 1;
165       cfun->has_nonlocal_label = 1;
166       x = gimple_build_label (disp_label);
167       gsi_insert_after (&i, x, GSI_CONTINUE_LINKING);
168
169       /* Build 'DISP_VAR = __builtin_setjmp_dispatcher (DISP_LABEL);'
170          and insert.  */
171       disp_var = create_tmp_var (ptr_type_node, "setjmpvar");
172       arg = build_addr (disp_label, current_function_decl);
173       t = builtin_decl_implicit (BUILT_IN_SETJMP_DISPATCHER);
174       x = gimple_build_call (t, 1, arg);
175       gimple_call_set_lhs (x, disp_var);
176
177       /* Build 'goto DISP_VAR;' and insert.  */
178       gsi_insert_after (&i, x, GSI_CONTINUE_LINKING);
179       x = gimple_build_goto (disp_var);
180       gsi_insert_after (&i, x, GSI_CONTINUE_LINKING);
181     }
182
183   gcc_assert (data.block == DECL_INITIAL (current_function_decl));
184   BLOCK_SUBBLOCKS (data.block)
185     = blocks_nreverse (BLOCK_SUBBLOCKS (data.block));
186
187   clear_block_marks (data.block);
188   VEC_free(return_statements_t, heap, data.return_statements);
189   return 0;
190 }
191
192 struct gimple_opt_pass pass_lower_cf =
193 {
194  {
195   GIMPLE_PASS,
196   "lower",                              /* name */
197   NULL,                                 /* gate */
198   lower_function_body,                  /* execute */
199   NULL,                                 /* sub */
200   NULL,                                 /* next */
201   0,                                    /* static_pass_number */
202   TV_NONE,                              /* tv_id */
203   PROP_gimple_any,                      /* properties_required */
204   PROP_gimple_lcf,                      /* properties_provided */
205   0,                                    /* properties_destroyed */
206   0,                                    /* todo_flags_start */
207   0                                     /* todo_flags_finish */
208  }
209 };
210
211
212
213 /* Verify if the type of the argument matches that of the function
214    declaration.  If we cannot verify this or there is a mismatch,
215    return false.  */
216
217 static bool
218 gimple_check_call_args (gimple stmt, tree fndecl)
219 {
220   tree parms, p;
221   unsigned int i, nargs;
222
223   /* Calls to internal functions always match their signature.  */
224   if (gimple_call_internal_p (stmt))
225     return true;
226
227   nargs = gimple_call_num_args (stmt);
228
229   /* Get argument types for verification.  */
230   if (fndecl)
231     parms = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
232   else
233     parms = TYPE_ARG_TYPES (gimple_call_fntype (stmt));
234
235   /* Verify if the type of the argument matches that of the function
236      declaration.  If we cannot verify this or there is a mismatch,
237      return false.  */
238   if (fndecl && DECL_ARGUMENTS (fndecl))
239     {
240       for (i = 0, p = DECL_ARGUMENTS (fndecl);
241            i < nargs;
242            i++, p = DECL_CHAIN (p))
243         {
244           /* We cannot distinguish a varargs function from the case
245              of excess parameters, still deferring the inlining decision
246              to the callee is possible.  */
247           if (!p)
248             break;
249           if (p == error_mark_node
250               || gimple_call_arg (stmt, i) == error_mark_node
251               || !fold_convertible_p (DECL_ARG_TYPE (p),
252                                       gimple_call_arg (stmt, i)))
253             return false;
254         }
255     }
256   else if (parms)
257     {
258       for (i = 0, p = parms; i < nargs; i++, p = TREE_CHAIN (p))
259         {
260           /* If this is a varargs function defer inlining decision
261              to callee.  */
262           if (!p)
263             break;
264           if (TREE_VALUE (p) == error_mark_node
265               || gimple_call_arg (stmt, i) == error_mark_node
266               || TREE_CODE (TREE_VALUE (p)) == VOID_TYPE
267               || !fold_convertible_p (TREE_VALUE (p),
268                                       gimple_call_arg (stmt, i)))
269             return false;
270         }
271     }
272   else
273     {
274       if (nargs != 0)
275         return false;
276     }
277   return true;
278 }
279
280 /* Verify if the type of the argument and lhs of CALL_STMT matches
281    that of the function declaration CALLEE.
282    If we cannot verify this or there is a mismatch, return false.  */
283
284 bool
285 gimple_check_call_matching_types (gimple call_stmt, tree callee)
286 {
287   tree lhs;
288
289   if ((DECL_RESULT (callee)
290        && !DECL_BY_REFERENCE (DECL_RESULT (callee))
291        && (lhs = gimple_call_lhs (call_stmt)) != NULL_TREE
292        && !useless_type_conversion_p (TREE_TYPE (DECL_RESULT (callee)),
293                                       TREE_TYPE (lhs))
294        && !fold_convertible_p (TREE_TYPE (DECL_RESULT (callee)), lhs))
295       || !gimple_check_call_args (call_stmt, callee))
296     return false;
297   return true;
298 }
299
300 /* Lower sequence SEQ.  Unlike gimplification the statements are not relowered
301    when they are changed -- if this has to be done, the lowering routine must
302    do it explicitly.  DATA is passed through the recursion.  */
303
304 static void
305 lower_sequence (gimple_seq seq, struct lower_data *data)
306 {
307   gimple_stmt_iterator gsi;
308
309   for (gsi = gsi_start (seq); !gsi_end_p (gsi); )
310     lower_stmt (&gsi, data);
311 }
312
313
314 /* Lower the OpenMP directive statement pointed by GSI.  DATA is
315    passed through the recursion.  */
316
317 static void
318 lower_omp_directive (gimple_stmt_iterator *gsi, struct lower_data *data)
319 {
320   gimple stmt;
321
322   stmt = gsi_stmt (*gsi);
323
324   lower_sequence (gimple_omp_body (stmt), data);
325   gsi_insert_before (gsi, stmt, GSI_SAME_STMT);
326   gsi_insert_seq_before (gsi, gimple_omp_body (stmt), GSI_SAME_STMT);
327   gimple_omp_set_body (stmt, NULL);
328   gsi_remove (gsi, false);
329 }
330
331
332 /* Lower statement GSI.  DATA is passed through the recursion.  We try to
333    track the fallthruness of statements and get rid of unreachable return
334    statements in order to prevent the EH lowering pass from adding useless
335    edges that can cause bogus warnings to be issued later; this guess need
336    not be 100% accurate, simply be conservative and reset cannot_fallthru
337    to false if we don't know.  */
338
339 static void
340 lower_stmt (gimple_stmt_iterator *gsi, struct lower_data *data)
341 {
342   gimple stmt = gsi_stmt (*gsi);
343
344   gimple_set_block (stmt, data->block);
345
346   switch (gimple_code (stmt))
347     {
348     case GIMPLE_BIND:
349       lower_gimple_bind (gsi, data);
350       /* Propagate fallthruness.  */
351       return;
352
353     case GIMPLE_COND:
354     case GIMPLE_GOTO:
355     case GIMPLE_SWITCH:
356       data->cannot_fallthru = true;
357       gsi_next (gsi);
358       return;
359
360     case GIMPLE_RETURN:
361       if (data->cannot_fallthru)
362         {
363           gsi_remove (gsi, false);
364           /* Propagate fallthruness.  */
365         }
366       else
367         {
368           lower_gimple_return (gsi, data);
369           data->cannot_fallthru = true;
370         }
371       return;
372
373     case GIMPLE_TRY:
374       {
375         bool try_cannot_fallthru;
376         lower_sequence (gimple_try_eval (stmt), data);
377         try_cannot_fallthru = data->cannot_fallthru;
378         data->cannot_fallthru = false;
379         lower_sequence (gimple_try_cleanup (stmt), data);
380         /* See gimple_stmt_may_fallthru for the rationale.  */
381         if (gimple_try_kind (stmt) == GIMPLE_TRY_FINALLY)
382           {
383             data->cannot_fallthru |= try_cannot_fallthru;
384             gsi_next (gsi);
385             return;
386           }
387       }
388       break;
389
390     case GIMPLE_CATCH:
391       data->cannot_fallthru = false;
392       lower_sequence (gimple_catch_handler (stmt), data);
393       break;
394
395     case GIMPLE_EH_FILTER:
396       data->cannot_fallthru = false;
397       lower_sequence (gimple_eh_filter_failure (stmt), data);
398       break;
399
400     case GIMPLE_EH_ELSE:
401       lower_sequence (gimple_eh_else_n_body (stmt), data);
402       lower_sequence (gimple_eh_else_e_body (stmt), data);
403       break;
404
405     case GIMPLE_NOP:
406     case GIMPLE_ASM:
407     case GIMPLE_ASSIGN:
408     case GIMPLE_PREDICT:
409     case GIMPLE_LABEL:
410     case GIMPLE_EH_MUST_NOT_THROW:
411     case GIMPLE_OMP_FOR:
412     case GIMPLE_OMP_SECTIONS:
413     case GIMPLE_OMP_SECTIONS_SWITCH:
414     case GIMPLE_OMP_SECTION:
415     case GIMPLE_OMP_SINGLE:
416     case GIMPLE_OMP_MASTER:
417     case GIMPLE_OMP_ORDERED:
418     case GIMPLE_OMP_CRITICAL:
419     case GIMPLE_OMP_RETURN:
420     case GIMPLE_OMP_ATOMIC_LOAD:
421     case GIMPLE_OMP_ATOMIC_STORE:
422     case GIMPLE_OMP_CONTINUE:
423       break;
424
425     case GIMPLE_CALL:
426       {
427         tree decl = gimple_call_fndecl (stmt);
428
429         if (decl
430             && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
431             && DECL_FUNCTION_CODE (decl) == BUILT_IN_SETJMP)
432           {
433             lower_builtin_setjmp (gsi);
434             data->cannot_fallthru = false;
435             data->calls_builtin_setjmp = true;
436             return;
437           }
438
439         if (decl && (flags_from_decl_or_type (decl) & ECF_NORETURN))
440           {
441             data->cannot_fallthru = true;
442             gsi_next (gsi);
443             return;
444           }
445       }
446       break;
447
448     case GIMPLE_OMP_PARALLEL:
449     case GIMPLE_OMP_TASK:
450       data->cannot_fallthru = false;
451       lower_omp_directive (gsi, data);
452       data->cannot_fallthru = false;
453       return;
454
455     case GIMPLE_TRANSACTION:
456       lower_sequence (gimple_transaction_body (stmt), data);
457       break;
458
459     default:
460       gcc_unreachable ();
461     }
462
463   data->cannot_fallthru = false;
464   gsi_next (gsi);
465 }
466
467 /* Lower a bind_expr TSI.  DATA is passed through the recursion.  */
468
469 static void
470 lower_gimple_bind (gimple_stmt_iterator *gsi, struct lower_data *data)
471 {
472   tree old_block = data->block;
473   gimple stmt = gsi_stmt (*gsi);
474   tree new_block = gimple_bind_block (stmt);
475
476   if (new_block)
477     {
478       if (new_block == old_block)
479         {
480           /* The outermost block of the original function may not be the
481              outermost statement chain of the gimplified function.  So we
482              may see the outermost block just inside the function.  */
483           gcc_assert (new_block == DECL_INITIAL (current_function_decl));
484           new_block = NULL;
485         }
486       else
487         {
488           /* We do not expect to handle duplicate blocks.  */
489           gcc_assert (!TREE_ASM_WRITTEN (new_block));
490           TREE_ASM_WRITTEN (new_block) = 1;
491
492           /* Block tree may get clobbered by inlining.  Normally this would
493              be fixed in rest_of_decl_compilation using block notes, but
494              since we are not going to emit them, it is up to us.  */
495           BLOCK_CHAIN (new_block) = BLOCK_SUBBLOCKS (old_block);
496           BLOCK_SUBBLOCKS (old_block) = new_block;
497           BLOCK_SUBBLOCKS (new_block) = NULL_TREE;
498           BLOCK_SUPERCONTEXT (new_block) = old_block;
499
500           data->block = new_block;
501         }
502     }
503
504   record_vars (gimple_bind_vars (stmt));
505   lower_sequence (gimple_bind_body (stmt), data);
506
507   if (new_block)
508     {
509       gcc_assert (data->block == new_block);
510
511       BLOCK_SUBBLOCKS (new_block)
512         = blocks_nreverse (BLOCK_SUBBLOCKS (new_block));
513       data->block = old_block;
514     }
515
516   /* The GIMPLE_BIND no longer carries any useful information -- kill it.  */
517   gsi_insert_seq_before (gsi, gimple_bind_body (stmt), GSI_SAME_STMT);
518   gsi_remove (gsi, false);
519 }
520
521 /* Try to determine whether a TRY_CATCH expression can fall through.
522    This is a subroutine of block_may_fallthru.  */
523
524 static bool
525 try_catch_may_fallthru (const_tree stmt)
526 {
527   tree_stmt_iterator i;
528
529   /* If the TRY block can fall through, the whole TRY_CATCH can
530      fall through.  */
531   if (block_may_fallthru (TREE_OPERAND (stmt, 0)))
532     return true;
533
534   i = tsi_start (TREE_OPERAND (stmt, 1));
535   switch (TREE_CODE (tsi_stmt (i)))
536     {
537     case CATCH_EXPR:
538       /* We expect to see a sequence of CATCH_EXPR trees, each with a
539          catch expression and a body.  The whole TRY_CATCH may fall
540          through iff any of the catch bodies falls through.  */
541       for (; !tsi_end_p (i); tsi_next (&i))
542         {
543           if (block_may_fallthru (CATCH_BODY (tsi_stmt (i))))
544             return true;
545         }
546       return false;
547
548     case EH_FILTER_EXPR:
549       /* The exception filter expression only matters if there is an
550          exception.  If the exception does not match EH_FILTER_TYPES,
551          we will execute EH_FILTER_FAILURE, and we will fall through
552          if that falls through.  If the exception does match
553          EH_FILTER_TYPES, the stack unwinder will continue up the
554          stack, so we will not fall through.  We don't know whether we
555          will throw an exception which matches EH_FILTER_TYPES or not,
556          so we just ignore EH_FILTER_TYPES and assume that we might
557          throw an exception which doesn't match.  */
558       return block_may_fallthru (EH_FILTER_FAILURE (tsi_stmt (i)));
559
560     default:
561       /* This case represents statements to be executed when an
562          exception occurs.  Those statements are implicitly followed
563          by a RESX statement to resume execution after the exception.
564          So in this case the TRY_CATCH never falls through.  */
565       return false;
566     }
567 }
568
569
570 /* Same as above, but for a GIMPLE_TRY_CATCH.  */
571
572 static bool
573 gimple_try_catch_may_fallthru (gimple stmt)
574 {
575   gimple_stmt_iterator i;
576
577   /* We don't handle GIMPLE_TRY_FINALLY.  */
578   gcc_assert (gimple_try_kind (stmt) == GIMPLE_TRY_CATCH);
579
580   /* If the TRY block can fall through, the whole TRY_CATCH can
581      fall through.  */
582   if (gimple_seq_may_fallthru (gimple_try_eval (stmt)))
583     return true;
584
585   i = gsi_start (gimple_try_cleanup (stmt));
586   switch (gimple_code (gsi_stmt (i)))
587     {
588     case GIMPLE_CATCH:
589       /* We expect to see a sequence of GIMPLE_CATCH stmts, each with a
590          catch expression and a body.  The whole try/catch may fall
591          through iff any of the catch bodies falls through.  */
592       for (; !gsi_end_p (i); gsi_next (&i))
593         {
594           if (gimple_seq_may_fallthru (gimple_catch_handler (gsi_stmt (i))))
595             return true;
596         }
597       return false;
598
599     case GIMPLE_EH_FILTER:
600       /* The exception filter expression only matters if there is an
601          exception.  If the exception does not match EH_FILTER_TYPES,
602          we will execute EH_FILTER_FAILURE, and we will fall through
603          if that falls through.  If the exception does match
604          EH_FILTER_TYPES, the stack unwinder will continue up the
605          stack, so we will not fall through.  We don't know whether we
606          will throw an exception which matches EH_FILTER_TYPES or not,
607          so we just ignore EH_FILTER_TYPES and assume that we might
608          throw an exception which doesn't match.  */
609       return gimple_seq_may_fallthru (gimple_eh_filter_failure (gsi_stmt (i)));
610
611     default:
612       /* This case represents statements to be executed when an
613          exception occurs.  Those statements are implicitly followed
614          by a GIMPLE_RESX to resume execution after the exception.  So
615          in this case the try/catch never falls through.  */
616       return false;
617     }
618 }
619
620
621 /* Try to determine if we can fall out of the bottom of BLOCK.  This guess
622    need not be 100% accurate; simply be conservative and return true if we
623    don't know.  This is used only to avoid stupidly generating extra code.
624    If we're wrong, we'll just delete the extra code later.  */
625
626 bool
627 block_may_fallthru (const_tree block)
628 {
629   /* This CONST_CAST is okay because expr_last returns its argument
630      unmodified and we assign it to a const_tree.  */
631   const_tree stmt = expr_last (CONST_CAST_TREE(block));
632
633   switch (stmt ? TREE_CODE (stmt) : ERROR_MARK)
634     {
635     case GOTO_EXPR:
636     case RETURN_EXPR:
637       /* Easy cases.  If the last statement of the block implies
638          control transfer, then we can't fall through.  */
639       return false;
640
641     case SWITCH_EXPR:
642       /* If SWITCH_LABELS is set, this is lowered, and represents a
643          branch to a selected label and hence can not fall through.
644          Otherwise SWITCH_BODY is set, and the switch can fall
645          through.  */
646       return SWITCH_LABELS (stmt) == NULL_TREE;
647
648     case COND_EXPR:
649       if (block_may_fallthru (COND_EXPR_THEN (stmt)))
650         return true;
651       return block_may_fallthru (COND_EXPR_ELSE (stmt));
652
653     case BIND_EXPR:
654       return block_may_fallthru (BIND_EXPR_BODY (stmt));
655
656     case TRY_CATCH_EXPR:
657       return try_catch_may_fallthru (stmt);
658
659     case TRY_FINALLY_EXPR:
660       /* The finally clause is always executed after the try clause,
661          so if it does not fall through, then the try-finally will not
662          fall through.  Otherwise, if the try clause does not fall
663          through, then when the finally clause falls through it will
664          resume execution wherever the try clause was going.  So the
665          whole try-finally will only fall through if both the try
666          clause and the finally clause fall through.  */
667       return (block_may_fallthru (TREE_OPERAND (stmt, 0))
668               && block_may_fallthru (TREE_OPERAND (stmt, 1)));
669
670     case MODIFY_EXPR:
671       if (TREE_CODE (TREE_OPERAND (stmt, 1)) == CALL_EXPR)
672         stmt = TREE_OPERAND (stmt, 1);
673       else
674         return true;
675       /* FALLTHRU */
676
677     case CALL_EXPR:
678       /* Functions that do not return do not fall through.  */
679       return (call_expr_flags (stmt) & ECF_NORETURN) == 0;
680
681     case CLEANUP_POINT_EXPR:
682       return block_may_fallthru (TREE_OPERAND (stmt, 0));
683
684     case TARGET_EXPR:
685       return block_may_fallthru (TREE_OPERAND (stmt, 1));
686
687     case ERROR_MARK:
688       return true;
689
690     default:
691       return lang_hooks.block_may_fallthru (stmt);
692     }
693 }
694
695
696 /* Try to determine if we can continue executing the statement
697    immediately following STMT.  This guess need not be 100% accurate;
698    simply be conservative and return true if we don't know.  This is
699    used only to avoid stupidly generating extra code. If we're wrong,
700    we'll just delete the extra code later.  */
701
702 bool
703 gimple_stmt_may_fallthru (gimple stmt)
704 {
705   if (!stmt)
706     return true;
707
708   switch (gimple_code (stmt))
709     {
710     case GIMPLE_GOTO:
711     case GIMPLE_RETURN:
712     case GIMPLE_RESX:
713       /* Easy cases.  If the last statement of the seq implies
714          control transfer, then we can't fall through.  */
715       return false;
716
717     case GIMPLE_SWITCH:
718       /* Switch has already been lowered and represents a branch
719          to a selected label and hence can't fall through.  */
720       return false;
721
722     case GIMPLE_COND:
723       /* GIMPLE_COND's are already lowered into a two-way branch.  They
724          can't fall through.  */
725       return false;
726
727     case GIMPLE_BIND:
728       return gimple_seq_may_fallthru (gimple_bind_body (stmt));
729
730     case GIMPLE_TRY:
731       if (gimple_try_kind (stmt) == GIMPLE_TRY_CATCH)
732         return gimple_try_catch_may_fallthru (stmt);
733
734       /* It must be a GIMPLE_TRY_FINALLY.  */
735
736       /* The finally clause is always executed after the try clause,
737          so if it does not fall through, then the try-finally will not
738          fall through.  Otherwise, if the try clause does not fall
739          through, then when the finally clause falls through it will
740          resume execution wherever the try clause was going.  So the
741          whole try-finally will only fall through if both the try
742          clause and the finally clause fall through.  */
743       return (gimple_seq_may_fallthru (gimple_try_eval (stmt))
744               && gimple_seq_may_fallthru (gimple_try_cleanup (stmt)));
745
746     case GIMPLE_EH_ELSE:
747       return (gimple_seq_may_fallthru (gimple_eh_else_n_body (stmt))
748               || gimple_seq_may_fallthru (gimple_eh_else_e_body (stmt)));
749
750     case GIMPLE_CALL:
751       /* Functions that do not return do not fall through.  */
752       return (gimple_call_flags (stmt) & ECF_NORETURN) == 0;
753
754     default:
755       return true;
756     }
757 }
758
759
760 /* Same as gimple_stmt_may_fallthru, but for the gimple sequence SEQ.  */
761
762 bool
763 gimple_seq_may_fallthru (gimple_seq seq)
764 {
765   return gimple_stmt_may_fallthru (gimple_seq_last_stmt (seq));
766 }
767
768
769 /* Lower a GIMPLE_RETURN GSI.  DATA is passed through the recursion.  */
770
771 static void
772 lower_gimple_return (gimple_stmt_iterator *gsi, struct lower_data *data)
773 {
774   gimple stmt = gsi_stmt (*gsi);
775   gimple t;
776   int i;
777   return_statements_t tmp_rs;
778
779   /* Match this up with an existing return statement that's been created.  */
780   for (i = VEC_length (return_statements_t, data->return_statements) - 1;
781        i >= 0; i--)
782     {
783       tmp_rs = *VEC_index (return_statements_t, data->return_statements, i);
784
785       if (gimple_return_retval (stmt) == gimple_return_retval (tmp_rs.stmt))
786         {
787           /* Remove the line number from the representative return statement.
788              It now fills in for many such returns.  Failure to remove this
789              will result in incorrect results for coverage analysis.  */
790           gimple_set_location (tmp_rs.stmt, UNKNOWN_LOCATION);
791
792           goto found;
793         }
794     }
795
796   /* Not found.  Create a new label and record the return statement.  */
797   tmp_rs.label = create_artificial_label (cfun->function_end_locus);
798   tmp_rs.stmt = stmt;
799   VEC_safe_push (return_statements_t, heap, data->return_statements, &tmp_rs);
800
801   /* Generate a goto statement and remove the return statement.  */
802  found:
803   /* When not optimizing, make sure user returns are preserved.  */
804   if (!optimize && gimple_has_location (stmt))
805     DECL_ARTIFICIAL (tmp_rs.label) = 0;
806   t = gimple_build_goto (tmp_rs.label);
807   gimple_set_location (t, gimple_location (stmt));
808   gimple_set_block (t, gimple_block (stmt));
809   gsi_insert_before (gsi, t, GSI_SAME_STMT);
810   gsi_remove (gsi, false);
811 }
812
813 /* Lower a __builtin_setjmp GSI.
814
815    __builtin_setjmp is passed a pointer to an array of five words (not
816    all will be used on all machines).  It operates similarly to the C
817    library function of the same name, but is more efficient.
818
819    It is lowered into 3 other builtins, namely __builtin_setjmp_setup,
820    __builtin_setjmp_dispatcher and __builtin_setjmp_receiver, but with
821    __builtin_setjmp_dispatcher shared among all the instances; that's
822    why it is only emitted at the end by lower_function_body.
823
824    After full lowering, the body of the function should look like:
825
826     {
827       void * setjmpvar.0;
828       int D.1844;
829       int D.2844;
830
831       [...]
832
833       __builtin_setjmp_setup (&buf, &<D1847>);
834       D.1844 = 0;
835       goto <D1846>;
836       <D1847>:;
837       __builtin_setjmp_receiver (&<D1847>);
838       D.1844 = 1;
839       <D1846>:;
840       if (D.1844 == 0) goto <D1848>; else goto <D1849>;
841
842       [...]
843
844       __builtin_setjmp_setup (&buf, &<D2847>);
845       D.2844 = 0;
846       goto <D2846>;
847       <D2847>:;
848       __builtin_setjmp_receiver (&<D2847>);
849       D.2844 = 1;
850       <D2846>:;
851       if (D.2844 == 0) goto <D2848>; else goto <D2849>;
852
853       [...]
854
855       <D3850>:;
856       return;
857       <D3853>: [non-local];
858       setjmpvar.0 = __builtin_setjmp_dispatcher (&<D3853>);
859       goto setjmpvar.0;
860     }
861
862    The dispatcher block will be both the unique destination of all the
863    abnormal call edges and the unique source of all the abnormal edges
864    to the receivers, thus keeping the complexity explosion localized.  */
865
866 static void
867 lower_builtin_setjmp (gimple_stmt_iterator *gsi)
868 {
869   gimple stmt = gsi_stmt (*gsi);
870   location_t loc = gimple_location (stmt);
871   tree cont_label = create_artificial_label (loc);
872   tree next_label = create_artificial_label (loc);
873   tree dest, t, arg;
874   gimple g;
875
876   /* NEXT_LABEL is the label __builtin_longjmp will jump to.  Its address is
877      passed to both __builtin_setjmp_setup and __builtin_setjmp_receiver.  */
878   FORCED_LABEL (next_label) = 1;
879
880   dest = gimple_call_lhs (stmt);
881
882   /* Build '__builtin_setjmp_setup (BUF, NEXT_LABEL)' and insert.  */
883   arg = build_addr (next_label, current_function_decl);
884   t = builtin_decl_implicit (BUILT_IN_SETJMP_SETUP);
885   g = gimple_build_call (t, 2, gimple_call_arg (stmt, 0), arg);
886   gimple_set_location (g, loc);
887   gimple_set_block (g, gimple_block (stmt));
888   gsi_insert_before (gsi, g, GSI_SAME_STMT);
889
890   /* Build 'DEST = 0' and insert.  */
891   if (dest)
892     {
893       g = gimple_build_assign (dest, build_zero_cst (TREE_TYPE (dest)));
894       gimple_set_location (g, loc);
895       gimple_set_block (g, gimple_block (stmt));
896       gsi_insert_before (gsi, g, GSI_SAME_STMT);
897     }
898
899   /* Build 'goto CONT_LABEL' and insert.  */
900   g = gimple_build_goto (cont_label);
901   gsi_insert_before (gsi, g, GSI_SAME_STMT);
902
903   /* Build 'NEXT_LABEL:' and insert.  */
904   g = gimple_build_label (next_label);
905   gsi_insert_before (gsi, g, GSI_SAME_STMT);
906
907   /* Build '__builtin_setjmp_receiver (NEXT_LABEL)' and insert.  */
908   arg = build_addr (next_label, current_function_decl);
909   t = builtin_decl_implicit (BUILT_IN_SETJMP_RECEIVER);
910   g = gimple_build_call (t, 1, arg);
911   gimple_set_location (g, loc);
912   gimple_set_block (g, gimple_block (stmt));
913   gsi_insert_before (gsi, g, GSI_SAME_STMT);
914
915   /* Build 'DEST = 1' and insert.  */
916   if (dest)
917     {
918       g = gimple_build_assign (dest, fold_convert_loc (loc, TREE_TYPE (dest),
919                                                        integer_one_node));
920       gimple_set_location (g, loc);
921       gimple_set_block (g, gimple_block (stmt));
922       gsi_insert_before (gsi, g, GSI_SAME_STMT);
923     }
924
925   /* Build 'CONT_LABEL:' and insert.  */
926   g = gimple_build_label (cont_label);
927   gsi_insert_before (gsi, g, GSI_SAME_STMT);
928
929   /* Remove the call to __builtin_setjmp.  */
930   gsi_remove (gsi, false);
931 }
932 \f
933
934 /* Record the variables in VARS into function FN.  */
935
936 void
937 record_vars_into (tree vars, tree fn)
938 {
939   if (fn != current_function_decl)
940     push_cfun (DECL_STRUCT_FUNCTION (fn));
941
942   for (; vars; vars = DECL_CHAIN (vars))
943     {
944       tree var = vars;
945
946       /* BIND_EXPRs contains also function/type/constant declarations
947          we don't need to care about.  */
948       if (TREE_CODE (var) != VAR_DECL)
949         continue;
950
951       /* Nothing to do in this case.  */
952       if (DECL_EXTERNAL (var))
953         continue;
954
955       /* Record the variable.  */
956       add_local_decl (cfun, var);
957       if (gimple_referenced_vars (cfun))
958         add_referenced_var (var);
959     }
960
961   if (fn != current_function_decl)
962     pop_cfun ();
963 }
964
965
966 /* Record the variables in VARS into current_function_decl.  */
967
968 void
969 record_vars (tree vars)
970 {
971   record_vars_into (vars, current_function_decl);
972 }