jit-playback: Move argv-creation to its own function
[platform/upstream/gcc.git] / gcc / gimple.c
1 /* Gimple IR support functions.
2
3    Copyright (C) 2007-2014 Free Software Foundation, Inc.
4    Contributed by Aldy Hernandez <aldyh@redhat.com>
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 "target.h"
27 #include "tree.h"
28 #include "calls.h"
29 #include "stmt.h"
30 #include "stor-layout.h"
31 #include "hard-reg-set.h"
32 #include "predict.h"
33 #include "vec.h"
34 #include "hashtab.h"
35 #include "hash-set.h"
36 #include "machmode.h"
37 #include "input.h"
38 #include "function.h"
39 #include "dominance.h"
40 #include "cfg.h"
41 #include "basic-block.h"
42 #include "tree-ssa-alias.h"
43 #include "internal-fn.h"
44 #include "tree-eh.h"
45 #include "gimple-expr.h"
46 #include "is-a.h"
47 #include "gimple.h"
48 #include "gimple-iterator.h"
49 #include "gimple-walk.h"
50 #include "gimple.h"
51 #include "gimplify.h"
52 #include "diagnostic.h"
53 #include "value-prof.h"
54 #include "flags.h"
55 #include "alias.h"
56 #include "demangle.h"
57 #include "langhooks.h"
58 #include "bitmap.h"
59 #include "stringpool.h"
60 #include "tree-ssanames.h"
61 #include "ipa-ref.h"
62 #include "lto-streamer.h"
63 #include "cgraph.h"
64
65
66 /* All the tuples have their operand vector (if present) at the very bottom
67    of the structure.  Therefore, the offset required to find the
68    operands vector the size of the structure minus the size of the 1
69    element tree array at the end (see gimple_ops).  */
70 #define DEFGSSTRUCT(SYM, STRUCT, HAS_TREE_OP) \
71         (HAS_TREE_OP ? sizeof (struct STRUCT) - sizeof (tree) : 0),
72 EXPORTED_CONST size_t gimple_ops_offset_[] = {
73 #include "gsstruct.def"
74 };
75 #undef DEFGSSTRUCT
76
77 #define DEFGSSTRUCT(SYM, STRUCT, HAS_TREE_OP) sizeof (struct STRUCT),
78 static const size_t gsstruct_code_size[] = {
79 #include "gsstruct.def"
80 };
81 #undef DEFGSSTRUCT
82
83 #define DEFGSCODE(SYM, NAME, GSSCODE)   NAME,
84 const char *const gimple_code_name[] = {
85 #include "gimple.def"
86 };
87 #undef DEFGSCODE
88
89 #define DEFGSCODE(SYM, NAME, GSSCODE)   GSSCODE,
90 EXPORTED_CONST enum gimple_statement_structure_enum gss_for_code_[] = {
91 #include "gimple.def"
92 };
93 #undef DEFGSCODE
94
95 /* Gimple stats.  */
96
97 int gimple_alloc_counts[(int) gimple_alloc_kind_all];
98 int gimple_alloc_sizes[(int) gimple_alloc_kind_all];
99
100 /* Keep in sync with gimple.h:enum gimple_alloc_kind.  */
101 static const char * const gimple_alloc_kind_names[] = {
102     "assignments",
103     "phi nodes",
104     "conditionals",
105     "everything else"
106 };
107
108 /* Gimple tuple constructors.
109    Note: Any constructor taking a ``gimple_seq'' as a parameter, can
110    be passed a NULL to start with an empty sequence.  */
111
112 /* Set the code for statement G to CODE.  */
113
114 static inline void
115 gimple_set_code (gimple g, enum gimple_code code)
116 {
117   g->code = code;
118 }
119
120 /* Return the number of bytes needed to hold a GIMPLE statement with
121    code CODE.  */
122
123 static inline size_t
124 gimple_size (enum gimple_code code)
125 {
126   return gsstruct_code_size[gss_for_code (code)];
127 }
128
129 /* Allocate memory for a GIMPLE statement with code CODE and NUM_OPS
130    operands.  */
131
132 gimple
133 gimple_alloc_stat (enum gimple_code code, unsigned num_ops MEM_STAT_DECL)
134 {
135   size_t size;
136   gimple stmt;
137
138   size = gimple_size (code);
139   if (num_ops > 0)
140     size += sizeof (tree) * (num_ops - 1);
141
142   if (GATHER_STATISTICS)
143     {
144       enum gimple_alloc_kind kind = gimple_alloc_kind (code);
145       gimple_alloc_counts[(int) kind]++;
146       gimple_alloc_sizes[(int) kind] += size;
147     }
148
149   stmt = ggc_alloc_cleared_gimple_statement_stat (size PASS_MEM_STAT);
150   gimple_set_code (stmt, code);
151   gimple_set_num_ops (stmt, num_ops);
152
153   /* Do not call gimple_set_modified here as it has other side
154      effects and this tuple is still not completely built.  */
155   stmt->modified = 1;
156   gimple_init_singleton (stmt);
157
158   return stmt;
159 }
160
161 /* Set SUBCODE to be the code of the expression computed by statement G.  */
162
163 static inline void
164 gimple_set_subcode (gimple g, unsigned subcode)
165 {
166   /* We only have 16 bits for the RHS code.  Assert that we are not
167      overflowing it.  */
168   gcc_assert (subcode < (1 << 16));
169   g->subcode = subcode;
170 }
171
172
173
174 /* Build a tuple with operands.  CODE is the statement to build (which
175    must be one of the GIMPLE_WITH_OPS tuples).  SUBCODE is the subcode
176    for the new tuple.  NUM_OPS is the number of operands to allocate.  */
177
178 #define gimple_build_with_ops(c, s, n) \
179   gimple_build_with_ops_stat (c, s, n MEM_STAT_INFO)
180
181 static gimple
182 gimple_build_with_ops_stat (enum gimple_code code, unsigned subcode,
183                             unsigned num_ops MEM_STAT_DECL)
184 {
185   gimple s = gimple_alloc_stat (code, num_ops PASS_MEM_STAT);
186   gimple_set_subcode (s, subcode);
187
188   return s;
189 }
190
191
192 /* Build a GIMPLE_RETURN statement returning RETVAL.  */
193
194 greturn *
195 gimple_build_return (tree retval)
196 {
197   greturn *s
198     = as_a <greturn *> (gimple_build_with_ops (GIMPLE_RETURN, ERROR_MARK,
199                                                2));
200   if (retval)
201     gimple_return_set_retval (s, retval);
202   return s;
203 }
204
205 /* Reset alias information on call S.  */
206
207 void
208 gimple_call_reset_alias_info (gcall *s)
209 {
210   if (gimple_call_flags (s) & ECF_CONST)
211     memset (gimple_call_use_set (s), 0, sizeof (struct pt_solution));
212   else
213     pt_solution_reset (gimple_call_use_set (s));
214   if (gimple_call_flags (s) & (ECF_CONST|ECF_PURE|ECF_NOVOPS))
215     memset (gimple_call_clobber_set (s), 0, sizeof (struct pt_solution));
216   else
217     pt_solution_reset (gimple_call_clobber_set (s));
218 }
219
220 /* Helper for gimple_build_call, gimple_build_call_valist,
221    gimple_build_call_vec and gimple_build_call_from_tree.  Build the basic
222    components of a GIMPLE_CALL statement to function FN with NARGS
223    arguments.  */
224
225 static inline gcall *
226 gimple_build_call_1 (tree fn, unsigned nargs)
227 {
228   gcall *s
229     = as_a <gcall *> (gimple_build_with_ops (GIMPLE_CALL, ERROR_MARK,
230                                              nargs + 3));
231   if (TREE_CODE (fn) == FUNCTION_DECL)
232     fn = build_fold_addr_expr (fn);
233   gimple_set_op (s, 1, fn);
234   gimple_call_set_fntype (s, TREE_TYPE (TREE_TYPE (fn)));
235   gimple_call_reset_alias_info (s);
236   return s;
237 }
238
239
240 /* Build a GIMPLE_CALL statement to function FN with the arguments
241    specified in vector ARGS.  */
242
243 gcall *
244 gimple_build_call_vec (tree fn, vec<tree> args)
245 {
246   unsigned i;
247   unsigned nargs = args.length ();
248   gcall *call = gimple_build_call_1 (fn, nargs);
249
250   for (i = 0; i < nargs; i++)
251     gimple_call_set_arg (call, i, args[i]);
252
253   return call;
254 }
255
256
257 /* Build a GIMPLE_CALL statement to function FN.  NARGS is the number of
258    arguments.  The ... are the arguments.  */
259
260 gcall *
261 gimple_build_call (tree fn, unsigned nargs, ...)
262 {
263   va_list ap;
264   gcall *call;
265   unsigned i;
266
267   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL || is_gimple_call_addr (fn));
268
269   call = gimple_build_call_1 (fn, nargs);
270
271   va_start (ap, nargs);
272   for (i = 0; i < nargs; i++)
273     gimple_call_set_arg (call, i, va_arg (ap, tree));
274   va_end (ap);
275
276   return call;
277 }
278
279
280 /* Build a GIMPLE_CALL statement to function FN.  NARGS is the number of
281    arguments.  AP contains the arguments.  */
282
283 gcall *
284 gimple_build_call_valist (tree fn, unsigned nargs, va_list ap)
285 {
286   gcall *call;
287   unsigned i;
288
289   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL || is_gimple_call_addr (fn));
290
291   call = gimple_build_call_1 (fn, nargs);
292
293   for (i = 0; i < nargs; i++)
294     gimple_call_set_arg (call, i, va_arg (ap, tree));
295
296   return call;
297 }
298
299
300 /* Helper for gimple_build_call_internal and gimple_build_call_internal_vec.
301    Build the basic components of a GIMPLE_CALL statement to internal
302    function FN with NARGS arguments.  */
303
304 static inline gcall *
305 gimple_build_call_internal_1 (enum internal_fn fn, unsigned nargs)
306 {
307   gcall *s
308     = as_a <gcall *> (gimple_build_with_ops (GIMPLE_CALL, ERROR_MARK,
309                                              nargs + 3));
310   s->subcode |= GF_CALL_INTERNAL;
311   gimple_call_set_internal_fn (s, fn);
312   gimple_call_reset_alias_info (s);
313   return s;
314 }
315
316
317 /* Build a GIMPLE_CALL statement to internal function FN.  NARGS is
318    the number of arguments.  The ... are the arguments.  */
319
320 gcall *
321 gimple_build_call_internal (enum internal_fn fn, unsigned nargs, ...)
322 {
323   va_list ap;
324   gcall *call;
325   unsigned i;
326
327   call = gimple_build_call_internal_1 (fn, nargs);
328   va_start (ap, nargs);
329   for (i = 0; i < nargs; i++)
330     gimple_call_set_arg (call, i, va_arg (ap, tree));
331   va_end (ap);
332
333   return call;
334 }
335
336
337 /* Build a GIMPLE_CALL statement to internal function FN with the arguments
338    specified in vector ARGS.  */
339
340 gcall *
341 gimple_build_call_internal_vec (enum internal_fn fn, vec<tree> args)
342 {
343   unsigned i, nargs;
344   gcall *call;
345
346   nargs = args.length ();
347   call = gimple_build_call_internal_1 (fn, nargs);
348   for (i = 0; i < nargs; i++)
349     gimple_call_set_arg (call, i, args[i]);
350
351   return call;
352 }
353
354
355 /* Build a GIMPLE_CALL statement from CALL_EXPR T.  Note that T is
356    assumed to be in GIMPLE form already.  Minimal checking is done of
357    this fact.  */
358
359 gcall *
360 gimple_build_call_from_tree (tree t)
361 {
362   unsigned i, nargs;
363   gcall *call;
364   tree fndecl = get_callee_fndecl (t);
365
366   gcc_assert (TREE_CODE (t) == CALL_EXPR);
367
368   nargs = call_expr_nargs (t);
369   call = gimple_build_call_1 (fndecl ? fndecl : CALL_EXPR_FN (t), nargs);
370
371   for (i = 0; i < nargs; i++)
372     gimple_call_set_arg (call, i, CALL_EXPR_ARG (t, i));
373
374   gimple_set_block (call, TREE_BLOCK (t));
375
376   /* Carry all the CALL_EXPR flags to the new GIMPLE_CALL.  */
377   gimple_call_set_chain (call, CALL_EXPR_STATIC_CHAIN (t));
378   gimple_call_set_tail (call, CALL_EXPR_TAILCALL (t));
379   gimple_call_set_return_slot_opt (call, CALL_EXPR_RETURN_SLOT_OPT (t));
380   if (fndecl
381       && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
382       && (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_ALLOCA
383           || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_ALLOCA_WITH_ALIGN))
384     gimple_call_set_alloca_for_var (call, CALL_ALLOCA_FOR_VAR_P (t));
385   else
386     gimple_call_set_from_thunk (call, CALL_FROM_THUNK_P (t));
387   gimple_call_set_va_arg_pack (call, CALL_EXPR_VA_ARG_PACK (t));
388   gimple_call_set_nothrow (call, TREE_NOTHROW (t));
389   gimple_set_no_warning (call, TREE_NO_WARNING (t));
390   gimple_call_set_with_bounds (call, CALL_WITH_BOUNDS_P (t));
391
392   return call;
393 }
394
395
396 /* Build a GIMPLE_ASSIGN statement.
397
398    LHS of the assignment.
399    RHS of the assignment which can be unary or binary.  */
400
401 gassign *
402 gimple_build_assign (tree lhs, tree rhs MEM_STAT_DECL)
403 {
404   enum tree_code subcode;
405   tree op1, op2, op3;
406
407   extract_ops_from_tree_1 (rhs, &subcode, &op1, &op2, &op3);
408   return gimple_build_assign (lhs, subcode, op1, op2, op3 PASS_MEM_STAT);
409 }
410
411
412 /* Build a GIMPLE_ASSIGN statement with subcode SUBCODE and operands
413    OP1, OP2 and OP3.  */
414
415 static inline gassign *
416 gimple_build_assign_1 (tree lhs, enum tree_code subcode, tree op1,
417                        tree op2, tree op3 MEM_STAT_DECL)
418 {
419   unsigned num_ops;
420   gassign *p;
421
422   /* Need 1 operand for LHS and 1 or 2 for the RHS (depending on the
423      code).  */
424   num_ops = get_gimple_rhs_num_ops (subcode) + 1;
425
426   p = as_a <gassign *> (
427         gimple_build_with_ops_stat (GIMPLE_ASSIGN, (unsigned)subcode, num_ops
428                                     PASS_MEM_STAT));
429   gimple_assign_set_lhs (p, lhs);
430   gimple_assign_set_rhs1 (p, op1);
431   if (op2)
432     {
433       gcc_assert (num_ops > 2);
434       gimple_assign_set_rhs2 (p, op2);
435     }
436
437   if (op3)
438     {
439       gcc_assert (num_ops > 3);
440       gimple_assign_set_rhs3 (p, op3);
441     }
442
443   return p;
444 }
445
446 /* Build a GIMPLE_ASSIGN statement with subcode SUBCODE and operands
447    OP1, OP2 and OP3.  */
448
449 gassign *
450 gimple_build_assign (tree lhs, enum tree_code subcode, tree op1,
451                      tree op2, tree op3 MEM_STAT_DECL)
452 {
453   return gimple_build_assign_1 (lhs, subcode, op1, op2, op3 PASS_MEM_STAT);
454 }
455
456 /* Build a GIMPLE_ASSIGN statement with subcode SUBCODE and operands
457    OP1 and OP2.  */
458
459 gassign *
460 gimple_build_assign (tree lhs, enum tree_code subcode, tree op1,
461                      tree op2 MEM_STAT_DECL)
462 {
463   return gimple_build_assign_1 (lhs, subcode, op1, op2, NULL_TREE
464                                 PASS_MEM_STAT);
465 }
466
467 /* Build a GIMPLE_ASSIGN statement with subcode SUBCODE and operand OP1.  */
468
469 gassign *
470 gimple_build_assign (tree lhs, enum tree_code subcode, tree op1 MEM_STAT_DECL)
471 {
472   return gimple_build_assign_1 (lhs, subcode, op1, NULL_TREE, NULL_TREE
473                                 PASS_MEM_STAT);
474 }
475
476
477 /* Build a GIMPLE_COND statement.
478
479    PRED is the condition used to compare LHS and the RHS.
480    T_LABEL is the label to jump to if the condition is true.
481    F_LABEL is the label to jump to otherwise.  */
482
483 gcond *
484 gimple_build_cond (enum tree_code pred_code, tree lhs, tree rhs,
485                    tree t_label, tree f_label)
486 {
487   gcond *p;
488
489   gcc_assert (TREE_CODE_CLASS (pred_code) == tcc_comparison);
490   p = as_a <gcond *> (gimple_build_with_ops (GIMPLE_COND, pred_code, 4));
491   gimple_cond_set_lhs (p, lhs);
492   gimple_cond_set_rhs (p, rhs);
493   gimple_cond_set_true_label (p, t_label);
494   gimple_cond_set_false_label (p, f_label);
495   return p;
496 }
497
498 /* Build a GIMPLE_COND statement from the conditional expression tree
499    COND.  T_LABEL and F_LABEL are as in gimple_build_cond.  */
500
501 gcond *
502 gimple_build_cond_from_tree (tree cond, tree t_label, tree f_label)
503 {
504   enum tree_code code;
505   tree lhs, rhs;
506
507   gimple_cond_get_ops_from_tree (cond, &code, &lhs, &rhs);
508   return gimple_build_cond (code, lhs, rhs, t_label, f_label);
509 }
510
511 /* Set code, lhs, and rhs of a GIMPLE_COND from a suitable
512    boolean expression tree COND.  */
513
514 void
515 gimple_cond_set_condition_from_tree (gcond *stmt, tree cond)
516 {
517   enum tree_code code;
518   tree lhs, rhs;
519
520   gimple_cond_get_ops_from_tree (cond, &code, &lhs, &rhs);
521   gimple_cond_set_condition (stmt, code, lhs, rhs);
522 }
523
524 /* Build a GIMPLE_LABEL statement for LABEL.  */
525
526 glabel *
527 gimple_build_label (tree label)
528 {
529   glabel *p
530     = as_a <glabel *> (gimple_build_with_ops (GIMPLE_LABEL, ERROR_MARK, 1));
531   gimple_label_set_label (p, label);
532   return p;
533 }
534
535 /* Build a GIMPLE_GOTO statement to label DEST.  */
536
537 ggoto *
538 gimple_build_goto (tree dest)
539 {
540   ggoto *p
541     = as_a <ggoto *> (gimple_build_with_ops (GIMPLE_GOTO, ERROR_MARK, 1));
542   gimple_goto_set_dest (p, dest);
543   return p;
544 }
545
546
547 /* Build a GIMPLE_NOP statement.  */
548
549 gimple
550 gimple_build_nop (void)
551 {
552   return gimple_alloc (GIMPLE_NOP, 0);
553 }
554
555
556 /* Build a GIMPLE_BIND statement.
557    VARS are the variables in BODY.
558    BLOCK is the containing block.  */
559
560 gbind *
561 gimple_build_bind (tree vars, gimple_seq body, tree block)
562 {
563   gbind *p = as_a <gbind *> (gimple_alloc (GIMPLE_BIND, 0));
564   gimple_bind_set_vars (p, vars);
565   if (body)
566     gimple_bind_set_body (p, body);
567   if (block)
568     gimple_bind_set_block (p, block);
569   return p;
570 }
571
572 /* Helper function to set the simple fields of a asm stmt.
573
574    STRING is a pointer to a string that is the asm blocks assembly code.
575    NINPUT is the number of register inputs.
576    NOUTPUT is the number of register outputs.
577    NCLOBBERS is the number of clobbered registers.
578    */
579
580 static inline gasm *
581 gimple_build_asm_1 (const char *string, unsigned ninputs, unsigned noutputs,
582                     unsigned nclobbers, unsigned nlabels)
583 {
584   gasm *p;
585   int size = strlen (string);
586
587   /* ASMs with labels cannot have outputs.  This should have been
588      enforced by the front end.  */
589   gcc_assert (nlabels == 0 || noutputs == 0);
590
591   p = as_a <gasm *> (
592         gimple_build_with_ops (GIMPLE_ASM, ERROR_MARK,
593                                ninputs + noutputs + nclobbers + nlabels));
594
595   p->ni = ninputs;
596   p->no = noutputs;
597   p->nc = nclobbers;
598   p->nl = nlabels;
599   p->string = ggc_alloc_string (string, size);
600
601   if (GATHER_STATISTICS)
602     gimple_alloc_sizes[(int) gimple_alloc_kind (GIMPLE_ASM)] += size;
603
604   return p;
605 }
606
607 /* Build a GIMPLE_ASM statement.
608
609    STRING is the assembly code.
610    NINPUT is the number of register inputs.
611    NOUTPUT is the number of register outputs.
612    NCLOBBERS is the number of clobbered registers.
613    INPUTS is a vector of the input register parameters.
614    OUTPUTS is a vector of the output register parameters.
615    CLOBBERS is a vector of the clobbered register parameters.
616    LABELS is a vector of destination labels.  */
617
618 gasm *
619 gimple_build_asm_vec (const char *string, vec<tree, va_gc> *inputs,
620                       vec<tree, va_gc> *outputs, vec<tree, va_gc> *clobbers,
621                       vec<tree, va_gc> *labels)
622 {
623   gasm *p;
624   unsigned i;
625
626   p = gimple_build_asm_1 (string,
627                           vec_safe_length (inputs),
628                           vec_safe_length (outputs),
629                           vec_safe_length (clobbers),
630                           vec_safe_length (labels));
631
632   for (i = 0; i < vec_safe_length (inputs); i++)
633     gimple_asm_set_input_op (p, i, (*inputs)[i]);
634
635   for (i = 0; i < vec_safe_length (outputs); i++)
636     gimple_asm_set_output_op (p, i, (*outputs)[i]);
637
638   for (i = 0; i < vec_safe_length (clobbers); i++)
639     gimple_asm_set_clobber_op (p, i, (*clobbers)[i]);
640
641   for (i = 0; i < vec_safe_length (labels); i++)
642     gimple_asm_set_label_op (p, i, (*labels)[i]);
643
644   return p;
645 }
646
647 /* Build a GIMPLE_CATCH statement.
648
649   TYPES are the catch types.
650   HANDLER is the exception handler.  */
651
652 gcatch *
653 gimple_build_catch (tree types, gimple_seq handler)
654 {
655   gcatch *p = as_a <gcatch *> (gimple_alloc (GIMPLE_CATCH, 0));
656   gimple_catch_set_types (p, types);
657   if (handler)
658     gimple_catch_set_handler (p, handler);
659
660   return p;
661 }
662
663 /* Build a GIMPLE_EH_FILTER statement.
664
665    TYPES are the filter's types.
666    FAILURE is the filter's failure action.  */
667
668 geh_filter *
669 gimple_build_eh_filter (tree types, gimple_seq failure)
670 {
671   geh_filter *p = as_a <geh_filter *> (gimple_alloc (GIMPLE_EH_FILTER, 0));
672   gimple_eh_filter_set_types (p, types);
673   if (failure)
674     gimple_eh_filter_set_failure (p, failure);
675
676   return p;
677 }
678
679 /* Build a GIMPLE_EH_MUST_NOT_THROW statement.  */
680
681 geh_mnt *
682 gimple_build_eh_must_not_throw (tree decl)
683 {
684   geh_mnt *p = as_a <geh_mnt *> (gimple_alloc (GIMPLE_EH_MUST_NOT_THROW, 0));
685
686   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
687   gcc_assert (flags_from_decl_or_type (decl) & ECF_NORETURN);
688   gimple_eh_must_not_throw_set_fndecl (p, decl);
689
690   return p;
691 }
692
693 /* Build a GIMPLE_EH_ELSE statement.  */
694
695 geh_else *
696 gimple_build_eh_else (gimple_seq n_body, gimple_seq e_body)
697 {
698   geh_else *p = as_a <geh_else *> (gimple_alloc (GIMPLE_EH_ELSE, 0));
699   gimple_eh_else_set_n_body (p, n_body);
700   gimple_eh_else_set_e_body (p, e_body);
701   return p;
702 }
703
704 /* Build a GIMPLE_TRY statement.
705
706    EVAL is the expression to evaluate.
707    CLEANUP is the cleanup expression.
708    KIND is either GIMPLE_TRY_CATCH or GIMPLE_TRY_FINALLY depending on
709    whether this is a try/catch or a try/finally respectively.  */
710
711 gtry *
712 gimple_build_try (gimple_seq eval, gimple_seq cleanup,
713                   enum gimple_try_flags kind)
714 {
715   gtry *p;
716
717   gcc_assert (kind == GIMPLE_TRY_CATCH || kind == GIMPLE_TRY_FINALLY);
718   p = as_a <gtry *> (gimple_alloc (GIMPLE_TRY, 0));
719   gimple_set_subcode (p, kind);
720   if (eval)
721     gimple_try_set_eval (p, eval);
722   if (cleanup)
723     gimple_try_set_cleanup (p, cleanup);
724
725   return p;
726 }
727
728 /* Construct a GIMPLE_WITH_CLEANUP_EXPR statement.
729
730    CLEANUP is the cleanup expression.  */
731
732 gimple
733 gimple_build_wce (gimple_seq cleanup)
734 {
735   gimple p = gimple_alloc (GIMPLE_WITH_CLEANUP_EXPR, 0);
736   if (cleanup)
737     gimple_wce_set_cleanup (p, cleanup);
738
739   return p;
740 }
741
742
743 /* Build a GIMPLE_RESX statement.  */
744
745 gresx *
746 gimple_build_resx (int region)
747 {
748   gresx *p
749     = as_a <gresx *> (gimple_build_with_ops (GIMPLE_RESX, ERROR_MARK, 0));
750   p->region = region;
751   return p;
752 }
753
754
755 /* The helper for constructing a gimple switch statement.
756    INDEX is the switch's index.
757    NLABELS is the number of labels in the switch excluding the default.
758    DEFAULT_LABEL is the default label for the switch statement.  */
759
760 gswitch *
761 gimple_build_switch_nlabels (unsigned nlabels, tree index, tree default_label)
762 {
763   /* nlabels + 1 default label + 1 index.  */
764   gcc_checking_assert (default_label);
765   gswitch *p = as_a <gswitch *> (gimple_build_with_ops (GIMPLE_SWITCH,
766                                                         ERROR_MARK,
767                                                         1 + 1 + nlabels));
768   gimple_switch_set_index (p, index);
769   gimple_switch_set_default_label (p, default_label);
770   return p;
771 }
772
773 /* Build a GIMPLE_SWITCH statement.
774
775    INDEX is the switch's index.
776    DEFAULT_LABEL is the default label
777    ARGS is a vector of labels excluding the default.  */
778
779 gswitch *
780 gimple_build_switch (tree index, tree default_label, vec<tree> args)
781 {
782   unsigned i, nlabels = args.length ();
783
784   gswitch *p = gimple_build_switch_nlabels (nlabels, index, default_label);
785
786   /* Copy the labels from the vector to the switch statement.  */
787   for (i = 0; i < nlabels; i++)
788     gimple_switch_set_label (p, i + 1, args[i]);
789
790   return p;
791 }
792
793 /* Build a GIMPLE_EH_DISPATCH statement.  */
794
795 geh_dispatch *
796 gimple_build_eh_dispatch (int region)
797 {
798   geh_dispatch *p
799     = as_a <geh_dispatch *> (
800         gimple_build_with_ops (GIMPLE_EH_DISPATCH, ERROR_MARK, 0));
801   p->region = region;
802   return p;
803 }
804
805 /* Build a new GIMPLE_DEBUG_BIND statement.
806
807    VAR is bound to VALUE; block and location are taken from STMT.  */
808
809 gdebug *
810 gimple_build_debug_bind_stat (tree var, tree value, gimple stmt MEM_STAT_DECL)
811 {
812   gdebug *p
813     = as_a <gdebug *> (gimple_build_with_ops_stat (GIMPLE_DEBUG,
814                                                    (unsigned)GIMPLE_DEBUG_BIND, 2
815                                                    PASS_MEM_STAT));
816   gimple_debug_bind_set_var (p, var);
817   gimple_debug_bind_set_value (p, value);
818   if (stmt)
819     gimple_set_location (p, gimple_location (stmt));
820
821   return p;
822 }
823
824
825 /* Build a new GIMPLE_DEBUG_SOURCE_BIND statement.
826
827    VAR is bound to VALUE; block and location are taken from STMT.  */
828
829 gdebug *
830 gimple_build_debug_source_bind_stat (tree var, tree value,
831                                      gimple stmt MEM_STAT_DECL)
832 {
833   gdebug *p
834     = as_a <gdebug *> (
835         gimple_build_with_ops_stat (GIMPLE_DEBUG,
836                                     (unsigned)GIMPLE_DEBUG_SOURCE_BIND, 2
837                                     PASS_MEM_STAT));
838
839   gimple_debug_source_bind_set_var (p, var);
840   gimple_debug_source_bind_set_value (p, value);
841   if (stmt)
842     gimple_set_location (p, gimple_location (stmt));
843
844   return p;
845 }
846
847
848 /* Build a GIMPLE_OMP_CRITICAL statement.
849
850    BODY is the sequence of statements for which only one thread can execute.
851    NAME is optional identifier for this critical block.  */
852
853 gomp_critical *
854 gimple_build_omp_critical (gimple_seq body, tree name)
855 {
856   gomp_critical *p
857     = as_a <gomp_critical *> (gimple_alloc (GIMPLE_OMP_CRITICAL, 0));
858   gimple_omp_critical_set_name (p, name);
859   if (body)
860     gimple_omp_set_body (p, body);
861
862   return p;
863 }
864
865 /* Build a GIMPLE_OMP_FOR statement.
866
867    BODY is sequence of statements inside the for loop.
868    KIND is the `for' variant.
869    CLAUSES, are any of the OMP loop construct's clauses: private, firstprivate,
870    lastprivate, reductions, ordered, schedule, and nowait.
871    COLLAPSE is the collapse count.
872    PRE_BODY is the sequence of statements that are loop invariant.  */
873
874 gomp_for *
875 gimple_build_omp_for (gimple_seq body, int kind, tree clauses, size_t collapse,
876                       gimple_seq pre_body)
877 {
878   gomp_for *p = as_a <gomp_for *> (gimple_alloc (GIMPLE_OMP_FOR, 0));
879   if (body)
880     gimple_omp_set_body (p, body);
881   gimple_omp_for_set_clauses (p, clauses);
882   gimple_omp_for_set_kind (p, kind);
883   p->collapse = collapse;
884   p->iter =  ggc_cleared_vec_alloc<gimple_omp_for_iter> (collapse);
885
886   if (pre_body)
887     gimple_omp_for_set_pre_body (p, pre_body);
888
889   return p;
890 }
891
892
893 /* Build a GIMPLE_OMP_PARALLEL statement.
894
895    BODY is sequence of statements which are executed in parallel.
896    CLAUSES, are the OMP parallel construct's clauses.
897    CHILD_FN is the function created for the parallel threads to execute.
898    DATA_ARG are the shared data argument(s).  */
899
900 gomp_parallel *
901 gimple_build_omp_parallel (gimple_seq body, tree clauses, tree child_fn,
902                            tree data_arg)
903 {
904   gomp_parallel *p
905     = as_a <gomp_parallel *> (gimple_alloc (GIMPLE_OMP_PARALLEL, 0));
906   if (body)
907     gimple_omp_set_body (p, body);
908   gimple_omp_parallel_set_clauses (p, clauses);
909   gimple_omp_parallel_set_child_fn (p, child_fn);
910   gimple_omp_parallel_set_data_arg (p, data_arg);
911
912   return p;
913 }
914
915
916 /* Build a GIMPLE_OMP_TASK statement.
917
918    BODY is sequence of statements which are executed by the explicit task.
919    CLAUSES, are the OMP parallel construct's clauses.
920    CHILD_FN is the function created for the parallel threads to execute.
921    DATA_ARG are the shared data argument(s).
922    COPY_FN is the optional function for firstprivate initialization.
923    ARG_SIZE and ARG_ALIGN are size and alignment of the data block.  */
924
925 gomp_task *
926 gimple_build_omp_task (gimple_seq body, tree clauses, tree child_fn,
927                        tree data_arg, tree copy_fn, tree arg_size,
928                        tree arg_align)
929 {
930   gomp_task *p = as_a <gomp_task *> (gimple_alloc (GIMPLE_OMP_TASK, 0));
931   if (body)
932     gimple_omp_set_body (p, body);
933   gimple_omp_task_set_clauses (p, clauses);
934   gimple_omp_task_set_child_fn (p, child_fn);
935   gimple_omp_task_set_data_arg (p, data_arg);
936   gimple_omp_task_set_copy_fn (p, copy_fn);
937   gimple_omp_task_set_arg_size (p, arg_size);
938   gimple_omp_task_set_arg_align (p, arg_align);
939
940   return p;
941 }
942
943
944 /* Build a GIMPLE_OMP_SECTION statement for a sections statement.
945
946    BODY is the sequence of statements in the section.  */
947
948 gimple
949 gimple_build_omp_section (gimple_seq body)
950 {
951   gimple p = gimple_alloc (GIMPLE_OMP_SECTION, 0);
952   if (body)
953     gimple_omp_set_body (p, body);
954
955   return p;
956 }
957
958
959 /* Build a GIMPLE_OMP_MASTER statement.
960
961    BODY is the sequence of statements to be executed by just the master.  */
962
963 gimple
964 gimple_build_omp_master (gimple_seq body)
965 {
966   gimple p = gimple_alloc (GIMPLE_OMP_MASTER, 0);
967   if (body)
968     gimple_omp_set_body (p, body);
969
970   return p;
971 }
972
973
974 /* Build a GIMPLE_OMP_TASKGROUP statement.
975
976    BODY is the sequence of statements to be executed by the taskgroup
977    construct.  */
978
979 gimple
980 gimple_build_omp_taskgroup (gimple_seq body)
981 {
982   gimple p = gimple_alloc (GIMPLE_OMP_TASKGROUP, 0);
983   if (body)
984     gimple_omp_set_body (p, body);
985
986   return p;
987 }
988
989
990 /* Build a GIMPLE_OMP_CONTINUE statement.
991
992    CONTROL_DEF is the definition of the control variable.
993    CONTROL_USE is the use of the control variable.  */
994
995 gomp_continue *
996 gimple_build_omp_continue (tree control_def, tree control_use)
997 {
998   gomp_continue *p
999     = as_a <gomp_continue *> (gimple_alloc (GIMPLE_OMP_CONTINUE, 0));
1000   gimple_omp_continue_set_control_def (p, control_def);
1001   gimple_omp_continue_set_control_use (p, control_use);
1002   return p;
1003 }
1004
1005 /* Build a GIMPLE_OMP_ORDERED statement.
1006
1007    BODY is the sequence of statements inside a loop that will executed in
1008    sequence.  */
1009
1010 gimple
1011 gimple_build_omp_ordered (gimple_seq body)
1012 {
1013   gimple p = gimple_alloc (GIMPLE_OMP_ORDERED, 0);
1014   if (body)
1015     gimple_omp_set_body (p, body);
1016
1017   return p;
1018 }
1019
1020
1021 /* Build a GIMPLE_OMP_RETURN statement.
1022    WAIT_P is true if this is a non-waiting return.  */
1023
1024 gimple
1025 gimple_build_omp_return (bool wait_p)
1026 {
1027   gimple p = gimple_alloc (GIMPLE_OMP_RETURN, 0);
1028   if (wait_p)
1029     gimple_omp_return_set_nowait (p);
1030
1031   return p;
1032 }
1033
1034
1035 /* Build a GIMPLE_OMP_SECTIONS statement.
1036
1037    BODY is a sequence of section statements.
1038    CLAUSES are any of the OMP sections contsruct's clauses: private,
1039    firstprivate, lastprivate, reduction, and nowait.  */
1040
1041 gomp_sections *
1042 gimple_build_omp_sections (gimple_seq body, tree clauses)
1043 {
1044   gomp_sections *p
1045     = as_a <gomp_sections *> (gimple_alloc (GIMPLE_OMP_SECTIONS, 0));
1046   if (body)
1047     gimple_omp_set_body (p, body);
1048   gimple_omp_sections_set_clauses (p, clauses);
1049
1050   return p;
1051 }
1052
1053
1054 /* Build a GIMPLE_OMP_SECTIONS_SWITCH.  */
1055
1056 gimple
1057 gimple_build_omp_sections_switch (void)
1058 {
1059   return gimple_alloc (GIMPLE_OMP_SECTIONS_SWITCH, 0);
1060 }
1061
1062
1063 /* Build a GIMPLE_OMP_SINGLE statement.
1064
1065    BODY is the sequence of statements that will be executed once.
1066    CLAUSES are any of the OMP single construct's clauses: private, firstprivate,
1067    copyprivate, nowait.  */
1068
1069 gomp_single *
1070 gimple_build_omp_single (gimple_seq body, tree clauses)
1071 {
1072   gomp_single *p
1073     = as_a <gomp_single *> (gimple_alloc (GIMPLE_OMP_SINGLE, 0));
1074   if (body)
1075     gimple_omp_set_body (p, body);
1076   gimple_omp_single_set_clauses (p, clauses);
1077
1078   return p;
1079 }
1080
1081
1082 /* Build a GIMPLE_OMP_TARGET statement.
1083
1084    BODY is the sequence of statements that will be executed.
1085    CLAUSES are any of the OMP target construct's clauses.  */
1086
1087 gomp_target *
1088 gimple_build_omp_target (gimple_seq body, int kind, tree clauses)
1089 {
1090   gomp_target *p
1091     = as_a <gomp_target *> (gimple_alloc (GIMPLE_OMP_TARGET, 0));
1092   if (body)
1093     gimple_omp_set_body (p, body);
1094   gimple_omp_target_set_clauses (p, clauses);
1095   gimple_omp_target_set_kind (p, kind);
1096
1097   return p;
1098 }
1099
1100
1101 /* Build a GIMPLE_OMP_TEAMS statement.
1102
1103    BODY is the sequence of statements that will be executed.
1104    CLAUSES are any of the OMP teams construct's clauses.  */
1105
1106 gomp_teams *
1107 gimple_build_omp_teams (gimple_seq body, tree clauses)
1108 {
1109   gomp_teams *p = as_a <gomp_teams *> (gimple_alloc (GIMPLE_OMP_TEAMS, 0));
1110   if (body)
1111     gimple_omp_set_body (p, body);
1112   gimple_omp_teams_set_clauses (p, clauses);
1113
1114   return p;
1115 }
1116
1117
1118 /* Build a GIMPLE_OMP_ATOMIC_LOAD statement.  */
1119
1120 gomp_atomic_load *
1121 gimple_build_omp_atomic_load (tree lhs, tree rhs)
1122 {
1123   gomp_atomic_load *p
1124     = as_a <gomp_atomic_load *> (gimple_alloc (GIMPLE_OMP_ATOMIC_LOAD, 0));
1125   gimple_omp_atomic_load_set_lhs (p, lhs);
1126   gimple_omp_atomic_load_set_rhs (p, rhs);
1127   return p;
1128 }
1129
1130 /* Build a GIMPLE_OMP_ATOMIC_STORE statement.
1131
1132    VAL is the value we are storing.  */
1133
1134 gomp_atomic_store *
1135 gimple_build_omp_atomic_store (tree val)
1136 {
1137   gomp_atomic_store *p
1138     = as_a <gomp_atomic_store *> (gimple_alloc (GIMPLE_OMP_ATOMIC_STORE, 0));
1139   gimple_omp_atomic_store_set_val (p, val);
1140   return p;
1141 }
1142
1143 /* Build a GIMPLE_TRANSACTION statement.  */
1144
1145 gtransaction *
1146 gimple_build_transaction (gimple_seq body, tree label)
1147 {
1148   gtransaction *p
1149     = as_a <gtransaction *> (gimple_alloc (GIMPLE_TRANSACTION, 0));
1150   gimple_transaction_set_body (p, body);
1151   gimple_transaction_set_label (p, label);
1152   return p;
1153 }
1154
1155 /* Build a GIMPLE_PREDICT statement.  PREDICT is one of the predictors from
1156    predict.def, OUTCOME is NOT_TAKEN or TAKEN.  */
1157
1158 gimple
1159 gimple_build_predict (enum br_predictor predictor, enum prediction outcome)
1160 {
1161   gimple p = gimple_alloc (GIMPLE_PREDICT, 0);
1162   /* Ensure all the predictors fit into the lower bits of the subcode.  */
1163   gcc_assert ((int) END_PREDICTORS <= GF_PREDICT_TAKEN);
1164   gimple_predict_set_predictor (p, predictor);
1165   gimple_predict_set_outcome (p, outcome);
1166   return p;
1167 }
1168
1169 #if defined ENABLE_GIMPLE_CHECKING
1170 /* Complain of a gimple type mismatch and die.  */
1171
1172 void
1173 gimple_check_failed (const_gimple gs, const char *file, int line,
1174                      const char *function, enum gimple_code code,
1175                      enum tree_code subcode)
1176 {
1177   internal_error ("gimple check: expected %s(%s), have %s(%s) in %s, at %s:%d",
1178                   gimple_code_name[code],
1179                   get_tree_code_name (subcode),
1180                   gimple_code_name[gimple_code (gs)],
1181                   gs->subcode > 0
1182                     ? get_tree_code_name ((enum tree_code) gs->subcode)
1183                     : "",
1184                   function, trim_filename (file), line);
1185 }
1186 #endif /* ENABLE_GIMPLE_CHECKING */
1187
1188
1189 /* Link gimple statement GS to the end of the sequence *SEQ_P.  If
1190    *SEQ_P is NULL, a new sequence is allocated.  */
1191
1192 void
1193 gimple_seq_add_stmt (gimple_seq *seq_p, gimple gs)
1194 {
1195   gimple_stmt_iterator si;
1196   if (gs == NULL)
1197     return;
1198
1199   si = gsi_last (*seq_p);
1200   gsi_insert_after (&si, gs, GSI_NEW_STMT);
1201 }
1202
1203 /* Link gimple statement GS to the end of the sequence *SEQ_P.  If
1204    *SEQ_P is NULL, a new sequence is allocated.  This function is
1205    similar to gimple_seq_add_stmt, but does not scan the operands.
1206    During gimplification, we need to manipulate statement sequences
1207    before the def/use vectors have been constructed.  */
1208
1209 void
1210 gimple_seq_add_stmt_without_update (gimple_seq *seq_p, gimple gs)
1211 {
1212   gimple_stmt_iterator si;
1213
1214   if (gs == NULL)
1215     return;
1216
1217   si = gsi_last (*seq_p);
1218   gsi_insert_after_without_update (&si, gs, GSI_NEW_STMT);
1219 }
1220
1221 /* Append sequence SRC to the end of sequence *DST_P.  If *DST_P is
1222    NULL, a new sequence is allocated.  */
1223
1224 void
1225 gimple_seq_add_seq (gimple_seq *dst_p, gimple_seq src)
1226 {
1227   gimple_stmt_iterator si;
1228   if (src == NULL)
1229     return;
1230
1231   si = gsi_last (*dst_p);
1232   gsi_insert_seq_after (&si, src, GSI_NEW_STMT);
1233 }
1234
1235 /* Append sequence SRC to the end of sequence *DST_P.  If *DST_P is
1236    NULL, a new sequence is allocated.  This function is
1237    similar to gimple_seq_add_seq, but does not scan the operands.  */
1238
1239 void
1240 gimple_seq_add_seq_without_update (gimple_seq *dst_p, gimple_seq src)
1241 {
1242   gimple_stmt_iterator si;
1243   if (src == NULL)
1244     return;
1245
1246   si = gsi_last (*dst_p);
1247   gsi_insert_seq_after_without_update (&si, src, GSI_NEW_STMT);
1248 }
1249
1250 /* Determine whether to assign a location to the statement GS.  */
1251
1252 static bool
1253 should_carry_location_p (gimple gs)
1254 {
1255   /* Don't emit a line note for a label.  We particularly don't want to
1256      emit one for the break label, since it doesn't actually correspond
1257      to the beginning of the loop/switch.  */
1258   if (gimple_code (gs) == GIMPLE_LABEL)
1259     return false;
1260
1261   return true;
1262 }
1263
1264 /* Set the location for gimple statement GS to LOCATION.  */
1265
1266 static void
1267 annotate_one_with_location (gimple gs, location_t location)
1268 {
1269   if (!gimple_has_location (gs)
1270       && !gimple_do_not_emit_location_p (gs)
1271       && should_carry_location_p (gs))
1272     gimple_set_location (gs, location);
1273 }
1274
1275 /* Set LOCATION for all the statements after iterator GSI in sequence
1276    SEQ.  If GSI is pointing to the end of the sequence, start with the
1277    first statement in SEQ.  */
1278
1279 void
1280 annotate_all_with_location_after (gimple_seq seq, gimple_stmt_iterator gsi,
1281                                   location_t location)
1282 {
1283   if (gsi_end_p (gsi))
1284     gsi = gsi_start (seq);
1285   else
1286     gsi_next (&gsi);
1287
1288   for (; !gsi_end_p (gsi); gsi_next (&gsi))
1289     annotate_one_with_location (gsi_stmt (gsi), location);
1290 }
1291
1292 /* Set the location for all the statements in a sequence STMT_P to LOCATION.  */
1293
1294 void
1295 annotate_all_with_location (gimple_seq stmt_p, location_t location)
1296 {
1297   gimple_stmt_iterator i;
1298
1299   if (gimple_seq_empty_p (stmt_p))
1300     return;
1301
1302   for (i = gsi_start (stmt_p); !gsi_end_p (i); gsi_next (&i))
1303     {
1304       gimple gs = gsi_stmt (i);
1305       annotate_one_with_location (gs, location);
1306     }
1307 }
1308
1309 /* Helper function of empty_body_p.  Return true if STMT is an empty
1310    statement.  */
1311
1312 static bool
1313 empty_stmt_p (gimple stmt)
1314 {
1315   if (gimple_code (stmt) == GIMPLE_NOP)
1316     return true;
1317   if (gbind *bind_stmt = dyn_cast <gbind *> (stmt))
1318     return empty_body_p (gimple_bind_body (bind_stmt));
1319   return false;
1320 }
1321
1322
1323 /* Return true if BODY contains nothing but empty statements.  */
1324
1325 bool
1326 empty_body_p (gimple_seq body)
1327 {
1328   gimple_stmt_iterator i;
1329
1330   if (gimple_seq_empty_p (body))
1331     return true;
1332   for (i = gsi_start (body); !gsi_end_p (i); gsi_next (&i))
1333     if (!empty_stmt_p (gsi_stmt (i))
1334         && !is_gimple_debug (gsi_stmt (i)))
1335       return false;
1336
1337   return true;
1338 }
1339
1340
1341 /* Perform a deep copy of sequence SRC and return the result.  */
1342
1343 gimple_seq
1344 gimple_seq_copy (gimple_seq src)
1345 {
1346   gimple_stmt_iterator gsi;
1347   gimple_seq new_seq = NULL;
1348   gimple stmt;
1349
1350   for (gsi = gsi_start (src); !gsi_end_p (gsi); gsi_next (&gsi))
1351     {
1352       stmt = gimple_copy (gsi_stmt (gsi));
1353       gimple_seq_add_stmt (&new_seq, stmt);
1354     }
1355
1356   return new_seq;
1357 }
1358
1359
1360
1361 /* Return true if calls C1 and C2 are known to go to the same function.  */
1362
1363 bool
1364 gimple_call_same_target_p (const_gimple c1, const_gimple c2)
1365 {
1366   if (gimple_call_internal_p (c1))
1367     return (gimple_call_internal_p (c2)
1368             && gimple_call_internal_fn (c1) == gimple_call_internal_fn (c2));
1369   else
1370     return (gimple_call_fn (c1) == gimple_call_fn (c2)
1371             || (gimple_call_fndecl (c1)
1372                 && gimple_call_fndecl (c1) == gimple_call_fndecl (c2)));
1373 }
1374
1375 /* Detect flags from a GIMPLE_CALL.  This is just like
1376    call_expr_flags, but for gimple tuples.  */
1377
1378 int
1379 gimple_call_flags (const_gimple stmt)
1380 {
1381   int flags;
1382   tree decl = gimple_call_fndecl (stmt);
1383
1384   if (decl)
1385     flags = flags_from_decl_or_type (decl);
1386   else if (gimple_call_internal_p (stmt))
1387     flags = internal_fn_flags (gimple_call_internal_fn (stmt));
1388   else
1389     flags = flags_from_decl_or_type (gimple_call_fntype (stmt));
1390
1391   if (stmt->subcode & GF_CALL_NOTHROW)
1392     flags |= ECF_NOTHROW;
1393
1394   return flags;
1395 }
1396
1397 /* Return the "fn spec" string for call STMT.  */
1398
1399 static const_tree
1400 gimple_call_fnspec (const gcall *stmt)
1401 {
1402   tree type, attr;
1403
1404   if (gimple_call_internal_p (stmt))
1405     return internal_fn_fnspec (gimple_call_internal_fn (stmt));
1406
1407   type = gimple_call_fntype (stmt);
1408   if (!type)
1409     return NULL_TREE;
1410
1411   attr = lookup_attribute ("fn spec", TYPE_ATTRIBUTES (type));
1412   if (!attr)
1413     return NULL_TREE;
1414
1415   return TREE_VALUE (TREE_VALUE (attr));
1416 }
1417
1418 /* Detects argument flags for argument number ARG on call STMT.  */
1419
1420 int
1421 gimple_call_arg_flags (const gcall *stmt, unsigned arg)
1422 {
1423   const_tree attr = gimple_call_fnspec (stmt);
1424
1425   if (!attr || 1 + arg >= (unsigned) TREE_STRING_LENGTH (attr))
1426     return 0;
1427
1428   switch (TREE_STRING_POINTER (attr)[1 + arg])
1429     {
1430     case 'x':
1431     case 'X':
1432       return EAF_UNUSED;
1433
1434     case 'R':
1435       return EAF_DIRECT | EAF_NOCLOBBER | EAF_NOESCAPE;
1436
1437     case 'r':
1438       return EAF_NOCLOBBER | EAF_NOESCAPE;
1439
1440     case 'W':
1441       return EAF_DIRECT | EAF_NOESCAPE;
1442
1443     case 'w':
1444       return EAF_NOESCAPE;
1445
1446     case '.':
1447     default:
1448       return 0;
1449     }
1450 }
1451
1452 /* Detects return flags for the call STMT.  */
1453
1454 int
1455 gimple_call_return_flags (const gcall *stmt)
1456 {
1457   const_tree attr;
1458
1459   if (gimple_call_flags (stmt) & ECF_MALLOC)
1460     return ERF_NOALIAS;
1461
1462   attr = gimple_call_fnspec (stmt);
1463   if (!attr || TREE_STRING_LENGTH (attr) < 1)
1464     return 0;
1465
1466   switch (TREE_STRING_POINTER (attr)[0])
1467     {
1468     case '1':
1469     case '2':
1470     case '3':
1471     case '4':
1472       return ERF_RETURNS_ARG | (TREE_STRING_POINTER (attr)[0] - '1');
1473
1474     case 'm':
1475       return ERF_NOALIAS;
1476
1477     case '.':
1478     default:
1479       return 0;
1480     }
1481 }
1482
1483
1484 /* Return true if GS is a copy assignment.  */
1485
1486 bool
1487 gimple_assign_copy_p (gimple gs)
1488 {
1489   return (gimple_assign_single_p (gs)
1490           && is_gimple_val (gimple_op (gs, 1)));
1491 }
1492
1493
1494 /* Return true if GS is a SSA_NAME copy assignment.  */
1495
1496 bool
1497 gimple_assign_ssa_name_copy_p (gimple gs)
1498 {
1499   return (gimple_assign_single_p (gs)
1500           && TREE_CODE (gimple_assign_lhs (gs)) == SSA_NAME
1501           && TREE_CODE (gimple_assign_rhs1 (gs)) == SSA_NAME);
1502 }
1503
1504
1505 /* Return true if GS is an assignment with a unary RHS, but the
1506    operator has no effect on the assigned value.  The logic is adapted
1507    from STRIP_NOPS.  This predicate is intended to be used in tuplifying
1508    instances in which STRIP_NOPS was previously applied to the RHS of
1509    an assignment.
1510
1511    NOTE: In the use cases that led to the creation of this function
1512    and of gimple_assign_single_p, it is typical to test for either
1513    condition and to proceed in the same manner.  In each case, the
1514    assigned value is represented by the single RHS operand of the
1515    assignment.  I suspect there may be cases where gimple_assign_copy_p,
1516    gimple_assign_single_p, or equivalent logic is used where a similar
1517    treatment of unary NOPs is appropriate.  */
1518
1519 bool
1520 gimple_assign_unary_nop_p (gimple gs)
1521 {
1522   return (is_gimple_assign (gs)
1523           && (CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (gs))
1524               || gimple_assign_rhs_code (gs) == NON_LVALUE_EXPR)
1525           && gimple_assign_rhs1 (gs) != error_mark_node
1526           && (TYPE_MODE (TREE_TYPE (gimple_assign_lhs (gs)))
1527               == TYPE_MODE (TREE_TYPE (gimple_assign_rhs1 (gs)))));
1528 }
1529
1530 /* Set BB to be the basic block holding G.  */
1531
1532 void
1533 gimple_set_bb (gimple stmt, basic_block bb)
1534 {
1535   stmt->bb = bb;
1536
1537   if (gimple_code (stmt) != GIMPLE_LABEL)
1538     return;
1539
1540   /* If the statement is a label, add the label to block-to-labels map
1541      so that we can speed up edge creation for GIMPLE_GOTOs.  */
1542   if (cfun->cfg)
1543     {
1544       tree t;
1545       int uid;
1546
1547       t = gimple_label_label (as_a <glabel *> (stmt));
1548       uid = LABEL_DECL_UID (t);
1549       if (uid == -1)
1550         {
1551           unsigned old_len =
1552             vec_safe_length (label_to_block_map_for_fn (cfun));
1553           LABEL_DECL_UID (t) = uid = cfun->cfg->last_label_uid++;
1554           if (old_len <= (unsigned) uid)
1555             {
1556               unsigned new_len = 3 * uid / 2 + 1;
1557
1558               vec_safe_grow_cleared (label_to_block_map_for_fn (cfun),
1559                                      new_len);
1560             }
1561         }
1562
1563       (*label_to_block_map_for_fn (cfun))[uid] = bb;
1564     }
1565 }
1566
1567
1568 /* Modify the RHS of the assignment pointed-to by GSI using the
1569    operands in the expression tree EXPR.
1570
1571    NOTE: The statement pointed-to by GSI may be reallocated if it
1572    did not have enough operand slots.
1573
1574    This function is useful to convert an existing tree expression into
1575    the flat representation used for the RHS of a GIMPLE assignment.
1576    It will reallocate memory as needed to expand or shrink the number
1577    of operand slots needed to represent EXPR.
1578
1579    NOTE: If you find yourself building a tree and then calling this
1580    function, you are most certainly doing it the slow way.  It is much
1581    better to build a new assignment or to use the function
1582    gimple_assign_set_rhs_with_ops, which does not require an
1583    expression tree to be built.  */
1584
1585 void
1586 gimple_assign_set_rhs_from_tree (gimple_stmt_iterator *gsi, tree expr)
1587 {
1588   enum tree_code subcode;
1589   tree op1, op2, op3;
1590
1591   extract_ops_from_tree_1 (expr, &subcode, &op1, &op2, &op3);
1592   gimple_assign_set_rhs_with_ops (gsi, subcode, op1, op2, op3);
1593 }
1594
1595
1596 /* Set the RHS of assignment statement pointed-to by GSI to CODE with
1597    operands OP1, OP2 and OP3.
1598
1599    NOTE: The statement pointed-to by GSI may be reallocated if it
1600    did not have enough operand slots.  */
1601
1602 void
1603 gimple_assign_set_rhs_with_ops (gimple_stmt_iterator *gsi, enum tree_code code,
1604                                 tree op1, tree op2, tree op3)
1605 {
1606   unsigned new_rhs_ops = get_gimple_rhs_num_ops (code);
1607   gimple stmt = gsi_stmt (*gsi);
1608
1609   /* If the new CODE needs more operands, allocate a new statement.  */
1610   if (gimple_num_ops (stmt) < new_rhs_ops + 1)
1611     {
1612       tree lhs = gimple_assign_lhs (stmt);
1613       gimple new_stmt = gimple_alloc (gimple_code (stmt), new_rhs_ops + 1);
1614       memcpy (new_stmt, stmt, gimple_size (gimple_code (stmt)));
1615       gimple_init_singleton (new_stmt);
1616       gsi_replace (gsi, new_stmt, true);
1617       stmt = new_stmt;
1618
1619       /* The LHS needs to be reset as this also changes the SSA name
1620          on the LHS.  */
1621       gimple_assign_set_lhs (stmt, lhs);
1622     }
1623
1624   gimple_set_num_ops (stmt, new_rhs_ops + 1);
1625   gimple_set_subcode (stmt, code);
1626   gimple_assign_set_rhs1 (stmt, op1);
1627   if (new_rhs_ops > 1)
1628     gimple_assign_set_rhs2 (stmt, op2);
1629   if (new_rhs_ops > 2)
1630     gimple_assign_set_rhs3 (stmt, op3);
1631 }
1632
1633
1634 /* Return the LHS of a statement that performs an assignment,
1635    either a GIMPLE_ASSIGN or a GIMPLE_CALL.  Returns NULL_TREE
1636    for a call to a function that returns no value, or for a
1637    statement other than an assignment or a call.  */
1638
1639 tree
1640 gimple_get_lhs (const_gimple stmt)
1641 {
1642   enum gimple_code code = gimple_code (stmt);
1643
1644   if (code == GIMPLE_ASSIGN)
1645     return gimple_assign_lhs (stmt);
1646   else if (code == GIMPLE_CALL)
1647     return gimple_call_lhs (stmt);
1648   else
1649     return NULL_TREE;
1650 }
1651
1652
1653 /* Set the LHS of a statement that performs an assignment,
1654    either a GIMPLE_ASSIGN or a GIMPLE_CALL.  */
1655
1656 void
1657 gimple_set_lhs (gimple stmt, tree lhs)
1658 {
1659   enum gimple_code code = gimple_code (stmt);
1660
1661   if (code == GIMPLE_ASSIGN)
1662     gimple_assign_set_lhs (stmt, lhs);
1663   else if (code == GIMPLE_CALL)
1664     gimple_call_set_lhs (stmt, lhs);
1665   else
1666     gcc_unreachable ();
1667 }
1668
1669
1670 /* Return a deep copy of statement STMT.  All the operands from STMT
1671    are reallocated and copied using unshare_expr.  The DEF, USE, VDEF
1672    and VUSE operand arrays are set to empty in the new copy.  The new
1673    copy isn't part of any sequence.  */
1674
1675 gimple
1676 gimple_copy (gimple stmt)
1677 {
1678   enum gimple_code code = gimple_code (stmt);
1679   unsigned num_ops = gimple_num_ops (stmt);
1680   gimple copy = gimple_alloc (code, num_ops);
1681   unsigned i;
1682
1683   /* Shallow copy all the fields from STMT.  */
1684   memcpy (copy, stmt, gimple_size (code));
1685   gimple_init_singleton (copy);
1686
1687   /* If STMT has sub-statements, deep-copy them as well.  */
1688   if (gimple_has_substatements (stmt))
1689     {
1690       gimple_seq new_seq;
1691       tree t;
1692
1693       switch (gimple_code (stmt))
1694         {
1695         case GIMPLE_BIND:
1696           {
1697             gbind *bind_stmt = as_a <gbind *> (stmt);
1698             gbind *bind_copy = as_a <gbind *> (copy);
1699             new_seq = gimple_seq_copy (gimple_bind_body (bind_stmt));
1700             gimple_bind_set_body (bind_copy, new_seq);
1701             gimple_bind_set_vars (bind_copy,
1702                                   unshare_expr (gimple_bind_vars (bind_stmt)));
1703             gimple_bind_set_block (bind_copy, gimple_bind_block (bind_stmt));
1704           }
1705           break;
1706
1707         case GIMPLE_CATCH:
1708           {
1709             gcatch *catch_stmt = as_a <gcatch *> (stmt);
1710             gcatch *catch_copy = as_a <gcatch *> (copy);
1711             new_seq = gimple_seq_copy (gimple_catch_handler (catch_stmt));
1712             gimple_catch_set_handler (catch_copy, new_seq);
1713             t = unshare_expr (gimple_catch_types (catch_stmt));
1714             gimple_catch_set_types (catch_copy, t);
1715           }
1716           break;
1717
1718         case GIMPLE_EH_FILTER:
1719           {
1720             geh_filter *eh_filter_stmt = as_a <geh_filter *> (stmt);
1721             geh_filter *eh_filter_copy = as_a <geh_filter *> (copy);
1722             new_seq
1723               = gimple_seq_copy (gimple_eh_filter_failure (eh_filter_stmt));
1724             gimple_eh_filter_set_failure (eh_filter_copy, new_seq);
1725             t = unshare_expr (gimple_eh_filter_types (eh_filter_stmt));
1726             gimple_eh_filter_set_types (eh_filter_copy, t);
1727           }
1728           break;
1729
1730         case GIMPLE_EH_ELSE:
1731           {
1732             geh_else *eh_else_stmt = as_a <geh_else *> (stmt);
1733             geh_else *eh_else_copy = as_a <geh_else *> (copy);
1734             new_seq = gimple_seq_copy (gimple_eh_else_n_body (eh_else_stmt));
1735             gimple_eh_else_set_n_body (eh_else_copy, new_seq);
1736             new_seq = gimple_seq_copy (gimple_eh_else_e_body (eh_else_stmt));
1737             gimple_eh_else_set_e_body (eh_else_copy, new_seq);
1738           }
1739           break;
1740
1741         case GIMPLE_TRY:
1742           {
1743             gtry *try_stmt = as_a <gtry *> (stmt);
1744             gtry *try_copy = as_a <gtry *> (copy);
1745             new_seq = gimple_seq_copy (gimple_try_eval (try_stmt));
1746             gimple_try_set_eval (try_copy, new_seq);
1747             new_seq = gimple_seq_copy (gimple_try_cleanup (try_stmt));
1748             gimple_try_set_cleanup (try_copy, new_seq);
1749           }
1750           break;
1751
1752         case GIMPLE_OMP_FOR:
1753           new_seq = gimple_seq_copy (gimple_omp_for_pre_body (stmt));
1754           gimple_omp_for_set_pre_body (copy, new_seq);
1755           t = unshare_expr (gimple_omp_for_clauses (stmt));
1756           gimple_omp_for_set_clauses (copy, t);
1757           {
1758             gomp_for *omp_for_copy = as_a <gomp_for *> (copy);
1759             omp_for_copy->iter = ggc_vec_alloc<gimple_omp_for_iter>
1760               ( gimple_omp_for_collapse (stmt));
1761           }
1762           for (i = 0; i < gimple_omp_for_collapse (stmt); i++)
1763             {
1764               gimple_omp_for_set_cond (copy, i,
1765                                        gimple_omp_for_cond (stmt, i));
1766               gimple_omp_for_set_index (copy, i,
1767                                         gimple_omp_for_index (stmt, i));
1768               t = unshare_expr (gimple_omp_for_initial (stmt, i));
1769               gimple_omp_for_set_initial (copy, i, t);
1770               t = unshare_expr (gimple_omp_for_final (stmt, i));
1771               gimple_omp_for_set_final (copy, i, t);
1772               t = unshare_expr (gimple_omp_for_incr (stmt, i));
1773               gimple_omp_for_set_incr (copy, i, t);
1774             }
1775           goto copy_omp_body;
1776
1777         case GIMPLE_OMP_PARALLEL:
1778           {
1779             gomp_parallel *omp_par_stmt = as_a <gomp_parallel *> (stmt);
1780             gomp_parallel *omp_par_copy = as_a <gomp_parallel *> (copy);
1781             t = unshare_expr (gimple_omp_parallel_clauses (omp_par_stmt));
1782             gimple_omp_parallel_set_clauses (omp_par_copy, t);
1783             t = unshare_expr (gimple_omp_parallel_child_fn (omp_par_stmt));
1784             gimple_omp_parallel_set_child_fn (omp_par_copy, t);
1785             t = unshare_expr (gimple_omp_parallel_data_arg (omp_par_stmt));
1786             gimple_omp_parallel_set_data_arg (omp_par_copy, t);
1787           }
1788           goto copy_omp_body;
1789
1790         case GIMPLE_OMP_TASK:
1791           t = unshare_expr (gimple_omp_task_clauses (stmt));
1792           gimple_omp_task_set_clauses (copy, t);
1793           t = unshare_expr (gimple_omp_task_child_fn (stmt));
1794           gimple_omp_task_set_child_fn (copy, t);
1795           t = unshare_expr (gimple_omp_task_data_arg (stmt));
1796           gimple_omp_task_set_data_arg (copy, t);
1797           t = unshare_expr (gimple_omp_task_copy_fn (stmt));
1798           gimple_omp_task_set_copy_fn (copy, t);
1799           t = unshare_expr (gimple_omp_task_arg_size (stmt));
1800           gimple_omp_task_set_arg_size (copy, t);
1801           t = unshare_expr (gimple_omp_task_arg_align (stmt));
1802           gimple_omp_task_set_arg_align (copy, t);
1803           goto copy_omp_body;
1804
1805         case GIMPLE_OMP_CRITICAL:
1806           t = unshare_expr (gimple_omp_critical_name (
1807                               as_a <gomp_critical *> (stmt)));
1808           gimple_omp_critical_set_name (as_a <gomp_critical *> (copy), t);
1809           goto copy_omp_body;
1810
1811         case GIMPLE_OMP_SECTIONS:
1812           t = unshare_expr (gimple_omp_sections_clauses (stmt));
1813           gimple_omp_sections_set_clauses (copy, t);
1814           t = unshare_expr (gimple_omp_sections_control (stmt));
1815           gimple_omp_sections_set_control (copy, t);
1816           /* FALLTHRU  */
1817
1818         case GIMPLE_OMP_SINGLE:
1819         case GIMPLE_OMP_TARGET:
1820         case GIMPLE_OMP_TEAMS:
1821         case GIMPLE_OMP_SECTION:
1822         case GIMPLE_OMP_MASTER:
1823         case GIMPLE_OMP_TASKGROUP:
1824         case GIMPLE_OMP_ORDERED:
1825         copy_omp_body:
1826           new_seq = gimple_seq_copy (gimple_omp_body (stmt));
1827           gimple_omp_set_body (copy, new_seq);
1828           break;
1829
1830         case GIMPLE_TRANSACTION:
1831           new_seq = gimple_seq_copy (gimple_transaction_body (
1832                                        as_a <gtransaction *> (stmt)));
1833           gimple_transaction_set_body (as_a <gtransaction *> (copy),
1834                                        new_seq);
1835           break;
1836
1837         case GIMPLE_WITH_CLEANUP_EXPR:
1838           new_seq = gimple_seq_copy (gimple_wce_cleanup (stmt));
1839           gimple_wce_set_cleanup (copy, new_seq);
1840           break;
1841
1842         default:
1843           gcc_unreachable ();
1844         }
1845     }
1846
1847   /* Make copy of operands.  */
1848   for (i = 0; i < num_ops; i++)
1849     gimple_set_op (copy, i, unshare_expr (gimple_op (stmt, i)));
1850
1851   if (gimple_has_mem_ops (stmt))
1852     {
1853       gimple_set_vdef (copy, gimple_vdef (stmt));
1854       gimple_set_vuse (copy, gimple_vuse (stmt));
1855     }
1856
1857   /* Clear out SSA operand vectors on COPY.  */
1858   if (gimple_has_ops (stmt))
1859     {
1860       gimple_set_use_ops (copy, NULL);
1861
1862       /* SSA operands need to be updated.  */
1863       gimple_set_modified (copy, true);
1864     }
1865
1866   return copy;
1867 }
1868
1869
1870 /* Return true if statement S has side-effects.  We consider a
1871    statement to have side effects if:
1872
1873    - It is a GIMPLE_CALL not marked with ECF_PURE or ECF_CONST.
1874    - Any of its operands are marked TREE_THIS_VOLATILE or TREE_SIDE_EFFECTS.  */
1875
1876 bool
1877 gimple_has_side_effects (const_gimple s)
1878 {
1879   if (is_gimple_debug (s))
1880     return false;
1881
1882   /* We don't have to scan the arguments to check for
1883      volatile arguments, though, at present, we still
1884      do a scan to check for TREE_SIDE_EFFECTS.  */
1885   if (gimple_has_volatile_ops (s))
1886     return true;
1887
1888   if (gimple_code (s) == GIMPLE_ASM
1889       && gimple_asm_volatile_p (as_a <const gasm *> (s)))
1890     return true;
1891
1892   if (is_gimple_call (s))
1893     {
1894       int flags = gimple_call_flags (s);
1895
1896       /* An infinite loop is considered a side effect.  */
1897       if (!(flags & (ECF_CONST | ECF_PURE))
1898           || (flags & ECF_LOOPING_CONST_OR_PURE))
1899         return true;
1900
1901       return false;
1902     }
1903
1904   return false;
1905 }
1906
1907 /* Helper for gimple_could_trap_p and gimple_assign_rhs_could_trap_p.
1908    Return true if S can trap.  When INCLUDE_MEM is true, check whether
1909    the memory operations could trap.  When INCLUDE_STORES is true and
1910    S is a GIMPLE_ASSIGN, the LHS of the assignment is also checked.  */
1911
1912 bool
1913 gimple_could_trap_p_1 (gimple s, bool include_mem, bool include_stores)
1914 {
1915   tree t, div = NULL_TREE;
1916   enum tree_code op;
1917
1918   if (include_mem)
1919     {
1920       unsigned i, start = (is_gimple_assign (s) && !include_stores) ? 1 : 0;
1921
1922       for (i = start; i < gimple_num_ops (s); i++)
1923         if (tree_could_trap_p (gimple_op (s, i)))
1924           return true;
1925     }
1926
1927   switch (gimple_code (s))
1928     {
1929     case GIMPLE_ASM:
1930       return gimple_asm_volatile_p (as_a <gasm *> (s));
1931
1932     case GIMPLE_CALL:
1933       t = gimple_call_fndecl (s);
1934       /* Assume that calls to weak functions may trap.  */
1935       if (!t || !DECL_P (t) || DECL_WEAK (t))
1936         return true;
1937       return false;
1938
1939     case GIMPLE_ASSIGN:
1940       t = gimple_expr_type (s);
1941       op = gimple_assign_rhs_code (s);
1942       if (get_gimple_rhs_class (op) == GIMPLE_BINARY_RHS)
1943         div = gimple_assign_rhs2 (s);
1944       return (operation_could_trap_p (op, FLOAT_TYPE_P (t),
1945                                       (INTEGRAL_TYPE_P (t)
1946                                        && TYPE_OVERFLOW_TRAPS (t)),
1947                                       div));
1948
1949     default:
1950       break;
1951     }
1952
1953   return false;
1954 }
1955
1956 /* Return true if statement S can trap.  */
1957
1958 bool
1959 gimple_could_trap_p (gimple s)
1960 {
1961   return gimple_could_trap_p_1 (s, true, true);
1962 }
1963
1964 /* Return true if RHS of a GIMPLE_ASSIGN S can trap.  */
1965
1966 bool
1967 gimple_assign_rhs_could_trap_p (gimple s)
1968 {
1969   gcc_assert (is_gimple_assign (s));
1970   return gimple_could_trap_p_1 (s, true, false);
1971 }
1972
1973
1974 /* Print debugging information for gimple stmts generated.  */
1975
1976 void
1977 dump_gimple_statistics (void)
1978 {
1979   int i, total_tuples = 0, total_bytes = 0;
1980
1981   if (! GATHER_STATISTICS)
1982     {
1983       fprintf (stderr, "No gimple statistics\n");
1984       return;
1985     }
1986
1987   fprintf (stderr, "\nGIMPLE statements\n");
1988   fprintf (stderr, "Kind                   Stmts      Bytes\n");
1989   fprintf (stderr, "---------------------------------------\n");
1990   for (i = 0; i < (int) gimple_alloc_kind_all; ++i)
1991     {
1992       fprintf (stderr, "%-20s %7d %10d\n", gimple_alloc_kind_names[i],
1993           gimple_alloc_counts[i], gimple_alloc_sizes[i]);
1994       total_tuples += gimple_alloc_counts[i];
1995       total_bytes += gimple_alloc_sizes[i];
1996     }
1997   fprintf (stderr, "---------------------------------------\n");
1998   fprintf (stderr, "%-20s %7d %10d\n", "Total", total_tuples, total_bytes);
1999   fprintf (stderr, "---------------------------------------\n");
2000 }
2001
2002
2003 /* Return the number of operands needed on the RHS of a GIMPLE
2004    assignment for an expression with tree code CODE.  */
2005
2006 unsigned
2007 get_gimple_rhs_num_ops (enum tree_code code)
2008 {
2009   enum gimple_rhs_class rhs_class = get_gimple_rhs_class (code);
2010
2011   if (rhs_class == GIMPLE_UNARY_RHS || rhs_class == GIMPLE_SINGLE_RHS)
2012     return 1;
2013   else if (rhs_class == GIMPLE_BINARY_RHS)
2014     return 2;
2015   else if (rhs_class == GIMPLE_TERNARY_RHS)
2016     return 3;
2017   else
2018     gcc_unreachable ();
2019 }
2020
2021 #define DEFTREECODE(SYM, STRING, TYPE, NARGS)                               \
2022   (unsigned char)                                                           \
2023   ((TYPE) == tcc_unary ? GIMPLE_UNARY_RHS                                   \
2024    : ((TYPE) == tcc_binary                                                  \
2025       || (TYPE) == tcc_comparison) ? GIMPLE_BINARY_RHS                      \
2026    : ((TYPE) == tcc_constant                                                \
2027       || (TYPE) == tcc_declaration                                          \
2028       || (TYPE) == tcc_reference) ? GIMPLE_SINGLE_RHS                       \
2029    : ((SYM) == TRUTH_AND_EXPR                                               \
2030       || (SYM) == TRUTH_OR_EXPR                                             \
2031       || (SYM) == TRUTH_XOR_EXPR) ? GIMPLE_BINARY_RHS                       \
2032    : (SYM) == TRUTH_NOT_EXPR ? GIMPLE_UNARY_RHS                             \
2033    : ((SYM) == COND_EXPR                                                    \
2034       || (SYM) == WIDEN_MULT_PLUS_EXPR                                      \
2035       || (SYM) == WIDEN_MULT_MINUS_EXPR                                     \
2036       || (SYM) == DOT_PROD_EXPR                                             \
2037       || (SYM) == SAD_EXPR                                                  \
2038       || (SYM) == REALIGN_LOAD_EXPR                                         \
2039       || (SYM) == VEC_COND_EXPR                                             \
2040       || (SYM) == VEC_PERM_EXPR                                             \
2041       || (SYM) == FMA_EXPR) ? GIMPLE_TERNARY_RHS                            \
2042    : ((SYM) == CONSTRUCTOR                                                  \
2043       || (SYM) == OBJ_TYPE_REF                                              \
2044       || (SYM) == ASSERT_EXPR                                               \
2045       || (SYM) == ADDR_EXPR                                                 \
2046       || (SYM) == WITH_SIZE_EXPR                                            \
2047       || (SYM) == SSA_NAME) ? GIMPLE_SINGLE_RHS                             \
2048    : GIMPLE_INVALID_RHS),
2049 #define END_OF_BASE_TREE_CODES (unsigned char) GIMPLE_INVALID_RHS,
2050
2051 const unsigned char gimple_rhs_class_table[] = {
2052 #include "all-tree.def"
2053 };
2054
2055 #undef DEFTREECODE
2056 #undef END_OF_BASE_TREE_CODES
2057
2058 /* Canonicalize a tree T for use in a COND_EXPR as conditional.  Returns
2059    a canonicalized tree that is valid for a COND_EXPR or NULL_TREE, if
2060    we failed to create one.  */
2061
2062 tree
2063 canonicalize_cond_expr_cond (tree t)
2064 {
2065   /* Strip conversions around boolean operations.  */
2066   if (CONVERT_EXPR_P (t)
2067       && (truth_value_p (TREE_CODE (TREE_OPERAND (t, 0)))
2068           || TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0)))
2069              == BOOLEAN_TYPE))
2070     t = TREE_OPERAND (t, 0);
2071
2072   /* For !x use x == 0.  */
2073   if (TREE_CODE (t) == TRUTH_NOT_EXPR)
2074     {
2075       tree top0 = TREE_OPERAND (t, 0);
2076       t = build2 (EQ_EXPR, TREE_TYPE (t),
2077                   top0, build_int_cst (TREE_TYPE (top0), 0));
2078     }
2079   /* For cmp ? 1 : 0 use cmp.  */
2080   else if (TREE_CODE (t) == COND_EXPR
2081            && COMPARISON_CLASS_P (TREE_OPERAND (t, 0))
2082            && integer_onep (TREE_OPERAND (t, 1))
2083            && integer_zerop (TREE_OPERAND (t, 2)))
2084     {
2085       tree top0 = TREE_OPERAND (t, 0);
2086       t = build2 (TREE_CODE (top0), TREE_TYPE (t),
2087                   TREE_OPERAND (top0, 0), TREE_OPERAND (top0, 1));
2088     }
2089   /* For x ^ y use x != y.  */
2090   else if (TREE_CODE (t) == BIT_XOR_EXPR)
2091     t = build2 (NE_EXPR, TREE_TYPE (t),
2092                 TREE_OPERAND (t, 0), TREE_OPERAND (t, 1));
2093   
2094   if (is_gimple_condexpr (t))
2095     return t;
2096
2097   return NULL_TREE;
2098 }
2099
2100 /* Build a GIMPLE_CALL identical to STMT but skipping the arguments in
2101    the positions marked by the set ARGS_TO_SKIP.  */
2102
2103 gcall *
2104 gimple_call_copy_skip_args (gcall *stmt, bitmap args_to_skip)
2105 {
2106   int i;
2107   int nargs = gimple_call_num_args (stmt);
2108   auto_vec<tree> vargs (nargs);
2109   gcall *new_stmt;
2110
2111   for (i = 0; i < nargs; i++)
2112     if (!bitmap_bit_p (args_to_skip, i))
2113       vargs.quick_push (gimple_call_arg (stmt, i));
2114
2115   if (gimple_call_internal_p (stmt))
2116     new_stmt = gimple_build_call_internal_vec (gimple_call_internal_fn (stmt),
2117                                                vargs);
2118   else
2119     new_stmt = gimple_build_call_vec (gimple_call_fn (stmt), vargs);
2120
2121   if (gimple_call_lhs (stmt))
2122     gimple_call_set_lhs (new_stmt, gimple_call_lhs (stmt));
2123
2124   gimple_set_vuse (new_stmt, gimple_vuse (stmt));
2125   gimple_set_vdef (new_stmt, gimple_vdef (stmt));
2126
2127   if (gimple_has_location (stmt))
2128     gimple_set_location (new_stmt, gimple_location (stmt));
2129   gimple_call_copy_flags (new_stmt, stmt);
2130   gimple_call_set_chain (new_stmt, gimple_call_chain (stmt));
2131
2132   gimple_set_modified (new_stmt, true);
2133
2134   return new_stmt;
2135 }
2136
2137
2138
2139 /* Return true if the field decls F1 and F2 are at the same offset.
2140
2141    This is intended to be used on GIMPLE types only.  */
2142
2143 bool
2144 gimple_compare_field_offset (tree f1, tree f2)
2145 {
2146   if (DECL_OFFSET_ALIGN (f1) == DECL_OFFSET_ALIGN (f2))
2147     {
2148       tree offset1 = DECL_FIELD_OFFSET (f1);
2149       tree offset2 = DECL_FIELD_OFFSET (f2);
2150       return ((offset1 == offset2
2151                /* Once gimplification is done, self-referential offsets are
2152                   instantiated as operand #2 of the COMPONENT_REF built for
2153                   each access and reset.  Therefore, they are not relevant
2154                   anymore and fields are interchangeable provided that they
2155                   represent the same access.  */
2156                || (TREE_CODE (offset1) == PLACEHOLDER_EXPR
2157                    && TREE_CODE (offset2) == PLACEHOLDER_EXPR
2158                    && (DECL_SIZE (f1) == DECL_SIZE (f2)
2159                        || (TREE_CODE (DECL_SIZE (f1)) == PLACEHOLDER_EXPR
2160                            && TREE_CODE (DECL_SIZE (f2)) == PLACEHOLDER_EXPR)
2161                        || operand_equal_p (DECL_SIZE (f1), DECL_SIZE (f2), 0))
2162                    && DECL_ALIGN (f1) == DECL_ALIGN (f2))
2163                || operand_equal_p (offset1, offset2, 0))
2164               && tree_int_cst_equal (DECL_FIELD_BIT_OFFSET (f1),
2165                                      DECL_FIELD_BIT_OFFSET (f2)));
2166     }
2167
2168   /* Fortran and C do not always agree on what DECL_OFFSET_ALIGN
2169      should be, so handle differing ones specially by decomposing
2170      the offset into a byte and bit offset manually.  */
2171   if (tree_fits_shwi_p (DECL_FIELD_OFFSET (f1))
2172       && tree_fits_shwi_p (DECL_FIELD_OFFSET (f2)))
2173     {
2174       unsigned HOST_WIDE_INT byte_offset1, byte_offset2;
2175       unsigned HOST_WIDE_INT bit_offset1, bit_offset2;
2176       bit_offset1 = TREE_INT_CST_LOW (DECL_FIELD_BIT_OFFSET (f1));
2177       byte_offset1 = (TREE_INT_CST_LOW (DECL_FIELD_OFFSET (f1))
2178                       + bit_offset1 / BITS_PER_UNIT);
2179       bit_offset2 = TREE_INT_CST_LOW (DECL_FIELD_BIT_OFFSET (f2));
2180       byte_offset2 = (TREE_INT_CST_LOW (DECL_FIELD_OFFSET (f2))
2181                       + bit_offset2 / BITS_PER_UNIT);
2182       if (byte_offset1 != byte_offset2)
2183         return false;
2184       return bit_offset1 % BITS_PER_UNIT == bit_offset2 % BITS_PER_UNIT;
2185     }
2186
2187   return false;
2188 }
2189
2190
2191 /* Return a type the same as TYPE except unsigned or
2192    signed according to UNSIGNEDP.  */
2193
2194 static tree
2195 gimple_signed_or_unsigned_type (bool unsignedp, tree type)
2196 {
2197   tree type1;
2198   int i;
2199
2200   type1 = TYPE_MAIN_VARIANT (type);
2201   if (type1 == signed_char_type_node
2202       || type1 == char_type_node
2203       || type1 == unsigned_char_type_node)
2204     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2205   if (type1 == integer_type_node || type1 == unsigned_type_node)
2206     return unsignedp ? unsigned_type_node : integer_type_node;
2207   if (type1 == short_integer_type_node || type1 == short_unsigned_type_node)
2208     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2209   if (type1 == long_integer_type_node || type1 == long_unsigned_type_node)
2210     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2211   if (type1 == long_long_integer_type_node
2212       || type1 == long_long_unsigned_type_node)
2213     return unsignedp
2214            ? long_long_unsigned_type_node
2215            : long_long_integer_type_node;
2216
2217   for (i = 0; i < NUM_INT_N_ENTS; i ++)
2218     if (int_n_enabled_p[i]
2219         && (type1 == int_n_trees[i].unsigned_type
2220             || type1 == int_n_trees[i].signed_type))
2221         return unsignedp
2222           ? int_n_trees[i].unsigned_type
2223           : int_n_trees[i].signed_type;
2224
2225 #if HOST_BITS_PER_WIDE_INT >= 64
2226   if (type1 == intTI_type_node || type1 == unsigned_intTI_type_node)
2227     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2228 #endif
2229   if (type1 == intDI_type_node || type1 == unsigned_intDI_type_node)
2230     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2231   if (type1 == intSI_type_node || type1 == unsigned_intSI_type_node)
2232     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2233   if (type1 == intHI_type_node || type1 == unsigned_intHI_type_node)
2234     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2235   if (type1 == intQI_type_node || type1 == unsigned_intQI_type_node)
2236     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2237
2238 #define GIMPLE_FIXED_TYPES(NAME)            \
2239   if (type1 == short_ ## NAME ## _type_node \
2240       || type1 == unsigned_short_ ## NAME ## _type_node) \
2241     return unsignedp ? unsigned_short_ ## NAME ## _type_node \
2242                      : short_ ## NAME ## _type_node; \
2243   if (type1 == NAME ## _type_node \
2244       || type1 == unsigned_ ## NAME ## _type_node) \
2245     return unsignedp ? unsigned_ ## NAME ## _type_node \
2246                      : NAME ## _type_node; \
2247   if (type1 == long_ ## NAME ## _type_node \
2248       || type1 == unsigned_long_ ## NAME ## _type_node) \
2249     return unsignedp ? unsigned_long_ ## NAME ## _type_node \
2250                      : long_ ## NAME ## _type_node; \
2251   if (type1 == long_long_ ## NAME ## _type_node \
2252       || type1 == unsigned_long_long_ ## NAME ## _type_node) \
2253     return unsignedp ? unsigned_long_long_ ## NAME ## _type_node \
2254                      : long_long_ ## NAME ## _type_node;
2255
2256 #define GIMPLE_FIXED_MODE_TYPES(NAME) \
2257   if (type1 == NAME ## _type_node \
2258       || type1 == u ## NAME ## _type_node) \
2259     return unsignedp ? u ## NAME ## _type_node \
2260                      : NAME ## _type_node;
2261
2262 #define GIMPLE_FIXED_TYPES_SAT(NAME) \
2263   if (type1 == sat_ ## short_ ## NAME ## _type_node \
2264       || type1 == sat_ ## unsigned_short_ ## NAME ## _type_node) \
2265     return unsignedp ? sat_ ## unsigned_short_ ## NAME ## _type_node \
2266                      : sat_ ## short_ ## NAME ## _type_node; \
2267   if (type1 == sat_ ## NAME ## _type_node \
2268       || type1 == sat_ ## unsigned_ ## NAME ## _type_node) \
2269     return unsignedp ? sat_ ## unsigned_ ## NAME ## _type_node \
2270                      : sat_ ## NAME ## _type_node; \
2271   if (type1 == sat_ ## long_ ## NAME ## _type_node \
2272       || type1 == sat_ ## unsigned_long_ ## NAME ## _type_node) \
2273     return unsignedp ? sat_ ## unsigned_long_ ## NAME ## _type_node \
2274                      : sat_ ## long_ ## NAME ## _type_node; \
2275   if (type1 == sat_ ## long_long_ ## NAME ## _type_node \
2276       || type1 == sat_ ## unsigned_long_long_ ## NAME ## _type_node) \
2277     return unsignedp ? sat_ ## unsigned_long_long_ ## NAME ## _type_node \
2278                      : sat_ ## long_long_ ## NAME ## _type_node;
2279
2280 #define GIMPLE_FIXED_MODE_TYPES_SAT(NAME)       \
2281   if (type1 == sat_ ## NAME ## _type_node \
2282       || type1 == sat_ ## u ## NAME ## _type_node) \
2283     return unsignedp ? sat_ ## u ## NAME ## _type_node \
2284                      : sat_ ## NAME ## _type_node;
2285
2286   GIMPLE_FIXED_TYPES (fract);
2287   GIMPLE_FIXED_TYPES_SAT (fract);
2288   GIMPLE_FIXED_TYPES (accum);
2289   GIMPLE_FIXED_TYPES_SAT (accum);
2290
2291   GIMPLE_FIXED_MODE_TYPES (qq);
2292   GIMPLE_FIXED_MODE_TYPES (hq);
2293   GIMPLE_FIXED_MODE_TYPES (sq);
2294   GIMPLE_FIXED_MODE_TYPES (dq);
2295   GIMPLE_FIXED_MODE_TYPES (tq);
2296   GIMPLE_FIXED_MODE_TYPES_SAT (qq);
2297   GIMPLE_FIXED_MODE_TYPES_SAT (hq);
2298   GIMPLE_FIXED_MODE_TYPES_SAT (sq);
2299   GIMPLE_FIXED_MODE_TYPES_SAT (dq);
2300   GIMPLE_FIXED_MODE_TYPES_SAT (tq);
2301   GIMPLE_FIXED_MODE_TYPES (ha);
2302   GIMPLE_FIXED_MODE_TYPES (sa);
2303   GIMPLE_FIXED_MODE_TYPES (da);
2304   GIMPLE_FIXED_MODE_TYPES (ta);
2305   GIMPLE_FIXED_MODE_TYPES_SAT (ha);
2306   GIMPLE_FIXED_MODE_TYPES_SAT (sa);
2307   GIMPLE_FIXED_MODE_TYPES_SAT (da);
2308   GIMPLE_FIXED_MODE_TYPES_SAT (ta);
2309
2310   /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
2311      the precision; they have precision set to match their range, but
2312      may use a wider mode to match an ABI.  If we change modes, we may
2313      wind up with bad conversions.  For INTEGER_TYPEs in C, must check
2314      the precision as well, so as to yield correct results for
2315      bit-field types.  C++ does not have these separate bit-field
2316      types, and producing a signed or unsigned variant of an
2317      ENUMERAL_TYPE may cause other problems as well.  */
2318   if (!INTEGRAL_TYPE_P (type)
2319       || TYPE_UNSIGNED (type) == unsignedp)
2320     return type;
2321
2322 #define TYPE_OK(node)                                                       \
2323   (TYPE_MODE (type) == TYPE_MODE (node)                                     \
2324    && TYPE_PRECISION (type) == TYPE_PRECISION (node))
2325   if (TYPE_OK (signed_char_type_node))
2326     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2327   if (TYPE_OK (integer_type_node))
2328     return unsignedp ? unsigned_type_node : integer_type_node;
2329   if (TYPE_OK (short_integer_type_node))
2330     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2331   if (TYPE_OK (long_integer_type_node))
2332     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2333   if (TYPE_OK (long_long_integer_type_node))
2334     return (unsignedp
2335             ? long_long_unsigned_type_node
2336             : long_long_integer_type_node);
2337
2338   for (i = 0; i < NUM_INT_N_ENTS; i ++)
2339     if (int_n_enabled_p[i]
2340         && TYPE_MODE (type) == int_n_data[i].m
2341         && TYPE_PRECISION (type) == int_n_data[i].bitsize)
2342         return unsignedp
2343           ? int_n_trees[i].unsigned_type
2344           : int_n_trees[i].signed_type;
2345
2346 #if HOST_BITS_PER_WIDE_INT >= 64
2347   if (TYPE_OK (intTI_type_node))
2348     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2349 #endif
2350   if (TYPE_OK (intDI_type_node))
2351     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2352   if (TYPE_OK (intSI_type_node))
2353     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2354   if (TYPE_OK (intHI_type_node))
2355     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2356   if (TYPE_OK (intQI_type_node))
2357     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2358
2359 #undef GIMPLE_FIXED_TYPES
2360 #undef GIMPLE_FIXED_MODE_TYPES
2361 #undef GIMPLE_FIXED_TYPES_SAT
2362 #undef GIMPLE_FIXED_MODE_TYPES_SAT
2363 #undef TYPE_OK
2364
2365   return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
2366 }
2367
2368
2369 /* Return an unsigned type the same as TYPE in other respects.  */
2370
2371 tree
2372 gimple_unsigned_type (tree type)
2373 {
2374   return gimple_signed_or_unsigned_type (true, type);
2375 }
2376
2377
2378 /* Return a signed type the same as TYPE in other respects.  */
2379
2380 tree
2381 gimple_signed_type (tree type)
2382 {
2383   return gimple_signed_or_unsigned_type (false, type);
2384 }
2385
2386
2387 /* Return the typed-based alias set for T, which may be an expression
2388    or a type.  Return -1 if we don't do anything special.  */
2389
2390 alias_set_type
2391 gimple_get_alias_set (tree t)
2392 {
2393   tree u;
2394
2395   /* Permit type-punning when accessing a union, provided the access
2396      is directly through the union.  For example, this code does not
2397      permit taking the address of a union member and then storing
2398      through it.  Even the type-punning allowed here is a GCC
2399      extension, albeit a common and useful one; the C standard says
2400      that such accesses have implementation-defined behavior.  */
2401   for (u = t;
2402        TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
2403        u = TREE_OPERAND (u, 0))
2404     if (TREE_CODE (u) == COMPONENT_REF
2405         && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
2406       return 0;
2407
2408   /* That's all the expressions we handle specially.  */
2409   if (!TYPE_P (t))
2410     return -1;
2411
2412   /* For convenience, follow the C standard when dealing with
2413      character types.  Any object may be accessed via an lvalue that
2414      has character type.  */
2415   if (t == char_type_node
2416       || t == signed_char_type_node
2417       || t == unsigned_char_type_node)
2418     return 0;
2419
2420   /* Allow aliasing between signed and unsigned variants of the same
2421      type.  We treat the signed variant as canonical.  */
2422   if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
2423     {
2424       tree t1 = gimple_signed_type (t);
2425
2426       /* t1 == t can happen for boolean nodes which are always unsigned.  */
2427       if (t1 != t)
2428         return get_alias_set (t1);
2429     }
2430
2431   return -1;
2432 }
2433
2434
2435 /* Helper for gimple_ior_addresses_taken_1.  */
2436
2437 static bool
2438 gimple_ior_addresses_taken_1 (gimple, tree addr, tree, void *data)
2439 {
2440   bitmap addresses_taken = (bitmap)data;
2441   addr = get_base_address (addr);
2442   if (addr
2443       && DECL_P (addr))
2444     {
2445       bitmap_set_bit (addresses_taken, DECL_UID (addr));
2446       return true;
2447     }
2448   return false;
2449 }
2450
2451 /* Set the bit for the uid of all decls that have their address taken
2452    in STMT in the ADDRESSES_TAKEN bitmap.  Returns true if there
2453    were any in this stmt.  */
2454
2455 bool
2456 gimple_ior_addresses_taken (bitmap addresses_taken, gimple stmt)
2457 {
2458   return walk_stmt_load_store_addr_ops (stmt, addresses_taken, NULL, NULL,
2459                                         gimple_ior_addresses_taken_1);
2460 }
2461
2462
2463 /* Return true if TYPE1 and TYPE2 are compatible enough for builtin
2464    processing.  */
2465
2466 static bool
2467 validate_type (tree type1, tree type2)
2468 {
2469   if (INTEGRAL_TYPE_P (type1)
2470       && INTEGRAL_TYPE_P (type2))
2471     ;
2472   else if (POINTER_TYPE_P (type1)
2473            && POINTER_TYPE_P (type2))
2474     ;
2475   else if (TREE_CODE (type1)
2476            != TREE_CODE (type2))
2477     return false;
2478   return true;
2479 }
2480
2481 /* Return true when STMTs arguments and return value match those of FNDECL,
2482    a decl of a builtin function.  */
2483
2484 bool
2485 gimple_builtin_call_types_compatible_p (const_gimple stmt, tree fndecl)
2486 {
2487   gcc_checking_assert (DECL_BUILT_IN_CLASS (fndecl) != NOT_BUILT_IN);
2488
2489   tree ret = gimple_call_lhs (stmt);
2490   if (ret
2491       && !validate_type (TREE_TYPE (ret), TREE_TYPE (TREE_TYPE (fndecl))))
2492     return false;
2493
2494   tree targs = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
2495   unsigned nargs = gimple_call_num_args (stmt);
2496   for (unsigned i = 0; i < nargs; ++i)
2497     {
2498       /* Variadic args follow.  */
2499       if (!targs)
2500         return true;
2501       tree arg = gimple_call_arg (stmt, i);
2502       if (!validate_type (TREE_TYPE (arg), TREE_VALUE (targs)))
2503         return false;
2504       targs = TREE_CHAIN (targs);
2505     }
2506   if (targs && !VOID_TYPE_P (TREE_VALUE (targs)))
2507     return false;
2508   return true;
2509 }
2510
2511 /* Return true when STMT is builtins call.  */
2512
2513 bool
2514 gimple_call_builtin_p (const_gimple stmt)
2515 {
2516   tree fndecl;
2517   if (is_gimple_call (stmt)
2518       && (fndecl = gimple_call_fndecl (stmt)) != NULL_TREE
2519       && DECL_BUILT_IN_CLASS (fndecl) != NOT_BUILT_IN)
2520     return gimple_builtin_call_types_compatible_p (stmt, fndecl);
2521   return false;
2522 }
2523
2524 /* Return true when STMT is builtins call to CLASS.  */
2525
2526 bool
2527 gimple_call_builtin_p (const_gimple stmt, enum built_in_class klass)
2528 {
2529   tree fndecl;
2530   if (is_gimple_call (stmt)
2531       && (fndecl = gimple_call_fndecl (stmt)) != NULL_TREE
2532       && DECL_BUILT_IN_CLASS (fndecl) == klass)
2533     return gimple_builtin_call_types_compatible_p (stmt, fndecl);
2534   return false;
2535 }
2536
2537 /* Return true when STMT is builtins call to CODE of CLASS.  */
2538
2539 bool
2540 gimple_call_builtin_p (const_gimple stmt, enum built_in_function code)
2541 {
2542   tree fndecl;
2543   if (is_gimple_call (stmt)
2544       && (fndecl = gimple_call_fndecl (stmt)) != NULL_TREE
2545       && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL 
2546       && DECL_FUNCTION_CODE (fndecl) == code)
2547     return gimple_builtin_call_types_compatible_p (stmt, fndecl);
2548   return false;
2549 }
2550
2551 /* Return true if STMT clobbers memory.  STMT is required to be a
2552    GIMPLE_ASM.  */
2553
2554 bool
2555 gimple_asm_clobbers_memory_p (const gasm *stmt)
2556 {
2557   unsigned i;
2558
2559   for (i = 0; i < gimple_asm_nclobbers (stmt); i++)
2560     {
2561       tree op = gimple_asm_clobber_op (stmt, i);
2562       if (strcmp (TREE_STRING_POINTER (TREE_VALUE (op)), "memory") == 0)
2563         return true;
2564     }
2565
2566   return false;
2567 }
2568
2569 /* Dump bitmap SET (assumed to contain VAR_DECLs) to FILE.  */
2570
2571 void
2572 dump_decl_set (FILE *file, bitmap set)
2573 {
2574   if (set)
2575     {
2576       bitmap_iterator bi;
2577       unsigned i;
2578
2579       fprintf (file, "{ ");
2580
2581       EXECUTE_IF_SET_IN_BITMAP (set, 0, i, bi)
2582         {
2583           fprintf (file, "D.%u", i);
2584           fprintf (file, " ");
2585         }
2586
2587       fprintf (file, "}");
2588     }
2589   else
2590     fprintf (file, "NIL");
2591 }
2592
2593 /* Return true when CALL is a call stmt that definitely doesn't
2594    free any memory or makes it unavailable otherwise.  */
2595 bool
2596 nonfreeing_call_p (gimple call)
2597 {
2598   if (gimple_call_builtin_p (call, BUILT_IN_NORMAL)
2599       && gimple_call_flags (call) & ECF_LEAF)
2600     switch (DECL_FUNCTION_CODE (gimple_call_fndecl (call)))
2601       {
2602         /* Just in case these become ECF_LEAF in the future.  */
2603         case BUILT_IN_FREE:
2604         case BUILT_IN_TM_FREE:
2605         case BUILT_IN_REALLOC:
2606         case BUILT_IN_STACK_RESTORE:
2607           return false;
2608         default:
2609           return true;
2610       }
2611   else if (gimple_call_internal_p (call))
2612     switch (gimple_call_internal_fn (call))
2613       {
2614       case IFN_ABNORMAL_DISPATCHER:
2615         return true;
2616       default:
2617         if (gimple_call_flags (call) & ECF_LEAF)
2618           return true;
2619         return false;
2620       }
2621
2622   tree fndecl = gimple_call_fndecl (call);
2623   if (!fndecl)
2624     return false;
2625   struct cgraph_node *n = cgraph_node::get (fndecl);
2626   if (!n)
2627     return false;
2628   enum availability availability;
2629   n = n->function_symbol (&availability);
2630   if (!n || availability <= AVAIL_INTERPOSABLE)
2631     return false;
2632   return n->nonfreeing_fn;
2633 }
2634
2635 /* Callback for walk_stmt_load_store_ops.
2636  
2637    Return TRUE if OP will dereference the tree stored in DATA, FALSE
2638    otherwise.
2639
2640    This routine only makes a superficial check for a dereference.  Thus
2641    it must only be used if it is safe to return a false negative.  */
2642 static bool
2643 check_loadstore (gimple, tree op, tree, void *data)
2644 {
2645   if ((TREE_CODE (op) == MEM_REF || TREE_CODE (op) == TARGET_MEM_REF)
2646       && operand_equal_p (TREE_OPERAND (op, 0), (tree)data, 0))
2647     return true;
2648   return false;
2649 }
2650
2651 /* If OP can be inferred to be non-NULL after STMT executes, return true.
2652
2653    DEREFERENCE is TRUE if we can use a pointer dereference to infer a
2654    non-NULL range, FALSE otherwise.
2655
2656    ATTRIBUTE is TRUE if we can use attributes to infer a non-NULL range
2657    for function arguments and return values.  FALSE otherwise.  */
2658
2659 bool
2660 infer_nonnull_range (gimple stmt, tree op, bool dereference, bool attribute)
2661 {
2662   /* We can only assume that a pointer dereference will yield
2663      non-NULL if -fdelete-null-pointer-checks is enabled.  */
2664   if (!flag_delete_null_pointer_checks
2665       || !POINTER_TYPE_P (TREE_TYPE (op))
2666       || gimple_code (stmt) == GIMPLE_ASM)
2667     return false;
2668
2669   if (dereference
2670       && walk_stmt_load_store_ops (stmt, (void *)op,
2671                                    check_loadstore, check_loadstore))
2672     return true;
2673
2674   if (attribute
2675       && is_gimple_call (stmt) && !gimple_call_internal_p (stmt))
2676     {
2677       tree fntype = gimple_call_fntype (stmt);
2678       tree attrs = TYPE_ATTRIBUTES (fntype);
2679       for (; attrs; attrs = TREE_CHAIN (attrs))
2680         {
2681           attrs = lookup_attribute ("nonnull", attrs);
2682
2683           /* If "nonnull" wasn't specified, we know nothing about
2684              the argument.  */
2685           if (attrs == NULL_TREE)
2686             return false;
2687
2688           /* If "nonnull" applies to all the arguments, then ARG
2689              is non-null if it's in the argument list.  */
2690           if (TREE_VALUE (attrs) == NULL_TREE)
2691             {
2692               for (unsigned int i = 0; i < gimple_call_num_args (stmt); i++)
2693                 {
2694                   if (POINTER_TYPE_P (TREE_TYPE (gimple_call_arg (stmt, i)))
2695                       && operand_equal_p (op, gimple_call_arg (stmt, i), 0))
2696                     return true;
2697                 }
2698               return false;
2699             }
2700
2701           /* Now see if op appears in the nonnull list.  */
2702           for (tree t = TREE_VALUE (attrs); t; t = TREE_CHAIN (t))
2703             {
2704               int idx = TREE_INT_CST_LOW (TREE_VALUE (t)) - 1;
2705               tree arg = gimple_call_arg (stmt, idx);
2706               if (operand_equal_p (op, arg, 0))
2707                 return true;
2708             }
2709         }
2710     }
2711
2712   /* If this function is marked as returning non-null, then we can
2713      infer OP is non-null if it is used in the return statement.  */
2714   if (attribute)
2715     if (greturn *return_stmt = dyn_cast <greturn *> (stmt))
2716       if (gimple_return_retval (return_stmt)
2717           && operand_equal_p (gimple_return_retval (return_stmt), op, 0)
2718           && lookup_attribute ("returns_nonnull",
2719                                TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl))))
2720         return true;
2721
2722   return false;
2723 }
2724
2725 /* Compare two case labels.  Because the front end should already have
2726    made sure that case ranges do not overlap, it is enough to only compare
2727    the CASE_LOW values of each case label.  */
2728
2729 static int
2730 compare_case_labels (const void *p1, const void *p2)
2731 {
2732   const_tree const case1 = *(const_tree const*)p1;
2733   const_tree const case2 = *(const_tree const*)p2;
2734
2735   /* The 'default' case label always goes first.  */
2736   if (!CASE_LOW (case1))
2737     return -1;
2738   else if (!CASE_LOW (case2))
2739     return 1;
2740   else
2741     return tree_int_cst_compare (CASE_LOW (case1), CASE_LOW (case2));
2742 }
2743
2744 /* Sort the case labels in LABEL_VEC in place in ascending order.  */
2745
2746 void
2747 sort_case_labels (vec<tree> label_vec)
2748 {
2749   label_vec.qsort (compare_case_labels);
2750 }
2751 \f
2752 /* Prepare a vector of case labels to be used in a GIMPLE_SWITCH statement.
2753
2754    LABELS is a vector that contains all case labels to look at.
2755
2756    INDEX_TYPE is the type of the switch index expression.  Case labels
2757    in LABELS are discarded if their values are not in the value range
2758    covered by INDEX_TYPE.  The remaining case label values are folded
2759    to INDEX_TYPE.
2760
2761    If a default case exists in LABELS, it is removed from LABELS and
2762    returned in DEFAULT_CASEP.  If no default case exists, but the
2763    case labels already cover the whole range of INDEX_TYPE, a default
2764    case is returned pointing to one of the existing case labels.
2765    Otherwise DEFAULT_CASEP is set to NULL_TREE.
2766
2767    DEFAULT_CASEP may be NULL, in which case the above comment doesn't
2768    apply and no action is taken regardless of whether a default case is
2769    found or not.  */
2770
2771 void
2772 preprocess_case_label_vec_for_gimple (vec<tree> labels,
2773                                       tree index_type,
2774                                       tree *default_casep)
2775 {
2776   tree min_value, max_value;
2777   tree default_case = NULL_TREE;
2778   size_t i, len;
2779
2780   i = 0;
2781   min_value = TYPE_MIN_VALUE (index_type);
2782   max_value = TYPE_MAX_VALUE (index_type);
2783   while (i < labels.length ())
2784     {
2785       tree elt = labels[i];
2786       tree low = CASE_LOW (elt);
2787       tree high = CASE_HIGH (elt);
2788       bool remove_element = FALSE;
2789
2790       if (low)
2791         {
2792           gcc_checking_assert (TREE_CODE (low) == INTEGER_CST);
2793           gcc_checking_assert (!high || TREE_CODE (high) == INTEGER_CST);
2794
2795           /* This is a non-default case label, i.e. it has a value.
2796
2797              See if the case label is reachable within the range of
2798              the index type.  Remove out-of-range case values.  Turn
2799              case ranges into a canonical form (high > low strictly)
2800              and convert the case label values to the index type.
2801
2802              NB: The type of gimple_switch_index() may be the promoted
2803              type, but the case labels retain the original type.  */
2804
2805           if (high)
2806             {
2807               /* This is a case range.  Discard empty ranges.
2808                  If the bounds or the range are equal, turn this
2809                  into a simple (one-value) case.  */
2810               int cmp = tree_int_cst_compare (high, low);
2811               if (cmp < 0)
2812                 remove_element = TRUE;
2813               else if (cmp == 0)
2814                 high = NULL_TREE;
2815             }
2816
2817           if (! high)
2818             {
2819               /* If the simple case value is unreachable, ignore it.  */
2820               if ((TREE_CODE (min_value) == INTEGER_CST
2821                    && tree_int_cst_compare (low, min_value) < 0)
2822                   || (TREE_CODE (max_value) == INTEGER_CST
2823                       && tree_int_cst_compare (low, max_value) > 0))
2824                 remove_element = TRUE;
2825               else
2826                 low = fold_convert (index_type, low);
2827             }
2828           else
2829             {
2830               /* If the entire case range is unreachable, ignore it.  */
2831               if ((TREE_CODE (min_value) == INTEGER_CST
2832                    && tree_int_cst_compare (high, min_value) < 0)
2833                   || (TREE_CODE (max_value) == INTEGER_CST
2834                       && tree_int_cst_compare (low, max_value) > 0))
2835                 remove_element = TRUE;
2836               else
2837                 {
2838                   /* If the lower bound is less than the index type's
2839                      minimum value, truncate the range bounds.  */
2840                   if (TREE_CODE (min_value) == INTEGER_CST
2841                       && tree_int_cst_compare (low, min_value) < 0)
2842                     low = min_value;
2843                   low = fold_convert (index_type, low);
2844
2845                   /* If the upper bound is greater than the index type's
2846                      maximum value, truncate the range bounds.  */
2847                   if (TREE_CODE (max_value) == INTEGER_CST
2848                       && tree_int_cst_compare (high, max_value) > 0)
2849                     high = max_value;
2850                   high = fold_convert (index_type, high);
2851
2852                   /* We may have folded a case range to a one-value case.  */
2853                   if (tree_int_cst_equal (low, high))
2854                     high = NULL_TREE;
2855                 }
2856             }
2857
2858           CASE_LOW (elt) = low;
2859           CASE_HIGH (elt) = high;
2860         }
2861       else
2862         {
2863           gcc_assert (!default_case);
2864           default_case = elt;
2865           /* The default case must be passed separately to the
2866              gimple_build_switch routine.  But if DEFAULT_CASEP
2867              is NULL, we do not remove the default case (it would
2868              be completely lost).  */
2869           if (default_casep)
2870             remove_element = TRUE;
2871         }
2872
2873       if (remove_element)
2874         labels.ordered_remove (i);
2875       else
2876         i++;
2877     }
2878   len = i;
2879
2880   if (!labels.is_empty ())
2881     sort_case_labels (labels);
2882
2883   if (default_casep && !default_case)
2884     {
2885       /* If the switch has no default label, add one, so that we jump
2886          around the switch body.  If the labels already cover the whole
2887          range of the switch index_type, add the default label pointing
2888          to one of the existing labels.  */
2889       if (len
2890           && TYPE_MIN_VALUE (index_type)
2891           && TYPE_MAX_VALUE (index_type)
2892           && tree_int_cst_equal (CASE_LOW (labels[0]),
2893                                  TYPE_MIN_VALUE (index_type)))
2894         {
2895           tree low, high = CASE_HIGH (labels[len - 1]);
2896           if (!high)
2897             high = CASE_LOW (labels[len - 1]);
2898           if (tree_int_cst_equal (high, TYPE_MAX_VALUE (index_type)))
2899             {
2900               for (i = 1; i < len; i++)
2901                 {
2902                   high = CASE_LOW (labels[i]);
2903                   low = CASE_HIGH (labels[i - 1]);
2904                   if (!low)
2905                     low = CASE_LOW (labels[i - 1]);
2906                   if (wi::add (low, 1) != high)
2907                     break;
2908                 }
2909               if (i == len)
2910                 {
2911                   tree label = CASE_LABEL (labels[0]);
2912                   default_case = build_case_label (NULL_TREE, NULL_TREE,
2913                                                    label);
2914                 }
2915             }
2916         }
2917     }
2918
2919   if (default_casep)
2920     *default_casep = default_case;
2921 }
2922
2923 /* Set the location of all statements in SEQ to LOC.  */
2924
2925 void
2926 gimple_seq_set_location (gimple_seq seq, location_t loc)
2927 {
2928   for (gimple_stmt_iterator i = gsi_start (seq); !gsi_end_p (i); gsi_next (&i))
2929     gimple_set_location (gsi_stmt (i), loc);
2930 }
2931
2932 /* Release SSA_NAMEs in SEQ as well as the GIMPLE statements.  */
2933
2934 void
2935 gimple_seq_discard (gimple_seq seq)
2936 {
2937   gimple_stmt_iterator gsi;
2938
2939   for (gsi = gsi_start (seq); !gsi_end_p (gsi); )
2940     {
2941       gimple stmt = gsi_stmt (gsi);
2942       gsi_remove (&gsi, true);
2943       release_defs (stmt);
2944       ggc_free (stmt);
2945     }
2946 }