OSDN Git Service

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