/** The irop flags */
typedef enum {
irop_flag_none = 0, /**< Nothing. */
- irop_flag_labeled = 1U << 0, /**< If set, output edge labels on in-edges in vcg graph. */
- irop_flag_commutative = 1U << 1, /**< This operation is commutative. */
- irop_flag_cfopcode = 1U << 2, /**< This operation is a control flow operation. */
- irop_flag_fragile = 1U << 3, /**< Set if the operation can change the
+ irop_flag_commutative = 1U << 0, /**< This operation is commutative. */
+ irop_flag_cfopcode = 1U << 1, /**< This operation is a control flow operation. */
+ irop_flag_fragile = 1U << 2, /**< Set if the operation can change the
control flow because of an exception.
*/
- irop_flag_forking = 1U << 4, /**< Forking control flow at this operation. */
- irop_flag_highlevel = 1U << 5, /**< This operation is a pure high-level one and can be
+ irop_flag_forking = 1U << 3, /**< Forking control flow at this operation. */
+ irop_flag_highlevel = 1U << 4, /**< This operation is a pure high-level one and can be
skipped in low-level optimizations. */
- irop_flag_constlike = 1U << 6, /**< This operation has no arguments and is some
+ irop_flag_constlike = 1U << 5, /**< This operation has no arguments and is some
kind of a constant. */
- irop_flag_always_opt = 1U << 7, /**< This operation must always be optimized .*/
- irop_flag_keep = 1U << 8, /**< This operation can be kept in End's keep-alive list. */
- irop_flag_start_block = 1U << 9, /**< This operation is always placed in the Start block. */
- irop_flag_uses_memory = 1U << 10, /**< This operation has a memory input and may change the memory state. */
- irop_flag_dump_noblock = 1U << 11, /**< node should be dumped outside any blocks */
- irop_flag_dump_noinput = 1U << 12, /**< node is a placeholder for "no input" */
- irop_flag_cse_neutral = 1U << 13, /**< This operation is CSE neutral to its users. */
+ irop_flag_always_opt = 1U << 6, /**< This operation must always be optimized .*/
+ irop_flag_keep = 1U << 7, /**< This operation can be kept in End's keep-alive list. */
+ irop_flag_start_block = 1U << 8, /**< This operation is always placed in the Start block. */
+ irop_flag_uses_memory = 1U << 9, /**< This operation has a memory input and may change the memory state. */
+ irop_flag_dump_noblock = 1U << 10, /**< node should be dumped outside any blocks */
+ irop_flag_dump_noinput = 1U << 11, /**< node is a placeholder for "no input" */
+ irop_flag_cse_neutral = 1U << 12, /**< This operation is CSE neutral to its users. */
/** This operation jumps to an unknown destination. The CFG is a
* conservative aproximation in this case. You cannot change the destination
* of an unknown_jump */
- irop_flag_unknown_jump = 1U << 14,
+ irop_flag_unknown_jump = 1U << 13,
} irop_flags;
/** Returns the ident for the opcode name */
},
B => {
- op_flags => [ "labeled", "cfopcode", "forking" ],
+ op_flags => [ "cfopcode", "forking" ],
state => "pinned",
mode => "mode_T",
reg_req => { in => [ "flags" ], out => [ "none", "none" ] },
},
SwitchJmp => {
- op_flags => [ "labeled", "cfopcode", "forking" ],
+ op_flags => [ "cfopcode", "forking" ],
state => "pinned",
mode => "mode_T",
attr => "const ir_switch_table *table",
},
Ldr => {
- op_flags => [ "uses_memory", "labeled" ],
+ op_flags => [ "uses_memory" ],
state => "exc_pinned",
ins => [ "ptr", "mem" ],
outs => [ "res", "M" ],
},
Str => {
- op_flags => [ "uses_memory", "labeled" ],
+ op_flags => [ "uses_memory" ],
state => "exc_pinned",
ins => [ "ptr", "val", "mem" ],
outs => [ "M" ],
},
StoreStackM4Inc => {
- op_flags => [ "uses_memory", "labeled" ],
+ op_flags => [ "uses_memory" ],
irn_flags => [ "rematerializable" ],
state => "exc_pinned",
reg_req => { in => [ "sp", "gp", "gp", "gp", "gp", "none" ], out => [ "sp:I|S", "none" ] },
},
LoadStackM3Epilogue => {
- op_flags => [ "uses_memory", "labeled" ],
+ op_flags => [ "uses_memory" ],
irn_flags => [ "rematerializable" ],
state => "exc_pinned",
reg_req => { in => [ "sp", "none" ], out => [ "r11:I", "sp:I|S", "pc:I", "none" ] },
},
Ldf => {
- op_flags => [ "uses_memory", "labeled" ],
+ op_flags => [ "uses_memory" ],
state => "exc_pinned",
ins => [ "ptr", "mem" ],
outs => [ "res", "M" ],
},
Stf => {
- op_flags => [ "uses_memory", "labeled" ],
+ op_flags => [ "uses_memory" ],
state => "exc_pinned",
ins => [ "ptr", "val", "mem" ],
outs => [ "M" ],
},
IDiv => {
- op_flags => [ "fragile", "uses_memory", "labeled" ],
+ op_flags => [ "fragile", "uses_memory" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none", "gp", "eax", "edx" ],
out => [ "eax", "flags", "none", "edx", "none", "none" ] },
},
Div => {
- op_flags => [ "fragile", "uses_memory", "labeled" ],
+ op_flags => [ "fragile", "uses_memory" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none", "gp", "eax", "edx" ],
out => [ "eax", "flags", "none", "edx", "none", "none" ] },
Jcc => {
state => "pinned",
- op_flags => [ "labeled", "cfopcode", "forking" ],
+ op_flags => [ "cfopcode", "forking" ],
reg_req => { in => [ "eflags" ], out => [ "none", "none" ] },
ins => [ "eflags" ],
outs => [ "false", "true" ],
SwitchJmp => {
state => "pinned",
- op_flags => [ "labeled", "cfopcode", "forking" ],
+ op_flags => [ "cfopcode", "forking" ],
reg_req => { in => [ "gp", "gp" ] },
ins => [ "base", "index" ],
out_arity => "variable",
},
FldCW => {
- op_flags => [ "uses_memory", "labeled" ],
+ op_flags => [ "uses_memory" ],
state => "pinned",
reg_req => { in => [ "gp", "gp", "none" ], out => [ "fpcw:I" ] },
ins => [ "base", "index", "mem" ],
},
FnstCW => {
- op_flags => [ "uses_memory", "labeled" ],
+ op_flags => [ "uses_memory" ],
state => "pinned",
reg_req => { in => [ "gp", "gp", "none", "fp_cw" ], out => [ "none" ] },
ins => [ "base", "index", "mem", "fpcw" ],
},
FnstCWNOP => {
- op_flags => [ "uses_memory", "labeled" ],
+ op_flags => [ "uses_memory" ],
state => "pinned",
reg_req => { in => [ "fp_cw" ], out => [ "none" ] },
ins => [ "fpcw" ],
# lateny of 0 for load is correct
Load => {
- op_flags => [ "uses_memory", "fragile", "labeled" ],
+ op_flags => [ "uses_memory", "fragile" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none" ],
out => [ "gp", "none", "none", "none", "none" ] },
},
Store => {
- op_flags => [ "uses_memory", "fragile", "labeled" ],
+ op_flags => [ "uses_memory", "fragile" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none", "gp" ],
out => [ "none", "none", "none" ] },
},
Store8Bit => {
- op_flags => [ "uses_memory", "fragile", "labeled" ],
+ op_flags => [ "uses_memory", "fragile" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none", "eax ebx ecx edx" ],
out => ["none", "none", "none" ] },
# Intel style prefetching
#
Prefetch0 => {
- op_flags => [ "uses_memory", "labeled" ],
+ op_flags => [ "uses_memory" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none" ], out => [ "none" ] },
ins => [ "base", "index", "mem" ],
},
Prefetch1 => {
- op_flags => [ "uses_memory", "labeled" ],
+ op_flags => [ "uses_memory" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none" ], out => [ "none" ] },
ins => [ "base", "index", "mem" ],
},
Prefetch2 => {
- op_flags => [ "uses_memory", "labeled" ],
+ op_flags => [ "uses_memory" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none" ], out => [ "none" ] },
ins => [ "base", "index", "mem" ],
},
PrefetchNTA => {
- op_flags => [ "uses_memory", "labeled" ],
+ op_flags => [ "uses_memory" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none" ], out => [ "none" ] },
ins => [ "base", "index", "mem" ],
# 3DNow! prefetch instructions
#
Prefetch => {
- op_flags => [ "uses_memory", "labeled" ],
+ op_flags => [ "uses_memory" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none" ], out => [ "none" ] },
ins => [ "base", "index", "mem" ],
},
PrefetchW => {
- op_flags => [ "uses_memory", "labeled" ],
+ op_flags => [ "uses_memory" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none" ], out => [ "none" ] },
ins => [ "base", "index", "mem" ],
},
xLoad => {
- op_flags => [ "uses_memory", "fragile", "labeled" ],
+ op_flags => [ "uses_memory", "fragile" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none" ],
out => [ "xmm", "none", "none", "none", "none" ] },
},
xStore => {
- op_flags => [ "uses_memory", "fragile", "labeled" ],
+ op_flags => [ "uses_memory", "fragile" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none", "xmm" ],
out => [ "none", "none", "none" ] },
},
xStoreSimple => {
- op_flags => [ "uses_memory", "fragile", "labeled" ],
+ op_flags => [ "uses_memory", "fragile" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none", "xmm" ],
out => [ "none", "none", "none" ] },
},
CvtSI2SS => {
- op_flags => [ "labeled" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none", "gp" ], out => [ "xmm" ] },
ins => [ "base", "index", "mem", "val" ],
},
CvtSI2SD => {
- op_flags => [ "labeled" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none", "gp" ], out => [ "xmm" ] },
ins => [ "base", "index", "mem", "val" ],
vfld => {
irn_flags => [ "rematerializable" ],
- op_flags => [ "uses_memory", "fragile", "labeled" ],
+ op_flags => [ "uses_memory", "fragile" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none" ],
out => [ "vfp", "none", "none", "none", "none" ] },
vfst => {
irn_flags => [ "rematerializable" ],
- op_flags => [ "uses_memory", "fragile", "labeled" ],
+ op_flags => [ "uses_memory", "fragile" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none", "vfp" ],
out => [ "none", "none", "none" ] },
fld => {
irn_flags => [ "rematerializable" ],
- op_flags => [ "labeled" ],
state => "exc_pinned",
emit => '. fld%XM %AM',
attr_type => "ia32_x87_attr_t",
fst => {
irn_flags => [ "rematerializable" ],
- op_flags => [ "labeled" ],
state => "exc_pinned",
emit => '. fst%XM %AM',
mode => "mode_M",
fstp => {
irn_flags => [ "rematerializable" ],
- op_flags => [ "labeled" ],
state => "exc_pinned",
emit => '. fstp%XM %AM',
mode => "mode_M",
# Spilling and reloading of SSE registers, hardcoded, not generated #
xxLoad => {
- op_flags => [ "uses_memory", "fragile", "labeled" ],
+ op_flags => [ "uses_memory", "fragile" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none" ],
out => [ "xmm", "none", "none", "none" ] },
},
xxStore => {
- op_flags => [ "uses_memory", "fragile", "labeled" ],
+ op_flags => [ "uses_memory", "fragile" ],
state => "exc_pinned",
reg_req => { in => [ "gp", "gp", "none", "xmm" ],
out => [ "none", "none", "none" ] },