OSDN Git Service

2011-04-08 Richard Guenther <rguenther@suse.de>
[pf3gnuchains/gcc-fork.git] / gcc / gimple.c
1 /* Gimple IR support functions.
2
3    Copyright 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
4    Contributed by Aldy Hernandez <aldyh@redhat.com>
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 #include "target.h"
27 #include "tree.h"
28 #include "ggc.h"
29 #include "hard-reg-set.h"
30 #include "basic-block.h"
31 #include "gimple.h"
32 #include "diagnostic.h"
33 #include "tree-flow.h"
34 #include "value-prof.h"
35 #include "flags.h"
36 #include "alias.h"
37 #include "demangle.h"
38 #include "langhooks.h"
39
40 /* Global type table.  FIXME lto, it should be possible to re-use some
41    of the type hashing routines in tree.c (type_hash_canon, type_hash_lookup,
42    etc), but those assume that types were built with the various
43    build_*_type routines which is not the case with the streamer.  */
44 static GTY((if_marked ("ggc_marked_p"), param_is (union tree_node)))
45   htab_t gimple_types;
46 static GTY((if_marked ("ggc_marked_p"), param_is (union tree_node)))
47   htab_t gimple_canonical_types;
48 static GTY((if_marked ("tree_int_map_marked_p"), param_is (struct tree_int_map)))
49   htab_t type_hash_cache;
50 static GTY((if_marked ("tree_int_map_marked_p"), param_is (struct tree_int_map)))
51   htab_t canonical_type_hash_cache;
52
53 /* Global type comparison cache.  This is by TYPE_UID for space efficiency
54    and thus cannot use and does not need GC.  */
55 static htab_t gtc_visited;
56 static struct obstack gtc_ob;
57
58 /* All the tuples have their operand vector (if present) at the very bottom
59    of the structure.  Therefore, the offset required to find the
60    operands vector the size of the structure minus the size of the 1
61    element tree array at the end (see gimple_ops).  */
62 #define DEFGSSTRUCT(SYM, STRUCT, HAS_TREE_OP) \
63         (HAS_TREE_OP ? sizeof (struct STRUCT) - sizeof (tree) : 0),
64 EXPORTED_CONST size_t gimple_ops_offset_[] = {
65 #include "gsstruct.def"
66 };
67 #undef DEFGSSTRUCT
68
69 #define DEFGSSTRUCT(SYM, STRUCT, HAS_TREE_OP) sizeof(struct STRUCT),
70 static const size_t gsstruct_code_size[] = {
71 #include "gsstruct.def"
72 };
73 #undef DEFGSSTRUCT
74
75 #define DEFGSCODE(SYM, NAME, GSSCODE)   NAME,
76 const char *const gimple_code_name[] = {
77 #include "gimple.def"
78 };
79 #undef DEFGSCODE
80
81 #define DEFGSCODE(SYM, NAME, GSSCODE)   GSSCODE,
82 EXPORTED_CONST enum gimple_statement_structure_enum gss_for_code_[] = {
83 #include "gimple.def"
84 };
85 #undef DEFGSCODE
86
87 #ifdef GATHER_STATISTICS
88 /* Gimple stats.  */
89
90 int gimple_alloc_counts[(int) gimple_alloc_kind_all];
91 int gimple_alloc_sizes[(int) gimple_alloc_kind_all];
92
93 /* Keep in sync with gimple.h:enum gimple_alloc_kind.  */
94 static const char * const gimple_alloc_kind_names[] = {
95     "assignments",
96     "phi nodes",
97     "conditionals",
98     "sequences",
99     "everything else"
100 };
101
102 #endif /* GATHER_STATISTICS */
103
104 /* A cache of gimple_seq objects.  Sequences are created and destroyed
105    fairly often during gimplification.  */
106 static GTY ((deletable)) struct gimple_seq_d *gimple_seq_cache;
107
108 /* Private API manipulation functions shared only with some
109    other files.  */
110 extern void gimple_set_stored_syms (gimple, bitmap, bitmap_obstack *);
111 extern void gimple_set_loaded_syms (gimple, bitmap, bitmap_obstack *);
112
113 /* Gimple tuple constructors.
114    Note: Any constructor taking a ``gimple_seq'' as a parameter, can
115    be passed a NULL to start with an empty sequence.  */
116
117 /* Set the code for statement G to CODE.  */
118
119 static inline void
120 gimple_set_code (gimple g, enum gimple_code code)
121 {
122   g->gsbase.code = code;
123 }
124
125 /* Return the number of bytes needed to hold a GIMPLE statement with
126    code CODE.  */
127
128 static inline size_t
129 gimple_size (enum gimple_code code)
130 {
131   return gsstruct_code_size[gss_for_code (code)];
132 }
133
134 /* Allocate memory for a GIMPLE statement with code CODE and NUM_OPS
135    operands.  */
136
137 gimple
138 gimple_alloc_stat (enum gimple_code code, unsigned num_ops MEM_STAT_DECL)
139 {
140   size_t size;
141   gimple stmt;
142
143   size = gimple_size (code);
144   if (num_ops > 0)
145     size += sizeof (tree) * (num_ops - 1);
146
147 #ifdef GATHER_STATISTICS
148   {
149     enum gimple_alloc_kind kind = gimple_alloc_kind (code);
150     gimple_alloc_counts[(int) kind]++;
151     gimple_alloc_sizes[(int) kind] += size;
152   }
153 #endif
154
155   stmt = ggc_alloc_cleared_gimple_statement_d_stat (size PASS_MEM_STAT);
156   gimple_set_code (stmt, code);
157   gimple_set_num_ops (stmt, num_ops);
158
159   /* Do not call gimple_set_modified here as it has other side
160      effects and this tuple is still not completely built.  */
161   stmt->gsbase.modified = 1;
162
163   return stmt;
164 }
165
166 /* Set SUBCODE to be the code of the expression computed by statement G.  */
167
168 static inline void
169 gimple_set_subcode (gimple g, unsigned subcode)
170 {
171   /* We only have 16 bits for the RHS code.  Assert that we are not
172      overflowing it.  */
173   gcc_assert (subcode < (1 << 16));
174   g->gsbase.subcode = subcode;
175 }
176
177
178
179 /* Build a tuple with operands.  CODE is the statement to build (which
180    must be one of the GIMPLE_WITH_OPS tuples).  SUBCODE is the sub-code
181    for the new tuple.  NUM_OPS is the number of operands to allocate.  */
182
183 #define gimple_build_with_ops(c, s, n) \
184   gimple_build_with_ops_stat (c, s, n MEM_STAT_INFO)
185
186 static gimple
187 gimple_build_with_ops_stat (enum gimple_code code, unsigned subcode,
188                             unsigned num_ops MEM_STAT_DECL)
189 {
190   gimple s = gimple_alloc_stat (code, num_ops PASS_MEM_STAT);
191   gimple_set_subcode (s, subcode);
192
193   return s;
194 }
195
196
197 /* Build a GIMPLE_RETURN statement returning RETVAL.  */
198
199 gimple
200 gimple_build_return (tree retval)
201 {
202   gimple s = gimple_build_with_ops (GIMPLE_RETURN, ERROR_MARK, 1);
203   if (retval)
204     gimple_return_set_retval (s, retval);
205   return s;
206 }
207
208 /* Reset alias information on call S.  */
209
210 void
211 gimple_call_reset_alias_info (gimple s)
212 {
213   if (gimple_call_flags (s) & ECF_CONST)
214     memset (gimple_call_use_set (s), 0, sizeof (struct pt_solution));
215   else
216     pt_solution_reset (gimple_call_use_set (s));
217   if (gimple_call_flags (s) & (ECF_CONST|ECF_PURE|ECF_NOVOPS))
218     memset (gimple_call_clobber_set (s), 0, sizeof (struct pt_solution));
219   else
220     pt_solution_reset (gimple_call_clobber_set (s));
221 }
222
223 /* Helper for gimple_build_call, gimple_build_call_vec and
224    gimple_build_call_from_tree.  Build the basic components of a
225    GIMPLE_CALL statement to function FN with NARGS arguments.  */
226
227 static inline gimple
228 gimple_build_call_1 (tree fn, unsigned nargs)
229 {
230   gimple s = gimple_build_with_ops (GIMPLE_CALL, ERROR_MARK, nargs + 3);
231   if (TREE_CODE (fn) == FUNCTION_DECL)
232     fn = build_fold_addr_expr (fn);
233   gimple_set_op (s, 1, fn);
234   gimple_call_reset_alias_info (s);
235   return s;
236 }
237
238
239 /* Build a GIMPLE_CALL statement to function FN with the arguments
240    specified in vector ARGS.  */
241
242 gimple
243 gimple_build_call_vec (tree fn, VEC(tree, heap) *args)
244 {
245   unsigned i;
246   unsigned nargs = VEC_length (tree, args);
247   gimple call = gimple_build_call_1 (fn, nargs);
248
249   for (i = 0; i < nargs; i++)
250     gimple_call_set_arg (call, i, VEC_index (tree, args, i));
251
252   return call;
253 }
254
255
256 /* Build a GIMPLE_CALL statement to function FN.  NARGS is the number of
257    arguments.  The ... are the arguments.  */
258
259 gimple
260 gimple_build_call (tree fn, unsigned nargs, ...)
261 {
262   va_list ap;
263   gimple call;
264   unsigned i;
265
266   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL || is_gimple_call_addr (fn));
267
268   call = gimple_build_call_1 (fn, nargs);
269
270   va_start (ap, nargs);
271   for (i = 0; i < nargs; i++)
272     gimple_call_set_arg (call, i, va_arg (ap, tree));
273   va_end (ap);
274
275   return call;
276 }
277
278
279 /* Build a GIMPLE_CALL statement from CALL_EXPR T.  Note that T is
280    assumed to be in GIMPLE form already.  Minimal checking is done of
281    this fact.  */
282
283 gimple
284 gimple_build_call_from_tree (tree t)
285 {
286   unsigned i, nargs;
287   gimple call;
288   tree fndecl = get_callee_fndecl (t);
289
290   gcc_assert (TREE_CODE (t) == CALL_EXPR);
291
292   nargs = call_expr_nargs (t);
293   call = gimple_build_call_1 (fndecl ? fndecl : CALL_EXPR_FN (t), nargs);
294
295   for (i = 0; i < nargs; i++)
296     gimple_call_set_arg (call, i, CALL_EXPR_ARG (t, i));
297
298   gimple_set_block (call, TREE_BLOCK (t));
299
300   /* Carry all the CALL_EXPR flags to the new GIMPLE_CALL.  */
301   gimple_call_set_chain (call, CALL_EXPR_STATIC_CHAIN (t));
302   gimple_call_set_tail (call, CALL_EXPR_TAILCALL (t));
303   gimple_call_set_cannot_inline (call, CALL_CANNOT_INLINE_P (t));
304   gimple_call_set_return_slot_opt (call, CALL_EXPR_RETURN_SLOT_OPT (t));
305   gimple_call_set_from_thunk (call, CALL_FROM_THUNK_P (t));
306   gimple_call_set_va_arg_pack (call, CALL_EXPR_VA_ARG_PACK (t));
307   gimple_call_set_nothrow (call, TREE_NOTHROW (t));
308   gimple_set_no_warning (call, TREE_NO_WARNING (t));
309
310   return call;
311 }
312
313
314 /* Extract the operands and code for expression EXPR into *SUBCODE_P,
315    *OP1_P, *OP2_P and *OP3_P respectively.  */
316
317 void
318 extract_ops_from_tree_1 (tree expr, enum tree_code *subcode_p, tree *op1_p,
319                          tree *op2_p, tree *op3_p)
320 {
321   enum gimple_rhs_class grhs_class;
322
323   *subcode_p = TREE_CODE (expr);
324   grhs_class = get_gimple_rhs_class (*subcode_p);
325
326   if (grhs_class == GIMPLE_TERNARY_RHS)
327     {
328       *op1_p = TREE_OPERAND (expr, 0);
329       *op2_p = TREE_OPERAND (expr, 1);
330       *op3_p = TREE_OPERAND (expr, 2);
331     }
332   else if (grhs_class == GIMPLE_BINARY_RHS)
333     {
334       *op1_p = TREE_OPERAND (expr, 0);
335       *op2_p = TREE_OPERAND (expr, 1);
336       *op3_p = NULL_TREE;
337     }
338   else if (grhs_class == GIMPLE_UNARY_RHS)
339     {
340       *op1_p = TREE_OPERAND (expr, 0);
341       *op2_p = NULL_TREE;
342       *op3_p = NULL_TREE;
343     }
344   else if (grhs_class == GIMPLE_SINGLE_RHS)
345     {
346       *op1_p = expr;
347       *op2_p = NULL_TREE;
348       *op3_p = NULL_TREE;
349     }
350   else
351     gcc_unreachable ();
352 }
353
354
355 /* Build a GIMPLE_ASSIGN statement.
356
357    LHS of the assignment.
358    RHS of the assignment which can be unary or binary.  */
359
360 gimple
361 gimple_build_assign_stat (tree lhs, tree rhs MEM_STAT_DECL)
362 {
363   enum tree_code subcode;
364   tree op1, op2, op3;
365
366   extract_ops_from_tree_1 (rhs, &subcode, &op1, &op2, &op3);
367   return gimple_build_assign_with_ops_stat (subcode, lhs, op1, op2, op3
368                                             PASS_MEM_STAT);
369 }
370
371
372 /* Build a GIMPLE_ASSIGN statement with sub-code SUBCODE and operands
373    OP1 and OP2.  If OP2 is NULL then SUBCODE must be of class
374    GIMPLE_UNARY_RHS or GIMPLE_SINGLE_RHS.  */
375
376 gimple
377 gimple_build_assign_with_ops_stat (enum tree_code subcode, tree lhs, tree op1,
378                                    tree op2, tree op3 MEM_STAT_DECL)
379 {
380   unsigned num_ops;
381   gimple p;
382
383   /* Need 1 operand for LHS and 1 or 2 for the RHS (depending on the
384      code).  */
385   num_ops = get_gimple_rhs_num_ops (subcode) + 1;
386
387   p = gimple_build_with_ops_stat (GIMPLE_ASSIGN, (unsigned)subcode, num_ops
388                                   PASS_MEM_STAT);
389   gimple_assign_set_lhs (p, lhs);
390   gimple_assign_set_rhs1 (p, op1);
391   if (op2)
392     {
393       gcc_assert (num_ops > 2);
394       gimple_assign_set_rhs2 (p, op2);
395     }
396
397   if (op3)
398     {
399       gcc_assert (num_ops > 3);
400       gimple_assign_set_rhs3 (p, op3);
401     }
402
403   return p;
404 }
405
406
407 /* Build a new GIMPLE_ASSIGN tuple and append it to the end of *SEQ_P.
408
409    DST/SRC are the destination and source respectively.  You can pass
410    ungimplified trees in DST or SRC, in which case they will be
411    converted to a gimple operand if necessary.
412
413    This function returns the newly created GIMPLE_ASSIGN tuple.  */
414
415 gimple
416 gimplify_assign (tree dst, tree src, gimple_seq *seq_p)
417 {
418   tree t = build2 (MODIFY_EXPR, TREE_TYPE (dst), dst, src);
419   gimplify_and_add (t, seq_p);
420   ggc_free (t);
421   return gimple_seq_last_stmt (*seq_p);
422 }
423
424
425 /* Build a GIMPLE_COND statement.
426
427    PRED is the condition used to compare LHS and the RHS.
428    T_LABEL is the label to jump to if the condition is true.
429    F_LABEL is the label to jump to otherwise.  */
430
431 gimple
432 gimple_build_cond (enum tree_code pred_code, tree lhs, tree rhs,
433                    tree t_label, tree f_label)
434 {
435   gimple p;
436
437   gcc_assert (TREE_CODE_CLASS (pred_code) == tcc_comparison);
438   p = gimple_build_with_ops (GIMPLE_COND, pred_code, 4);
439   gimple_cond_set_lhs (p, lhs);
440   gimple_cond_set_rhs (p, rhs);
441   gimple_cond_set_true_label (p, t_label);
442   gimple_cond_set_false_label (p, f_label);
443   return p;
444 }
445
446
447 /* Extract operands for a GIMPLE_COND statement out of COND_EXPR tree COND.  */
448
449 void
450 gimple_cond_get_ops_from_tree (tree cond, enum tree_code *code_p,
451                                tree *lhs_p, tree *rhs_p)
452 {
453   gcc_assert (TREE_CODE_CLASS (TREE_CODE (cond)) == tcc_comparison
454               || TREE_CODE (cond) == TRUTH_NOT_EXPR
455               || is_gimple_min_invariant (cond)
456               || SSA_VAR_P (cond));
457
458   extract_ops_from_tree (cond, code_p, lhs_p, rhs_p);
459
460   /* Canonicalize conditionals of the form 'if (!VAL)'.  */
461   if (*code_p == TRUTH_NOT_EXPR)
462     {
463       *code_p = EQ_EXPR;
464       gcc_assert (*lhs_p && *rhs_p == NULL_TREE);
465       *rhs_p = build_zero_cst (TREE_TYPE (*lhs_p));
466     }
467   /* Canonicalize conditionals of the form 'if (VAL)'  */
468   else if (TREE_CODE_CLASS (*code_p) != tcc_comparison)
469     {
470       *code_p = NE_EXPR;
471       gcc_assert (*lhs_p && *rhs_p == NULL_TREE);
472       *rhs_p = build_zero_cst (TREE_TYPE (*lhs_p));
473     }
474 }
475
476
477 /* Build a GIMPLE_COND statement from the conditional expression tree
478    COND.  T_LABEL and F_LABEL are as in gimple_build_cond.  */
479
480 gimple
481 gimple_build_cond_from_tree (tree cond, tree t_label, tree f_label)
482 {
483   enum tree_code code;
484   tree lhs, rhs;
485
486   gimple_cond_get_ops_from_tree (cond, &code, &lhs, &rhs);
487   return gimple_build_cond (code, lhs, rhs, t_label, f_label);
488 }
489
490 /* Set code, lhs, and rhs of a GIMPLE_COND from a suitable
491    boolean expression tree COND.  */
492
493 void
494 gimple_cond_set_condition_from_tree (gimple stmt, tree cond)
495 {
496   enum tree_code code;
497   tree lhs, rhs;
498
499   gimple_cond_get_ops_from_tree (cond, &code, &lhs, &rhs);
500   gimple_cond_set_condition (stmt, code, lhs, rhs);
501 }
502
503 /* Build a GIMPLE_LABEL statement for LABEL.  */
504
505 gimple
506 gimple_build_label (tree label)
507 {
508   gimple p = gimple_build_with_ops (GIMPLE_LABEL, ERROR_MARK, 1);
509   gimple_label_set_label (p, label);
510   return p;
511 }
512
513 /* Build a GIMPLE_GOTO statement to label DEST.  */
514
515 gimple
516 gimple_build_goto (tree dest)
517 {
518   gimple p = gimple_build_with_ops (GIMPLE_GOTO, ERROR_MARK, 1);
519   gimple_goto_set_dest (p, dest);
520   return p;
521 }
522
523
524 /* Build a GIMPLE_NOP statement.  */
525
526 gimple
527 gimple_build_nop (void)
528 {
529   return gimple_alloc (GIMPLE_NOP, 0);
530 }
531
532
533 /* Build a GIMPLE_BIND statement.
534    VARS are the variables in BODY.
535    BLOCK is the containing block.  */
536
537 gimple
538 gimple_build_bind (tree vars, gimple_seq body, tree block)
539 {
540   gimple p = gimple_alloc (GIMPLE_BIND, 0);
541   gimple_bind_set_vars (p, vars);
542   if (body)
543     gimple_bind_set_body (p, body);
544   if (block)
545     gimple_bind_set_block (p, block);
546   return p;
547 }
548
549 /* Helper function to set the simple fields of a asm stmt.
550
551    STRING is a pointer to a string that is the asm blocks assembly code.
552    NINPUT is the number of register inputs.
553    NOUTPUT is the number of register outputs.
554    NCLOBBERS is the number of clobbered registers.
555    */
556
557 static inline gimple
558 gimple_build_asm_1 (const char *string, unsigned ninputs, unsigned noutputs,
559                     unsigned nclobbers, unsigned nlabels)
560 {
561   gimple p;
562   int size = strlen (string);
563
564   /* ASMs with labels cannot have outputs.  This should have been
565      enforced by the front end.  */
566   gcc_assert (nlabels == 0 || noutputs == 0);
567
568   p = gimple_build_with_ops (GIMPLE_ASM, ERROR_MARK,
569                              ninputs + noutputs + nclobbers + nlabels);
570
571   p->gimple_asm.ni = ninputs;
572   p->gimple_asm.no = noutputs;
573   p->gimple_asm.nc = nclobbers;
574   p->gimple_asm.nl = nlabels;
575   p->gimple_asm.string = ggc_alloc_string (string, size);
576
577 #ifdef GATHER_STATISTICS
578   gimple_alloc_sizes[(int) gimple_alloc_kind (GIMPLE_ASM)] += size;
579 #endif
580
581   return p;
582 }
583
584 /* Build a GIMPLE_ASM statement.
585
586    STRING is the assembly code.
587    NINPUT is the number of register inputs.
588    NOUTPUT is the number of register outputs.
589    NCLOBBERS is the number of clobbered registers.
590    INPUTS is a vector of the input register parameters.
591    OUTPUTS is a vector of the output register parameters.
592    CLOBBERS is a vector of the clobbered register parameters.
593    LABELS is a vector of destination labels.  */
594
595 gimple
596 gimple_build_asm_vec (const char *string, VEC(tree,gc)* inputs,
597                       VEC(tree,gc)* outputs, VEC(tree,gc)* clobbers,
598                       VEC(tree,gc)* labels)
599 {
600   gimple p;
601   unsigned i;
602
603   p = gimple_build_asm_1 (string,
604                           VEC_length (tree, inputs),
605                           VEC_length (tree, outputs),
606                           VEC_length (tree, clobbers),
607                           VEC_length (tree, labels));
608
609   for (i = 0; i < VEC_length (tree, inputs); i++)
610     gimple_asm_set_input_op (p, i, VEC_index (tree, inputs, i));
611
612   for (i = 0; i < VEC_length (tree, outputs); i++)
613     gimple_asm_set_output_op (p, i, VEC_index (tree, outputs, i));
614
615   for (i = 0; i < VEC_length (tree, clobbers); i++)
616     gimple_asm_set_clobber_op (p, i, VEC_index (tree, clobbers, i));
617
618   for (i = 0; i < VEC_length (tree, labels); i++)
619     gimple_asm_set_label_op (p, i, VEC_index (tree, labels, i));
620
621   return p;
622 }
623
624 /* Build a GIMPLE_CATCH statement.
625
626   TYPES are the catch types.
627   HANDLER is the exception handler.  */
628
629 gimple
630 gimple_build_catch (tree types, gimple_seq handler)
631 {
632   gimple p = gimple_alloc (GIMPLE_CATCH, 0);
633   gimple_catch_set_types (p, types);
634   if (handler)
635     gimple_catch_set_handler (p, handler);
636
637   return p;
638 }
639
640 /* Build a GIMPLE_EH_FILTER statement.
641
642    TYPES are the filter's types.
643    FAILURE is the filter's failure action.  */
644
645 gimple
646 gimple_build_eh_filter (tree types, gimple_seq failure)
647 {
648   gimple p = gimple_alloc (GIMPLE_EH_FILTER, 0);
649   gimple_eh_filter_set_types (p, types);
650   if (failure)
651     gimple_eh_filter_set_failure (p, failure);
652
653   return p;
654 }
655
656 /* Build a GIMPLE_EH_MUST_NOT_THROW statement.  */
657
658 gimple
659 gimple_build_eh_must_not_throw (tree decl)
660 {
661   gimple p = gimple_alloc (GIMPLE_EH_MUST_NOT_THROW, 0);
662
663   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
664   gcc_assert (flags_from_decl_or_type (decl) & ECF_NORETURN);
665   gimple_eh_must_not_throw_set_fndecl (p, decl);
666
667   return p;
668 }
669
670 /* Build a GIMPLE_TRY statement.
671
672    EVAL is the expression to evaluate.
673    CLEANUP is the cleanup expression.
674    KIND is either GIMPLE_TRY_CATCH or GIMPLE_TRY_FINALLY depending on
675    whether this is a try/catch or a try/finally respectively.  */
676
677 gimple
678 gimple_build_try (gimple_seq eval, gimple_seq cleanup,
679                   enum gimple_try_flags kind)
680 {
681   gimple p;
682
683   gcc_assert (kind == GIMPLE_TRY_CATCH || kind == GIMPLE_TRY_FINALLY);
684   p = gimple_alloc (GIMPLE_TRY, 0);
685   gimple_set_subcode (p, kind);
686   if (eval)
687     gimple_try_set_eval (p, eval);
688   if (cleanup)
689     gimple_try_set_cleanup (p, cleanup);
690
691   return p;
692 }
693
694 /* Construct a GIMPLE_WITH_CLEANUP_EXPR statement.
695
696    CLEANUP is the cleanup expression.  */
697
698 gimple
699 gimple_build_wce (gimple_seq cleanup)
700 {
701   gimple p = gimple_alloc (GIMPLE_WITH_CLEANUP_EXPR, 0);
702   if (cleanup)
703     gimple_wce_set_cleanup (p, cleanup);
704
705   return p;
706 }
707
708
709 /* Build a GIMPLE_RESX statement.  */
710
711 gimple
712 gimple_build_resx (int region)
713 {
714   gimple p = gimple_build_with_ops (GIMPLE_RESX, ERROR_MARK, 0);
715   p->gimple_eh_ctrl.region = region;
716   return p;
717 }
718
719
720 /* The helper for constructing a gimple switch statement.
721    INDEX is the switch's index.
722    NLABELS is the number of labels in the switch excluding the default.
723    DEFAULT_LABEL is the default label for the switch statement.  */
724
725 gimple
726 gimple_build_switch_nlabels (unsigned nlabels, tree index, tree default_label)
727 {
728   /* nlabels + 1 default label + 1 index.  */
729   gimple p = gimple_build_with_ops (GIMPLE_SWITCH, ERROR_MARK,
730                                     1 + (default_label != NULL) + nlabels);
731   gimple_switch_set_index (p, index);
732   if (default_label)
733     gimple_switch_set_default_label (p, default_label);
734   return p;
735 }
736
737
738 /* Build a GIMPLE_SWITCH statement.
739
740    INDEX is the switch's index.
741    NLABELS is the number of labels in the switch excluding the DEFAULT_LABEL.
742    ... are the labels excluding the default.  */
743
744 gimple
745 gimple_build_switch (unsigned nlabels, tree index, tree default_label, ...)
746 {
747   va_list al;
748   unsigned i, offset;
749   gimple p = gimple_build_switch_nlabels (nlabels, index, default_label);
750
751   /* Store the rest of the labels.  */
752   va_start (al, default_label);
753   offset = (default_label != NULL);
754   for (i = 0; i < nlabels; i++)
755     gimple_switch_set_label (p, i + offset, va_arg (al, tree));
756   va_end (al);
757
758   return p;
759 }
760
761
762 /* Build a GIMPLE_SWITCH statement.
763
764    INDEX is the switch's index.
765    DEFAULT_LABEL is the default label
766    ARGS is a vector of labels excluding the default.  */
767
768 gimple
769 gimple_build_switch_vec (tree index, tree default_label, VEC(tree, heap) *args)
770 {
771   unsigned i, offset, nlabels = VEC_length (tree, args);
772   gimple p = gimple_build_switch_nlabels (nlabels, index, default_label);
773
774   /* Copy the labels from the vector to the switch statement.  */
775   offset = (default_label != NULL);
776   for (i = 0; i < nlabels; i++)
777     gimple_switch_set_label (p, i + offset, VEC_index (tree, args, i));
778
779   return p;
780 }
781
782 /* Build a GIMPLE_EH_DISPATCH statement.  */
783
784 gimple
785 gimple_build_eh_dispatch (int region)
786 {
787   gimple p = gimple_build_with_ops (GIMPLE_EH_DISPATCH, ERROR_MARK, 0);
788   p->gimple_eh_ctrl.region = region;
789   return p;
790 }
791
792 /* Build a new GIMPLE_DEBUG_BIND statement.
793
794    VAR is bound to VALUE; block and location are taken from STMT.  */
795
796 gimple
797 gimple_build_debug_bind_stat (tree var, tree value, gimple stmt MEM_STAT_DECL)
798 {
799   gimple p = gimple_build_with_ops_stat (GIMPLE_DEBUG,
800                                          (unsigned)GIMPLE_DEBUG_BIND, 2
801                                          PASS_MEM_STAT);
802
803   gimple_debug_bind_set_var (p, var);
804   gimple_debug_bind_set_value (p, value);
805   if (stmt)
806     {
807       gimple_set_block (p, gimple_block (stmt));
808       gimple_set_location (p, gimple_location (stmt));
809     }
810
811   return p;
812 }
813
814
815 /* Build a GIMPLE_OMP_CRITICAL statement.
816
817    BODY is the sequence of statements for which only one thread can execute.
818    NAME is optional identifier for this critical block.  */
819
820 gimple
821 gimple_build_omp_critical (gimple_seq body, tree name)
822 {
823   gimple p = gimple_alloc (GIMPLE_OMP_CRITICAL, 0);
824   gimple_omp_critical_set_name (p, name);
825   if (body)
826     gimple_omp_set_body (p, body);
827
828   return p;
829 }
830
831 /* Build a GIMPLE_OMP_FOR statement.
832
833    BODY is sequence of statements inside the for loop.
834    CLAUSES, are any of the OMP loop construct's clauses: private, firstprivate,
835    lastprivate, reductions, ordered, schedule, and nowait.
836    COLLAPSE is the collapse count.
837    PRE_BODY is the sequence of statements that are loop invariant.  */
838
839 gimple
840 gimple_build_omp_for (gimple_seq body, tree clauses, size_t collapse,
841                       gimple_seq pre_body)
842 {
843   gimple p = gimple_alloc (GIMPLE_OMP_FOR, 0);
844   if (body)
845     gimple_omp_set_body (p, body);
846   gimple_omp_for_set_clauses (p, clauses);
847   p->gimple_omp_for.collapse = collapse;
848   p->gimple_omp_for.iter
849       = ggc_alloc_cleared_vec_gimple_omp_for_iter (collapse);
850   if (pre_body)
851     gimple_omp_for_set_pre_body (p, pre_body);
852
853   return p;
854 }
855
856
857 /* Build a GIMPLE_OMP_PARALLEL statement.
858
859    BODY is sequence of statements which are executed in parallel.
860    CLAUSES, are the OMP parallel construct's clauses.
861    CHILD_FN is the function created for the parallel threads to execute.
862    DATA_ARG are the shared data argument(s).  */
863
864 gimple
865 gimple_build_omp_parallel (gimple_seq body, tree clauses, tree child_fn,
866                            tree data_arg)
867 {
868   gimple p = gimple_alloc (GIMPLE_OMP_PARALLEL, 0);
869   if (body)
870     gimple_omp_set_body (p, body);
871   gimple_omp_parallel_set_clauses (p, clauses);
872   gimple_omp_parallel_set_child_fn (p, child_fn);
873   gimple_omp_parallel_set_data_arg (p, data_arg);
874
875   return p;
876 }
877
878
879 /* Build a GIMPLE_OMP_TASK statement.
880
881    BODY is sequence of statements which are executed by the explicit task.
882    CLAUSES, are the OMP parallel construct's clauses.
883    CHILD_FN is the function created for the parallel threads to execute.
884    DATA_ARG are the shared data argument(s).
885    COPY_FN is the optional function for firstprivate initialization.
886    ARG_SIZE and ARG_ALIGN are size and alignment of the data block.  */
887
888 gimple
889 gimple_build_omp_task (gimple_seq body, tree clauses, tree child_fn,
890                        tree data_arg, tree copy_fn, tree arg_size,
891                        tree arg_align)
892 {
893   gimple p = gimple_alloc (GIMPLE_OMP_TASK, 0);
894   if (body)
895     gimple_omp_set_body (p, body);
896   gimple_omp_task_set_clauses (p, clauses);
897   gimple_omp_task_set_child_fn (p, child_fn);
898   gimple_omp_task_set_data_arg (p, data_arg);
899   gimple_omp_task_set_copy_fn (p, copy_fn);
900   gimple_omp_task_set_arg_size (p, arg_size);
901   gimple_omp_task_set_arg_align (p, arg_align);
902
903   return p;
904 }
905
906
907 /* Build a GIMPLE_OMP_SECTION statement for a sections statement.
908
909    BODY is the sequence of statements in the section.  */
910
911 gimple
912 gimple_build_omp_section (gimple_seq body)
913 {
914   gimple p = gimple_alloc (GIMPLE_OMP_SECTION, 0);
915   if (body)
916     gimple_omp_set_body (p, body);
917
918   return p;
919 }
920
921
922 /* Build a GIMPLE_OMP_MASTER statement.
923
924    BODY is the sequence of statements to be executed by just the master.  */
925
926 gimple
927 gimple_build_omp_master (gimple_seq body)
928 {
929   gimple p = gimple_alloc (GIMPLE_OMP_MASTER, 0);
930   if (body)
931     gimple_omp_set_body (p, body);
932
933   return p;
934 }
935
936
937 /* Build a GIMPLE_OMP_CONTINUE statement.
938
939    CONTROL_DEF is the definition of the control variable.
940    CONTROL_USE is the use of the control variable.  */
941
942 gimple
943 gimple_build_omp_continue (tree control_def, tree control_use)
944 {
945   gimple p = gimple_alloc (GIMPLE_OMP_CONTINUE, 0);
946   gimple_omp_continue_set_control_def (p, control_def);
947   gimple_omp_continue_set_control_use (p, control_use);
948   return p;
949 }
950
951 /* Build a GIMPLE_OMP_ORDERED statement.
952
953    BODY is the sequence of statements inside a loop that will executed in
954    sequence.  */
955
956 gimple
957 gimple_build_omp_ordered (gimple_seq body)
958 {
959   gimple p = gimple_alloc (GIMPLE_OMP_ORDERED, 0);
960   if (body)
961     gimple_omp_set_body (p, body);
962
963   return p;
964 }
965
966
967 /* Build a GIMPLE_OMP_RETURN statement.
968    WAIT_P is true if this is a non-waiting return.  */
969
970 gimple
971 gimple_build_omp_return (bool wait_p)
972 {
973   gimple p = gimple_alloc (GIMPLE_OMP_RETURN, 0);
974   if (wait_p)
975     gimple_omp_return_set_nowait (p);
976
977   return p;
978 }
979
980
981 /* Build a GIMPLE_OMP_SECTIONS statement.
982
983    BODY is a sequence of section statements.
984    CLAUSES are any of the OMP sections contsruct's clauses: private,
985    firstprivate, lastprivate, reduction, and nowait.  */
986
987 gimple
988 gimple_build_omp_sections (gimple_seq body, tree clauses)
989 {
990   gimple p = gimple_alloc (GIMPLE_OMP_SECTIONS, 0);
991   if (body)
992     gimple_omp_set_body (p, body);
993   gimple_omp_sections_set_clauses (p, clauses);
994
995   return p;
996 }
997
998
999 /* Build a GIMPLE_OMP_SECTIONS_SWITCH.  */
1000
1001 gimple
1002 gimple_build_omp_sections_switch (void)
1003 {
1004   return gimple_alloc (GIMPLE_OMP_SECTIONS_SWITCH, 0);
1005 }
1006
1007
1008 /* Build a GIMPLE_OMP_SINGLE statement.
1009
1010    BODY is the sequence of statements that will be executed once.
1011    CLAUSES are any of the OMP single construct's clauses: private, firstprivate,
1012    copyprivate, nowait.  */
1013
1014 gimple
1015 gimple_build_omp_single (gimple_seq body, tree clauses)
1016 {
1017   gimple p = gimple_alloc (GIMPLE_OMP_SINGLE, 0);
1018   if (body)
1019     gimple_omp_set_body (p, body);
1020   gimple_omp_single_set_clauses (p, clauses);
1021
1022   return p;
1023 }
1024
1025
1026 /* Build a GIMPLE_OMP_ATOMIC_LOAD statement.  */
1027
1028 gimple
1029 gimple_build_omp_atomic_load (tree lhs, tree rhs)
1030 {
1031   gimple p = gimple_alloc (GIMPLE_OMP_ATOMIC_LOAD, 0);
1032   gimple_omp_atomic_load_set_lhs (p, lhs);
1033   gimple_omp_atomic_load_set_rhs (p, rhs);
1034   return p;
1035 }
1036
1037 /* Build a GIMPLE_OMP_ATOMIC_STORE statement.
1038
1039    VAL is the value we are storing.  */
1040
1041 gimple
1042 gimple_build_omp_atomic_store (tree val)
1043 {
1044   gimple p = gimple_alloc (GIMPLE_OMP_ATOMIC_STORE, 0);
1045   gimple_omp_atomic_store_set_val (p, val);
1046   return p;
1047 }
1048
1049 /* Build a GIMPLE_PREDICT statement.  PREDICT is one of the predictors from
1050    predict.def, OUTCOME is NOT_TAKEN or TAKEN.  */
1051
1052 gimple
1053 gimple_build_predict (enum br_predictor predictor, enum prediction outcome)
1054 {
1055   gimple p = gimple_alloc (GIMPLE_PREDICT, 0);
1056   /* Ensure all the predictors fit into the lower bits of the subcode.  */
1057   gcc_assert ((int) END_PREDICTORS <= GF_PREDICT_TAKEN);
1058   gimple_predict_set_predictor (p, predictor);
1059   gimple_predict_set_outcome (p, outcome);
1060   return p;
1061 }
1062
1063 #if defined ENABLE_GIMPLE_CHECKING
1064 /* Complain of a gimple type mismatch and die.  */
1065
1066 void
1067 gimple_check_failed (const_gimple gs, const char *file, int line,
1068                      const char *function, enum gimple_code code,
1069                      enum tree_code subcode)
1070 {
1071   internal_error ("gimple check: expected %s(%s), have %s(%s) in %s, at %s:%d",
1072                   gimple_code_name[code],
1073                   tree_code_name[subcode],
1074                   gimple_code_name[gimple_code (gs)],
1075                   gs->gsbase.subcode > 0
1076                     ? tree_code_name[gs->gsbase.subcode]
1077                     : "",
1078                   function, trim_filename (file), line);
1079 }
1080 #endif /* ENABLE_GIMPLE_CHECKING */
1081
1082
1083 /* Allocate a new GIMPLE sequence in GC memory and return it.  If
1084    there are free sequences in GIMPLE_SEQ_CACHE return one of those
1085    instead.  */
1086
1087 gimple_seq
1088 gimple_seq_alloc (void)
1089 {
1090   gimple_seq seq = gimple_seq_cache;
1091   if (seq)
1092     {
1093       gimple_seq_cache = gimple_seq_cache->next_free;
1094       gcc_assert (gimple_seq_cache != seq);
1095       memset (seq, 0, sizeof (*seq));
1096     }
1097   else
1098     {
1099       seq = ggc_alloc_cleared_gimple_seq_d ();
1100 #ifdef GATHER_STATISTICS
1101       gimple_alloc_counts[(int) gimple_alloc_kind_seq]++;
1102       gimple_alloc_sizes[(int) gimple_alloc_kind_seq] += sizeof (*seq);
1103 #endif
1104     }
1105
1106   return seq;
1107 }
1108
1109 /* Return SEQ to the free pool of GIMPLE sequences.  */
1110
1111 void
1112 gimple_seq_free (gimple_seq seq)
1113 {
1114   if (seq == NULL)
1115     return;
1116
1117   gcc_assert (gimple_seq_first (seq) == NULL);
1118   gcc_assert (gimple_seq_last (seq) == NULL);
1119
1120   /* If this triggers, it's a sign that the same list is being freed
1121      twice.  */
1122   gcc_assert (seq != gimple_seq_cache || gimple_seq_cache == NULL);
1123
1124   /* Add SEQ to the pool of free sequences.  */
1125   seq->next_free = gimple_seq_cache;
1126   gimple_seq_cache = seq;
1127 }
1128
1129
1130 /* Link gimple statement GS to the end of the sequence *SEQ_P.  If
1131    *SEQ_P is NULL, a new sequence is allocated.  */
1132
1133 void
1134 gimple_seq_add_stmt (gimple_seq *seq_p, gimple gs)
1135 {
1136   gimple_stmt_iterator si;
1137
1138   if (gs == NULL)
1139     return;
1140
1141   if (*seq_p == NULL)
1142     *seq_p = gimple_seq_alloc ();
1143
1144   si = gsi_last (*seq_p);
1145   gsi_insert_after (&si, gs, GSI_NEW_STMT);
1146 }
1147
1148
1149 /* Append sequence SRC to the end of sequence *DST_P.  If *DST_P is
1150    NULL, a new sequence is allocated.  */
1151
1152 void
1153 gimple_seq_add_seq (gimple_seq *dst_p, gimple_seq src)
1154 {
1155   gimple_stmt_iterator si;
1156
1157   if (src == NULL)
1158     return;
1159
1160   if (*dst_p == NULL)
1161     *dst_p = gimple_seq_alloc ();
1162
1163   si = gsi_last (*dst_p);
1164   gsi_insert_seq_after (&si, src, GSI_NEW_STMT);
1165 }
1166
1167
1168 /* Helper function of empty_body_p.  Return true if STMT is an empty
1169    statement.  */
1170
1171 static bool
1172 empty_stmt_p (gimple stmt)
1173 {
1174   if (gimple_code (stmt) == GIMPLE_NOP)
1175     return true;
1176   if (gimple_code (stmt) == GIMPLE_BIND)
1177     return empty_body_p (gimple_bind_body (stmt));
1178   return false;
1179 }
1180
1181
1182 /* Return true if BODY contains nothing but empty statements.  */
1183
1184 bool
1185 empty_body_p (gimple_seq body)
1186 {
1187   gimple_stmt_iterator i;
1188
1189   if (gimple_seq_empty_p (body))
1190     return true;
1191   for (i = gsi_start (body); !gsi_end_p (i); gsi_next (&i))
1192     if (!empty_stmt_p (gsi_stmt (i))
1193         && !is_gimple_debug (gsi_stmt (i)))
1194       return false;
1195
1196   return true;
1197 }
1198
1199
1200 /* Perform a deep copy of sequence SRC and return the result.  */
1201
1202 gimple_seq
1203 gimple_seq_copy (gimple_seq src)
1204 {
1205   gimple_stmt_iterator gsi;
1206   gimple_seq new_seq = gimple_seq_alloc ();
1207   gimple stmt;
1208
1209   for (gsi = gsi_start (src); !gsi_end_p (gsi); gsi_next (&gsi))
1210     {
1211       stmt = gimple_copy (gsi_stmt (gsi));
1212       gimple_seq_add_stmt (&new_seq, stmt);
1213     }
1214
1215   return new_seq;
1216 }
1217
1218
1219 /* Walk all the statements in the sequence SEQ calling walk_gimple_stmt
1220    on each one.  WI is as in walk_gimple_stmt.
1221
1222    If walk_gimple_stmt returns non-NULL, the walk is stopped, the
1223    value is stored in WI->CALLBACK_RESULT and the statement that
1224    produced the value is returned.
1225
1226    Otherwise, all the statements are walked and NULL returned.  */
1227
1228 gimple
1229 walk_gimple_seq (gimple_seq seq, walk_stmt_fn callback_stmt,
1230                  walk_tree_fn callback_op, struct walk_stmt_info *wi)
1231 {
1232   gimple_stmt_iterator gsi;
1233
1234   for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi))
1235     {
1236       tree ret = walk_gimple_stmt (&gsi, callback_stmt, callback_op, wi);
1237       if (ret)
1238         {
1239           /* If CALLBACK_STMT or CALLBACK_OP return a value, WI must exist
1240              to hold it.  */
1241           gcc_assert (wi);
1242           wi->callback_result = ret;
1243           return gsi_stmt (gsi);
1244         }
1245     }
1246
1247   if (wi)
1248     wi->callback_result = NULL_TREE;
1249
1250   return NULL;
1251 }
1252
1253
1254 /* Helper function for walk_gimple_stmt.  Walk operands of a GIMPLE_ASM.  */
1255
1256 static tree
1257 walk_gimple_asm (gimple stmt, walk_tree_fn callback_op,
1258                  struct walk_stmt_info *wi)
1259 {
1260   tree ret, op;
1261   unsigned noutputs;
1262   const char **oconstraints;
1263   unsigned i, n;
1264   const char *constraint;
1265   bool allows_mem, allows_reg, is_inout;
1266
1267   noutputs = gimple_asm_noutputs (stmt);
1268   oconstraints = (const char **) alloca ((noutputs) * sizeof (const char *));
1269
1270   if (wi)
1271     wi->is_lhs = true;
1272
1273   for (i = 0; i < noutputs; i++)
1274     {
1275       op = gimple_asm_output_op (stmt, i);
1276       constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (op)));
1277       oconstraints[i] = constraint;
1278       parse_output_constraint (&constraint, i, 0, 0, &allows_mem, &allows_reg,
1279                                &is_inout);
1280       if (wi)
1281         wi->val_only = (allows_reg || !allows_mem);
1282       ret = walk_tree (&TREE_VALUE (op), callback_op, wi, NULL);
1283       if (ret)
1284         return ret;
1285     }
1286
1287   n = gimple_asm_ninputs (stmt);
1288   for (i = 0; i < n; i++)
1289     {
1290       op = gimple_asm_input_op (stmt, i);
1291       constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (op)));
1292       parse_input_constraint (&constraint, 0, 0, noutputs, 0,
1293                               oconstraints, &allows_mem, &allows_reg);
1294       if (wi)
1295         {
1296           wi->val_only = (allows_reg || !allows_mem);
1297           /* Although input "m" is not really a LHS, we need a lvalue.  */
1298           wi->is_lhs = !wi->val_only;
1299         }
1300       ret = walk_tree (&TREE_VALUE (op), callback_op, wi, NULL);
1301       if (ret)
1302         return ret;
1303     }
1304
1305   if (wi)
1306     {
1307       wi->is_lhs = false;
1308       wi->val_only = true;
1309     }
1310
1311   n = gimple_asm_nlabels (stmt);
1312   for (i = 0; i < n; i++)
1313     {
1314       op = gimple_asm_label_op (stmt, i);
1315       ret = walk_tree (&TREE_VALUE (op), callback_op, wi, NULL);
1316       if (ret)
1317         return ret;
1318     }
1319
1320   return NULL_TREE;
1321 }
1322
1323
1324 /* Helper function of WALK_GIMPLE_STMT.  Walk every tree operand in
1325    STMT.  CALLBACK_OP and WI are as in WALK_GIMPLE_STMT.
1326
1327    CALLBACK_OP is called on each operand of STMT via walk_tree.
1328    Additional parameters to walk_tree must be stored in WI.  For each operand
1329    OP, walk_tree is called as:
1330
1331         walk_tree (&OP, CALLBACK_OP, WI, WI->PSET)
1332
1333    If CALLBACK_OP returns non-NULL for an operand, the remaining
1334    operands are not scanned.
1335
1336    The return value is that returned by the last call to walk_tree, or
1337    NULL_TREE if no CALLBACK_OP is specified.  */
1338
1339 tree
1340 walk_gimple_op (gimple stmt, walk_tree_fn callback_op,
1341                 struct walk_stmt_info *wi)
1342 {
1343   struct pointer_set_t *pset = (wi) ? wi->pset : NULL;
1344   unsigned i;
1345   tree ret = NULL_TREE;
1346
1347   switch (gimple_code (stmt))
1348     {
1349     case GIMPLE_ASSIGN:
1350       /* Walk the RHS operands.  If the LHS is of a non-renamable type or
1351          is a register variable, we may use a COMPONENT_REF on the RHS.  */
1352       if (wi)
1353         {
1354           tree lhs = gimple_assign_lhs (stmt);
1355           wi->val_only
1356             = (is_gimple_reg_type (TREE_TYPE (lhs)) && !is_gimple_reg (lhs))
1357               || !gimple_assign_single_p (stmt);
1358         }
1359
1360       for (i = 1; i < gimple_num_ops (stmt); i++)
1361         {
1362           ret = walk_tree (gimple_op_ptr (stmt, i), callback_op, wi,
1363                            pset);
1364           if (ret)
1365             return ret;
1366         }
1367
1368       /* Walk the LHS.  If the RHS is appropriate for a memory, we
1369          may use a COMPONENT_REF on the LHS.  */
1370       if (wi)
1371         {
1372           /* If the RHS has more than 1 operand, it is not appropriate
1373              for the memory.  */
1374           wi->val_only = !is_gimple_mem_rhs (gimple_assign_rhs1 (stmt))
1375                          || !gimple_assign_single_p (stmt);
1376           wi->is_lhs = true;
1377         }
1378
1379       ret = walk_tree (gimple_op_ptr (stmt, 0), callback_op, wi, pset);
1380       if (ret)
1381         return ret;
1382
1383       if (wi)
1384         {
1385           wi->val_only = true;
1386           wi->is_lhs = false;
1387         }
1388       break;
1389
1390     case GIMPLE_CALL:
1391       if (wi)
1392         {
1393           wi->is_lhs = false;
1394           wi->val_only = true;
1395         }
1396
1397       ret = walk_tree (gimple_call_chain_ptr (stmt), callback_op, wi, pset);
1398       if (ret)
1399         return ret;
1400
1401       ret = walk_tree (gimple_call_fn_ptr (stmt), callback_op, wi, pset);
1402       if (ret)
1403         return ret;
1404
1405       for (i = 0; i < gimple_call_num_args (stmt); i++)
1406         {
1407           if (wi)
1408             wi->val_only = is_gimple_reg_type (gimple_call_arg (stmt, i));
1409           ret = walk_tree (gimple_call_arg_ptr (stmt, i), callback_op, wi,
1410                            pset);
1411           if (ret)
1412             return ret;
1413         }
1414
1415       if (gimple_call_lhs (stmt))
1416         {
1417           if (wi)
1418             {
1419               wi->is_lhs = true;
1420               wi->val_only = is_gimple_reg_type (gimple_call_lhs (stmt));
1421             }
1422
1423           ret = walk_tree (gimple_call_lhs_ptr (stmt), callback_op, wi, pset);
1424           if (ret)
1425             return ret;
1426         }
1427
1428       if (wi)
1429         {
1430           wi->is_lhs = false;
1431           wi->val_only = true;
1432         }
1433       break;
1434
1435     case GIMPLE_CATCH:
1436       ret = walk_tree (gimple_catch_types_ptr (stmt), callback_op, wi,
1437                        pset);
1438       if (ret)
1439         return ret;
1440       break;
1441
1442     case GIMPLE_EH_FILTER:
1443       ret = walk_tree (gimple_eh_filter_types_ptr (stmt), callback_op, wi,
1444                        pset);
1445       if (ret)
1446         return ret;
1447       break;
1448
1449     case GIMPLE_ASM:
1450       ret = walk_gimple_asm (stmt, callback_op, wi);
1451       if (ret)
1452         return ret;
1453       break;
1454
1455     case GIMPLE_OMP_CONTINUE:
1456       ret = walk_tree (gimple_omp_continue_control_def_ptr (stmt),
1457                        callback_op, wi, pset);
1458       if (ret)
1459         return ret;
1460
1461       ret = walk_tree (gimple_omp_continue_control_use_ptr (stmt),
1462                        callback_op, wi, pset);
1463       if (ret)
1464         return ret;
1465       break;
1466
1467     case GIMPLE_OMP_CRITICAL:
1468       ret = walk_tree (gimple_omp_critical_name_ptr (stmt), callback_op, wi,
1469                        pset);
1470       if (ret)
1471         return ret;
1472       break;
1473
1474     case GIMPLE_OMP_FOR:
1475       ret = walk_tree (gimple_omp_for_clauses_ptr (stmt), callback_op, wi,
1476                        pset);
1477       if (ret)
1478         return ret;
1479       for (i = 0; i < gimple_omp_for_collapse (stmt); i++)
1480         {
1481           ret = walk_tree (gimple_omp_for_index_ptr (stmt, i), callback_op,
1482                            wi, pset);
1483           if (ret)
1484             return ret;
1485           ret = walk_tree (gimple_omp_for_initial_ptr (stmt, i), callback_op,
1486                            wi, pset);
1487           if (ret)
1488             return ret;
1489           ret = walk_tree (gimple_omp_for_final_ptr (stmt, i), callback_op,
1490                            wi, pset);
1491           if (ret)
1492             return ret;
1493           ret = walk_tree (gimple_omp_for_incr_ptr (stmt, i), callback_op,
1494                            wi, pset);
1495         }
1496       if (ret)
1497         return ret;
1498       break;
1499
1500     case GIMPLE_OMP_PARALLEL:
1501       ret = walk_tree (gimple_omp_parallel_clauses_ptr (stmt), callback_op,
1502                        wi, pset);
1503       if (ret)
1504         return ret;
1505       ret = walk_tree (gimple_omp_parallel_child_fn_ptr (stmt), callback_op,
1506                        wi, pset);
1507       if (ret)
1508         return ret;
1509       ret = walk_tree (gimple_omp_parallel_data_arg_ptr (stmt), callback_op,
1510                        wi, pset);
1511       if (ret)
1512         return ret;
1513       break;
1514
1515     case GIMPLE_OMP_TASK:
1516       ret = walk_tree (gimple_omp_task_clauses_ptr (stmt), callback_op,
1517                        wi, pset);
1518       if (ret)
1519         return ret;
1520       ret = walk_tree (gimple_omp_task_child_fn_ptr (stmt), callback_op,
1521                        wi, pset);
1522       if (ret)
1523         return ret;
1524       ret = walk_tree (gimple_omp_task_data_arg_ptr (stmt), callback_op,
1525                        wi, pset);
1526       if (ret)
1527         return ret;
1528       ret = walk_tree (gimple_omp_task_copy_fn_ptr (stmt), callback_op,
1529                        wi, pset);
1530       if (ret)
1531         return ret;
1532       ret = walk_tree (gimple_omp_task_arg_size_ptr (stmt), callback_op,
1533                        wi, pset);
1534       if (ret)
1535         return ret;
1536       ret = walk_tree (gimple_omp_task_arg_align_ptr (stmt), callback_op,
1537                        wi, pset);
1538       if (ret)
1539         return ret;
1540       break;
1541
1542     case GIMPLE_OMP_SECTIONS:
1543       ret = walk_tree (gimple_omp_sections_clauses_ptr (stmt), callback_op,
1544                        wi, pset);
1545       if (ret)
1546         return ret;
1547
1548       ret = walk_tree (gimple_omp_sections_control_ptr (stmt), callback_op,
1549                        wi, pset);
1550       if (ret)
1551         return ret;
1552
1553       break;
1554
1555     case GIMPLE_OMP_SINGLE:
1556       ret = walk_tree (gimple_omp_single_clauses_ptr (stmt), callback_op, wi,
1557                        pset);
1558       if (ret)
1559         return ret;
1560       break;
1561
1562     case GIMPLE_OMP_ATOMIC_LOAD:
1563       ret = walk_tree (gimple_omp_atomic_load_lhs_ptr (stmt), callback_op, wi,
1564                        pset);
1565       if (ret)
1566         return ret;
1567
1568       ret = walk_tree (gimple_omp_atomic_load_rhs_ptr (stmt), callback_op, wi,
1569                        pset);
1570       if (ret)
1571         return ret;
1572       break;
1573
1574     case GIMPLE_OMP_ATOMIC_STORE:
1575       ret = walk_tree (gimple_omp_atomic_store_val_ptr (stmt), callback_op,
1576                        wi, pset);
1577       if (ret)
1578         return ret;
1579       break;
1580
1581       /* Tuples that do not have operands.  */
1582     case GIMPLE_NOP:
1583     case GIMPLE_RESX:
1584     case GIMPLE_OMP_RETURN:
1585     case GIMPLE_PREDICT:
1586       break;
1587
1588     default:
1589       {
1590         enum gimple_statement_structure_enum gss;
1591         gss = gimple_statement_structure (stmt);
1592         if (gss == GSS_WITH_OPS || gss == GSS_WITH_MEM_OPS)
1593           for (i = 0; i < gimple_num_ops (stmt); i++)
1594             {
1595               ret = walk_tree (gimple_op_ptr (stmt, i), callback_op, wi, pset);
1596               if (ret)
1597                 return ret;
1598             }
1599       }
1600       break;
1601     }
1602
1603   return NULL_TREE;
1604 }
1605
1606
1607 /* Walk the current statement in GSI (optionally using traversal state
1608    stored in WI).  If WI is NULL, no state is kept during traversal.
1609    The callback CALLBACK_STMT is called.  If CALLBACK_STMT indicates
1610    that it has handled all the operands of the statement, its return
1611    value is returned.  Otherwise, the return value from CALLBACK_STMT
1612    is discarded and its operands are scanned.
1613
1614    If CALLBACK_STMT is NULL or it didn't handle the operands,
1615    CALLBACK_OP is called on each operand of the statement via
1616    walk_gimple_op.  If walk_gimple_op returns non-NULL for any
1617    operand, the remaining operands are not scanned.  In this case, the
1618    return value from CALLBACK_OP is returned.
1619
1620    In any other case, NULL_TREE is returned.  */
1621
1622 tree
1623 walk_gimple_stmt (gimple_stmt_iterator *gsi, walk_stmt_fn callback_stmt,
1624                   walk_tree_fn callback_op, struct walk_stmt_info *wi)
1625 {
1626   gimple ret;
1627   tree tree_ret;
1628   gimple stmt = gsi_stmt (*gsi);
1629
1630   if (wi)
1631     wi->gsi = *gsi;
1632
1633   if (wi && wi->want_locations && gimple_has_location (stmt))
1634     input_location = gimple_location (stmt);
1635
1636   ret = NULL;
1637
1638   /* Invoke the statement callback.  Return if the callback handled
1639      all of STMT operands by itself.  */
1640   if (callback_stmt)
1641     {
1642       bool handled_ops = false;
1643       tree_ret = callback_stmt (gsi, &handled_ops, wi);
1644       if (handled_ops)
1645         return tree_ret;
1646
1647       /* If CALLBACK_STMT did not handle operands, it should not have
1648          a value to return.  */
1649       gcc_assert (tree_ret == NULL);
1650
1651       /* Re-read stmt in case the callback changed it.  */
1652       stmt = gsi_stmt (*gsi);
1653     }
1654
1655   /* If CALLBACK_OP is defined, invoke it on every operand of STMT.  */
1656   if (callback_op)
1657     {
1658       tree_ret = walk_gimple_op (stmt, callback_op, wi);
1659       if (tree_ret)
1660         return tree_ret;
1661     }
1662
1663   /* If STMT can have statements inside (e.g. GIMPLE_BIND), walk them.  */
1664   switch (gimple_code (stmt))
1665     {
1666     case GIMPLE_BIND:
1667       ret = walk_gimple_seq (gimple_bind_body (stmt), callback_stmt,
1668                              callback_op, wi);
1669       if (ret)
1670         return wi->callback_result;
1671       break;
1672
1673     case GIMPLE_CATCH:
1674       ret = walk_gimple_seq (gimple_catch_handler (stmt), callback_stmt,
1675                              callback_op, wi);
1676       if (ret)
1677         return wi->callback_result;
1678       break;
1679
1680     case GIMPLE_EH_FILTER:
1681       ret = walk_gimple_seq (gimple_eh_filter_failure (stmt), callback_stmt,
1682                              callback_op, wi);
1683       if (ret)
1684         return wi->callback_result;
1685       break;
1686
1687     case GIMPLE_TRY:
1688       ret = walk_gimple_seq (gimple_try_eval (stmt), callback_stmt, callback_op,
1689                              wi);
1690       if (ret)
1691         return wi->callback_result;
1692
1693       ret = walk_gimple_seq (gimple_try_cleanup (stmt), callback_stmt,
1694                              callback_op, wi);
1695       if (ret)
1696         return wi->callback_result;
1697       break;
1698
1699     case GIMPLE_OMP_FOR:
1700       ret = walk_gimple_seq (gimple_omp_for_pre_body (stmt), callback_stmt,
1701                              callback_op, wi);
1702       if (ret)
1703         return wi->callback_result;
1704
1705       /* FALL THROUGH.  */
1706     case GIMPLE_OMP_CRITICAL:
1707     case GIMPLE_OMP_MASTER:
1708     case GIMPLE_OMP_ORDERED:
1709     case GIMPLE_OMP_SECTION:
1710     case GIMPLE_OMP_PARALLEL:
1711     case GIMPLE_OMP_TASK:
1712     case GIMPLE_OMP_SECTIONS:
1713     case GIMPLE_OMP_SINGLE:
1714       ret = walk_gimple_seq (gimple_omp_body (stmt), callback_stmt, callback_op,
1715                              wi);
1716       if (ret)
1717         return wi->callback_result;
1718       break;
1719
1720     case GIMPLE_WITH_CLEANUP_EXPR:
1721       ret = walk_gimple_seq (gimple_wce_cleanup (stmt), callback_stmt,
1722                              callback_op, wi);
1723       if (ret)
1724         return wi->callback_result;
1725       break;
1726
1727     default:
1728       gcc_assert (!gimple_has_substatements (stmt));
1729       break;
1730     }
1731
1732   return NULL;
1733 }
1734
1735
1736 /* Set sequence SEQ to be the GIMPLE body for function FN.  */
1737
1738 void
1739 gimple_set_body (tree fndecl, gimple_seq seq)
1740 {
1741   struct function *fn = DECL_STRUCT_FUNCTION (fndecl);
1742   if (fn == NULL)
1743     {
1744       /* If FNDECL still does not have a function structure associated
1745          with it, then it does not make sense for it to receive a
1746          GIMPLE body.  */
1747       gcc_assert (seq == NULL);
1748     }
1749   else
1750     fn->gimple_body = seq;
1751 }
1752
1753
1754 /* Return the body of GIMPLE statements for function FN.  After the
1755    CFG pass, the function body doesn't exist anymore because it has
1756    been split up into basic blocks.  In this case, it returns
1757    NULL.  */
1758
1759 gimple_seq
1760 gimple_body (tree fndecl)
1761 {
1762   struct function *fn = DECL_STRUCT_FUNCTION (fndecl);
1763   return fn ? fn->gimple_body : NULL;
1764 }
1765
1766 /* Return true when FNDECL has Gimple body either in unlowered
1767    or CFG form.  */
1768 bool
1769 gimple_has_body_p (tree fndecl)
1770 {
1771   struct function *fn = DECL_STRUCT_FUNCTION (fndecl);
1772   return (gimple_body (fndecl) || (fn && fn->cfg));
1773 }
1774
1775 /* Detect flags from a GIMPLE_CALL.  This is just like
1776    call_expr_flags, but for gimple tuples.  */
1777
1778 int
1779 gimple_call_flags (const_gimple stmt)
1780 {
1781   int flags;
1782   tree decl = gimple_call_fndecl (stmt);
1783
1784   if (decl)
1785     flags = flags_from_decl_or_type (decl);
1786   else
1787     {
1788       tree t = TREE_TYPE (gimple_call_fn (stmt));
1789       /* ???  We can end up being called from gimple_set_modified from
1790          gsi_remove in which case the function being called can
1791          be a released SSA name.  Give up in that case.  */
1792       if (t)
1793         flags = flags_from_decl_or_type (gimple_call_fntype (stmt));
1794       else
1795         flags = 0;
1796     }
1797
1798   if (stmt->gsbase.subcode & GF_CALL_NOTHROW)
1799     flags |= ECF_NOTHROW;
1800
1801   return flags;
1802 }
1803
1804 /* Detects argument flags for argument number ARG on call STMT.  */
1805
1806 int
1807 gimple_call_arg_flags (const_gimple stmt, unsigned arg)
1808 {
1809   tree type = gimple_call_fntype (stmt);
1810   tree attr = lookup_attribute ("fn spec", TYPE_ATTRIBUTES (type));
1811   if (!attr)
1812     return 0;
1813
1814   attr = TREE_VALUE (TREE_VALUE (attr));
1815   if (1 + arg >= (unsigned) TREE_STRING_LENGTH (attr))
1816     return 0;
1817
1818   switch (TREE_STRING_POINTER (attr)[1 + arg])
1819     {
1820     case 'x':
1821     case 'X':
1822       return EAF_UNUSED;
1823
1824     case 'R':
1825       return EAF_DIRECT | EAF_NOCLOBBER | EAF_NOESCAPE;
1826
1827     case 'r':
1828       return EAF_NOCLOBBER | EAF_NOESCAPE;
1829
1830     case 'W':
1831       return EAF_DIRECT | EAF_NOESCAPE;
1832
1833     case 'w':
1834       return EAF_NOESCAPE;
1835
1836     case '.':
1837     default:
1838       return 0;
1839     }
1840 }
1841
1842 /* Detects return flags for the call STMT.  */
1843
1844 int
1845 gimple_call_return_flags (const_gimple stmt)
1846 {
1847   tree type;
1848   tree attr = NULL_TREE;
1849
1850   if (gimple_call_flags (stmt) & ECF_MALLOC)
1851     return ERF_NOALIAS;
1852
1853   type = gimple_call_fntype (stmt);
1854   attr = lookup_attribute ("fn spec", TYPE_ATTRIBUTES (type));
1855   if (!attr)
1856     return 0;
1857
1858   attr = TREE_VALUE (TREE_VALUE (attr));
1859   if (TREE_STRING_LENGTH (attr) < 1)
1860     return 0;
1861
1862   switch (TREE_STRING_POINTER (attr)[0])
1863     {
1864     case '1':
1865     case '2':
1866     case '3':
1867     case '4':
1868       return ERF_RETURNS_ARG | (TREE_STRING_POINTER (attr)[0] - '1');
1869
1870     case 'm':
1871       return ERF_NOALIAS;
1872
1873     case '.':
1874     default:
1875       return 0;
1876     }
1877 }
1878
1879
1880 /* Return true if GS is a copy assignment.  */
1881
1882 bool
1883 gimple_assign_copy_p (gimple gs)
1884 {
1885   return (gimple_assign_single_p (gs)
1886           && is_gimple_val (gimple_op (gs, 1)));
1887 }
1888
1889
1890 /* Return true if GS is a SSA_NAME copy assignment.  */
1891
1892 bool
1893 gimple_assign_ssa_name_copy_p (gimple gs)
1894 {
1895   return (gimple_assign_single_p (gs)
1896           && TREE_CODE (gimple_assign_lhs (gs)) == SSA_NAME
1897           && TREE_CODE (gimple_assign_rhs1 (gs)) == SSA_NAME);
1898 }
1899
1900
1901 /* Return true if GS is an assignment with a unary RHS, but the
1902    operator has no effect on the assigned value.  The logic is adapted
1903    from STRIP_NOPS.  This predicate is intended to be used in tuplifying
1904    instances in which STRIP_NOPS was previously applied to the RHS of
1905    an assignment.
1906
1907    NOTE: In the use cases that led to the creation of this function
1908    and of gimple_assign_single_p, it is typical to test for either
1909    condition and to proceed in the same manner.  In each case, the
1910    assigned value is represented by the single RHS operand of the
1911    assignment.  I suspect there may be cases where gimple_assign_copy_p,
1912    gimple_assign_single_p, or equivalent logic is used where a similar
1913    treatment of unary NOPs is appropriate.  */
1914
1915 bool
1916 gimple_assign_unary_nop_p (gimple gs)
1917 {
1918   return (is_gimple_assign (gs)
1919           && (CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (gs))
1920               || gimple_assign_rhs_code (gs) == NON_LVALUE_EXPR)
1921           && gimple_assign_rhs1 (gs) != error_mark_node
1922           && (TYPE_MODE (TREE_TYPE (gimple_assign_lhs (gs)))
1923               == TYPE_MODE (TREE_TYPE (gimple_assign_rhs1 (gs)))));
1924 }
1925
1926 /* Set BB to be the basic block holding G.  */
1927
1928 void
1929 gimple_set_bb (gimple stmt, basic_block bb)
1930 {
1931   stmt->gsbase.bb = bb;
1932
1933   /* If the statement is a label, add the label to block-to-labels map
1934      so that we can speed up edge creation for GIMPLE_GOTOs.  */
1935   if (cfun->cfg && gimple_code (stmt) == GIMPLE_LABEL)
1936     {
1937       tree t;
1938       int uid;
1939
1940       t = gimple_label_label (stmt);
1941       uid = LABEL_DECL_UID (t);
1942       if (uid == -1)
1943         {
1944           unsigned old_len = VEC_length (basic_block, label_to_block_map);
1945           LABEL_DECL_UID (t) = uid = cfun->cfg->last_label_uid++;
1946           if (old_len <= (unsigned) uid)
1947             {
1948               unsigned new_len = 3 * uid / 2 + 1;
1949
1950               VEC_safe_grow_cleared (basic_block, gc, label_to_block_map,
1951                                      new_len);
1952             }
1953         }
1954
1955       VEC_replace (basic_block, label_to_block_map, uid, bb);
1956     }
1957 }
1958
1959
1960 /* Modify the RHS of the assignment pointed-to by GSI using the
1961    operands in the expression tree EXPR.
1962
1963    NOTE: The statement pointed-to by GSI may be reallocated if it
1964    did not have enough operand slots.
1965
1966    This function is useful to convert an existing tree expression into
1967    the flat representation used for the RHS of a GIMPLE assignment.
1968    It will reallocate memory as needed to expand or shrink the number
1969    of operand slots needed to represent EXPR.
1970
1971    NOTE: If you find yourself building a tree and then calling this
1972    function, you are most certainly doing it the slow way.  It is much
1973    better to build a new assignment or to use the function
1974    gimple_assign_set_rhs_with_ops, which does not require an
1975    expression tree to be built.  */
1976
1977 void
1978 gimple_assign_set_rhs_from_tree (gimple_stmt_iterator *gsi, tree expr)
1979 {
1980   enum tree_code subcode;
1981   tree op1, op2, op3;
1982
1983   extract_ops_from_tree_1 (expr, &subcode, &op1, &op2, &op3);
1984   gimple_assign_set_rhs_with_ops_1 (gsi, subcode, op1, op2, op3);
1985 }
1986
1987
1988 /* Set the RHS of assignment statement pointed-to by GSI to CODE with
1989    operands OP1, OP2 and OP3.
1990
1991    NOTE: The statement pointed-to by GSI may be reallocated if it
1992    did not have enough operand slots.  */
1993
1994 void
1995 gimple_assign_set_rhs_with_ops_1 (gimple_stmt_iterator *gsi, enum tree_code code,
1996                                   tree op1, tree op2, tree op3)
1997 {
1998   unsigned new_rhs_ops = get_gimple_rhs_num_ops (code);
1999   gimple stmt = gsi_stmt (*gsi);
2000
2001   /* If the new CODE needs more operands, allocate a new statement.  */
2002   if (gimple_num_ops (stmt) < new_rhs_ops + 1)
2003     {
2004       tree lhs = gimple_assign_lhs (stmt);
2005       gimple new_stmt = gimple_alloc (gimple_code (stmt), new_rhs_ops + 1);
2006       memcpy (new_stmt, stmt, gimple_size (gimple_code (stmt)));
2007       gsi_replace (gsi, new_stmt, true);
2008       stmt = new_stmt;
2009
2010       /* The LHS needs to be reset as this also changes the SSA name
2011          on the LHS.  */
2012       gimple_assign_set_lhs (stmt, lhs);
2013     }
2014
2015   gimple_set_num_ops (stmt, new_rhs_ops + 1);
2016   gimple_set_subcode (stmt, code);
2017   gimple_assign_set_rhs1 (stmt, op1);
2018   if (new_rhs_ops > 1)
2019     gimple_assign_set_rhs2 (stmt, op2);
2020   if (new_rhs_ops > 2)
2021     gimple_assign_set_rhs3 (stmt, op3);
2022 }
2023
2024
2025 /* Return the LHS of a statement that performs an assignment,
2026    either a GIMPLE_ASSIGN or a GIMPLE_CALL.  Returns NULL_TREE
2027    for a call to a function that returns no value, or for a
2028    statement other than an assignment or a call.  */
2029
2030 tree
2031 gimple_get_lhs (const_gimple stmt)
2032 {
2033   enum gimple_code code = gimple_code (stmt);
2034
2035   if (code == GIMPLE_ASSIGN)
2036     return gimple_assign_lhs (stmt);
2037   else if (code == GIMPLE_CALL)
2038     return gimple_call_lhs (stmt);
2039   else
2040     return NULL_TREE;
2041 }
2042
2043
2044 /* Set the LHS of a statement that performs an assignment,
2045    either a GIMPLE_ASSIGN or a GIMPLE_CALL.  */
2046
2047 void
2048 gimple_set_lhs (gimple stmt, tree lhs)
2049 {
2050   enum gimple_code code = gimple_code (stmt);
2051
2052   if (code == GIMPLE_ASSIGN)
2053     gimple_assign_set_lhs (stmt, lhs);
2054   else if (code == GIMPLE_CALL)
2055     gimple_call_set_lhs (stmt, lhs);
2056   else
2057     gcc_unreachable();
2058 }
2059
2060 /* Replace the LHS of STMT, an assignment, either a GIMPLE_ASSIGN or a
2061    GIMPLE_CALL, with NLHS, in preparation for modifying the RHS to an
2062    expression with a different value.
2063
2064    This will update any annotations (say debug bind stmts) referring
2065    to the original LHS, so that they use the RHS instead.  This is
2066    done even if NLHS and LHS are the same, for it is understood that
2067    the RHS will be modified afterwards, and NLHS will not be assigned
2068    an equivalent value.
2069
2070    Adjusting any non-annotation uses of the LHS, if needed, is a
2071    responsibility of the caller.
2072
2073    The effect of this call should be pretty much the same as that of
2074    inserting a copy of STMT before STMT, and then removing the
2075    original stmt, at which time gsi_remove() would have update
2076    annotations, but using this function saves all the inserting,
2077    copying and removing.  */
2078
2079 void
2080 gimple_replace_lhs (gimple stmt, tree nlhs)
2081 {
2082   if (MAY_HAVE_DEBUG_STMTS)
2083     {
2084       tree lhs = gimple_get_lhs (stmt);
2085
2086       gcc_assert (SSA_NAME_DEF_STMT (lhs) == stmt);
2087
2088       insert_debug_temp_for_var_def (NULL, lhs);
2089     }
2090
2091   gimple_set_lhs (stmt, nlhs);
2092 }
2093
2094 /* Return a deep copy of statement STMT.  All the operands from STMT
2095    are reallocated and copied using unshare_expr.  The DEF, USE, VDEF
2096    and VUSE operand arrays are set to empty in the new copy.  */
2097
2098 gimple
2099 gimple_copy (gimple stmt)
2100 {
2101   enum gimple_code code = gimple_code (stmt);
2102   unsigned num_ops = gimple_num_ops (stmt);
2103   gimple copy = gimple_alloc (code, num_ops);
2104   unsigned i;
2105
2106   /* Shallow copy all the fields from STMT.  */
2107   memcpy (copy, stmt, gimple_size (code));
2108
2109   /* If STMT has sub-statements, deep-copy them as well.  */
2110   if (gimple_has_substatements (stmt))
2111     {
2112       gimple_seq new_seq;
2113       tree t;
2114
2115       switch (gimple_code (stmt))
2116         {
2117         case GIMPLE_BIND:
2118           new_seq = gimple_seq_copy (gimple_bind_body (stmt));
2119           gimple_bind_set_body (copy, new_seq);
2120           gimple_bind_set_vars (copy, unshare_expr (gimple_bind_vars (stmt)));
2121           gimple_bind_set_block (copy, gimple_bind_block (stmt));
2122           break;
2123
2124         case GIMPLE_CATCH:
2125           new_seq = gimple_seq_copy (gimple_catch_handler (stmt));
2126           gimple_catch_set_handler (copy, new_seq);
2127           t = unshare_expr (gimple_catch_types (stmt));
2128           gimple_catch_set_types (copy, t);
2129           break;
2130
2131         case GIMPLE_EH_FILTER:
2132           new_seq = gimple_seq_copy (gimple_eh_filter_failure (stmt));
2133           gimple_eh_filter_set_failure (copy, new_seq);
2134           t = unshare_expr (gimple_eh_filter_types (stmt));
2135           gimple_eh_filter_set_types (copy, t);
2136           break;
2137
2138         case GIMPLE_TRY:
2139           new_seq = gimple_seq_copy (gimple_try_eval (stmt));
2140           gimple_try_set_eval (copy, new_seq);
2141           new_seq = gimple_seq_copy (gimple_try_cleanup (stmt));
2142           gimple_try_set_cleanup (copy, new_seq);
2143           break;
2144
2145         case GIMPLE_OMP_FOR:
2146           new_seq = gimple_seq_copy (gimple_omp_for_pre_body (stmt));
2147           gimple_omp_for_set_pre_body (copy, new_seq);
2148           t = unshare_expr (gimple_omp_for_clauses (stmt));
2149           gimple_omp_for_set_clauses (copy, t);
2150           copy->gimple_omp_for.iter
2151             = ggc_alloc_vec_gimple_omp_for_iter
2152             (gimple_omp_for_collapse (stmt));
2153           for (i = 0; i < gimple_omp_for_collapse (stmt); i++)
2154             {
2155               gimple_omp_for_set_cond (copy, i,
2156                                        gimple_omp_for_cond (stmt, i));
2157               gimple_omp_for_set_index (copy, i,
2158                                         gimple_omp_for_index (stmt, i));
2159               t = unshare_expr (gimple_omp_for_initial (stmt, i));
2160               gimple_omp_for_set_initial (copy, i, t);
2161               t = unshare_expr (gimple_omp_for_final (stmt, i));
2162               gimple_omp_for_set_final (copy, i, t);
2163               t = unshare_expr (gimple_omp_for_incr (stmt, i));
2164               gimple_omp_for_set_incr (copy, i, t);
2165             }
2166           goto copy_omp_body;
2167
2168         case GIMPLE_OMP_PARALLEL:
2169           t = unshare_expr (gimple_omp_parallel_clauses (stmt));
2170           gimple_omp_parallel_set_clauses (copy, t);
2171           t = unshare_expr (gimple_omp_parallel_child_fn (stmt));
2172           gimple_omp_parallel_set_child_fn (copy, t);
2173           t = unshare_expr (gimple_omp_parallel_data_arg (stmt));
2174           gimple_omp_parallel_set_data_arg (copy, t);
2175           goto copy_omp_body;
2176
2177         case GIMPLE_OMP_TASK:
2178           t = unshare_expr (gimple_omp_task_clauses (stmt));
2179           gimple_omp_task_set_clauses (copy, t);
2180           t = unshare_expr (gimple_omp_task_child_fn (stmt));
2181           gimple_omp_task_set_child_fn (copy, t);
2182           t = unshare_expr (gimple_omp_task_data_arg (stmt));
2183           gimple_omp_task_set_data_arg (copy, t);
2184           t = unshare_expr (gimple_omp_task_copy_fn (stmt));
2185           gimple_omp_task_set_copy_fn (copy, t);
2186           t = unshare_expr (gimple_omp_task_arg_size (stmt));
2187           gimple_omp_task_set_arg_size (copy, t);
2188           t = unshare_expr (gimple_omp_task_arg_align (stmt));
2189           gimple_omp_task_set_arg_align (copy, t);
2190           goto copy_omp_body;
2191
2192         case GIMPLE_OMP_CRITICAL:
2193           t = unshare_expr (gimple_omp_critical_name (stmt));
2194           gimple_omp_critical_set_name (copy, t);
2195           goto copy_omp_body;
2196
2197         case GIMPLE_OMP_SECTIONS:
2198           t = unshare_expr (gimple_omp_sections_clauses (stmt));
2199           gimple_omp_sections_set_clauses (copy, t);
2200           t = unshare_expr (gimple_omp_sections_control (stmt));
2201           gimple_omp_sections_set_control (copy, t);
2202           /* FALLTHRU  */
2203
2204         case GIMPLE_OMP_SINGLE:
2205         case GIMPLE_OMP_SECTION:
2206         case GIMPLE_OMP_MASTER:
2207         case GIMPLE_OMP_ORDERED:
2208         copy_omp_body:
2209           new_seq = gimple_seq_copy (gimple_omp_body (stmt));
2210           gimple_omp_set_body (copy, new_seq);
2211           break;
2212
2213         case GIMPLE_WITH_CLEANUP_EXPR:
2214           new_seq = gimple_seq_copy (gimple_wce_cleanup (stmt));
2215           gimple_wce_set_cleanup (copy, new_seq);
2216           break;
2217
2218         default:
2219           gcc_unreachable ();
2220         }
2221     }
2222
2223   /* Make copy of operands.  */
2224   if (num_ops > 0)
2225     {
2226       for (i = 0; i < num_ops; i++)
2227         gimple_set_op (copy, i, unshare_expr (gimple_op (stmt, i)));
2228
2229       /* Clear out SSA operand vectors on COPY.  */
2230       if (gimple_has_ops (stmt))
2231         {
2232           gimple_set_def_ops (copy, NULL);
2233           gimple_set_use_ops (copy, NULL);
2234         }
2235
2236       if (gimple_has_mem_ops (stmt))
2237         {
2238           gimple_set_vdef (copy, gimple_vdef (stmt));
2239           gimple_set_vuse (copy, gimple_vuse (stmt));
2240         }
2241
2242       /* SSA operands need to be updated.  */
2243       gimple_set_modified (copy, true);
2244     }
2245
2246   return copy;
2247 }
2248
2249
2250 /* Set the MODIFIED flag to MODIFIEDP, iff the gimple statement G has
2251    a MODIFIED field.  */
2252
2253 void
2254 gimple_set_modified (gimple s, bool modifiedp)
2255 {
2256   if (gimple_has_ops (s))
2257     s->gsbase.modified = (unsigned) modifiedp;
2258 }
2259
2260
2261 /* Return true if statement S has side-effects.  We consider a
2262    statement to have side effects if:
2263
2264    - It is a GIMPLE_CALL not marked with ECF_PURE or ECF_CONST.
2265    - Any of its operands are marked TREE_THIS_VOLATILE or TREE_SIDE_EFFECTS.  */
2266
2267 bool
2268 gimple_has_side_effects (const_gimple s)
2269 {
2270   unsigned i;
2271
2272   if (is_gimple_debug (s))
2273     return false;
2274
2275   /* We don't have to scan the arguments to check for
2276      volatile arguments, though, at present, we still
2277      do a scan to check for TREE_SIDE_EFFECTS.  */
2278   if (gimple_has_volatile_ops (s))
2279     return true;
2280
2281   if (is_gimple_call (s))
2282     {
2283       unsigned nargs = gimple_call_num_args (s);
2284
2285       if (!(gimple_call_flags (s) & (ECF_CONST | ECF_PURE)))
2286         return true;
2287       else if (gimple_call_flags (s) & ECF_LOOPING_CONST_OR_PURE)
2288         /* An infinite loop is considered a side effect.  */
2289         return true;
2290
2291       if (gimple_call_lhs (s)
2292           && TREE_SIDE_EFFECTS (gimple_call_lhs (s)))
2293         {
2294           gcc_assert (gimple_has_volatile_ops (s));
2295           return true;
2296         }
2297
2298       if (TREE_SIDE_EFFECTS (gimple_call_fn (s)))
2299         return true;
2300
2301       for (i = 0; i < nargs; i++)
2302         if (TREE_SIDE_EFFECTS (gimple_call_arg (s, i)))
2303           {
2304             gcc_assert (gimple_has_volatile_ops (s));
2305             return true;
2306           }
2307
2308       return false;
2309     }
2310   else
2311     {
2312       for (i = 0; i < gimple_num_ops (s); i++)
2313         if (TREE_SIDE_EFFECTS (gimple_op (s, i)))
2314           {
2315             gcc_assert (gimple_has_volatile_ops (s));
2316             return true;
2317           }
2318     }
2319
2320   return false;
2321 }
2322
2323 /* Return true if the RHS of statement S has side effects.
2324    We may use it to determine if it is admissable to replace
2325    an assignment or call with a copy of a previously-computed
2326    value.  In such cases, side-effects due the the LHS are
2327    preserved.  */
2328
2329 bool
2330 gimple_rhs_has_side_effects (const_gimple s)
2331 {
2332   unsigned i;
2333
2334   if (is_gimple_call (s))
2335     {
2336       unsigned nargs = gimple_call_num_args (s);
2337
2338       if (!(gimple_call_flags (s) & (ECF_CONST | ECF_PURE)))
2339         return true;
2340
2341       /* We cannot use gimple_has_volatile_ops here,
2342          because we must ignore a volatile LHS.  */
2343       if (TREE_SIDE_EFFECTS (gimple_call_fn (s))
2344           || TREE_THIS_VOLATILE (gimple_call_fn (s)))
2345         {
2346           gcc_assert (gimple_has_volatile_ops (s));
2347           return true;
2348         }
2349
2350       for (i = 0; i < nargs; i++)
2351         if (TREE_SIDE_EFFECTS (gimple_call_arg (s, i))
2352             || TREE_THIS_VOLATILE (gimple_call_arg (s, i)))
2353           return true;
2354
2355       return false;
2356     }
2357   else if (is_gimple_assign (s))
2358     {
2359       /* Skip the first operand, the LHS. */
2360       for (i = 1; i < gimple_num_ops (s); i++)
2361         if (TREE_SIDE_EFFECTS (gimple_op (s, i))
2362             || TREE_THIS_VOLATILE (gimple_op (s, i)))
2363           {
2364             gcc_assert (gimple_has_volatile_ops (s));
2365             return true;
2366           }
2367     }
2368   else if (is_gimple_debug (s))
2369     return false;
2370   else
2371     {
2372       /* For statements without an LHS, examine all arguments.  */
2373       for (i = 0; i < gimple_num_ops (s); i++)
2374         if (TREE_SIDE_EFFECTS (gimple_op (s, i))
2375             || TREE_THIS_VOLATILE (gimple_op (s, i)))
2376           {
2377             gcc_assert (gimple_has_volatile_ops (s));
2378             return true;
2379           }
2380     }
2381
2382   return false;
2383 }
2384
2385 /* Helper for gimple_could_trap_p and gimple_assign_rhs_could_trap_p.
2386    Return true if S can trap.  When INCLUDE_MEM is true, check whether
2387    the memory operations could trap.  When INCLUDE_STORES is true and
2388    S is a GIMPLE_ASSIGN, the LHS of the assignment is also checked.  */
2389
2390 bool
2391 gimple_could_trap_p_1 (gimple s, bool include_mem, bool include_stores)
2392 {
2393   tree t, div = NULL_TREE;
2394   enum tree_code op;
2395
2396   if (include_mem)
2397     {
2398       unsigned i, start = (is_gimple_assign (s) && !include_stores) ? 1 : 0;
2399
2400       for (i = start; i < gimple_num_ops (s); i++)
2401         if (tree_could_trap_p (gimple_op (s, i)))
2402           return true;
2403     }
2404
2405   switch (gimple_code (s))
2406     {
2407     case GIMPLE_ASM:
2408       return gimple_asm_volatile_p (s);
2409
2410     case GIMPLE_CALL:
2411       t = gimple_call_fndecl (s);
2412       /* Assume that calls to weak functions may trap.  */
2413       if (!t || !DECL_P (t) || DECL_WEAK (t))
2414         return true;
2415       return false;
2416
2417     case GIMPLE_ASSIGN:
2418       t = gimple_expr_type (s);
2419       op = gimple_assign_rhs_code (s);
2420       if (get_gimple_rhs_class (op) == GIMPLE_BINARY_RHS)
2421         div = gimple_assign_rhs2 (s);
2422       return (operation_could_trap_p (op, FLOAT_TYPE_P (t),
2423                                       (INTEGRAL_TYPE_P (t)
2424                                        && TYPE_OVERFLOW_TRAPS (t)),
2425                                       div));
2426
2427     default:
2428       break;
2429     }
2430
2431   return false;
2432 }
2433
2434 /* Return true if statement S can trap.  */
2435
2436 bool
2437 gimple_could_trap_p (gimple s)
2438 {
2439   return gimple_could_trap_p_1 (s, true, true);
2440 }
2441
2442 /* Return true if RHS of a GIMPLE_ASSIGN S can trap.  */
2443
2444 bool
2445 gimple_assign_rhs_could_trap_p (gimple s)
2446 {
2447   gcc_assert (is_gimple_assign (s));
2448   return gimple_could_trap_p_1 (s, true, false);
2449 }
2450
2451
2452 /* Print debugging information for gimple stmts generated.  */
2453
2454 void
2455 dump_gimple_statistics (void)
2456 {
2457 #ifdef GATHER_STATISTICS
2458   int i, total_tuples = 0, total_bytes = 0;
2459
2460   fprintf (stderr, "\nGIMPLE statements\n");
2461   fprintf (stderr, "Kind                   Stmts      Bytes\n");
2462   fprintf (stderr, "---------------------------------------\n");
2463   for (i = 0; i < (int) gimple_alloc_kind_all; ++i)
2464     {
2465       fprintf (stderr, "%-20s %7d %10d\n", gimple_alloc_kind_names[i],
2466           gimple_alloc_counts[i], gimple_alloc_sizes[i]);
2467       total_tuples += gimple_alloc_counts[i];
2468       total_bytes += gimple_alloc_sizes[i];
2469     }
2470   fprintf (stderr, "---------------------------------------\n");
2471   fprintf (stderr, "%-20s %7d %10d\n", "Total", total_tuples, total_bytes);
2472   fprintf (stderr, "---------------------------------------\n");
2473 #else
2474   fprintf (stderr, "No gimple statistics\n");
2475 #endif
2476 }
2477
2478
2479 /* Return the number of operands needed on the RHS of a GIMPLE
2480    assignment for an expression with tree code CODE.  */
2481
2482 unsigned
2483 get_gimple_rhs_num_ops (enum tree_code code)
2484 {
2485   enum gimple_rhs_class rhs_class = get_gimple_rhs_class (code);
2486
2487   if (rhs_class == GIMPLE_UNARY_RHS || rhs_class == GIMPLE_SINGLE_RHS)
2488     return 1;
2489   else if (rhs_class == GIMPLE_BINARY_RHS)
2490     return 2;
2491   else if (rhs_class == GIMPLE_TERNARY_RHS)
2492     return 3;
2493   else
2494     gcc_unreachable ();
2495 }
2496
2497 #define DEFTREECODE(SYM, STRING, TYPE, NARGS)                               \
2498   (unsigned char)                                                           \
2499   ((TYPE) == tcc_unary ? GIMPLE_UNARY_RHS                                   \
2500    : ((TYPE) == tcc_binary                                                  \
2501       || (TYPE) == tcc_comparison) ? GIMPLE_BINARY_RHS                      \
2502    : ((TYPE) == tcc_constant                                                \
2503       || (TYPE) == tcc_declaration                                          \
2504       || (TYPE) == tcc_reference) ? GIMPLE_SINGLE_RHS                       \
2505    : ((SYM) == TRUTH_AND_EXPR                                               \
2506       || (SYM) == TRUTH_OR_EXPR                                             \
2507       || (SYM) == TRUTH_XOR_EXPR) ? GIMPLE_BINARY_RHS                       \
2508    : (SYM) == TRUTH_NOT_EXPR ? GIMPLE_UNARY_RHS                             \
2509    : ((SYM) == WIDEN_MULT_PLUS_EXPR                                         \
2510       || (SYM) == WIDEN_MULT_MINUS_EXPR                                     \
2511       || (SYM) == DOT_PROD_EXPR                                             \
2512       || (SYM) == REALIGN_LOAD_EXPR                                         \
2513       || (SYM) == FMA_EXPR) ? GIMPLE_TERNARY_RHS                            \
2514    : ((SYM) == COND_EXPR                                                    \
2515       || (SYM) == CONSTRUCTOR                                               \
2516       || (SYM) == OBJ_TYPE_REF                                              \
2517       || (SYM) == ASSERT_EXPR                                               \
2518       || (SYM) == ADDR_EXPR                                                 \
2519       || (SYM) == WITH_SIZE_EXPR                                            \
2520       || (SYM) == SSA_NAME                                                  \
2521       || (SYM) == VEC_COND_EXPR) ? GIMPLE_SINGLE_RHS                        \
2522    : GIMPLE_INVALID_RHS),
2523 #define END_OF_BASE_TREE_CODES (unsigned char) GIMPLE_INVALID_RHS,
2524
2525 const unsigned char gimple_rhs_class_table[] = {
2526 #include "all-tree.def"
2527 };
2528
2529 #undef DEFTREECODE
2530 #undef END_OF_BASE_TREE_CODES
2531
2532 /* For the definitive definition of GIMPLE, see doc/tree-ssa.texi.  */
2533
2534 /* Validation of GIMPLE expressions.  */
2535
2536 /* Returns true iff T is a valid RHS for an assignment to a renamed
2537    user -- or front-end generated artificial -- variable.  */
2538
2539 bool
2540 is_gimple_reg_rhs (tree t)
2541 {
2542   return get_gimple_rhs_class (TREE_CODE (t)) != GIMPLE_INVALID_RHS;
2543 }
2544
2545 /* Returns true iff T is a valid RHS for an assignment to an un-renamed
2546    LHS, or for a call argument.  */
2547
2548 bool
2549 is_gimple_mem_rhs (tree t)
2550 {
2551   /* If we're dealing with a renamable type, either source or dest must be
2552      a renamed variable.  */
2553   if (is_gimple_reg_type (TREE_TYPE (t)))
2554     return is_gimple_val (t);
2555   else
2556     return is_gimple_val (t) || is_gimple_lvalue (t);
2557 }
2558
2559 /*  Return true if T is a valid LHS for a GIMPLE assignment expression.  */
2560
2561 bool
2562 is_gimple_lvalue (tree t)
2563 {
2564   return (is_gimple_addressable (t)
2565           || TREE_CODE (t) == WITH_SIZE_EXPR
2566           /* These are complex lvalues, but don't have addresses, so they
2567              go here.  */
2568           || TREE_CODE (t) == BIT_FIELD_REF);
2569 }
2570
2571 /*  Return true if T is a GIMPLE condition.  */
2572
2573 bool
2574 is_gimple_condexpr (tree t)
2575 {
2576   return (is_gimple_val (t) || (COMPARISON_CLASS_P (t)
2577                                 && !tree_could_throw_p (t)
2578                                 && is_gimple_val (TREE_OPERAND (t, 0))
2579                                 && is_gimple_val (TREE_OPERAND (t, 1))));
2580 }
2581
2582 /*  Return true if T is something whose address can be taken.  */
2583
2584 bool
2585 is_gimple_addressable (tree t)
2586 {
2587   return (is_gimple_id (t) || handled_component_p (t)
2588           || TREE_CODE (t) == MEM_REF);
2589 }
2590
2591 /* Return true if T is a valid gimple constant.  */
2592
2593 bool
2594 is_gimple_constant (const_tree t)
2595 {
2596   switch (TREE_CODE (t))
2597     {
2598     case INTEGER_CST:
2599     case REAL_CST:
2600     case FIXED_CST:
2601     case STRING_CST:
2602     case COMPLEX_CST:
2603     case VECTOR_CST:
2604       return true;
2605
2606     /* Vector constant constructors are gimple invariant.  */
2607     case CONSTRUCTOR:
2608       if (TREE_TYPE (t) && TREE_CODE (TREE_TYPE (t)) == VECTOR_TYPE)
2609         return TREE_CONSTANT (t);
2610       else
2611         return false;
2612
2613     default:
2614       return false;
2615     }
2616 }
2617
2618 /* Return true if T is a gimple address.  */
2619
2620 bool
2621 is_gimple_address (const_tree t)
2622 {
2623   tree op;
2624
2625   if (TREE_CODE (t) != ADDR_EXPR)
2626     return false;
2627
2628   op = TREE_OPERAND (t, 0);
2629   while (handled_component_p (op))
2630     {
2631       if ((TREE_CODE (op) == ARRAY_REF
2632            || TREE_CODE (op) == ARRAY_RANGE_REF)
2633           && !is_gimple_val (TREE_OPERAND (op, 1)))
2634             return false;
2635
2636       op = TREE_OPERAND (op, 0);
2637     }
2638
2639   if (CONSTANT_CLASS_P (op) || TREE_CODE (op) == MEM_REF)
2640     return true;
2641
2642   switch (TREE_CODE (op))
2643     {
2644     case PARM_DECL:
2645     case RESULT_DECL:
2646     case LABEL_DECL:
2647     case FUNCTION_DECL:
2648     case VAR_DECL:
2649     case CONST_DECL:
2650       return true;
2651
2652     default:
2653       return false;
2654     }
2655 }
2656
2657 /* Strip out all handled components that produce invariant
2658    offsets.  */
2659
2660 static const_tree
2661 strip_invariant_refs (const_tree op)
2662 {
2663   while (handled_component_p (op))
2664     {
2665       switch (TREE_CODE (op))
2666         {
2667         case ARRAY_REF:
2668         case ARRAY_RANGE_REF:
2669           if (!is_gimple_constant (TREE_OPERAND (op, 1))
2670               || TREE_OPERAND (op, 2) != NULL_TREE
2671               || TREE_OPERAND (op, 3) != NULL_TREE)
2672             return NULL;
2673           break;
2674
2675         case COMPONENT_REF:
2676           if (TREE_OPERAND (op, 2) != NULL_TREE)
2677             return NULL;
2678           break;
2679
2680         default:;
2681         }
2682       op = TREE_OPERAND (op, 0);
2683     }
2684
2685   return op;
2686 }
2687
2688 /* Return true if T is a gimple invariant address.  */
2689
2690 bool
2691 is_gimple_invariant_address (const_tree t)
2692 {
2693   const_tree op;
2694
2695   if (TREE_CODE (t) != ADDR_EXPR)
2696     return false;
2697
2698   op = strip_invariant_refs (TREE_OPERAND (t, 0));
2699   if (!op)
2700     return false;
2701
2702   if (TREE_CODE (op) == MEM_REF)
2703     {
2704       const_tree op0 = TREE_OPERAND (op, 0);
2705       return (TREE_CODE (op0) == ADDR_EXPR
2706               && (CONSTANT_CLASS_P (TREE_OPERAND (op0, 0))
2707                   || decl_address_invariant_p (TREE_OPERAND (op0, 0))));
2708     }
2709
2710   return CONSTANT_CLASS_P (op) || decl_address_invariant_p (op);
2711 }
2712
2713 /* Return true if T is a gimple invariant address at IPA level
2714    (so addresses of variables on stack are not allowed).  */
2715
2716 bool
2717 is_gimple_ip_invariant_address (const_tree t)
2718 {
2719   const_tree op;
2720
2721   if (TREE_CODE (t) != ADDR_EXPR)
2722     return false;
2723
2724   op = strip_invariant_refs (TREE_OPERAND (t, 0));
2725
2726   return op && (CONSTANT_CLASS_P (op) || decl_address_ip_invariant_p (op));
2727 }
2728
2729 /* Return true if T is a GIMPLE minimal invariant.  It's a restricted
2730    form of function invariant.  */
2731
2732 bool
2733 is_gimple_min_invariant (const_tree t)
2734 {
2735   if (TREE_CODE (t) == ADDR_EXPR)
2736     return is_gimple_invariant_address (t);
2737
2738   return is_gimple_constant (t);
2739 }
2740
2741 /* Return true if T is a GIMPLE interprocedural invariant.  It's a restricted
2742    form of gimple minimal invariant.  */
2743
2744 bool
2745 is_gimple_ip_invariant (const_tree t)
2746 {
2747   if (TREE_CODE (t) == ADDR_EXPR)
2748     return is_gimple_ip_invariant_address (t);
2749
2750   return is_gimple_constant (t);
2751 }
2752
2753 /* Return true if T looks like a valid GIMPLE statement.  */
2754
2755 bool
2756 is_gimple_stmt (tree t)
2757 {
2758   const enum tree_code code = TREE_CODE (t);
2759
2760   switch (code)
2761     {
2762     case NOP_EXPR:
2763       /* The only valid NOP_EXPR is the empty statement.  */
2764       return IS_EMPTY_STMT (t);
2765
2766     case BIND_EXPR:
2767     case COND_EXPR:
2768       /* These are only valid if they're void.  */
2769       return TREE_TYPE (t) == NULL || VOID_TYPE_P (TREE_TYPE (t));
2770
2771     case SWITCH_EXPR:
2772     case GOTO_EXPR:
2773     case RETURN_EXPR:
2774     case LABEL_EXPR:
2775     case CASE_LABEL_EXPR:
2776     case TRY_CATCH_EXPR:
2777     case TRY_FINALLY_EXPR:
2778     case EH_FILTER_EXPR:
2779     case CATCH_EXPR:
2780     case ASM_EXPR:
2781     case STATEMENT_LIST:
2782     case OMP_PARALLEL:
2783     case OMP_FOR:
2784     case OMP_SECTIONS:
2785     case OMP_SECTION:
2786     case OMP_SINGLE:
2787     case OMP_MASTER:
2788     case OMP_ORDERED:
2789     case OMP_CRITICAL:
2790     case OMP_TASK:
2791       /* These are always void.  */
2792       return true;
2793
2794     case CALL_EXPR:
2795     case MODIFY_EXPR:
2796     case PREDICT_EXPR:
2797       /* These are valid regardless of their type.  */
2798       return true;
2799
2800     default:
2801       return false;
2802     }
2803 }
2804
2805 /* Return true if T is a variable.  */
2806
2807 bool
2808 is_gimple_variable (tree t)
2809 {
2810   return (TREE_CODE (t) == VAR_DECL
2811           || TREE_CODE (t) == PARM_DECL
2812           || TREE_CODE (t) == RESULT_DECL
2813           || TREE_CODE (t) == SSA_NAME);
2814 }
2815
2816 /*  Return true if T is a GIMPLE identifier (something with an address).  */
2817
2818 bool
2819 is_gimple_id (tree t)
2820 {
2821   return (is_gimple_variable (t)
2822           || TREE_CODE (t) == FUNCTION_DECL
2823           || TREE_CODE (t) == LABEL_DECL
2824           || TREE_CODE (t) == CONST_DECL
2825           /* Allow string constants, since they are addressable.  */
2826           || TREE_CODE (t) == STRING_CST);
2827 }
2828
2829 /* Return true if TYPE is a suitable type for a scalar register variable.  */
2830
2831 bool
2832 is_gimple_reg_type (tree type)
2833 {
2834   return !AGGREGATE_TYPE_P (type);
2835 }
2836
2837 /* Return true if T is a non-aggregate register variable.  */
2838
2839 bool
2840 is_gimple_reg (tree t)
2841 {
2842   if (TREE_CODE (t) == SSA_NAME)
2843     t = SSA_NAME_VAR (t);
2844
2845   if (!is_gimple_variable (t))
2846     return false;
2847
2848   if (!is_gimple_reg_type (TREE_TYPE (t)))
2849     return false;
2850
2851   /* A volatile decl is not acceptable because we can't reuse it as
2852      needed.  We need to copy it into a temp first.  */
2853   if (TREE_THIS_VOLATILE (t))
2854     return false;
2855
2856   /* We define "registers" as things that can be renamed as needed,
2857      which with our infrastructure does not apply to memory.  */
2858   if (needs_to_live_in_memory (t))
2859     return false;
2860
2861   /* Hard register variables are an interesting case.  For those that
2862      are call-clobbered, we don't know where all the calls are, since
2863      we don't (want to) take into account which operations will turn
2864      into libcalls at the rtl level.  For those that are call-saved,
2865      we don't currently model the fact that calls may in fact change
2866      global hard registers, nor do we examine ASM_CLOBBERS at the tree
2867      level, and so miss variable changes that might imply.  All around,
2868      it seems safest to not do too much optimization with these at the
2869      tree level at all.  We'll have to rely on the rtl optimizers to
2870      clean this up, as there we've got all the appropriate bits exposed.  */
2871   if (TREE_CODE (t) == VAR_DECL && DECL_HARD_REGISTER (t))
2872     return false;
2873
2874   /* Complex and vector values must have been put into SSA-like form.
2875      That is, no assignments to the individual components.  */
2876   if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE
2877       || TREE_CODE (TREE_TYPE (t)) == VECTOR_TYPE)
2878     return DECL_GIMPLE_REG_P (t);
2879
2880   return true;
2881 }
2882
2883
2884 /* Return true if T is a GIMPLE variable whose address is not needed.  */
2885
2886 bool
2887 is_gimple_non_addressable (tree t)
2888 {
2889   if (TREE_CODE (t) == SSA_NAME)
2890     t = SSA_NAME_VAR (t);
2891
2892   return (is_gimple_variable (t) && ! needs_to_live_in_memory (t));
2893 }
2894
2895 /* Return true if T is a GIMPLE rvalue, i.e. an identifier or a constant.  */
2896
2897 bool
2898 is_gimple_val (tree t)
2899 {
2900   /* Make loads from volatiles and memory vars explicit.  */
2901   if (is_gimple_variable (t)
2902       && is_gimple_reg_type (TREE_TYPE (t))
2903       && !is_gimple_reg (t))
2904     return false;
2905
2906   return (is_gimple_variable (t) || is_gimple_min_invariant (t));
2907 }
2908
2909 /* Similarly, but accept hard registers as inputs to asm statements.  */
2910
2911 bool
2912 is_gimple_asm_val (tree t)
2913 {
2914   if (TREE_CODE (t) == VAR_DECL && DECL_HARD_REGISTER (t))
2915     return true;
2916
2917   return is_gimple_val (t);
2918 }
2919
2920 /* Return true if T is a GIMPLE minimal lvalue.  */
2921
2922 bool
2923 is_gimple_min_lval (tree t)
2924 {
2925   if (!(t = CONST_CAST_TREE (strip_invariant_refs (t))))
2926     return false;
2927   return (is_gimple_id (t) || TREE_CODE (t) == MEM_REF);
2928 }
2929
2930 /* Return true if T is a valid function operand of a CALL_EXPR.  */
2931
2932 bool
2933 is_gimple_call_addr (tree t)
2934 {
2935   return (TREE_CODE (t) == OBJ_TYPE_REF || is_gimple_val (t));
2936 }
2937
2938 /* Return true if T is a valid address operand of a MEM_REF.  */
2939
2940 bool
2941 is_gimple_mem_ref_addr (tree t)
2942 {
2943   return (is_gimple_reg (t)
2944           || TREE_CODE (t) == INTEGER_CST
2945           || (TREE_CODE (t) == ADDR_EXPR
2946               && (CONSTANT_CLASS_P (TREE_OPERAND (t, 0))
2947                   || decl_address_invariant_p (TREE_OPERAND (t, 0)))));
2948 }
2949
2950 /* If T makes a function call, return the corresponding CALL_EXPR operand.
2951    Otherwise, return NULL_TREE.  */
2952
2953 tree
2954 get_call_expr_in (tree t)
2955 {
2956   if (TREE_CODE (t) == MODIFY_EXPR)
2957     t = TREE_OPERAND (t, 1);
2958   if (TREE_CODE (t) == WITH_SIZE_EXPR)
2959     t = TREE_OPERAND (t, 0);
2960   if (TREE_CODE (t) == CALL_EXPR)
2961     return t;
2962   return NULL_TREE;
2963 }
2964
2965
2966 /* Given a memory reference expression T, return its base address.
2967    The base address of a memory reference expression is the main
2968    object being referenced.  For instance, the base address for
2969    'array[i].fld[j]' is 'array'.  You can think of this as stripping
2970    away the offset part from a memory address.
2971
2972    This function calls handled_component_p to strip away all the inner
2973    parts of the memory reference until it reaches the base object.  */
2974
2975 tree
2976 get_base_address (tree t)
2977 {
2978   while (handled_component_p (t))
2979     t = TREE_OPERAND (t, 0);
2980
2981   if ((TREE_CODE (t) == MEM_REF
2982        || TREE_CODE (t) == TARGET_MEM_REF)
2983       && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR)
2984     t = TREE_OPERAND (TREE_OPERAND (t, 0), 0);
2985
2986   if (TREE_CODE (t) == SSA_NAME
2987       || DECL_P (t)
2988       || TREE_CODE (t) == STRING_CST
2989       || TREE_CODE (t) == CONSTRUCTOR
2990       || INDIRECT_REF_P (t)
2991       || TREE_CODE (t) == MEM_REF
2992       || TREE_CODE (t) == TARGET_MEM_REF)
2993     return t;
2994   else
2995     return NULL_TREE;
2996 }
2997
2998 void
2999 recalculate_side_effects (tree t)
3000 {
3001   enum tree_code code = TREE_CODE (t);
3002   int len = TREE_OPERAND_LENGTH (t);
3003   int i;
3004
3005   switch (TREE_CODE_CLASS (code))
3006     {
3007     case tcc_expression:
3008       switch (code)
3009         {
3010         case INIT_EXPR:
3011         case MODIFY_EXPR:
3012         case VA_ARG_EXPR:
3013         case PREDECREMENT_EXPR:
3014         case PREINCREMENT_EXPR:
3015         case POSTDECREMENT_EXPR:
3016         case POSTINCREMENT_EXPR:
3017           /* All of these have side-effects, no matter what their
3018              operands are.  */
3019           return;
3020
3021         default:
3022           break;
3023         }
3024       /* Fall through.  */
3025
3026     case tcc_comparison:  /* a comparison expression */
3027     case tcc_unary:       /* a unary arithmetic expression */
3028     case tcc_binary:      /* a binary arithmetic expression */
3029     case tcc_reference:   /* a reference */
3030     case tcc_vl_exp:        /* a function call */
3031       TREE_SIDE_EFFECTS (t) = TREE_THIS_VOLATILE (t);
3032       for (i = 0; i < len; ++i)
3033         {
3034           tree op = TREE_OPERAND (t, i);
3035           if (op && TREE_SIDE_EFFECTS (op))
3036             TREE_SIDE_EFFECTS (t) = 1;
3037         }
3038       break;
3039
3040     case tcc_constant:
3041       /* No side-effects.  */
3042       return;
3043
3044     default:
3045       gcc_unreachable ();
3046    }
3047 }
3048
3049 /* Canonicalize a tree T for use in a COND_EXPR as conditional.  Returns
3050    a canonicalized tree that is valid for a COND_EXPR or NULL_TREE, if
3051    we failed to create one.  */
3052
3053 tree
3054 canonicalize_cond_expr_cond (tree t)
3055 {
3056   /* Strip conversions around boolean operations.  */
3057   if (CONVERT_EXPR_P (t)
3058       && truth_value_p (TREE_CODE (TREE_OPERAND (t, 0))))
3059     t = TREE_OPERAND (t, 0);
3060
3061   /* For (bool)x use x != 0.  */
3062   if (CONVERT_EXPR_P (t)
3063       && TREE_CODE (TREE_TYPE (t)) == BOOLEAN_TYPE)
3064     {
3065       tree top0 = TREE_OPERAND (t, 0);
3066       t = build2 (NE_EXPR, TREE_TYPE (t),
3067                   top0, build_int_cst (TREE_TYPE (top0), 0));
3068     }
3069   /* For !x use x == 0.  */
3070   else if (TREE_CODE (t) == TRUTH_NOT_EXPR)
3071     {
3072       tree top0 = TREE_OPERAND (t, 0);
3073       t = build2 (EQ_EXPR, TREE_TYPE (t),
3074                   top0, build_int_cst (TREE_TYPE (top0), 0));
3075     }
3076   /* For cmp ? 1 : 0 use cmp.  */
3077   else if (TREE_CODE (t) == COND_EXPR
3078            && COMPARISON_CLASS_P (TREE_OPERAND (t, 0))
3079            && integer_onep (TREE_OPERAND (t, 1))
3080            && integer_zerop (TREE_OPERAND (t, 2)))
3081     {
3082       tree top0 = TREE_OPERAND (t, 0);
3083       t = build2 (TREE_CODE (top0), TREE_TYPE (t),
3084                   TREE_OPERAND (top0, 0), TREE_OPERAND (top0, 1));
3085     }
3086
3087   if (is_gimple_condexpr (t))
3088     return t;
3089
3090   return NULL_TREE;
3091 }
3092
3093 /* Build a GIMPLE_CALL identical to STMT but skipping the arguments in
3094    the positions marked by the set ARGS_TO_SKIP.  */
3095
3096 gimple
3097 gimple_call_copy_skip_args (gimple stmt, bitmap args_to_skip)
3098 {
3099   int i;
3100   tree fn = gimple_call_fn (stmt);
3101   int nargs = gimple_call_num_args (stmt);
3102   VEC(tree, heap) *vargs = VEC_alloc (tree, heap, nargs);
3103   gimple new_stmt;
3104
3105   for (i = 0; i < nargs; i++)
3106     if (!bitmap_bit_p (args_to_skip, i))
3107       VEC_quick_push (tree, vargs, gimple_call_arg (stmt, i));
3108
3109   new_stmt = gimple_build_call_vec (fn, vargs);
3110   VEC_free (tree, heap, vargs);
3111   if (gimple_call_lhs (stmt))
3112     gimple_call_set_lhs (new_stmt, gimple_call_lhs (stmt));
3113
3114   gimple_set_vuse (new_stmt, gimple_vuse (stmt));
3115   gimple_set_vdef (new_stmt, gimple_vdef (stmt));
3116
3117   gimple_set_block (new_stmt, gimple_block (stmt));
3118   if (gimple_has_location (stmt))
3119     gimple_set_location (new_stmt, gimple_location (stmt));
3120   gimple_call_copy_flags (new_stmt, stmt);
3121   gimple_call_set_chain (new_stmt, gimple_call_chain (stmt));
3122
3123   gimple_set_modified (new_stmt, true);
3124
3125   return new_stmt;
3126 }
3127
3128
3129 static hashval_t gimple_type_hash_1 (const void *, enum gtc_mode);
3130
3131 /* Structure used to maintain a cache of some type pairs compared by
3132    gimple_types_compatible_p when comparing aggregate types.  There are
3133    three possible values for SAME_P:
3134
3135         -2: The pair (T1, T2) has just been inserted in the table.
3136          0: T1 and T2 are different types.
3137          1: T1 and T2 are the same type.
3138
3139    The two elements in the SAME_P array are indexed by the comparison
3140    mode gtc_mode.  */
3141
3142 struct type_pair_d
3143 {
3144   unsigned int uid1;
3145   unsigned int uid2;
3146   signed char same_p[2];
3147 };
3148 typedef struct type_pair_d *type_pair_t;
3149
3150 DEF_VEC_P(type_pair_t);
3151 DEF_VEC_ALLOC_P(type_pair_t,heap);
3152
3153 /* Return a hash value for the type pair pointed-to by P.  */
3154
3155 static hashval_t
3156 type_pair_hash (const void *p)
3157 {
3158   const struct type_pair_d *pair = (const struct type_pair_d *) p;
3159   hashval_t val1 = pair->uid1;
3160   hashval_t val2 = pair->uid2;
3161   return (iterative_hash_hashval_t (val2, val1)
3162           ^ iterative_hash_hashval_t (val1, val2));
3163 }
3164
3165 /* Compare two type pairs pointed-to by P1 and P2.  */
3166
3167 static int
3168 type_pair_eq (const void *p1, const void *p2)
3169 {
3170   const struct type_pair_d *pair1 = (const struct type_pair_d *) p1;
3171   const struct type_pair_d *pair2 = (const struct type_pair_d *) p2;
3172   return ((pair1->uid1 == pair2->uid1 && pair1->uid2 == pair2->uid2)
3173           || (pair1->uid1 == pair2->uid2 && pair1->uid2 == pair2->uid1));
3174 }
3175
3176 /* Lookup the pair of types T1 and T2 in *VISITED_P.  Insert a new
3177    entry if none existed.  */
3178
3179 static type_pair_t
3180 lookup_type_pair (tree t1, tree t2, htab_t *visited_p, struct obstack *ob_p)
3181 {
3182   struct type_pair_d pair;
3183   type_pair_t p;
3184   void **slot;
3185
3186   if (*visited_p == NULL)
3187     {
3188       *visited_p = htab_create (251, type_pair_hash, type_pair_eq, NULL);
3189       gcc_obstack_init (ob_p);
3190     }
3191
3192   pair.uid1 = TYPE_UID (t1);
3193   pair.uid2 = TYPE_UID (t2);
3194   slot = htab_find_slot (*visited_p, &pair, INSERT);
3195
3196   if (*slot)
3197     p = *((type_pair_t *) slot);
3198   else
3199     {
3200       p = XOBNEW (ob_p, struct type_pair_d);
3201       p->uid1 = TYPE_UID (t1);
3202       p->uid2 = TYPE_UID (t2);
3203       p->same_p[0] = -2;
3204       p->same_p[1] = -2;
3205       *slot = (void *) p;
3206     }
3207
3208   return p;
3209 }
3210
3211 /* Per pointer state for the SCC finding.  The on_sccstack flag
3212    is not strictly required, it is true when there is no hash value
3213    recorded for the type and false otherwise.  But querying that
3214    is slower.  */
3215
3216 struct sccs
3217 {
3218   unsigned int dfsnum;
3219   unsigned int low;
3220   bool on_sccstack;
3221   union {
3222     hashval_t hash;
3223     signed char same_p;
3224   } u;
3225 };
3226
3227 static unsigned int next_dfs_num;
3228 static unsigned int gtc_next_dfs_num;
3229
3230
3231 /* GIMPLE type merging cache.  A direct-mapped cache based on TYPE_UID.  */
3232
3233 typedef struct GTY(()) gimple_type_leader_entry_s {
3234   tree type;
3235   tree leader;
3236 } gimple_type_leader_entry;
3237
3238 #define GIMPLE_TYPE_LEADER_SIZE 16381
3239 static GTY((deletable, length("GIMPLE_TYPE_LEADER_SIZE")))
3240   gimple_type_leader_entry *gimple_type_leader;
3241
3242 /* Lookup an existing leader for T and return it or NULL_TREE, if
3243    there is none in the cache.  */
3244
3245 static tree
3246 gimple_lookup_type_leader (tree t)
3247 {
3248   gimple_type_leader_entry *leader;
3249
3250   if (!gimple_type_leader)
3251     return NULL_TREE;
3252
3253   leader = &gimple_type_leader[TYPE_UID (t) % GIMPLE_TYPE_LEADER_SIZE];
3254   if (leader->type != t)
3255     return NULL_TREE;
3256
3257   return leader->leader;
3258 }
3259
3260 /* Return true if T1 and T2 have the same name.  If FOR_COMPLETION_P is
3261    true then if any type has no name return false, otherwise return
3262    true if both types have no names.  */
3263
3264 static bool
3265 compare_type_names_p (tree t1, tree t2, bool for_completion_p)
3266 {
3267   tree name1 = TYPE_NAME (t1);
3268   tree name2 = TYPE_NAME (t2);
3269
3270   /* Consider anonymous types all unique for completion.  */
3271   if (for_completion_p
3272       && (!name1 || !name2))
3273     return false;
3274
3275   if (name1 && TREE_CODE (name1) == TYPE_DECL)
3276     {
3277       name1 = DECL_NAME (name1);
3278       if (for_completion_p
3279           && !name1)
3280         return false;
3281     }
3282   gcc_assert (!name1 || TREE_CODE (name1) == IDENTIFIER_NODE);
3283
3284   if (name2 && TREE_CODE (name2) == TYPE_DECL)
3285     {
3286       name2 = DECL_NAME (name2);
3287       if (for_completion_p
3288           && !name2)
3289         return false;
3290     }
3291   gcc_assert (!name2 || TREE_CODE (name2) == IDENTIFIER_NODE);
3292
3293   /* Identifiers can be compared with pointer equality rather
3294      than a string comparison.  */
3295   if (name1 == name2)
3296     return true;
3297
3298   return false;
3299 }
3300
3301 /* Return true if the field decls F1 and F2 are at the same offset.
3302
3303    This is intended to be used on GIMPLE types only.  */
3304
3305 bool
3306 gimple_compare_field_offset (tree f1, tree f2)
3307 {
3308   if (DECL_OFFSET_ALIGN (f1) == DECL_OFFSET_ALIGN (f2))
3309     {
3310       tree offset1 = DECL_FIELD_OFFSET (f1);
3311       tree offset2 = DECL_FIELD_OFFSET (f2);
3312       return ((offset1 == offset2
3313                /* Once gimplification is done, self-referential offsets are
3314                   instantiated as operand #2 of the COMPONENT_REF built for
3315                   each access and reset.  Therefore, they are not relevant
3316                   anymore and fields are interchangeable provided that they
3317                   represent the same access.  */
3318                || (TREE_CODE (offset1) == PLACEHOLDER_EXPR
3319                    && TREE_CODE (offset2) == PLACEHOLDER_EXPR
3320                    && (DECL_SIZE (f1) == DECL_SIZE (f2)
3321                        || (TREE_CODE (DECL_SIZE (f1)) == PLACEHOLDER_EXPR
3322                            && TREE_CODE (DECL_SIZE (f2)) == PLACEHOLDER_EXPR)
3323                        || operand_equal_p (DECL_SIZE (f1), DECL_SIZE (f2), 0))
3324                    && DECL_ALIGN (f1) == DECL_ALIGN (f2))
3325                || operand_equal_p (offset1, offset2, 0))
3326               && tree_int_cst_equal (DECL_FIELD_BIT_OFFSET (f1),
3327                                      DECL_FIELD_BIT_OFFSET (f2)));
3328     }
3329
3330   /* Fortran and C do not always agree on what DECL_OFFSET_ALIGN
3331      should be, so handle differing ones specially by decomposing
3332      the offset into a byte and bit offset manually.  */
3333   if (host_integerp (DECL_FIELD_OFFSET (f1), 0)
3334       && host_integerp (DECL_FIELD_OFFSET (f2), 0))
3335     {
3336       unsigned HOST_WIDE_INT byte_offset1, byte_offset2;
3337       unsigned HOST_WIDE_INT bit_offset1, bit_offset2;
3338       bit_offset1 = TREE_INT_CST_LOW (DECL_FIELD_BIT_OFFSET (f1));
3339       byte_offset1 = (TREE_INT_CST_LOW (DECL_FIELD_OFFSET (f1))
3340                       + bit_offset1 / BITS_PER_UNIT);
3341       bit_offset2 = TREE_INT_CST_LOW (DECL_FIELD_BIT_OFFSET (f2));
3342       byte_offset2 = (TREE_INT_CST_LOW (DECL_FIELD_OFFSET (f2))
3343                       + bit_offset2 / BITS_PER_UNIT);
3344       if (byte_offset1 != byte_offset2)
3345         return false;
3346       return bit_offset1 % BITS_PER_UNIT == bit_offset2 % BITS_PER_UNIT;
3347     }
3348
3349   return false;
3350 }
3351
3352 /* If the type T1 and the type T2 are a complete and an incomplete
3353    variant of the same type return true.  */
3354
3355 static bool
3356 gimple_compatible_complete_and_incomplete_subtype_p (tree t1, tree t2)
3357 {
3358   /* If one pointer points to an incomplete type variant of
3359      the other pointed-to type they are the same.  */
3360   if (TREE_CODE (t1) == TREE_CODE (t2)
3361       && RECORD_OR_UNION_TYPE_P (t1)
3362       && (!COMPLETE_TYPE_P (t1)
3363           || !COMPLETE_TYPE_P (t2))
3364       && TYPE_QUALS (t1) == TYPE_QUALS (t2)
3365       && compare_type_names_p (TYPE_MAIN_VARIANT (t1),
3366                                TYPE_MAIN_VARIANT (t2), true))
3367     return true;
3368   return false;
3369 }
3370
3371 static bool
3372 gimple_types_compatible_p_1 (tree, tree, enum gtc_mode, type_pair_t,
3373                              VEC(type_pair_t, heap) **,
3374                              struct pointer_map_t *, struct obstack *);
3375
3376 /* DFS visit the edge from the callers type pair with state *STATE to
3377    the pair T1, T2 while operating in FOR_MERGING_P mode.
3378    Update the merging status if it is not part of the SCC containing the
3379    callers pair and return it.
3380    SCCSTACK, SCCSTATE and SCCSTATE_OBSTACK are state for the DFS walk done.  */
3381
3382 static bool
3383 gtc_visit (tree t1, tree t2, enum gtc_mode mode,
3384            struct sccs *state,
3385            VEC(type_pair_t, heap) **sccstack,
3386            struct pointer_map_t *sccstate,
3387            struct obstack *sccstate_obstack)
3388 {
3389   struct sccs *cstate = NULL;
3390   type_pair_t p;
3391   void **slot;
3392
3393   /* Check first for the obvious case of pointer identity.  */
3394   if (t1 == t2)
3395     return true;
3396
3397   /* Check that we have two types to compare.  */
3398   if (t1 == NULL_TREE || t2 == NULL_TREE)
3399     return false;
3400
3401   /* If the types have been previously registered and found equal
3402      they still are.  */
3403   if (mode == GTC_MERGE)
3404     {
3405       tree leader1 = gimple_lookup_type_leader (t1);
3406       tree leader2 = gimple_lookup_type_leader (t2);
3407       if (leader1 == t2
3408           || t1 == leader2
3409           || (leader1 && leader1 == leader2))
3410         return true;
3411     }
3412   else if (mode == GTC_DIAG)
3413     {
3414       if (TYPE_CANONICAL (t1)
3415           && TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2))
3416         return true;
3417     }
3418
3419   /* Can't be the same type if the types don't have the same code.  */
3420   if (TREE_CODE (t1) != TREE_CODE (t2))
3421     return false;
3422
3423   /* Can't be the same type if they have different CV qualifiers.  */
3424   if (TYPE_QUALS (t1) != TYPE_QUALS (t2))
3425     return false;
3426
3427   /* Void types are always the same.  */
3428   if (TREE_CODE (t1) == VOID_TYPE)
3429     return true;
3430
3431   /* Do some simple checks before doing three hashtable queries.  */
3432   if (INTEGRAL_TYPE_P (t1)
3433       || SCALAR_FLOAT_TYPE_P (t1)
3434       || FIXED_POINT_TYPE_P (t1)
3435       || TREE_CODE (t1) == VECTOR_TYPE
3436       || TREE_CODE (t1) == COMPLEX_TYPE
3437       || TREE_CODE (t1) == OFFSET_TYPE)
3438     {
3439       /* Can't be the same type if they have different alignment,
3440          sign, precision or mode.  */
3441       if (TYPE_ALIGN (t1) != TYPE_ALIGN (t2)
3442           || TYPE_PRECISION (t1) != TYPE_PRECISION (t2)
3443           || TYPE_MODE (t1) != TYPE_MODE (t2)
3444           || TYPE_UNSIGNED (t1) != TYPE_UNSIGNED (t2))
3445         return false;
3446
3447       if (TREE_CODE (t1) == INTEGER_TYPE
3448           && (TYPE_IS_SIZETYPE (t1) != TYPE_IS_SIZETYPE (t2)
3449               || TYPE_STRING_FLAG (t1) != TYPE_STRING_FLAG (t2)))
3450         return false;
3451
3452       /* That's all we need to check for float and fixed-point types.  */
3453       if (SCALAR_FLOAT_TYPE_P (t1)
3454           || FIXED_POINT_TYPE_P (t1))
3455         return true;
3456
3457       /* For integral types fall thru to more complex checks.  */
3458     }
3459
3460   else if (AGGREGATE_TYPE_P (t1) || POINTER_TYPE_P (t1))
3461     {
3462       /* Can't be the same type if they have different alignment or mode.  */
3463       if (TYPE_ALIGN (t1) != TYPE_ALIGN (t2)
3464           || TYPE_MODE (t1) != TYPE_MODE (t2))
3465         return false;
3466     }
3467
3468   /* If the hash values of t1 and t2 are different the types can't
3469      possibly be the same.  This helps keeping the type-pair hashtable
3470      small, only tracking comparisons for hash collisions.  */
3471   if (gimple_type_hash_1 (t1, mode) != gimple_type_hash_1 (t2, mode))
3472     return false;
3473
3474   /* Allocate a new cache entry for this comparison.  */
3475   p = lookup_type_pair (t1, t2, &gtc_visited, &gtc_ob);
3476   if (p->same_p[mode] == 0 || p->same_p[mode] == 1)
3477     {
3478       /* We have already decided whether T1 and T2 are the
3479          same, return the cached result.  */
3480       return p->same_p[mode] == 1;
3481     }
3482
3483   if ((slot = pointer_map_contains (sccstate, p)) != NULL)
3484     cstate = (struct sccs *)*slot;
3485   /* Not yet visited.  DFS recurse.  */
3486   if (!cstate)
3487     {
3488       gimple_types_compatible_p_1 (t1, t2, mode, p,
3489                                    sccstack, sccstate, sccstate_obstack);
3490       cstate = (struct sccs *)* pointer_map_contains (sccstate, p);
3491       state->low = MIN (state->low, cstate->low);
3492     }
3493   /* If the type is still on the SCC stack adjust the parents low.  */
3494   if (cstate->dfsnum < state->dfsnum
3495       && cstate->on_sccstack)
3496     state->low = MIN (cstate->dfsnum, state->low);
3497
3498   /* Return the current lattice value.  We start with an equality
3499      assumption so types part of a SCC will be optimistically
3500      treated equal unless proven otherwise.  */
3501   return cstate->u.same_p;
3502 }
3503
3504 /* Worker for gimple_types_compatible.
3505    SCCSTACK, SCCSTATE and SCCSTATE_OBSTACK are state for the DFS walk done.  */
3506
3507 static bool
3508 gimple_types_compatible_p_1 (tree t1, tree t2, enum gtc_mode mode,
3509                              type_pair_t p,
3510                              VEC(type_pair_t, heap) **sccstack,
3511                              struct pointer_map_t *sccstate,
3512                              struct obstack *sccstate_obstack)
3513 {
3514   struct sccs *state;
3515
3516   gcc_assert (p->same_p[mode] == -2);
3517
3518   state = XOBNEW (sccstate_obstack, struct sccs);
3519   *pointer_map_insert (sccstate, p) = state;
3520
3521   VEC_safe_push (type_pair_t, heap, *sccstack, p);
3522   state->dfsnum = gtc_next_dfs_num++;
3523   state->low = state->dfsnum;
3524   state->on_sccstack = true;
3525   /* Start with an equality assumption.  As we DFS recurse into child
3526      SCCs this assumption may get revisited.  */
3527   state->u.same_p = 1;
3528
3529   /* If their attributes are not the same they can't be the same type.  */
3530   if (!attribute_list_equal (TYPE_ATTRIBUTES (t1), TYPE_ATTRIBUTES (t2)))
3531     goto different_types;
3532
3533   /* Do type-specific comparisons.  */
3534   switch (TREE_CODE (t1))
3535     {
3536     case VECTOR_TYPE:
3537     case COMPLEX_TYPE:
3538       if (!gtc_visit (TREE_TYPE (t1), TREE_TYPE (t2), mode,
3539                       state, sccstack, sccstate, sccstate_obstack))
3540         goto different_types;
3541       goto same_types;
3542
3543     case ARRAY_TYPE:
3544       /* Array types are the same if the element types are the same and
3545          the number of elements are the same.  */
3546       if (!gtc_visit (TREE_TYPE (t1), TREE_TYPE (t2), mode,
3547                       state, sccstack, sccstate, sccstate_obstack)
3548           || TYPE_STRING_FLAG (t1) != TYPE_STRING_FLAG (t2)
3549           || TYPE_NONALIASED_COMPONENT (t1) != TYPE_NONALIASED_COMPONENT (t2))
3550         goto different_types;
3551       else
3552         {
3553           tree i1 = TYPE_DOMAIN (t1);
3554           tree i2 = TYPE_DOMAIN (t2);
3555
3556           /* For an incomplete external array, the type domain can be
3557              NULL_TREE.  Check this condition also.  */
3558           if (i1 == NULL_TREE && i2 == NULL_TREE)
3559             goto same_types;
3560           else if (i1 == NULL_TREE || i2 == NULL_TREE)
3561             goto different_types;
3562           /* If for a complete array type the possibly gimplified sizes
3563              are different the types are different.  */
3564           else if (((TYPE_SIZE (i1) != NULL) ^ (TYPE_SIZE (i2) != NULL))
3565                    || (TYPE_SIZE (i1)
3566                        && TYPE_SIZE (i2)
3567                        && !operand_equal_p (TYPE_SIZE (i1), TYPE_SIZE (i2), 0)))
3568             goto different_types;
3569           else
3570             {
3571               tree min1 = TYPE_MIN_VALUE (i1);
3572               tree min2 = TYPE_MIN_VALUE (i2);
3573               tree max1 = TYPE_MAX_VALUE (i1);
3574               tree max2 = TYPE_MAX_VALUE (i2);
3575
3576               /* The minimum/maximum values have to be the same.  */
3577               if ((min1 == min2
3578                    || (min1 && min2
3579                        && ((TREE_CODE (min1) == PLACEHOLDER_EXPR
3580                             && TREE_CODE (min2) == PLACEHOLDER_EXPR)
3581                            || operand_equal_p (min1, min2, 0))))
3582                   && (max1 == max2
3583                       || (max1 && max2
3584                           && ((TREE_CODE (max1) == PLACEHOLDER_EXPR
3585                                && TREE_CODE (max2) == PLACEHOLDER_EXPR)
3586                               || operand_equal_p (max1, max2, 0)))))
3587                 goto same_types;
3588               else
3589                 goto different_types;
3590             }
3591         }
3592
3593     case METHOD_TYPE:
3594       /* Method types should belong to the same class.  */
3595       if (!gtc_visit (TYPE_METHOD_BASETYPE (t1), TYPE_METHOD_BASETYPE (t2),
3596                       mode, state, sccstack, sccstate, sccstate_obstack))
3597         goto different_types;
3598
3599       /* Fallthru  */
3600
3601     case FUNCTION_TYPE:
3602       /* Function types are the same if the return type and arguments types
3603          are the same.  */
3604       if ((mode != GTC_DIAG
3605            || !gimple_compatible_complete_and_incomplete_subtype_p
3606                  (TREE_TYPE (t1), TREE_TYPE (t2)))
3607           && !gtc_visit (TREE_TYPE (t1), TREE_TYPE (t2), mode,
3608                          state, sccstack, sccstate, sccstate_obstack))
3609         goto different_types;
3610
3611       if (!comp_type_attributes (t1, t2))
3612         goto different_types;
3613
3614       if (TYPE_ARG_TYPES (t1) == TYPE_ARG_TYPES (t2))
3615         goto same_types;
3616       else
3617         {
3618           tree parms1, parms2;
3619
3620           for (parms1 = TYPE_ARG_TYPES (t1), parms2 = TYPE_ARG_TYPES (t2);
3621                parms1 && parms2;
3622                parms1 = TREE_CHAIN (parms1), parms2 = TREE_CHAIN (parms2))
3623             {
3624               if ((mode == GTC_MERGE
3625                    || !gimple_compatible_complete_and_incomplete_subtype_p
3626                          (TREE_VALUE (parms1), TREE_VALUE (parms2)))
3627                   && !gtc_visit (TREE_VALUE (parms1), TREE_VALUE (parms2), mode,
3628                                  state, sccstack, sccstate, sccstate_obstack))
3629                 goto different_types;
3630             }
3631
3632           if (parms1 || parms2)
3633             goto different_types;
3634
3635           goto same_types;
3636         }
3637
3638     case OFFSET_TYPE:
3639       {
3640         if (!gtc_visit (TREE_TYPE (t1), TREE_TYPE (t2), mode,
3641                         state, sccstack, sccstate, sccstate_obstack)
3642             || !gtc_visit (TYPE_OFFSET_BASETYPE (t1),
3643                            TYPE_OFFSET_BASETYPE (t2), mode,
3644                            state, sccstack, sccstate, sccstate_obstack))
3645           goto different_types;
3646
3647         goto same_types;
3648       }
3649
3650     case POINTER_TYPE:
3651     case REFERENCE_TYPE:
3652       {
3653         /* If the two pointers have different ref-all attributes,
3654            they can't be the same type.  */
3655         if (TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2))
3656           goto different_types;
3657
3658         /* If one pointer points to an incomplete type variant of
3659            the other pointed-to type they are the same.  */
3660         if (mode == GTC_DIAG
3661             && gimple_compatible_complete_and_incomplete_subtype_p
3662                  (TREE_TYPE (t1), TREE_TYPE (t2)))
3663           goto same_types;
3664
3665         /* Otherwise, pointer and reference types are the same if the
3666            pointed-to types are the same.  */
3667         if (gtc_visit (TREE_TYPE (t1), TREE_TYPE (t2), mode,
3668                        state, sccstack, sccstate, sccstate_obstack))
3669           goto same_types;
3670
3671         goto different_types;
3672       }
3673
3674     case NULLPTR_TYPE:
3675       /* There is only one decltype(nullptr).  */
3676       goto same_types;
3677
3678     case INTEGER_TYPE:
3679     case BOOLEAN_TYPE:
3680       {
3681         tree min1 = TYPE_MIN_VALUE (t1);
3682         tree max1 = TYPE_MAX_VALUE (t1);
3683         tree min2 = TYPE_MIN_VALUE (t2);
3684         tree max2 = TYPE_MAX_VALUE (t2);
3685         bool min_equal_p = false;
3686         bool max_equal_p = false;
3687
3688         /* If either type has a minimum value, the other type must
3689            have the same.  */
3690         if (min1 == NULL_TREE && min2 == NULL_TREE)
3691           min_equal_p = true;
3692         else if (min1 && min2 && operand_equal_p (min1, min2, 0))
3693           min_equal_p = true;
3694
3695         /* Likewise, if either type has a maximum value, the other
3696            type must have the same.  */
3697         if (max1 == NULL_TREE && max2 == NULL_TREE)
3698           max_equal_p = true;
3699         else if (max1 && max2 && operand_equal_p (max1, max2, 0))
3700           max_equal_p = true;
3701
3702         if (!min_equal_p || !max_equal_p)
3703           goto different_types;
3704
3705         goto same_types;
3706       }
3707
3708     case ENUMERAL_TYPE:
3709       {
3710         /* FIXME lto, we cannot check bounds on enumeral types because
3711            different front ends will produce different values.
3712            In C, enumeral types are integers, while in C++ each element
3713            will have its own symbolic value.  We should decide how enums
3714            are to be represented in GIMPLE and have each front end lower
3715            to that.  */
3716         tree v1, v2;
3717
3718         /* For enumeral types, all the values must be the same.  */
3719         if (TYPE_VALUES (t1) == TYPE_VALUES (t2))
3720           goto same_types;
3721
3722         for (v1 = TYPE_VALUES (t1), v2 = TYPE_VALUES (t2);
3723              v1 && v2;
3724              v1 = TREE_CHAIN (v1), v2 = TREE_CHAIN (v2))
3725           {
3726             tree c1 = TREE_VALUE (v1);
3727             tree c2 = TREE_VALUE (v2);
3728
3729             if (TREE_CODE (c1) == CONST_DECL)
3730               c1 = DECL_INITIAL (c1);
3731
3732             if (TREE_CODE (c2) == CONST_DECL)
3733               c2 = DECL_INITIAL (c2);
3734
3735             if (tree_int_cst_equal (c1, c2) != 1)
3736               goto different_types;
3737           }
3738
3739         /* If one enumeration has more values than the other, they
3740            are not the same.  */
3741         if (v1 || v2)
3742           goto different_types;
3743
3744         goto same_types;
3745       }
3746
3747     case RECORD_TYPE:
3748     case UNION_TYPE:
3749     case QUAL_UNION_TYPE:
3750       {
3751         tree f1, f2;
3752
3753         /* The struct tags shall compare equal.  */
3754         if (mode == GTC_MERGE
3755             && !compare_type_names_p (TYPE_MAIN_VARIANT (t1),
3756                                       TYPE_MAIN_VARIANT (t2), false))
3757           goto different_types;
3758
3759         /* For aggregate types, all the fields must be the same.  */
3760         for (f1 = TYPE_FIELDS (t1), f2 = TYPE_FIELDS (t2);
3761              f1 && f2;
3762              f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
3763           {
3764             /* The fields must have the same name, offset and type.  */
3765             if ((mode == GTC_MERGE
3766                  && DECL_NAME (f1) != DECL_NAME (f2))
3767                 || DECL_NONADDRESSABLE_P (f1) != DECL_NONADDRESSABLE_P (f2)
3768                 || !gimple_compare_field_offset (f1, f2)
3769                 || !gtc_visit (TREE_TYPE (f1), TREE_TYPE (f2), mode,
3770                                state, sccstack, sccstate, sccstate_obstack))
3771               goto different_types;
3772           }
3773
3774         /* If one aggregate has more fields than the other, they
3775            are not the same.  */
3776         if (f1 || f2)
3777           goto different_types;
3778
3779         goto same_types;
3780       }
3781
3782     default:
3783       gcc_unreachable ();
3784     }
3785
3786   /* Common exit path for types that are not compatible.  */
3787 different_types:
3788   state->u.same_p = 0;
3789   goto pop;
3790
3791   /* Common exit path for types that are compatible.  */
3792 same_types:
3793   gcc_assert (state->u.same_p == 1);
3794
3795 pop:
3796   if (state->low == state->dfsnum)
3797     {
3798       type_pair_t x;
3799
3800       /* Pop off the SCC and set its cache values to the final
3801          comparison result.  */
3802       do
3803         {
3804           struct sccs *cstate;
3805           x = VEC_pop (type_pair_t, *sccstack);
3806           cstate = (struct sccs *)*pointer_map_contains (sccstate, x);
3807           cstate->on_sccstack = false;
3808           x->same_p[mode] = state->u.same_p;
3809         }
3810       while (x != p);
3811     }
3812
3813   return state->u.same_p;
3814 }
3815
3816 /* Return true iff T1 and T2 are structurally identical.  When
3817    FOR_MERGING_P is true the an incomplete type and a complete type
3818    are considered different, otherwise they are considered compatible.  */
3819
3820 bool
3821 gimple_types_compatible_p (tree t1, tree t2, enum gtc_mode mode)
3822 {
3823   VEC(type_pair_t, heap) *sccstack = NULL;
3824   struct pointer_map_t *sccstate;
3825   struct obstack sccstate_obstack;
3826   type_pair_t p = NULL;
3827   bool res;
3828
3829   /* Before starting to set up the SCC machinery handle simple cases.  */
3830
3831   /* Check first for the obvious case of pointer identity.  */
3832   if (t1 == t2)
3833     return true;
3834
3835   /* Check that we have two types to compare.  */
3836   if (t1 == NULL_TREE || t2 == NULL_TREE)
3837     return false;
3838
3839   /* If the types have been previously registered and found equal
3840      they still are.  */
3841   if (mode == GTC_MERGE)
3842     {
3843       tree leader1 = gimple_lookup_type_leader (t1);
3844       tree leader2 = gimple_lookup_type_leader (t2);
3845       if (leader1 == t2
3846           || t1 == leader2
3847           || (leader1 && leader1 == leader2))
3848         return true;
3849     }
3850   else if (mode == GTC_DIAG)
3851     {
3852       if (TYPE_CANONICAL (t1)
3853           && TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2))
3854         return true;
3855     }
3856
3857   /* Can't be the same type if the types don't have the same code.  */
3858   if (TREE_CODE (t1) != TREE_CODE (t2))
3859     return false;
3860
3861   /* Can't be the same type if they have different CV qualifiers.  */
3862   if (TYPE_QUALS (t1) != TYPE_QUALS (t2))
3863     return false;
3864
3865   /* Void types are always the same.  */
3866   if (TREE_CODE (t1) == VOID_TYPE)
3867     return true;
3868
3869   /* Do some simple checks before doing three hashtable queries.  */
3870   if (INTEGRAL_TYPE_P (t1)
3871       || SCALAR_FLOAT_TYPE_P (t1)
3872       || FIXED_POINT_TYPE_P (t1)
3873       || TREE_CODE (t1) == VECTOR_TYPE
3874       || TREE_CODE (t1) == COMPLEX_TYPE
3875       || TREE_CODE (t1) == OFFSET_TYPE)
3876     {
3877       /* Can't be the same type if they have different alignment,
3878          sign, precision or mode.  */
3879       if (TYPE_ALIGN (t1) != TYPE_ALIGN (t2)
3880           || TYPE_PRECISION (t1) != TYPE_PRECISION (t2)
3881           || TYPE_MODE (t1) != TYPE_MODE (t2)
3882           || TYPE_UNSIGNED (t1) != TYPE_UNSIGNED (t2))
3883         return false;
3884
3885       if (TREE_CODE (t1) == INTEGER_TYPE
3886           && (TYPE_IS_SIZETYPE (t1) != TYPE_IS_SIZETYPE (t2)
3887               || TYPE_STRING_FLAG (t1) != TYPE_STRING_FLAG (t2)))
3888         return false;
3889
3890       /* That's all we need to check for float and fixed-point types.  */
3891       if (SCALAR_FLOAT_TYPE_P (t1)
3892           || FIXED_POINT_TYPE_P (t1))
3893         return true;
3894
3895       /* For integral types fall thru to more complex checks.  */
3896     }
3897
3898   else if (AGGREGATE_TYPE_P (t1) || POINTER_TYPE_P (t1))
3899     {
3900       /* Can't be the same type if they have different alignment or mode.  */
3901       if (TYPE_ALIGN (t1) != TYPE_ALIGN (t2)
3902           || TYPE_MODE (t1) != TYPE_MODE (t2))
3903         return false;
3904     }
3905
3906   /* If the hash values of t1 and t2 are different the types can't
3907      possibly be the same.  This helps keeping the type-pair hashtable
3908      small, only tracking comparisons for hash collisions.  */
3909   if (gimple_type_hash_1 (t1, mode) != gimple_type_hash_1 (t2, mode))
3910     return false;
3911
3912   /* If we've visited this type pair before (in the case of aggregates
3913      with self-referential types), and we made a decision, return it.  */
3914   p = lookup_type_pair (t1, t2, &gtc_visited, &gtc_ob);
3915   if (p->same_p[mode] == 0 || p->same_p[mode] == 1)
3916     {
3917       /* We have already decided whether T1 and T2 are the
3918          same, return the cached result.  */
3919       return p->same_p[mode] == 1;
3920     }
3921
3922   /* Now set up the SCC machinery for the comparison.  */
3923   gtc_next_dfs_num = 1;
3924   sccstate = pointer_map_create ();
3925   gcc_obstack_init (&sccstate_obstack);
3926   res = gimple_types_compatible_p_1 (t1, t2, mode, p,
3927                                      &sccstack, sccstate, &sccstate_obstack);
3928   VEC_free (type_pair_t, heap, sccstack);
3929   pointer_map_destroy (sccstate);
3930   obstack_free (&sccstate_obstack, NULL);
3931
3932   return res;
3933 }
3934
3935
3936 static hashval_t
3937 iterative_hash_gimple_type (tree, hashval_t, VEC(tree, heap) **,
3938                             struct pointer_map_t *, struct obstack *,
3939                             enum gtc_mode);
3940
3941 /* DFS visit the edge from the callers type with state *STATE to T.
3942    Update the callers type hash V with the hash for T if it is not part
3943    of the SCC containing the callers type and return it.
3944    SCCSTACK, SCCSTATE and SCCSTATE_OBSTACK are state for the DFS walk done.  */
3945
3946 static hashval_t
3947 visit (tree t, struct sccs *state, hashval_t v,
3948        VEC (tree, heap) **sccstack,
3949        struct pointer_map_t *sccstate,
3950        struct obstack *sccstate_obstack, enum gtc_mode mode)
3951 {
3952   struct sccs *cstate = NULL;
3953   struct tree_int_map m;
3954   void **slot;
3955
3956   /* If there is a hash value recorded for this type then it can't
3957      possibly be part of our parent SCC.  Simply mix in its hash.  */
3958   m.base.from = t;
3959   if ((slot = htab_find_slot (mode == GTC_MERGE
3960                               ? type_hash_cache : canonical_type_hash_cache,
3961                               &m, NO_INSERT))
3962       && *slot)
3963     return iterative_hash_hashval_t (((struct tree_int_map *) *slot)->to, v);
3964
3965   if ((slot = pointer_map_contains (sccstate, t)) != NULL)
3966     cstate = (struct sccs *)*slot;
3967   if (!cstate)
3968     {
3969       hashval_t tem;
3970       /* Not yet visited.  DFS recurse.  */
3971       tem = iterative_hash_gimple_type (t, v,
3972                                         sccstack, sccstate, sccstate_obstack,
3973                                         mode);
3974       if (!cstate)
3975         cstate = (struct sccs *)* pointer_map_contains (sccstate, t);
3976       state->low = MIN (state->low, cstate->low);
3977       /* If the type is no longer on the SCC stack and thus is not part
3978          of the parents SCC mix in its hash value.  Otherwise we will
3979          ignore the type for hashing purposes and return the unaltered
3980          hash value.  */
3981       if (!cstate->on_sccstack)
3982         return tem;
3983     }
3984   if (cstate->dfsnum < state->dfsnum
3985       && cstate->on_sccstack)
3986     state->low = MIN (cstate->dfsnum, state->low);
3987
3988   /* We are part of our parents SCC, skip this type during hashing
3989      and return the unaltered hash value.  */
3990   return v;
3991 }
3992
3993 /* Hash NAME with the previous hash value V and return it.  */
3994
3995 static hashval_t
3996 iterative_hash_name (tree name, hashval_t v)
3997 {
3998   if (!name)
3999     return v;
4000   if (TREE_CODE (name) == TYPE_DECL)
4001     name = DECL_NAME (name);
4002   if (!name)
4003     return v;
4004   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
4005   return iterative_hash_object (IDENTIFIER_HASH_VALUE (name), v);
4006 }
4007
4008 /* Returning a hash value for gimple type TYPE combined with VAL.
4009    SCCSTACK, SCCSTATE and SCCSTATE_OBSTACK are state for the DFS walk done.
4010
4011    To hash a type we end up hashing in types that are reachable.
4012    Through pointers we can end up with cycles which messes up the
4013    required property that we need to compute the same hash value
4014    for structurally equivalent types.  To avoid this we have to
4015    hash all types in a cycle (the SCC) in a commutative way.  The
4016    easiest way is to not mix in the hashes of the SCC members at
4017    all.  To make this work we have to delay setting the hash
4018    values of the SCC until it is complete.  */
4019
4020 static hashval_t
4021 iterative_hash_gimple_type (tree type, hashval_t val,
4022                             VEC(tree, heap) **sccstack,
4023                             struct pointer_map_t *sccstate,
4024                             struct obstack *sccstate_obstack,
4025                             enum gtc_mode mode)
4026 {
4027   hashval_t v;
4028   void **slot;
4029   struct sccs *state;
4030
4031   /* Not visited during this DFS walk.  */
4032   gcc_checking_assert (!pointer_map_contains (sccstate, type));
4033   state = XOBNEW (sccstate_obstack, struct sccs);
4034   *pointer_map_insert (sccstate, type) = state;
4035
4036   VEC_safe_push (tree, heap, *sccstack, type);
4037   state->dfsnum = next_dfs_num++;
4038   state->low = state->dfsnum;
4039   state->on_sccstack = true;
4040
4041   /* Combine a few common features of types so that types are grouped into
4042      smaller sets; when searching for existing matching types to merge,
4043      only existing types having the same features as the new type will be
4044      checked.  */
4045   v = iterative_hash_hashval_t (TREE_CODE (type), 0);
4046   v = iterative_hash_hashval_t (TYPE_QUALS (type), v);
4047   v = iterative_hash_hashval_t (TREE_ADDRESSABLE (type), v);
4048
4049   /* Do not hash the types size as this will cause differences in
4050      hash values for the complete vs. the incomplete type variant.  */
4051
4052   /* Incorporate common features of numerical types.  */
4053   if (INTEGRAL_TYPE_P (type)
4054       || SCALAR_FLOAT_TYPE_P (type)
4055       || FIXED_POINT_TYPE_P (type))
4056     {
4057       v = iterative_hash_hashval_t (TYPE_PRECISION (type), v);
4058       v = iterative_hash_hashval_t (TYPE_MODE (type), v);
4059       v = iterative_hash_hashval_t (TYPE_UNSIGNED (type), v);
4060     }
4061
4062   /* For pointer and reference types, fold in information about the type
4063      pointed to but do not recurse into possibly incomplete types to
4064      avoid hash differences for complete vs. incomplete types.  */
4065   if (POINTER_TYPE_P (type))
4066     {
4067       if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (type)))
4068         {
4069           v = iterative_hash_hashval_t (TREE_CODE (TREE_TYPE (type)), v);
4070           v = iterative_hash_name
4071                 (TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (type))), v);
4072         }
4073       else
4074         v = visit (TREE_TYPE (type), state, v,
4075                    sccstack, sccstate, sccstate_obstack, mode);
4076     }
4077
4078   /* For integer types hash the types min/max values and the string flag.  */
4079   if (TREE_CODE (type) == INTEGER_TYPE)
4080     {
4081       /* OMP lowering can introduce error_mark_node in place of
4082          random local decls in types.  */
4083       if (TYPE_MIN_VALUE (type) != error_mark_node)
4084         v = iterative_hash_expr (TYPE_MIN_VALUE (type), v);
4085       if (TYPE_MAX_VALUE (type) != error_mark_node)
4086         v = iterative_hash_expr (TYPE_MAX_VALUE (type), v);
4087       v = iterative_hash_hashval_t (TYPE_STRING_FLAG (type), v);
4088     }
4089
4090   /* For array types hash their domain and the string flag.  */
4091   if (TREE_CODE (type) == ARRAY_TYPE
4092       && TYPE_DOMAIN (type))
4093     {
4094       v = iterative_hash_hashval_t (TYPE_STRING_FLAG (type), v);
4095       v = visit (TYPE_DOMAIN (type), state, v,
4096                  sccstack, sccstate, sccstate_obstack, mode);
4097     }
4098
4099   /* Recurse for aggregates with a single element type.  */
4100   if (TREE_CODE (type) == ARRAY_TYPE
4101       || TREE_CODE (type) == COMPLEX_TYPE
4102       || TREE_CODE (type) == VECTOR_TYPE)
4103     v = visit (TREE_TYPE (type), state, v,
4104                sccstack, sccstate, sccstate_obstack, mode);
4105
4106   /* Incorporate function return and argument types.  */
4107   if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
4108     {
4109       unsigned na;
4110       tree p;
4111
4112       /* For method types also incorporate their parent class.  */
4113       if (TREE_CODE (type) == METHOD_TYPE)
4114         v = visit (TYPE_METHOD_BASETYPE (type), state, v,
4115                    sccstack, sccstate, sccstate_obstack, mode);
4116
4117       /* For result types allow mismatch in completeness.  */
4118       if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (type)))
4119         {
4120           v = iterative_hash_hashval_t (TREE_CODE (TREE_TYPE (type)), v);
4121           v = iterative_hash_name
4122                 (TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (type))), v);
4123         }
4124       else
4125         v = visit (TREE_TYPE (type), state, v,
4126                    sccstack, sccstate, sccstate_obstack, mode);
4127
4128       for (p = TYPE_ARG_TYPES (type), na = 0; p; p = TREE_CHAIN (p))
4129         {
4130           /* For argument types allow mismatch in completeness.  */
4131           if (RECORD_OR_UNION_TYPE_P (TREE_VALUE (p)))
4132             {
4133               v = iterative_hash_hashval_t (TREE_CODE (TREE_VALUE (p)), v);
4134               v = iterative_hash_name
4135                     (TYPE_NAME (TYPE_MAIN_VARIANT (TREE_VALUE (p))), v);
4136             }
4137           else
4138             v = visit (TREE_VALUE (p), state, v,
4139                        sccstack, sccstate, sccstate_obstack, mode);
4140           na++;
4141         }
4142
4143       v = iterative_hash_hashval_t (na, v);
4144     }
4145
4146   if (TREE_CODE (type) == RECORD_TYPE
4147       || TREE_CODE (type) == UNION_TYPE
4148       || TREE_CODE (type) == QUAL_UNION_TYPE)
4149     {
4150       unsigned nf;
4151       tree f;
4152
4153       if (mode == GTC_MERGE)
4154         v = iterative_hash_name (TYPE_NAME (TYPE_MAIN_VARIANT (type)), v);
4155
4156       for (f = TYPE_FIELDS (type), nf = 0; f; f = TREE_CHAIN (f))
4157         {
4158           if (mode == GTC_MERGE)
4159             v = iterative_hash_name (DECL_NAME (f), v);
4160           v = visit (TREE_TYPE (f), state, v,
4161                      sccstack, sccstate, sccstate_obstack, mode);
4162           nf++;
4163         }
4164
4165       v = iterative_hash_hashval_t (nf, v);
4166     }
4167
4168   /* Record hash for us.  */
4169   state->u.hash = v;
4170
4171   /* See if we found an SCC.  */
4172   if (state->low == state->dfsnum)
4173     {
4174       tree x;
4175
4176       /* Pop off the SCC and set its hash values.  */
4177       do
4178         {
4179           struct sccs *cstate;
4180           struct tree_int_map *m = ggc_alloc_cleared_tree_int_map ();
4181           x = VEC_pop (tree, *sccstack);
4182           cstate = (struct sccs *)*pointer_map_contains (sccstate, x);
4183           cstate->on_sccstack = false;
4184           m->base.from = x;
4185           m->to = cstate->u.hash;
4186           slot = htab_find_slot (mode == GTC_MERGE
4187                                  ? type_hash_cache : canonical_type_hash_cache,
4188                                  m, INSERT);
4189           gcc_assert (!*slot);
4190           *slot = (void *) m;
4191         }
4192       while (x != type);
4193     }
4194
4195   return iterative_hash_hashval_t (v, val);
4196 }
4197
4198
4199 /* Returns a hash value for P (assumed to be a type).  The hash value
4200    is computed using some distinguishing features of the type.  Note
4201    that we cannot use pointer hashing here as we may be dealing with
4202    two distinct instances of the same type.
4203
4204    This function should produce the same hash value for two compatible
4205    types according to gimple_types_compatible_p.  */
4206
4207 static hashval_t
4208 gimple_type_hash_1 (const void *p, enum gtc_mode mode)
4209 {
4210   const_tree t = (const_tree) p;
4211   VEC(tree, heap) *sccstack = NULL;
4212   struct pointer_map_t *sccstate;
4213   struct obstack sccstate_obstack;
4214   hashval_t val;
4215   void **slot;
4216   struct tree_int_map m;
4217
4218   if (mode == GTC_MERGE
4219       && type_hash_cache == NULL)
4220     type_hash_cache = htab_create_ggc (512, tree_int_map_hash,
4221                                        tree_int_map_eq, NULL);
4222   else if (mode == GTC_DIAG
4223            && canonical_type_hash_cache == NULL)
4224     canonical_type_hash_cache = htab_create_ggc (512, tree_int_map_hash,
4225                                                  tree_int_map_eq, NULL);
4226
4227   m.base.from = CONST_CAST_TREE (t);
4228   if ((slot = htab_find_slot (mode == GTC_MERGE
4229                               ? type_hash_cache : canonical_type_hash_cache,
4230                               &m, NO_INSERT))
4231       && *slot)
4232     return iterative_hash_hashval_t (((struct tree_int_map *) *slot)->to, 0);
4233
4234   /* Perform a DFS walk and pre-hash all reachable types.  */
4235   next_dfs_num = 1;
4236   sccstate = pointer_map_create ();
4237   gcc_obstack_init (&sccstate_obstack);
4238   val = iterative_hash_gimple_type (CONST_CAST_TREE (t), 0,
4239                                     &sccstack, sccstate, &sccstate_obstack,
4240                                     mode);
4241   VEC_free (tree, heap, sccstack);
4242   pointer_map_destroy (sccstate);
4243   obstack_free (&sccstate_obstack, NULL);
4244
4245   return val;
4246 }
4247
4248 static hashval_t
4249 gimple_type_hash (const void *p)
4250 {
4251   return gimple_type_hash_1 (p, GTC_MERGE);
4252 }
4253
4254 static hashval_t
4255 gimple_canonical_type_hash (const void *p)
4256 {
4257   return gimple_type_hash_1 (p, GTC_DIAG);
4258 }
4259
4260
4261 /* Returns nonzero if P1 and P2 are equal.  */
4262
4263 static int
4264 gimple_type_eq (const void *p1, const void *p2)
4265 {
4266   const_tree t1 = (const_tree) p1;
4267   const_tree t2 = (const_tree) p2;
4268   return gimple_types_compatible_p (CONST_CAST_TREE (t1),
4269                                     CONST_CAST_TREE (t2), GTC_MERGE);
4270 }
4271
4272
4273 /* Register type T in the global type table gimple_types.
4274    If another type T', compatible with T, already existed in
4275    gimple_types then return T', otherwise return T.  This is used by
4276    LTO to merge identical types read from different TUs.  */
4277
4278 tree
4279 gimple_register_type (tree t)
4280 {
4281   void **slot;
4282   gimple_type_leader_entry *leader;
4283   tree mv_leader = NULL_TREE;
4284
4285   gcc_assert (TYPE_P (t));
4286
4287   if (!gimple_type_leader)
4288     gimple_type_leader = ggc_alloc_cleared_vec_gimple_type_leader_entry_s
4289                                 (GIMPLE_TYPE_LEADER_SIZE);
4290   /* If we registered this type before return the cached result.  */
4291   leader = &gimple_type_leader[TYPE_UID (t) % GIMPLE_TYPE_LEADER_SIZE];
4292   if (leader->type == t)
4293     return leader->leader;
4294
4295   /* Always register the main variant first.  This is important so we
4296      pick up the non-typedef variants as canonical, otherwise we'll end
4297      up taking typedef ids for structure tags during comparison.  */
4298   if (TYPE_MAIN_VARIANT (t) != t)
4299     mv_leader = gimple_register_type (TYPE_MAIN_VARIANT (t));
4300
4301   if (gimple_types == NULL)
4302     gimple_types = htab_create_ggc (16381, gimple_type_hash, gimple_type_eq, 0);
4303
4304   slot = htab_find_slot (gimple_types, t, INSERT);
4305   if (*slot
4306       && *(tree *)slot != t)
4307     {
4308       tree new_type = (tree) *((tree *) slot);
4309
4310       /* Do not merge types with different addressability.  */
4311       gcc_assert (TREE_ADDRESSABLE (t) == TREE_ADDRESSABLE (new_type));
4312
4313       /* If t is not its main variant then make t unreachable from its
4314          main variant list.  Otherwise we'd queue up a lot of duplicates
4315          there.  */
4316       if (t != TYPE_MAIN_VARIANT (t))
4317         {
4318           tree tem = TYPE_MAIN_VARIANT (t);
4319           while (tem && TYPE_NEXT_VARIANT (tem) != t)
4320             tem = TYPE_NEXT_VARIANT (tem);
4321           if (tem)
4322             TYPE_NEXT_VARIANT (tem) = TYPE_NEXT_VARIANT (t);
4323           TYPE_NEXT_VARIANT (t) = NULL_TREE;
4324         }
4325
4326       /* If we are a pointer then remove us from the pointer-to or
4327          reference-to chain.  Otherwise we'd queue up a lot of duplicates
4328          there.  */
4329       if (TREE_CODE (t) == POINTER_TYPE)
4330         {
4331           if (TYPE_POINTER_TO (TREE_TYPE (t)) == t)
4332             TYPE_POINTER_TO (TREE_TYPE (t)) = TYPE_NEXT_PTR_TO (t);
4333           else
4334             {
4335               tree tem = TYPE_POINTER_TO (TREE_TYPE (t));
4336               while (tem && TYPE_NEXT_PTR_TO (tem) != t)
4337                 tem = TYPE_NEXT_PTR_TO (tem);
4338               if (tem)
4339                 TYPE_NEXT_PTR_TO (tem) = TYPE_NEXT_PTR_TO (t);
4340             }
4341           TYPE_NEXT_PTR_TO (t) = NULL_TREE;
4342         }
4343       else if (TREE_CODE (t) == REFERENCE_TYPE)
4344         {
4345           if (TYPE_REFERENCE_TO (TREE_TYPE (t)) == t)
4346             TYPE_REFERENCE_TO (TREE_TYPE (t)) = TYPE_NEXT_REF_TO (t);
4347           else
4348             {
4349               tree tem = TYPE_REFERENCE_TO (TREE_TYPE (t));
4350               while (tem && TYPE_NEXT_REF_TO (tem) != t)
4351                 tem = TYPE_NEXT_REF_TO (tem);
4352               if (tem)
4353                 TYPE_NEXT_REF_TO (tem) = TYPE_NEXT_REF_TO (t);
4354             }
4355           TYPE_NEXT_REF_TO (t) = NULL_TREE;
4356         }
4357
4358       leader->type = t;
4359       leader->leader = new_type;
4360       t = new_type;
4361     }
4362   else
4363     {
4364       leader->type = t;
4365       leader->leader = t;
4366       /* We're the type leader.  Make our TYPE_MAIN_VARIANT valid.  */
4367       if (TYPE_MAIN_VARIANT (t) != t
4368           && TYPE_MAIN_VARIANT (t) != mv_leader)
4369         {
4370           /* Remove us from our main variant list as we are not the variant
4371              leader and the variant leader will change.  */
4372           tree tem = TYPE_MAIN_VARIANT (t);
4373           while (tem && TYPE_NEXT_VARIANT (tem) != t)
4374             tem = TYPE_NEXT_VARIANT (tem);
4375           if (tem)
4376             TYPE_NEXT_VARIANT (tem) = TYPE_NEXT_VARIANT (t);
4377           TYPE_NEXT_VARIANT (t) = NULL_TREE;
4378           /* Adjust our main variant.  Linking us into its variant list
4379              will happen at fixup time.  */
4380           TYPE_MAIN_VARIANT (t) = mv_leader;
4381         }
4382       *slot = (void *) t;
4383     }
4384
4385   return t;
4386 }
4387
4388
4389 /* Returns nonzero if P1 and P2 are equal.  */
4390
4391 static int
4392 gimple_canonical_type_eq (const void *p1, const void *p2)
4393 {
4394   const_tree t1 = (const_tree) p1;
4395   const_tree t2 = (const_tree) p2;
4396   return gimple_types_compatible_p (CONST_CAST_TREE (t1),
4397                                     CONST_CAST_TREE (t2), GTC_DIAG);
4398 }
4399
4400 /* Register type T in the global type table gimple_types.
4401    If another type T', compatible with T, already existed in
4402    gimple_types then return T', otherwise return T.  This is used by
4403    LTO to merge identical types read from different TUs.  */
4404
4405 tree
4406 gimple_register_canonical_type (tree t)
4407 {
4408   void **slot;
4409   tree orig_t = t;
4410
4411   gcc_assert (TYPE_P (t));
4412
4413   if (TYPE_CANONICAL (t))
4414     return TYPE_CANONICAL (t);
4415
4416   /* Always register the type itself first so that if it turns out
4417      to be the canonical type it will be the one we merge to as well.  */
4418   t = gimple_register_type (t);
4419
4420   /* Always register the main variant first.  This is important so we
4421      pick up the non-typedef variants as canonical, otherwise we'll end
4422      up taking typedef ids for structure tags during comparison.  */
4423   if (TYPE_MAIN_VARIANT (t) != t)
4424     gimple_register_canonical_type (TYPE_MAIN_VARIANT (t));
4425
4426   if (gimple_canonical_types == NULL)
4427     gimple_canonical_types = htab_create_ggc (16381, gimple_canonical_type_hash,
4428                                               gimple_canonical_type_eq, 0);
4429
4430   slot = htab_find_slot (gimple_canonical_types, t, INSERT);
4431   if (*slot
4432       && *(tree *)slot != t)
4433     {
4434       tree new_type = (tree) *((tree *) slot);
4435
4436       TYPE_CANONICAL (t) = new_type;
4437       t = new_type;
4438     }
4439   else
4440     {
4441       TYPE_CANONICAL (t) = t;
4442       *slot = (void *) t;
4443     }
4444
4445   /* Also cache the canonical type in the non-leaders.  */
4446   TYPE_CANONICAL (orig_t) = t;
4447
4448   return t;
4449 }
4450
4451
4452 /* Show statistics on references to the global type table gimple_types.  */
4453
4454 void
4455 print_gimple_types_stats (void)
4456 {
4457   if (gimple_types)
4458     fprintf (stderr, "GIMPLE type table: size %ld, %ld elements, "
4459              "%ld searches, %ld collisions (ratio: %f)\n",
4460              (long) htab_size (gimple_types),
4461              (long) htab_elements (gimple_types),
4462              (long) gimple_types->searches,
4463              (long) gimple_types->collisions,
4464              htab_collisions (gimple_types));
4465   else
4466     fprintf (stderr, "GIMPLE type table is empty\n");
4467   if (type_hash_cache)
4468     fprintf (stderr, "GIMPLE type hash table: size %ld, %ld elements, "
4469              "%ld searches, %ld collisions (ratio: %f)\n",
4470              (long) htab_size (type_hash_cache),
4471              (long) htab_elements (type_hash_cache),
4472              (long) type_hash_cache->searches,
4473              (long) type_hash_cache->collisions,
4474              htab_collisions (type_hash_cache));
4475   else
4476     fprintf (stderr, "GIMPLE type hash table is empty\n");
4477   if (gimple_canonical_types)
4478     fprintf (stderr, "GIMPLE canonical type table: size %ld, %ld elements, "
4479              "%ld searches, %ld collisions (ratio: %f)\n",
4480              (long) htab_size (gimple_canonical_types),
4481              (long) htab_elements (gimple_canonical_types),
4482              (long) gimple_canonical_types->searches,
4483              (long) gimple_canonical_types->collisions,
4484              htab_collisions (gimple_canonical_types));
4485   else
4486     fprintf (stderr, "GIMPLE canonical type table is empty\n");
4487   if (canonical_type_hash_cache)
4488     fprintf (stderr, "GIMPLE canonical type hash table: size %ld, %ld elements, "
4489              "%ld searches, %ld collisions (ratio: %f)\n",
4490              (long) htab_size (canonical_type_hash_cache),
4491              (long) htab_elements (canonical_type_hash_cache),
4492              (long) canonical_type_hash_cache->searches,
4493              (long) canonical_type_hash_cache->collisions,
4494              htab_collisions (canonical_type_hash_cache));
4495   else
4496     fprintf (stderr, "GIMPLE canonical type hash table is empty\n");
4497   if (gtc_visited)
4498     fprintf (stderr, "GIMPLE type comparison table: size %ld, %ld "
4499              "elements, %ld searches, %ld collisions (ratio: %f)\n",
4500              (long) htab_size (gtc_visited),
4501              (long) htab_elements (gtc_visited),
4502              (long) gtc_visited->searches,
4503              (long) gtc_visited->collisions,
4504              htab_collisions (gtc_visited));
4505   else
4506     fprintf (stderr, "GIMPLE type comparison table is empty\n");
4507 }
4508
4509 /* Free the gimple type hashtables used for LTO type merging.  */
4510
4511 void
4512 free_gimple_type_tables (void)
4513 {
4514   /* Last chance to print stats for the tables.  */
4515   if (flag_lto_report)
4516     print_gimple_types_stats ();
4517
4518   if (gimple_types)
4519     {
4520       htab_delete (gimple_types);
4521       gimple_types = NULL;
4522     }
4523   if (gimple_canonical_types)
4524     {
4525       htab_delete (gimple_canonical_types);
4526       gimple_canonical_types = NULL;
4527     }
4528   if (type_hash_cache)
4529     {
4530       htab_delete (type_hash_cache);
4531       type_hash_cache = NULL;
4532     }
4533   if (canonical_type_hash_cache)
4534     {
4535       htab_delete (canonical_type_hash_cache);
4536       canonical_type_hash_cache = NULL;
4537     }
4538   if (gtc_visited)
4539     {
4540       htab_delete (gtc_visited);
4541       obstack_free (&gtc_ob, NULL);
4542       gtc_visited = NULL;
4543     }
4544   gimple_type_leader = NULL;
4545 }
4546
4547
4548 /* Return a type the same as TYPE except unsigned or
4549    signed according to UNSIGNEDP.  */
4550
4551 static tree
4552 gimple_signed_or_unsigned_type (bool unsignedp, tree type)
4553 {
4554   tree type1;
4555
4556   type1 = TYPE_MAIN_VARIANT (type);
4557   if (type1 == signed_char_type_node
4558       || type1 == char_type_node
4559       || type1 == unsigned_char_type_node)
4560     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
4561   if (type1 == integer_type_node || type1 == unsigned_type_node)
4562     return unsignedp ? unsigned_type_node : integer_type_node;
4563   if (type1 == short_integer_type_node || type1 == short_unsigned_type_node)
4564     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
4565   if (type1 == long_integer_type_node || type1 == long_unsigned_type_node)
4566     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
4567   if (type1 == long_long_integer_type_node
4568       || type1 == long_long_unsigned_type_node)
4569     return unsignedp
4570            ? long_long_unsigned_type_node
4571            : long_long_integer_type_node;
4572   if (int128_integer_type_node && (type1 == int128_integer_type_node || type1 == int128_unsigned_type_node))
4573     return unsignedp
4574            ? int128_unsigned_type_node
4575            : int128_integer_type_node;
4576 #if HOST_BITS_PER_WIDE_INT >= 64
4577   if (type1 == intTI_type_node || type1 == unsigned_intTI_type_node)
4578     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
4579 #endif
4580   if (type1 == intDI_type_node || type1 == unsigned_intDI_type_node)
4581     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
4582   if (type1 == intSI_type_node || type1 == unsigned_intSI_type_node)
4583     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
4584   if (type1 == intHI_type_node || type1 == unsigned_intHI_type_node)
4585     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
4586   if (type1 == intQI_type_node || type1 == unsigned_intQI_type_node)
4587     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
4588
4589 #define GIMPLE_FIXED_TYPES(NAME)            \
4590   if (type1 == short_ ## NAME ## _type_node \
4591       || type1 == unsigned_short_ ## NAME ## _type_node) \
4592     return unsignedp ? unsigned_short_ ## NAME ## _type_node \
4593                      : short_ ## NAME ## _type_node; \
4594   if (type1 == NAME ## _type_node \
4595       || type1 == unsigned_ ## NAME ## _type_node) \
4596     return unsignedp ? unsigned_ ## NAME ## _type_node \
4597                      : NAME ## _type_node; \
4598   if (type1 == long_ ## NAME ## _type_node \
4599       || type1 == unsigned_long_ ## NAME ## _type_node) \
4600     return unsignedp ? unsigned_long_ ## NAME ## _type_node \
4601                      : long_ ## NAME ## _type_node; \
4602   if (type1 == long_long_ ## NAME ## _type_node \
4603       || type1 == unsigned_long_long_ ## NAME ## _type_node) \
4604     return unsignedp ? unsigned_long_long_ ## NAME ## _type_node \
4605                      : long_long_ ## NAME ## _type_node;
4606
4607 #define GIMPLE_FIXED_MODE_TYPES(NAME) \
4608   if (type1 == NAME ## _type_node \
4609       || type1 == u ## NAME ## _type_node) \
4610     return unsignedp ? u ## NAME ## _type_node \
4611                      : NAME ## _type_node;
4612
4613 #define GIMPLE_FIXED_TYPES_SAT(NAME) \
4614   if (type1 == sat_ ## short_ ## NAME ## _type_node \
4615       || type1 == sat_ ## unsigned_short_ ## NAME ## _type_node) \
4616     return unsignedp ? sat_ ## unsigned_short_ ## NAME ## _type_node \
4617                      : sat_ ## short_ ## NAME ## _type_node; \
4618   if (type1 == sat_ ## NAME ## _type_node \
4619       || type1 == sat_ ## unsigned_ ## NAME ## _type_node) \
4620     return unsignedp ? sat_ ## unsigned_ ## NAME ## _type_node \
4621                      : sat_ ## NAME ## _type_node; \
4622   if (type1 == sat_ ## long_ ## NAME ## _type_node \
4623       || type1 == sat_ ## unsigned_long_ ## NAME ## _type_node) \
4624     return unsignedp ? sat_ ## unsigned_long_ ## NAME ## _type_node \
4625                      : sat_ ## long_ ## NAME ## _type_node; \
4626   if (type1 == sat_ ## long_long_ ## NAME ## _type_node \
4627       || type1 == sat_ ## unsigned_long_long_ ## NAME ## _type_node) \
4628     return unsignedp ? sat_ ## unsigned_long_long_ ## NAME ## _type_node \
4629                      : sat_ ## long_long_ ## NAME ## _type_node;
4630
4631 #define GIMPLE_FIXED_MODE_TYPES_SAT(NAME)       \
4632   if (type1 == sat_ ## NAME ## _type_node \
4633       || type1 == sat_ ## u ## NAME ## _type_node) \
4634     return unsignedp ? sat_ ## u ## NAME ## _type_node \
4635                      : sat_ ## NAME ## _type_node;
4636
4637   GIMPLE_FIXED_TYPES (fract);
4638   GIMPLE_FIXED_TYPES_SAT (fract);
4639   GIMPLE_FIXED_TYPES (accum);
4640   GIMPLE_FIXED_TYPES_SAT (accum);
4641
4642   GIMPLE_FIXED_MODE_TYPES (qq);
4643   GIMPLE_FIXED_MODE_TYPES (hq);
4644   GIMPLE_FIXED_MODE_TYPES (sq);
4645   GIMPLE_FIXED_MODE_TYPES (dq);
4646   GIMPLE_FIXED_MODE_TYPES (tq);
4647   GIMPLE_FIXED_MODE_TYPES_SAT (qq);
4648   GIMPLE_FIXED_MODE_TYPES_SAT (hq);
4649   GIMPLE_FIXED_MODE_TYPES_SAT (sq);
4650   GIMPLE_FIXED_MODE_TYPES_SAT (dq);
4651   GIMPLE_FIXED_MODE_TYPES_SAT (tq);
4652   GIMPLE_FIXED_MODE_TYPES (ha);
4653   GIMPLE_FIXED_MODE_TYPES (sa);
4654   GIMPLE_FIXED_MODE_TYPES (da);
4655   GIMPLE_FIXED_MODE_TYPES (ta);
4656   GIMPLE_FIXED_MODE_TYPES_SAT (ha);
4657   GIMPLE_FIXED_MODE_TYPES_SAT (sa);
4658   GIMPLE_FIXED_MODE_TYPES_SAT (da);
4659   GIMPLE_FIXED_MODE_TYPES_SAT (ta);
4660
4661   /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
4662      the precision; they have precision set to match their range, but
4663      may use a wider mode to match an ABI.  If we change modes, we may
4664      wind up with bad conversions.  For INTEGER_TYPEs in C, must check
4665      the precision as well, so as to yield correct results for
4666      bit-field types.  C++ does not have these separate bit-field
4667      types, and producing a signed or unsigned variant of an
4668      ENUMERAL_TYPE may cause other problems as well.  */
4669   if (!INTEGRAL_TYPE_P (type)
4670       || TYPE_UNSIGNED (type) == unsignedp)
4671     return type;
4672
4673 #define TYPE_OK(node)                                                       \
4674   (TYPE_MODE (type) == TYPE_MODE (node)                                     \
4675    && TYPE_PRECISION (type) == TYPE_PRECISION (node))
4676   if (TYPE_OK (signed_char_type_node))
4677     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
4678   if (TYPE_OK (integer_type_node))
4679     return unsignedp ? unsigned_type_node : integer_type_node;
4680   if (TYPE_OK (short_integer_type_node))
4681     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
4682   if (TYPE_OK (long_integer_type_node))
4683     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
4684   if (TYPE_OK (long_long_integer_type_node))
4685     return (unsignedp
4686             ? long_long_unsigned_type_node
4687             : long_long_integer_type_node);
4688   if (int128_integer_type_node && TYPE_OK (int128_integer_type_node))
4689     return (unsignedp
4690             ? int128_unsigned_type_node
4691             : int128_integer_type_node);
4692
4693 #if HOST_BITS_PER_WIDE_INT >= 64
4694   if (TYPE_OK (intTI_type_node))
4695     return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
4696 #endif
4697   if (TYPE_OK (intDI_type_node))
4698     return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
4699   if (TYPE_OK (intSI_type_node))
4700     return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
4701   if (TYPE_OK (intHI_type_node))
4702     return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
4703   if (TYPE_OK (intQI_type_node))
4704     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
4705
4706 #undef GIMPLE_FIXED_TYPES
4707 #undef GIMPLE_FIXED_MODE_TYPES
4708 #undef GIMPLE_FIXED_TYPES_SAT
4709 #undef GIMPLE_FIXED_MODE_TYPES_SAT
4710 #undef TYPE_OK
4711
4712   return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
4713 }
4714
4715
4716 /* Return an unsigned type the same as TYPE in other respects.  */
4717
4718 tree
4719 gimple_unsigned_type (tree type)
4720 {
4721   return gimple_signed_or_unsigned_type (true, type);
4722 }
4723
4724
4725 /* Return a signed type the same as TYPE in other respects.  */
4726
4727 tree
4728 gimple_signed_type (tree type)
4729 {
4730   return gimple_signed_or_unsigned_type (false, type);
4731 }
4732
4733
4734 /* Return the typed-based alias set for T, which may be an expression
4735    or a type.  Return -1 if we don't do anything special.  */
4736
4737 alias_set_type
4738 gimple_get_alias_set (tree t)
4739 {
4740   tree u;
4741
4742   /* Permit type-punning when accessing a union, provided the access
4743      is directly through the union.  For example, this code does not
4744      permit taking the address of a union member and then storing
4745      through it.  Even the type-punning allowed here is a GCC
4746      extension, albeit a common and useful one; the C standard says
4747      that such accesses have implementation-defined behavior.  */
4748   for (u = t;
4749        TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
4750        u = TREE_OPERAND (u, 0))
4751     if (TREE_CODE (u) == COMPONENT_REF
4752         && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
4753       return 0;
4754
4755   /* That's all the expressions we handle specially.  */
4756   if (!TYPE_P (t))
4757     return -1;
4758
4759   /* For convenience, follow the C standard when dealing with
4760      character types.  Any object may be accessed via an lvalue that
4761      has character type.  */
4762   if (t == char_type_node
4763       || t == signed_char_type_node
4764       || t == unsigned_char_type_node)
4765     return 0;
4766
4767   /* Allow aliasing between signed and unsigned variants of the same
4768      type.  We treat the signed variant as canonical.  */
4769   if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
4770     {
4771       tree t1 = gimple_signed_type (t);
4772
4773       /* t1 == t can happen for boolean nodes which are always unsigned.  */
4774       if (t1 != t)
4775         return get_alias_set (t1);
4776     }
4777
4778   return -1;
4779 }
4780
4781
4782 /* Data structure used to count the number of dereferences to PTR
4783    inside an expression.  */
4784 struct count_ptr_d
4785 {
4786   tree ptr;
4787   unsigned num_stores;
4788   unsigned num_loads;
4789 };
4790
4791 /* Helper for count_uses_and_derefs.  Called by walk_tree to look for
4792    (ALIGN/MISALIGNED_)INDIRECT_REF nodes for the pointer passed in DATA.  */
4793
4794 static tree
4795 count_ptr_derefs (tree *tp, int *walk_subtrees, void *data)
4796 {
4797   struct walk_stmt_info *wi_p = (struct walk_stmt_info *) data;
4798   struct count_ptr_d *count_p = (struct count_ptr_d *) wi_p->info;
4799
4800   /* Do not walk inside ADDR_EXPR nodes.  In the expression &ptr->fld,
4801      pointer 'ptr' is *not* dereferenced, it is simply used to compute
4802      the address of 'fld' as 'ptr + offsetof(fld)'.  */
4803   if (TREE_CODE (*tp) == ADDR_EXPR)
4804     {
4805       *walk_subtrees = 0;
4806       return NULL_TREE;
4807     }
4808
4809   if (TREE_CODE (*tp) == MEM_REF && TREE_OPERAND (*tp, 0) == count_p->ptr)
4810     {
4811       if (wi_p->is_lhs)
4812         count_p->num_stores++;
4813       else
4814         count_p->num_loads++;
4815     }
4816
4817   return NULL_TREE;
4818 }
4819
4820 /* Count the number of direct and indirect uses for pointer PTR in
4821    statement STMT.  The number of direct uses is stored in
4822    *NUM_USES_P.  Indirect references are counted separately depending
4823    on whether they are store or load operations.  The counts are
4824    stored in *NUM_STORES_P and *NUM_LOADS_P.  */
4825
4826 void
4827 count_uses_and_derefs (tree ptr, gimple stmt, unsigned *num_uses_p,
4828                        unsigned *num_loads_p, unsigned *num_stores_p)
4829 {
4830   ssa_op_iter i;
4831   tree use;
4832
4833   *num_uses_p = 0;
4834   *num_loads_p = 0;
4835   *num_stores_p = 0;
4836
4837   /* Find out the total number of uses of PTR in STMT.  */
4838   FOR_EACH_SSA_TREE_OPERAND (use, stmt, i, SSA_OP_USE)
4839     if (use == ptr)
4840       (*num_uses_p)++;
4841
4842   /* Now count the number of indirect references to PTR.  This is
4843      truly awful, but we don't have much choice.  There are no parent
4844      pointers inside INDIRECT_REFs, so an expression like
4845      '*x_1 = foo (x_1, *x_1)' needs to be traversed piece by piece to
4846      find all the indirect and direct uses of x_1 inside.  The only
4847      shortcut we can take is the fact that GIMPLE only allows
4848      INDIRECT_REFs inside the expressions below.  */
4849   if (is_gimple_assign (stmt)
4850       || gimple_code (stmt) == GIMPLE_RETURN
4851       || gimple_code (stmt) == GIMPLE_ASM
4852       || is_gimple_call (stmt))
4853     {
4854       struct walk_stmt_info wi;
4855       struct count_ptr_d count;
4856
4857       count.ptr = ptr;
4858       count.num_stores = 0;
4859       count.num_loads = 0;
4860
4861       memset (&wi, 0, sizeof (wi));
4862       wi.info = &count;
4863       walk_gimple_op (stmt, count_ptr_derefs, &wi);
4864
4865       *num_stores_p = count.num_stores;
4866       *num_loads_p = count.num_loads;
4867     }
4868
4869   gcc_assert (*num_uses_p >= *num_loads_p + *num_stores_p);
4870 }
4871
4872 /* From a tree operand OP return the base of a load or store operation
4873    or NULL_TREE if OP is not a load or a store.  */
4874
4875 static tree
4876 get_base_loadstore (tree op)
4877 {
4878   while (handled_component_p (op))
4879     op = TREE_OPERAND (op, 0);
4880   if (DECL_P (op)
4881       || INDIRECT_REF_P (op)
4882       || TREE_CODE (op) == MEM_REF
4883       || TREE_CODE (op) == TARGET_MEM_REF)
4884     return op;
4885   return NULL_TREE;
4886 }
4887
4888 /* For the statement STMT call the callbacks VISIT_LOAD, VISIT_STORE and
4889    VISIT_ADDR if non-NULL on loads, store and address-taken operands
4890    passing the STMT, the base of the operand and DATA to it.  The base
4891    will be either a decl, an indirect reference (including TARGET_MEM_REF)
4892    or the argument of an address expression.
4893    Returns the results of these callbacks or'ed.  */
4894
4895 bool
4896 walk_stmt_load_store_addr_ops (gimple stmt, void *data,
4897                                bool (*visit_load)(gimple, tree, void *),
4898                                bool (*visit_store)(gimple, tree, void *),
4899                                bool (*visit_addr)(gimple, tree, void *))
4900 {
4901   bool ret = false;
4902   unsigned i;
4903   if (gimple_assign_single_p (stmt))
4904     {
4905       tree lhs, rhs;
4906       if (visit_store)
4907         {
4908           lhs = get_base_loadstore (gimple_assign_lhs (stmt));
4909           if (lhs)
4910             ret |= visit_store (stmt, lhs, data);
4911         }
4912       rhs = gimple_assign_rhs1 (stmt);
4913       while (handled_component_p (rhs))
4914         rhs = TREE_OPERAND (rhs, 0);
4915       if (visit_addr)
4916         {
4917           if (TREE_CODE (rhs) == ADDR_EXPR)
4918             ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), data);
4919           else if (TREE_CODE (rhs) == TARGET_MEM_REF
4920                    && TREE_CODE (TMR_BASE (rhs)) == ADDR_EXPR)
4921             ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (rhs), 0), data);
4922           else if (TREE_CODE (rhs) == OBJ_TYPE_REF
4923                    && TREE_CODE (OBJ_TYPE_REF_OBJECT (rhs)) == ADDR_EXPR)
4924             ret |= visit_addr (stmt, TREE_OPERAND (OBJ_TYPE_REF_OBJECT (rhs),
4925                                                    0), data);
4926           lhs = gimple_assign_lhs (stmt);
4927           if (TREE_CODE (lhs) == TARGET_MEM_REF
4928               && TREE_CODE (TMR_BASE (lhs)) == ADDR_EXPR)
4929             ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (lhs), 0), data);
4930         }
4931       if (visit_load)
4932         {
4933           rhs = get_base_loadstore (rhs);
4934           if (rhs)
4935             ret |= visit_load (stmt, rhs, data);
4936         }
4937     }
4938   else if (visit_addr
4939            && (is_gimple_assign (stmt)
4940                || gimple_code (stmt) == GIMPLE_COND))
4941     {
4942       for (i = 0; i < gimple_num_ops (stmt); ++i)
4943         if (gimple_op (stmt, i)
4944             && TREE_CODE (gimple_op (stmt, i)) == ADDR_EXPR)
4945           ret |= visit_addr (stmt, TREE_OPERAND (gimple_op (stmt, i), 0), data);
4946     }
4947   else if (is_gimple_call (stmt))
4948     {
4949       if (visit_store)
4950         {
4951           tree lhs = gimple_call_lhs (stmt);
4952           if (lhs)
4953             {
4954               lhs = get_base_loadstore (lhs);
4955               if (lhs)
4956                 ret |= visit_store (stmt, lhs, data);
4957             }
4958         }
4959       if (visit_load || visit_addr)
4960         for (i = 0; i < gimple_call_num_args (stmt); ++i)
4961           {
4962             tree rhs = gimple_call_arg (stmt, i);
4963             if (visit_addr
4964                 && TREE_CODE (rhs) == ADDR_EXPR)
4965               ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), data);
4966             else if (visit_load)
4967               {
4968                 rhs = get_base_loadstore (rhs);
4969                 if (rhs)
4970                   ret |= visit_load (stmt, rhs, data);
4971               }
4972           }
4973       if (visit_addr
4974           && gimple_call_chain (stmt)
4975           && TREE_CODE (gimple_call_chain (stmt)) == ADDR_EXPR)
4976         ret |= visit_addr (stmt, TREE_OPERAND (gimple_call_chain (stmt), 0),
4977                            data);
4978       if (visit_addr
4979           && gimple_call_return_slot_opt_p (stmt)
4980           && gimple_call_lhs (stmt) != NULL_TREE
4981           && TREE_ADDRESSABLE (TREE_TYPE (gimple_call_lhs (stmt))))
4982         ret |= visit_addr (stmt, gimple_call_lhs (stmt), data);
4983     }
4984   else if (gimple_code (stmt) == GIMPLE_ASM)
4985     {
4986       unsigned noutputs;
4987       const char *constraint;
4988       const char **oconstraints;
4989       bool allows_mem, allows_reg, is_inout;
4990       noutputs = gimple_asm_noutputs (stmt);
4991       oconstraints = XALLOCAVEC (const char *, noutputs);
4992       if (visit_store || visit_addr)
4993         for (i = 0; i < gimple_asm_noutputs (stmt); ++i)
4994           {
4995             tree link = gimple_asm_output_op (stmt, i);
4996             tree op = get_base_loadstore (TREE_VALUE (link));
4997             if (op && visit_store)
4998               ret |= visit_store (stmt, op, data);
4999             if (visit_addr)
5000               {
5001                 constraint = TREE_STRING_POINTER
5002                     (TREE_VALUE (TREE_PURPOSE (link)));
5003                 oconstraints[i] = constraint;
5004                 parse_output_constraint (&constraint, i, 0, 0, &allows_mem,
5005                                          &allows_reg, &is_inout);
5006                 if (op && !allows_reg && allows_mem)
5007                   ret |= visit_addr (stmt, op, data);
5008               }
5009           }
5010       if (visit_load || visit_addr)
5011         for (i = 0; i < gimple_asm_ninputs (stmt); ++i)
5012           {
5013             tree link = gimple_asm_input_op (stmt, i);
5014             tree op = TREE_VALUE (link);
5015             if (visit_addr
5016                 && TREE_CODE (op) == ADDR_EXPR)
5017               ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
5018             else if (visit_load || visit_addr)
5019               {
5020                 op = get_base_loadstore (op);
5021                 if (op)
5022                   {
5023                     if (visit_load)
5024                       ret |= visit_load (stmt, op, data);
5025                     if (visit_addr)
5026                       {
5027                         constraint = TREE_STRING_POINTER
5028                             (TREE_VALUE (TREE_PURPOSE (link)));
5029                         parse_input_constraint (&constraint, 0, 0, noutputs,
5030                                                 0, oconstraints,
5031                                                 &allows_mem, &allows_reg);
5032                         if (!allows_reg && allows_mem)
5033                           ret |= visit_addr (stmt, op, data);
5034                       }
5035                   }
5036               }
5037           }
5038     }
5039   else if (gimple_code (stmt) == GIMPLE_RETURN)
5040     {
5041       tree op = gimple_return_retval (stmt);
5042       if (op)
5043         {
5044           if (visit_addr
5045               && TREE_CODE (op) == ADDR_EXPR)
5046             ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
5047           else if (visit_load)
5048             {
5049               op = get_base_loadstore (op);
5050               if (op)
5051                 ret |= visit_load (stmt, op, data);
5052             }
5053         }
5054     }
5055   else if (visit_addr
5056            && gimple_code (stmt) == GIMPLE_PHI)
5057     {
5058       for (i = 0; i < gimple_phi_num_args (stmt); ++i)
5059         {
5060           tree op = PHI_ARG_DEF (stmt, i);
5061           if (TREE_CODE (op) == ADDR_EXPR)
5062             ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
5063         }
5064     }
5065
5066   return ret;
5067 }
5068
5069 /* Like walk_stmt_load_store_addr_ops but with NULL visit_addr.  IPA-CP
5070    should make a faster clone for this case.  */
5071
5072 bool
5073 walk_stmt_load_store_ops (gimple stmt, void *data,
5074                           bool (*visit_load)(gimple, tree, void *),
5075                           bool (*visit_store)(gimple, tree, void *))
5076 {
5077   return walk_stmt_load_store_addr_ops (stmt, data,
5078                                         visit_load, visit_store, NULL);
5079 }
5080
5081 /* Helper for gimple_ior_addresses_taken_1.  */
5082
5083 static bool
5084 gimple_ior_addresses_taken_1 (gimple stmt ATTRIBUTE_UNUSED,
5085                               tree addr, void *data)
5086 {
5087   bitmap addresses_taken = (bitmap)data;
5088   addr = get_base_address (addr);
5089   if (addr
5090       && DECL_P (addr))
5091     {
5092       bitmap_set_bit (addresses_taken, DECL_UID (addr));
5093       return true;
5094     }
5095   return false;
5096 }
5097
5098 /* Set the bit for the uid of all decls that have their address taken
5099    in STMT in the ADDRESSES_TAKEN bitmap.  Returns true if there
5100    were any in this stmt.  */
5101
5102 bool
5103 gimple_ior_addresses_taken (bitmap addresses_taken, gimple stmt)
5104 {
5105   return walk_stmt_load_store_addr_ops (stmt, addresses_taken, NULL, NULL,
5106                                         gimple_ior_addresses_taken_1);
5107 }
5108
5109
5110 /* Return a printable name for symbol DECL.  */
5111
5112 const char *
5113 gimple_decl_printable_name (tree decl, int verbosity)
5114 {
5115   if (!DECL_NAME (decl))
5116     return NULL;
5117
5118   if (DECL_ASSEMBLER_NAME_SET_P (decl))
5119     {
5120       const char *str, *mangled_str;
5121       int dmgl_opts = DMGL_NO_OPTS;
5122
5123       if (verbosity >= 2)
5124         {
5125           dmgl_opts = DMGL_VERBOSE
5126                       | DMGL_ANSI
5127                       | DMGL_GNU_V3
5128                       | DMGL_RET_POSTFIX;
5129           if (TREE_CODE (decl) == FUNCTION_DECL)
5130             dmgl_opts |= DMGL_PARAMS;
5131         }
5132
5133       mangled_str = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
5134       str = cplus_demangle_v3 (mangled_str, dmgl_opts);
5135       return (str) ? str : mangled_str;
5136     }
5137
5138   return IDENTIFIER_POINTER (DECL_NAME (decl));
5139 }
5140
5141 /* Return true when STMT is builtins call to CODE.  */
5142
5143 bool
5144 gimple_call_builtin_p (gimple stmt, enum built_in_function code)
5145 {
5146   tree fndecl;
5147   return (is_gimple_call (stmt)
5148           && (fndecl = gimple_call_fndecl (stmt)) != NULL
5149           && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
5150           && DECL_FUNCTION_CODE (fndecl) == code);
5151 }
5152
5153 #include "gt-gimple.h"