2 ** Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
3 ** All rights reserved.
5 ** Authors: Christian Schaefer
7 ** irop.h operators of firm nodes
9 ** This module specifies the opcodes possible for ir nodes. Their
10 ** definition is close to the operations specified in UKA Tech-Report
25 iro_Start, iro_End, iro_Jmp, iro_Cond, iro_Return, iro_Raise,
26 iro_Const, iro_SymConst,
28 iro_Call, iro_Add, iro_Sub, iro_Minus, iro_Mul, iro_Quot, iro_DivMod,
29 iro_Div, iro_Mod, iro_Abs, iro_And, iro_Or, iro_Eor, iro_Not,
30 iro_Cmp, iro_Shl, iro_Shr, iro_Shrs, iro_Rot, iro_Conv,
32 iro_Load, iro_Store, iro_Alloc, iro_Free, iro_Sync,
33 iro_Proj, iro_Tuple, iro_Id, iro_Bad,
34 iro_Unknown, iro_Filter, iro_Break, iro_CallBegin, iro_EndReg, iro_EndExcept
37 typedef struct ir_op ir_op;
39 extern ir_op *op_Block;
41 extern ir_op *op_Start;
44 extern ir_op *op_Cond;
45 extern ir_op *op_Return;
46 extern ir_op *op_Raise;
48 extern ir_op *op_InstOf;
50 extern ir_op *op_Const;
51 extern ir_op *op_SymConst;
53 extern ir_op *op_Call;
56 extern ir_op *op_Minus;
58 extern ir_op *op_Quot;
59 extern ir_op *op_DivMod;
70 extern ir_op *op_Shrs;
72 extern ir_op *op_Conv;
76 extern ir_op *op_Load;
77 extern ir_op *op_Store;
78 extern ir_op *op_Alloc;
79 extern ir_op *op_Free;
81 extern ir_op *op_Sync;
83 extern ir_op *op_Tuple;
84 extern ir_op *op_Proj;
88 extern ir_op *op_Unknown;
89 extern ir_op *op_Filter;
90 extern ir_op *op_Break;
91 extern ir_op *op_CallBegin;
92 extern ir_op *op_EndReg;
93 extern ir_op *op_EndExcept;
96 /* Returns the string for the opcode. */
97 const char *get_op_name (ir_op *op);
99 /* Returns the enum for the opcode */
100 opcode get_op_code (ir_op *op);
102 /* Returns the ident for the opcode name */
103 ident *get_op_ident (ir_op *op);
106 floats = 0, /* Nodes of this opcode can be placed in any basic block. */
107 pinned /* Nodes must remain in this basic block. */
110 op_pinned get_op_pinned (ir_op *op);
111 /* Sets pinned in the opcode. Setting it to floating has no effect
112 for Block, Phi and control flow nodes. */
113 void set_op_pinned(ir_op *op, op_pinned pinned);
115 /* Returns the attribute size of nodes of this opcode.
116 Use not encouraged, internal feature. */
117 int get_op_attr_size (ir_op *op);
119 /* Returns true if op is one of Start, End, Jmp, Cond, Return, Raise or Bad. */
120 int is_cfopcode(ir_op *op);
123 # endif /* _IROP_H_ */