5 File name: ir/ana/pto_util.c
6 Purpose: Utilitites for PTO
9 Created: Sat Nov 13 19:35:27 CET 2004
11 Copyright: (c) 1999-2004 Universität Karlsruhe
12 Licence: This file is protected by the GPL - GNU GENERAL PUBLIC LICENSE.
20 pto_util: Utilitites for PTO
23 # include "pto_util.h"
25 # include "irnode_t.h"
29 # include "pto_debug.h"
36 # endif /* not defined TRUE */
38 /* Local Data Types: */
39 /* Environment for find_irg_args */
40 typedef struct find_irg_args_env {
43 } find_irg_args_env_t;
46 /* Local Variables: */
48 /* Local Prototypes: */
50 /* ===================================================
52 =================================================== */
53 /* Helper for find_irg_args */
54 static void find_irg_arg (ir_node *node, void *env)
56 find_irg_args_env_t *arg_env = (find_irg_args_env_t*) env;
58 if (iro_Proj == get_irn_opcode (node)) {
59 if (arg_env->arg == get_Proj_pred (node)) {
60 long n = get_Proj_proj (node);
62 assert (! arg_env->args [n]);
64 arg_env->args [n] = node;
69 /* ===================================================
70 Exported Implementation:
71 =================================================== */
72 /* Find the arguments of a graph. For a method that has n args, the
73 result array has 'n+1' entries, the last of which is written NULL.
74 Note that not all entries in [0..n-1] will be populated all the time.
76 ir_node **find_irg_args (ir_graph *graph)
78 type *tp = get_entity_type (get_irg_entity (graph));
79 const int n_args = get_method_n_params (tp);
80 ir_node **args = xcalloc (n_args + 1, sizeof (ir_node*));
81 ir_node *arg = get_irg_args (graph);
82 find_irg_args_env_t *arg_env;
84 arg_env = (find_irg_args_env_t*) xmalloc (sizeof (find_irg_args_env_t));
90 ir_graph *save = get_current_ir_graph ();
92 set_current_ir_graph (graph);
93 irg_walk (get_irg_end (graph), find_irg_arg, NULL, arg_env);
94 set_current_ir_graph (save);
97 memset (arg_env, 0x00, sizeof (find_irg_args_env_t));
100 args [n_args] = NULL;
105 /* Get the entity of a ptr */
106 entity *get_ptr_ent (ir_node *ptr)
109 const opcode ptr_op = get_irn_opcode (ptr);
112 ent = get_ptr_ent (get_Cast_op (ptr));
115 ent = get_Sel_entity (ptr);
118 case (iro_SymConst): {
119 ent = get_SymConst_entity (ptr);
123 fprintf (stderr, "%s: no ent for ptr=%s[%ld]\n",
125 get_op_name (get_irn_op (ptr)),
126 get_irn_node_nr (ptr));
134 /* Check whether the load of the given ptr is a dummy */
135 int is_dummy_load_ptr (ir_node *ptr)
137 const opcode ptr_op = get_irn_opcode (ptr);
141 return (is_dummy_load_ptr (get_Cast_op (ptr)));
144 case (iro_SymConst): {
157 Revision 1.16 2005/01/14 14:13:32 liekweg
160 Revision 1.15 2005/01/10 17:26:34 liekweg
161 fixup printfs, don't put environments on the stack
163 Revision 1.14 2004/12/23 15:47:09 beck
164 removed uneeded allocations
167 Revision 1.13 2004/12/22 14:43:14 beck
168 made allocations C-like
170 Revision 1.12 2004/12/21 15:53:12 beck
171 removed GNUC constructs
173 Revision 1.11 2004/12/20 17:34:35 liekweg
174 fix recursion handling
176 Revision 1.10 2004/12/06 12:55:06 liekweg
179 Revision 1.9 2004/12/02 16:17:51 beck
180 fixed config.h include
182 Revision 1.8 2004/11/26 15:59:14 liekweg
183 recognize dummy loads
185 Revision 1.7 2004/11/24 14:53:56 liekweg
188 Revision 1.6 2004/11/18 16:37:07 liekweg