OSDN Git Service

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