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