X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firop.c;h=77f7de02cf04a4da83c787fd02faa294b59f575c;hb=9be70b7ef6120836707d76050372a89247cec2a6;hp=62af0ed0c9d8c7adbd8b715b85c2e6c955172833;hpb=328ae18da3e796f4f9fda2aba629cc34e2849ed7;p=libfirm diff --git a/ir/ir/irop.c b/ir/ir/irop.c index 62af0ed0c..77f7de02c 100644 --- a/ir/ir/irop.c +++ b/ir/ir/irop.c @@ -11,57 +11,67 @@ # include #endif +# include + # include "irop_t.h" # include "irnode_t.h" # include "misc.h" -ir_op *op_Block; - -ir_op *op_Start; -ir_op *op_End; -ir_op *op_Jmp; -ir_op *op_Cond; -ir_op *op_Return; -ir_op *op_Raise; - -ir_op *op_Sel; - -ir_op *op_Const; -ir_op *op_SymConst; - -ir_op *op_Call; -ir_op *op_Add; -ir_op *op_Sub; -ir_op *op_Minus; -ir_op *op_Mul; -ir_op *op_Quot; -ir_op *op_DivMod; -ir_op *op_Div; -ir_op *op_Mod; -ir_op *op_Abs; -ir_op *op_And; -ir_op *op_Or; -ir_op *op_Eor; -ir_op *op_Not; -ir_op *op_Cmp; -ir_op *op_Shl; -ir_op *op_Shr; -ir_op *op_Shrs; -ir_op *op_Rot; -ir_op *op_Conv; - -ir_op *op_Phi; - -ir_op *op_Load; -ir_op *op_Store; -ir_op *op_Alloc; -ir_op *op_Free; -ir_op *op_Sync; - -ir_op *op_Tuple; -ir_op *op_Proj; -ir_op *op_Id; -ir_op *op_Bad; +ir_op *op_Block; ir_op *get_op_Block () { return op_Block; } + +ir_op *op_Start; ir_op *get_op_Start () { return op_Start; } +ir_op *op_End; ir_op *get_op_End () { return op_End; } +ir_op *op_Jmp; ir_op *get_op_Jmp () { return op_Jmp; } +ir_op *op_Cond; ir_op *get_op_Cond () { return op_Cond; } +ir_op *op_Return; ir_op *get_op_Return () { return op_Return; } +ir_op *op_Raise; ir_op *get_op_Raise () { return op_Raise; } + +ir_op *op_Sel; ir_op *get_op_Sel () { return op_Sel; } +ir_op *op_InstOf; ir_op *get_op_InstOf () { return op_InstOf; } + +ir_op *op_Const; ir_op *get_op_Const () { return op_Const; } +ir_op *op_SymConst; ir_op *get_op_SymConst () { return op_SymConst; } + +ir_op *op_Call; ir_op *get_op_Call () { return op_Call; } +ir_op *op_Add; ir_op *get_op_Add () { return op_Add; } +ir_op *op_Sub; ir_op *get_op_Sub () { return op_Sub; } +ir_op *op_Minus; ir_op *get_op_Minus () { return op_Minus; } +ir_op *op_Mul; ir_op *get_op_Mul () { return op_Mul; } +ir_op *op_Quot; ir_op *get_op_Quot () { return op_Quot; } +ir_op *op_DivMod; ir_op *get_op_DivMod () { return op_DivMod; } +ir_op *op_Div; ir_op *get_op_Div () { return op_Div; } +ir_op *op_Mod; ir_op *get_op_Mod () { return op_Mod; } +ir_op *op_Abs; ir_op *get_op_Abs () { return op_Abs; } +ir_op *op_And; ir_op *get_op_And () { return op_And; } +ir_op *op_Or; ir_op *get_op_Or () { return op_Or; } +ir_op *op_Eor; ir_op *get_op_Eor () { return op_Eor; } +ir_op *op_Not; ir_op *get_op_Not () { return op_Not; } +ir_op *op_Cmp; ir_op *get_op_Cmp () { return op_Cmp; } +ir_op *op_Shl; ir_op *get_op_Shl () { return op_Shl; } +ir_op *op_Shr; ir_op *get_op_Shr () { return op_Shr; } +ir_op *op_Shrs; ir_op *get_op_Shrs () { return op_Shrs; } +ir_op *op_Rot; ir_op *get_op_Rot () { return op_Rot; } +ir_op *op_Conv; ir_op *get_op_Conv () { return op_Conv; } + +ir_op *op_Phi; ir_op *get_op_Phi () { return op_Phi; } + +ir_op *op_Load; ir_op *get_op_Load () { return op_Load; } +ir_op *op_Store; ir_op *get_op_Store () { return op_Store; } +ir_op *op_Alloc; ir_op *get_op_Alloc () { return op_Alloc; } +ir_op *op_Free; ir_op *get_op_Free () { return op_Free; } +ir_op *op_Sync; ir_op *get_op_Sync () { return op_Sync; } + +ir_op *op_Tuple; ir_op *get_op_Tuple () { return op_Tuple; } +ir_op *op_Proj; ir_op *get_op_Proj () { return op_Proj; } +ir_op *op_Id; ir_op *get_op_Id () { return op_Id; } +ir_op *op_Bad; ir_op *get_op_Bad () { return op_Bad; } + +ir_op *op_Unknown; ir_op *get_op_Unknown () { return op_Unknown; } +ir_op *op_Filter; ir_op *get_op_Filter () { return op_Filter; } +ir_op *op_Break; ir_op *get_op_Break () { return op_Break; } +ir_op *op_CallBegin; ir_op *get_op_CallBegin () { return op_CallBegin; } +ir_op *op_EndReg; ir_op *get_op_EndReg () { return op_EndReg; } +ir_op *op_EndExcept; ir_op *get_op_EndExcept () { return op_EndExcept; } ir_op * @@ -99,6 +109,7 @@ init_op(void) floats, 0, sizeof (symconst_attr)); op_Sel = new_ir_op (iro_Sel, "Sel", floats, 1, sizeof (sel_attr)); + op_InstOf= new_ir_op (iro_InstOf,"InstOf", floats, 1, sizeof (sel_attr)); op_Call = new_ir_op (iro_Call, "Call", pinned, 1, sizeof (call_attr)); op_Add = new_ir_op (iro_Add, "Add", floats, 0, 0); @@ -133,6 +144,13 @@ init_op(void) op_Tuple = new_ir_op (iro_Tuple, "Tuple", floats, 1, 0); op_Id = new_ir_op (iro_Id, "Id", floats, 0, 0); op_Bad = new_ir_op (iro_Bad, "Bad", floats, 0, 0); + + op_Unknown = new_ir_op (iro_Unknown, "Unknown", floats, 0, 0); + op_Filter = new_ir_op (iro_Filter, "Filter", pinned, 0, sizeof(filter_attr)); + op_Break = new_ir_op (iro_Break, "Break", pinned, 0, 0); + op_CallBegin = new_ir_op (iro_CallBegin, "CallBegin", pinned, 0, sizeof(callbegin_attr)); + op_EndReg = new_ir_op (iro_EndReg, "EndReg", pinned, 0, sizeof(end_attr)); + op_EndExcept = new_ir_op (iro_EndExcept, "EndExcept", pinned, 0, sizeof(end_attr)); } /* Returns the string for the opcode. */ @@ -172,5 +190,19 @@ int is_cfopcode(ir_op *op) { || (op == op_Return) || (op == op_Raise) || (op == op_Bad) - || (op == op_End)); + || (op == op_End) + || (op == op_Unknown) + || (op == op_Break) + || (op == op_CallBegin) + || (op == op_EndReg) + || (op == op_EndExcept)); +} + +/* Returns true if the operation manipulates interprocedural control flow: + CallBegin, EndReg, EndExcept */ +int is_ip_cfopcode(ir_op *op) { + return ((op == op_CallBegin) + || (op == op_EndReg) + || (op == op_EndExcept)); + }