OSDN Git Service

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