irnode.h 17.8 KB
Newer Older
 Christian Schäfer committed May 16, 2000 1 2 3 4 5 6 7 8 9 10 11 ``````/* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe ** All rights reserved. ** ** Authors: Martin Trapp, Christian Schaefer ** ** declarations of an ir node */ # ifndef _IRNODE_H_ # define _IRNODE_H_ `````` Christian Schäfer committed May 30, 2000 12 ``````# include "irgraph.h" `````` Christian Schäfer committed May 16, 2000 13 14 15 16 17 18 19 ``````# include "entity.h" # include "common.h" # include "irop.h" # include "irmode.h" # include "tv.h" # include "type.h" `````` Christian Schäfer committed May 30, 2000 20 21 22 23 24 25 26 ``````/* The typedefiniton of ir_node is also in irgraph.h to resolve recursion between irnode.h and irgraph.h */ #ifndef _IR_NODE_TYPEDEF_ #define _IR_NODE_TYPEDEF_ typedef struct ir_node ir_node; #endif `````` Christian Schäfer committed May 16, 2000 27 28 29 30 ``````/* irnode constructor */ /* Create a new irnode in irg, with an op, mode, arity and */ /* some incoming irnodes. */ /* If arity is negative, a node with a dynamic array is created. */ `````` Christian Schäfer committed May 30, 2000 31 32 33 34 35 36 37 38 39 `````` inline ir_node * new_ir_node (ir_graph *irg, ir_node *block, ir_op *op, ir_mode *mode, int arity, ir_node **in); `````` Götz Lindenmaier committed Aug 25, 2000 40 41 42 ``````/** Manipulate the fields of ir_node. With these access routines you can work on the graph without considering the different types of nodes, it's just a big graph. **/ `````` Christian Schäfer committed May 16, 2000 43 44 45 46 47 48 49 50 `````` /* returns the number of predecessors without the block predecessor: */ int get_irn_arity (ir_node *node); /* returns the array with the ins: */ inline ir_node **get_irn_in (ir_node *node); /* to iterate through the predecessors without touching the array. No order of predecessors guaranteed. To iterate over the operands iterate from 0 to i < get_irn_arity(), `````` Götz Lindenmaier committed Aug 25, 2000 51 `````` to iterate including the Block predecessor iterate from i = -1 to `````` Christian Schäfer committed May 16, 2000 52 `````` i < get_irn_arity. */ `````` Götz Lindenmaier committed Jul 10, 2000 53 ``````/* Access predecessor n */ `````` Christian Schäfer committed May 16, 2000 54 55 ``````inline ir_node *get_irn_n (ir_node *node, int n); inline void set_irn_n (ir_node *node, int n, ir_node *in); `````` Götz Lindenmaier committed Jul 10, 2000 56 ``````/* Get the mode struct. */ `````` Christian Schäfer committed May 16, 2000 57 ``````inline ir_mode *get_irn_mode (ir_node *node); `````` Götz Lindenmaier committed Jul 10, 2000 58 ``````/* Get the mode-enum modecode */ `````` Christian Schäfer committed May 16, 2000 59 ``````inline modecode get_irn_modecode (ir_node *node); `````` Götz Lindenmaier committed Jul 10, 2000 60 ``````/* Get the ident for a string representation of the mode */ `````` Götz Lindenmaier committed Mar 01, 2001 61 ``````inline ident *get_irn_modeident (ir_node *node); `````` Götz Lindenmaier committed Jul 10, 2000 62 ``````/* Access the opcode struct of the node */ `````` Christian Schäfer committed May 16, 2000 63 ``````inline ir_op *get_irn_op (ir_node *node); `````` Götz Lindenmaier committed Jul 10, 2000 64 65 66 67 ``````inline void set_irn_op (ir_node *node, ir_op *op); /* Get the opcode-enum of the node */ inline opcode get_irn_opcode (ir_node *node); /* Get the ident for a string representation of the opcode */ `````` Götz Lindenmaier committed Sep 14, 2000 68 69 ``````inline const char *get_irn_opname (ir_node *node); inline ident *get_irn_opident (ir_node *node); `````` Christian Schäfer committed Jul 06, 2000 70 71 ``````inline void set_irn_visited (ir_node *node, unsigned long visited); inline unsigned long get_irn_visited (ir_node *node); `````` Christian Schäfer committed May 16, 2000 72 73 ``````inline void set_irn_link (ir_node *node, ir_node *link); inline ir_node *get_irn_link (ir_node *node); `````` Götz Lindenmaier committed Jul 10, 2000 74 75 76 77 ``````#ifdef DEBUG_libfirm /* Outputs a unique number for this node */ inline long get_irn_node_nr(ir_node *node); #endif `````` Christian Schäfer committed May 16, 2000 78 `````` `````` Götz Lindenmaier committed Aug 25, 2000 79 ``````/** Manipulate fields of individual nodes. **/ `````` Christian Schäfer committed May 16, 2000 80 81 `````` /* this works for all except Block */ `````` Christian Schäfer committed Jul 06, 2000 82 83 ``````inline ir_node *get_nodes_Block (ir_node *node); inline void set_nodes_Block (ir_node *node, ir_node *block); `````` Götz Lindenmaier committed Aug 25, 2000 84 85 `````` /* Projection numbers for result of Start node: use for Proj nodes! */ `````` Götz Lindenmaier committed Dec 20, 2000 86 ``````typedef enum { `````` Götz Lindenmaier committed Aug 25, 2000 87 88 89 90 91 92 93 94 95 `````` pns_initial_exec, /* Projection on an executable, the initial control flow. */ pns_global_store, /* Projection on the global store */ pns_frame_base, /* Projection on the frame base */ pns_globals, /* Projection on the pointer to the data segment containing _all_ global entities. */ pns_args /* Projection on all arguments */ } pns_number; `````` Christian Schäfer committed Jul 06, 2000 96 97 ``````inline ir_node **get_Block_cfgpred_arr (ir_node *node); int get_Block_n_cfgpreds (ir_node *node); `````` Christian Schäfer committed May 16, 2000 98 ``````/* inline void set_Block_n_cfgpreds (ir_node *node, int n_preds); */ `````` Christian Schäfer committed Jul 06, 2000 99 100 101 102 ``````inline ir_node *get_Block_cfgpred (ir_node *node, int pos); inline void set_Block_cfgpred (ir_node *node, int pos, ir_node *pred); inline bool get_Block_matured (ir_node *node); inline void set_Block_matured (ir_node *node, bool matured); `````` Christian Schäfer committed Jul 06, 2000 103 104 ``````inline unsigned long get_Block_block_visited (ir_node *node); inline void set_Block_block_visited (ir_node *node, unsigned long visit); `````` Christian Schäfer committed Jul 06, 2000 105 106 ``````inline ir_node *get_Block_graph_arr (ir_node *node, int pos); inline void set_Block_graph_arr (ir_node *node, int pos, ir_node *value); `````` Christian Schäfer committed May 16, 2000 107 `````` `````` Christian Schäfer committed Jul 06, 2000 108 109 ``````inline ir_node *get_Cond_selector (ir_node *node); inline void set_Cond_selector (ir_node *node, ir_node *selector); `````` Christian Schäfer committed May 16, 2000 110 `````` `````` Christian Schäfer committed Jul 06, 2000 111 112 113 114 ``````inline ir_node *get_Return_mem (ir_node *node); inline void set_Return_mem (ir_node *node, ir_node *mem); inline ir_node **get_Return_res_arr (ir_node *node); inline int get_Return_n_res (ir_node *node); `````` Christian Schäfer committed May 16, 2000 115 ``````/*inline void set_Return_n_res (ir_node *node, int results); */ `````` Christian Schäfer committed Jul 06, 2000 116 117 ``````inline ir_node *get_Return_res (ir_node *node, int pos); inline void set_Return_res (ir_node *node, int pos, ir_node *res); `````` Christian Schäfer committed May 16, 2000 118 119 120 `````` inline ir_node *get_Raise_mem (ir_node *node); inline void set_Raise_mem (ir_node *node, ir_node *mem); `````` Christian Schäfer committed Jul 06, 2000 121 122 ``````inline ir_node *get_Raise_exo_ptr (ir_node *node); /* PoinTeR to EXception Object */ inline void set_Raise_exo_ptr (ir_node *node, ir_node *exoptr); `````` Christian Schäfer committed May 16, 2000 123 124 125 126 `````` inline tarval *get_Const_tarval (ir_node *node); inline void set_Const_tarval (ir_node *node, tarval *con); `````` Götz Lindenmaier committed Aug 25, 2000 127 128 129 130 131 132 ``````/* This enum names the three different kinds of symbolic Constants represented by SymConst. The content of the attribute type_or_id depends on this tag. Use the proper access routine after testing this flag. */ typedef enum { type_tag, /* The SymConst is a type tag for the given type. `````` Götz Lindenmaier committed Jan 17, 2001 133 `````` Type_or_id_p is type *. */ `````` Götz Lindenmaier committed Aug 25, 2000 134 `````` size, /* The SymConst is the size of the given type. `````` Götz Lindenmaier committed Jan 17, 2001 135 `````` Type_or_id_p is type *. */ `````` Götz Lindenmaier committed Aug 25, 2000 136 `````` linkage_ptr_info /* The SymConst is a symbolic pointer to be filled in `````` Götz Lindenmaier committed Jan 17, 2001 137 `````` by the linker. Type_or_id_p is ident *. */ `````` Götz Lindenmaier committed Aug 25, 2000 138 139 ``````} symconst_kind; typedef union type_or_id * type_or_id_p; `````` Christian Schäfer committed May 16, 2000 140 141 ``````inline symconst_kind get_SymConst_kind (ir_node *node); inline void set_SymConst_kind (ir_node *node, symconst_kind num); `````` Götz Lindenmaier committed Jan 17, 2001 142 ``````/* Only to access SymConst of kind type_tag or size. Else assertion: */ `````` Christian Schäfer committed May 16, 2000 143 144 ``````inline type *get_SymConst_type (ir_node *node); inline void set_SymConst_type (ir_node *node, type *type); `````` Götz Lindenmaier committed Jan 17, 2001 145 ``````/* Only to access SymConst of kind linkage_ptr_info. Else assertion: */ `````` Christian Schäfer committed May 16, 2000 146 147 ``````inline ident *get_SymConst_ptrinfo (ir_node *node); inline void set_SymConst_ptrinfo (ir_node *node, ident *ptrinfo); `````` Götz Lindenmaier committed Jan 17, 2001 148 ``````/* Sets both: type and ptrinfo. Needed to treat the node independent of `````` Götz Lindenmaier committed Jan 24, 2001 149 `````` its semantics. Does a memcpy for the memory tori points to. */ `````` Götz Lindenmaier committed Jan 17, 2001 150 151 ``````inline type_or_id_p get_SymConst_type_or_id (ir_node *node); inline void set_SymConst_type_or_id (ir_node *node, type_or_id_p tori); `````` Christian Schäfer committed May 16, 2000 152 153 154 155 `````` inline ir_node *get_Sel_mem (ir_node *node); inline void set_Sel_mem (ir_node *node, ir_node *mem); inline ir_node *get_Sel_ptr (ir_node *node); /* ptr to the object to select from */ `````` Götz Lindenmaier committed Jul 19, 2000 156 ``````inline void set_Sel_ptr (ir_node *node, ir_node *ptr); `````` Christian Schäfer committed Jul 06, 2000 157 ``````inline ir_node **get_Sel_index_arr (ir_node *node); `````` Götz Lindenmaier committed Jul 19, 2000 158 ``````inline int get_Sel_n_index (ir_node *node); `````` Christian Schäfer committed May 16, 2000 159 160 161 162 163 ``````/*inline void set_Sel_n_index (ir_node *node, int n_index); */ inline ir_node *get_Sel_index (ir_node *node, int pos); inline void set_Sel_index (ir_node *node, int pos, ir_node *index); inline entity *get_Sel_entity (ir_node *node); /* entity to select */ inline void set_Sel_entity (ir_node *node, entity *ent); `````` Götz Lindenmaier committed Aug 25, 2000 164 165 166 167 168 169 ``````typedef enum { static_linkage, /* entity is used internal and not visible out of this file/class. */ external_linkage, /* */ no_linkage } linkage_type; `````` Götz Lindenmaier committed Jul 05, 2000 170 171 ``````inline linkage_type get_Sel_linkage_type (ir_node *node); inline void set_Sel_linkage_type (ir_node *node, linkage_type lt); `````` Christian Schäfer committed May 16, 2000 172 173 174 175 176 `````` inline ir_node *get_Call_mem (ir_node *node); inline void set_Call_mem (ir_node *node, ir_node *mem); inline ir_node *get_Call_ptr (ir_node *node); inline void set_Call_ptr (ir_node *node, ir_node *ptr); `````` Götz Lindenmaier committed Jul 10, 2000 177 ``````inline ir_node **get_Call_param_arr (ir_node *node); `````` Götz Lindenmaier committed Sep 14, 2000 178 ``````inline int get_Call_n_params (ir_node *node); `````` Christian Schäfer committed May 16, 2000 179 180 ``````inline int get_Call_arity (ir_node *node); /* inline void set_Call_arity (ir_node *node, ir_node *arity); */ `````` Götz Lindenmaier committed Jul 19, 2000 181 182 ``````inline ir_node *get_Call_param (ir_node *node, int pos); inline void set_Call_param (ir_node *node, int pos, ir_node *param); `````` Christian Schäfer committed May 16, 2000 183 ``````inline type_method *get_Call_type (ir_node *node); `````` Götz Lindenmaier committed Jul 19, 2000 184 ``````inline void set_Call_type (ir_node *node, type_method *type); `````` Christian Schäfer committed May 16, 2000 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 `````` /* For unary and binary arithmetic operations the access to the operands can be factored out. Left is the first, right the second arithmetic value as listed in tech report 1999-44. unops are: Minus, Abs, Not, Conv binops are: Add, Sub, Mul, Quot, DivMod, Div, Mod, And, Or, Eor, Shl, Shr, Shrs, Rot, Cmp */ inline int is_unop (ir_node *node); inline ir_node *get_unop_op (ir_node *node); inline void set_unop_op (ir_node *node, ir_node *op); inline int is_binop (ir_node *node); inline ir_node *get_binop_left (ir_node *node); inline void set_binop_left (ir_node *node, ir_node *left); inline ir_node *get_binop_right (ir_node *node); inline void set_binop_right (ir_node *node, ir_node *right); inline ir_node *get_Add_left (ir_node *node); inline void set_Add_left (ir_node *node, ir_node *left); inline ir_node *get_Add_right (ir_node *node); inline void set_Add_right (ir_node *node, ir_node *right); inline ir_node *get_Sub_left (ir_node *node); inline void set_Sub_left (ir_node *node, ir_node *left); inline ir_node *get_Sub_right (ir_node *node); inline void set_Sub_right (ir_node *node, ir_node *right); inline ir_node *get_Minus_op (ir_node *node); inline void set_Minus_op (ir_node *node, ir_node *op); inline ir_node *get_Mul_left (ir_node *node); inline void set_Mul_left (ir_node *node, ir_node *left); inline ir_node *get_Mul_right (ir_node *node); inline void set_Mul_right (ir_node *node, ir_node *right); inline ir_node *get_Quot_left (ir_node *node); inline void set_Quot_left (ir_node *node, ir_node *left); inline ir_node *get_Quot_right (ir_node *node); inline void set_Quot_right (ir_node *node, ir_node *right); inline ir_node *get_Quot_mem (ir_node *node); inline void set_Quot_mem (ir_node *node, ir_node *mem); inline ir_node *get_DivMod_left (ir_node *node); inline void set_DivMod_left (ir_node *node, ir_node *left); inline ir_node *get_DivMod_right (ir_node *node); inline void set_DivMod_right (ir_node *node, ir_node *right); inline ir_node *get_DivMod_mem (ir_node *node); inline void set_DivMod_mem (ir_node *node, ir_node *mem); inline ir_node *get_Div_left (ir_node *node); inline void set_Div_left (ir_node *node, ir_node *left); inline ir_node *get_Div_right (ir_node *node); inline void set_Div_right (ir_node *node, ir_node *right); inline ir_node *get_Div_mem (ir_node *node); inline void set_Div_mem (ir_node *node, ir_node *mem); inline ir_node *get_Mod_left (ir_node *node); inline void set_Mod_left (ir_node *node, ir_node *left); inline ir_node *get_Mod_right (ir_node *node); inline void set_Mod_right (ir_node *node, ir_node *right); inline ir_node *get_Mod_mem (ir_node *node); inline void set_Mod_mem (ir_node *node, ir_node *mem); inline ir_node *get_Abs_op (ir_node *node); inline void set_Abs_op (ir_node *node, ir_node *op); inline ir_node *get_And_left (ir_node *node); inline void set_And_left (ir_node *node, ir_node *left); inline ir_node *get_And_right (ir_node *node); inline void set_And_right (ir_node *node, ir_node *right); inline ir_node *get_Or_left (ir_node *node); inline void set_Or_left (ir_node *node, ir_node *left); inline ir_node *get_Or_right (ir_node *node); inline void set_Or_right (ir_node *node, ir_node *right); inline ir_node *get_Eor_left (ir_node *node); inline void set_Eor_left (ir_node *node, ir_node *left); inline ir_node *get_Eor_right (ir_node *node); inline void set_Eor_right (ir_node *node, ir_node *right); inline ir_node *get_Not_op (ir_node *node); inline void set_Not_op (ir_node *node, ir_node *op); `````` Götz Lindenmaier committed Aug 25, 2000 268 ``````/* Projection numbers of compare: use for Proj nodes! */ `````` Götz Lindenmaier committed Dec 20, 2000 269 ``````typedef enum { `````` Götz Lindenmaier committed Aug 25, 2000 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 `````` False, /* false */ Eq, /* equal */ Lt, /* less */ Le, /* less or equal */ Gt, /* greater */ Ge, /* greater or equal */ Lg, /* less or greater */ Leg, /* less, equal or greater = ordered */ Uo, /* unordered */ Ue, /* unordered or equal */ Ul, /* unordered or less */ Ule, /* unordered, less or equal */ Ug, /* unordered or greater */ Uge, /* unordered, greater or equal */ Ne, /* unordered, less or greater = not equal */ True, /* true */ not_mask = Leg /* bits to flip to negate comparison */ } pnc_number; inline char *get_pnc_string(int pnc); inline int get_negated_pnc(int pnc); `````` Christian Schäfer committed May 16, 2000 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 ``````inline ir_node *get_Cmp_left (ir_node *node); inline void set_Cmp_left (ir_node *node, ir_node *left); inline ir_node *get_Cmp_right (ir_node *node); inline void set_Cmp_right (ir_node *node, ir_node *right); inline ir_node *get_Shl_left (ir_node *node); inline void set_Shl_left (ir_node *node, ir_node *left); inline ir_node *get_Shl_right (ir_node *node); inline void set_Shl_right (ir_node *node, ir_node *right); inline ir_node *get_Shr_left (ir_node *node); inline void set_Shr_left (ir_node *node, ir_node *left); inline ir_node *get_Shr_right (ir_node *node); inline void set_Shr_right (ir_node *node, ir_node *right); inline ir_node *get_Shrs_left (ir_node *node); inline void set_Shrs_left (ir_node *node, ir_node *left); inline ir_node *get_Shrs_right (ir_node *node); inline void set_Shrs_right (ir_node *node, ir_node *right); inline ir_node *get_Rot_left (ir_node *node); inline void set_Rot_left (ir_node *node, ir_node *left); inline ir_node *get_Rot_right (ir_node *node); inline void set_Rot_right (ir_node *node, ir_node *right); inline ir_node *get_Conv_op (ir_node *node); inline void set_Conv_op (ir_node *node, ir_node *op); `````` Christian Schäfer committed Jul 06, 2000 318 319 ``````inline ir_node **get_Phi_preds_arr (ir_node *node); inline int get_Phi_n_preds (ir_node *node); `````` Christian Schäfer committed May 16, 2000 320 ``````/* inline void set_Phi_n_preds (ir_node *node, int n_preds); */ `````` Christian Schäfer committed Jul 06, 2000 321 322 ``````inline ir_node *get_Phi_pred (ir_node *node, int pos); inline void set_Phi_pred (ir_node *node, int pos, ir_node *pred); `````` Christian Schäfer committed May 16, 2000 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 `````` inline ir_node *get_Load_mem (ir_node *node); inline void set_Load_mem (ir_node *node, ir_node *mem); inline ir_node *get_Load_ptr (ir_node *node); inline void set_Load_ptr (ir_node *node, ir_node *ptr); inline ir_node *get_Store_mem (ir_node *node); inline void set_Store_mem (ir_node *node, ir_node *mem); inline ir_node *get_Store_ptr (ir_node *node); inline void set_Store_ptr (ir_node *node, ir_node *ptr); inline ir_node *get_Store_value (ir_node *node); inline void set_Store_value (ir_node *node, ir_node *value); inline ir_node *get_Alloc_mem (ir_node *node); inline void set_Alloc_mem (ir_node *node, ir_node *mem); inline ir_node *get_Alloc_size (ir_node *node); inline void set_Alloc_size (ir_node *node, ir_node *size); inline type *get_Alloc_type (ir_node *node); inline void set_Alloc_type (ir_node *node, type *type); `````` Götz Lindenmaier committed Aug 25, 2000 342 343 344 345 ``````typedef enum { stack_alloc, /* Alloc allocates the object on the stack. */ heap_alloc /* Alloc allocates the object on the heap. */ } where_alloc; `````` Christian Schäfer committed May 16, 2000 346 347 348 349 350 351 352 353 ``````inline where_alloc get_Alloc_where (ir_node *node); inline void set_Alloc_where (ir_node *node, where_alloc where); inline ir_node *get_Free_mem (ir_node *node); inline void set_Free_mem (ir_node *node, ir_node *mem); inline ir_node *get_Free_ptr (ir_node *node); inline void set_Free_ptr (ir_node *node, ir_node *ptr); inline ir_node *get_Free_size (ir_node *node); `````` Christian Schäfer committed Jun 19, 2000 354 ``````inline void set_Free_size (ir_node *node, ir_node *size); `````` Christian Schäfer committed May 16, 2000 355 356 357 ``````inline type *get_Free_type (ir_node *node); inline void set_Free_type (ir_node *node, type *type); `````` Christian Schäfer committed Jul 06, 2000 358 359 ``````inline ir_node **get_Sync_preds_arr (ir_node *node); inline int get_Sync_n_preds (ir_node *node); `````` Christian Schäfer committed May 16, 2000 360 ``````/* inline void set_Sync_n_preds (ir_node *node, int n_preds); */ `````` Christian Schäfer committed Jul 06, 2000 361 362 ``````inline ir_node *get_Sync_pred (ir_node *node, int pos); inline void set_Sync_pred (ir_node *node, int pos, ir_node *pred); `````` Christian Schäfer committed May 16, 2000 363 `````` `````` Christian Schäfer committed Jul 06, 2000 364 365 366 367 ``````inline ir_node *get_Proj_pred (ir_node *node); inline void set_Proj_pred (ir_node *node, ir_node *pred); inline long get_Proj_proj (ir_node *node); inline void set_Proj_proj (ir_node *node, long proj); `````` Christian Schäfer committed May 16, 2000 368 `````` `````` Christian Schäfer committed Jul 06, 2000 369 370 ``````inline ir_node **get_Tuple_preds_arr (ir_node *node); inline int get_Tuple_n_preds (ir_node *node); `````` Christian Schäfer committed May 16, 2000 371 ``````/* inline void set_Tuple_n_preds (ir_node *node, int n_preds); */ `````` Christian Schäfer committed Jul 06, 2000 372 373 ``````inline ir_node *get_Tuple_pred (ir_node *node, int pos); inline void set_Tuple_pred (ir_node *node, int pos, ir_node *pred); `````` Christian Schäfer committed May 16, 2000 374 `````` `````` Christian Schäfer committed Jul 06, 2000 375 376 ``````inline ir_node *get_Id_pred (ir_node *node); inline void set_Id_pred (ir_node *node, ir_node *pred); `````` Christian Schäfer committed May 16, 2000 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 `````` /******************************************************************/ /* Auxiliary routines */ /******************************************************************/ /* returns operand of node if node is a Proj. */ inline ir_node *skip_Proj (ir_node *node); /* returns operand of node if node is a Id */ inline ir_node *skip_nop (ir_node *node); /* returns true if node is a Bad node. */ inline int is_Bad (ir_node *node); /* returns true if the node is not a Block */ inline int is_no_Block (ir_node *node); /* Returns true if the operation manipulates control flow: Start, End, Jmp, Cond, Return, Raise */ int is_cfop(ir_node *node); /* Returns true if the operation can change the control flow because `````` Götz Lindenmaier committed Jul 04, 2000 396 `````` of an exception. */ `````` Christian Schäfer committed May 16, 2000 397 398 ``````int is_fragile_op(ir_node *node); `````` Götz Lindenmaier committed Jul 10, 2000 399 400 401 402 403 404 405 406 `````` /* Makros for debugging the libfirm */ #ifdef DEBUG_libfirm #include "ident.h" #define DDMSG printf("%s(l.%i)\n", __FUNCTION__, __LINE__) #define DDMSG1(X) printf("%s(l.%i) %s\n", __FUNCTION__, __LINE__, \ `````` Götz Lindenmaier committed Sep 14, 2000 407 `````` id_to_str(get_irn_opident(X))) `````` Götz Lindenmaier committed Jul 10, 2000 408 ``````#define DDMSG2(X) printf("%s(l.%i) %s: %ld\n", __FUNCTION__, __LINE__, \ `````` Götz Lindenmaier committed Sep 14, 2000 409 `````` id_to_str(get_irn_opident(X)), get_irn_node_nr(X)) `````` Götz Lindenmaier committed Sep 07, 2000 410 411 ``````#define DDMSG3(X) printf("%s(l.%i) %s: %p\n", __FUNCTION__, __LINE__, \ print_firm_kind(X), (X)) `````` Götz Lindenmaier committed Jul 10, 2000 412 413 414 `````` #endif `````` Christian Schäfer committed May 16, 2000 415 ``# endif /* _IRNODE_H_ */``