Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Zwinkau
libfirm
Commits
671ced67
Commit
671ced67
authored
Mar 29, 2010
by
Matthias Braun
Browse files
automatically generate most getter/setter functions of firm nodes
[r27328]
parent
8c79e4af
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
include/libfirm/irnode.h
View file @
671ced67
...
...
@@ -491,7 +491,7 @@ int is_Const_all_one(const ir_node *node);
/** Returns the source language type of a Const node.
* Must be an atomic type. Mode of type must be mode of node.
*/
ir_type
*
get_Const_type
(
ir_node
*
node
);
ir_type
*
get_Const_type
(
const
ir_node
*
node
);
/** Sets the source language type of a Const node. */
void
set_Const_type
(
ir_node
*
node
,
ir_type
*
tp
);
...
...
@@ -532,7 +532,7 @@ void set_SymConst_symbol(ir_node *node,
/** Access the type of the value represented by the SymConst.
*
* Example: primitive type int for SymConst size. */
ir_type
*
get_SymConst_value_type
(
ir_node
*
node
);
ir_type
*
get_SymConst_value_type
(
const
ir_node
*
node
);
void
set_SymConst_value_type
(
ir_node
*
node
,
ir_type
*
tp
);
ir_node
*
get_Sel_mem
(
const
ir_node
*
node
);
...
...
@@ -575,7 +575,7 @@ ir_node *get_Call_param(const ir_node *node, int pos);
/** Sets the call parameter at position pos. */
void
set_Call_param
(
ir_node
*
node
,
int
pos
,
ir_node
*
param
);
/** Gets the type of a call. */
ir_type
*
get_Call_type
(
ir_node
*
node
);
ir_type
*
get_Call_type
(
const
ir_node
*
node
);
/** Sets the type of a call. */
void
set_Call_type
(
ir_node
*
node
,
ir_type
*
tp
);
/** Returns non-zero if this call can be a tail-call. */
...
...
@@ -637,7 +637,7 @@ ir_node *get_Builtin_param(const ir_node *node, int pos);
/** Sets the Builtin parameter at position pos. */
void
set_Builtin_param
(
ir_node
*
node
,
int
pos
,
ir_node
*
param
);
/** Gets the type of a builtin. */
ir_type
*
get_Builtin_type
(
ir_node
*
node
);
ir_type
*
get_Builtin_type
(
const
ir_node
*
node
);
/** Sets the type of a Builtin. */
void
set_Builtin_type
(
ir_node
*
node
,
ir_type
*
tp
);
/** Returns a human readable string for the ir_builtin_kind. */
...
...
@@ -854,7 +854,7 @@ void set_Conv_strict(ir_node *node, int flag);
*/
ir_node
*
get_Cast_op
(
const
ir_node
*
node
);
void
set_Cast_op
(
ir_node
*
node
,
ir_node
*
op
);
ir_type
*
get_Cast_type
(
ir_node
*
node
);
ir_type
*
get_Cast_type
(
const
ir_node
*
node
);
void
set_Cast_type
(
ir_node
*
node
,
ir_type
*
to_tp
);
/** Checks for upcast.
...
...
@@ -891,16 +891,16 @@ void set_Phi_pred(ir_node *node, int pos, ir_node *pred);
ir_node
*
get_Phi_next
(
const
ir_node
*
phi
);
void
set_Phi_next
(
ir_node
*
phi
,
ir_node
*
next
);
ir_node
*
get_Filter_pred
(
ir_node
*
node
);
ir_node
*
get_Filter_pred
(
const
ir_node
*
node
);
void
set_Filter_pred
(
ir_node
*
node
,
ir_node
*
pred
);
long
get_Filter_proj
(
ir_node
*
node
);
long
get_Filter_proj
(
const
ir_node
*
node
);
void
set_Filter_proj
(
ir_node
*
node
,
long
proj
);
/* set the interprocedural predecessors, ...d_arr uses current_ir_graph.
* @@@ Maybe better: arity is zero if no cg preds. */
void
set_Filter_cg_pred_arr
(
ir_node
*
node
,
int
arity
,
ir_node
**
in
);
void
set_Filter_cg_pred
(
ir_node
*
node
,
int
pos
,
ir_node
*
pred
);
int
get_Filter_n_cg_preds
(
ir_node
*
node
);
ir_node
*
get_Filter_cg_pred
(
ir_node
*
node
,
int
pos
);
int
get_Filter_n_cg_preds
(
const
ir_node
*
node
);
ir_node
*
get_Filter_cg_pred
(
const
ir_node
*
node
,
int
pos
);
/** Return true if parameter is a memory operation.
*
...
...
@@ -971,7 +971,7 @@ ir_node *get_Alloc_mem(const ir_node *node);
void
set_Alloc_mem
(
ir_node
*
node
,
ir_node
*
mem
);
ir_node
*
get_Alloc_count
(
const
ir_node
*
node
);
void
set_Alloc_count
(
ir_node
*
node
,
ir_node
*
count
);
ir_type
*
get_Alloc_type
(
ir_node
*
node
);
ir_type
*
get_Alloc_type
(
const
ir_node
*
node
);
void
set_Alloc_type
(
ir_node
*
node
,
ir_type
*
tp
);
ir_where_alloc
get_Alloc_where
(
const
ir_node
*
node
);
...
...
@@ -983,7 +983,7 @@ ir_node *get_Free_ptr(const ir_node *node);
void
set_Free_ptr
(
ir_node
*
node
,
ir_node
*
ptr
);
ir_node
*
get_Free_size
(
const
ir_node
*
node
);
void
set_Free_size
(
ir_node
*
node
,
ir_node
*
size
);
ir_type
*
get_Free_type
(
ir_node
*
node
);
ir_type
*
get_Free_type
(
const
ir_node
*
node
);
void
set_Free_type
(
ir_node
*
node
,
ir_type
*
tp
);
ir_where_alloc
get_Free_where
(
const
ir_node
*
node
);
...
...
@@ -998,7 +998,7 @@ void add_Sync_pred(ir_node *node, ir_node *pred);
/** Returns the source language type of a Proj node.
* Must be an atomic type. Mode of type must be mode of node.
*/
ir_type
*
get_Proj_type
(
ir_node
*
node
);
ir_type
*
get_Proj_type
(
const
ir_node
*
node
);
/** Return the predecessor of a Proj node. */
ir_node
*
get_Proj_pred
(
const
ir_node
*
node
);
...
...
@@ -1059,7 +1059,7 @@ ir_node *get_CopyB_dst(const ir_node *node);
void
set_CopyB_dst
(
ir_node
*
node
,
ir_node
*
dst
);
ir_node
*
get_CopyB_src
(
const
ir_node
*
node
);
void
set_CopyB_src
(
ir_node
*
node
,
ir_node
*
src
);
ir_type
*
get_CopyB_type
(
ir_node
*
node
);
ir_type
*
get_CopyB_type
(
const
ir_node
*
node
);
void
set_CopyB_type
(
ir_node
*
node
,
ir_type
*
data_type
);
/**
...
...
@@ -1075,7 +1075,7 @@ typedef enum {
#define pn_InstOf_M pn_InstOf_M_regular
/** InstOf access. */
ir_type
*
get_InstOf_type
(
ir_node
*
node
);
ir_type
*
get_InstOf_type
(
const
ir_node
*
node
);
void
set_InstOf_type
(
ir_node
*
node
,
ir_type
*
type
);
ir_node
*
get_InstOf_store
(
const
ir_node
*
node
);
void
set_InstOf_store
(
ir_node
*
node
,
ir_node
*
obj
);
...
...
@@ -1129,18 +1129,27 @@ void set_Pin_op(ir_node *pin, ir_node *node);
/** Return the assembler text of an ASM pseudo node. */
ident
*
get_ASM_text
(
const
ir_node
*
node
);
/** Set assembler text of ASM node */
void
set_ASM_text
(
ir_node
*
node
,
ident
*
text
);
/** Return the number of input constraints for an ASM node. */
int
get_ASM_n_input_constraints
(
const
ir_node
*
node
);
/** Return the input constraints for an ASM node. */
const
ir_asm_constraint
*
get_ASM_input_constraints
(
const
ir_node
*
node
);
ir_asm_constraint
*
get_ASM_input_constraints
(
const
ir_node
*
node
);
/** Set input constraints for ASM node. */
void
set_ASM_input_constraints
(
ir_node
*
node
,
ir_asm_constraint
*
constraints
);
/** Return the number of output constraints for an ASM node. */
int
get_ASM_n_output_constraints
(
const
ir_node
*
node
);
/** Return the output constraints for an ASM node. */
const
ir_asm_constraint
*
get_ASM_output_constraints
(
const
ir_node
*
node
);
ir_asm_constraint
*
get_ASM_output_constraints
(
const
ir_node
*
node
);
/** Set output constraints for ASM node. (note: has to be a firm array) */
void
set_ASM_output_constraints
(
ir_node
*
node
,
ir_asm_constraint
*
constraints
);
/** Return the number of clobbered registers for an ASM node. */
int
get_ASM_n_clobbers
(
const
ir_node
*
node
);
/** Return the list of clobbered registers for an ASM node. */
ident
**
get_ASM_clobbers
(
const
ir_node
*
node
);
/** Set list of clobbered register for ASM node (note: has to be a firm
* array) */
void
set_ASM_clobbers
(
ir_node
*
node
,
ident
**
clobbers
);
/*
*
...
...
include/libfirm/irop.h
View file @
671ced67
...
...
@@ -310,21 +310,21 @@ typedef void (*copy_attr_func)(ir_graph *irg, const ir_node *old_node, ir_node *
* The get_type operation.
* Return the type of the node self.
*/
typedef
ir_type
*
(
*
get_type_func
)(
ir_node
*
self
);
typedef
ir_type
*
(
*
get_type_func
)(
const
ir_node
*
self
);
/**
* The get_type_attr operation. Used to traverse all types that can be
* accessed from an ir_graph.
* Return the type attribute of the node self.
*/
typedef
ir_type
*
(
*
get_type_attr_func
)(
ir_node
*
self
);
typedef
ir_type
*
(
*
get_type_attr_func
)(
const
ir_node
*
self
);
/**
* The get_entity_attr operation. Used to traverse all entities that can be
* accessed from an ir_graph.
* Return the entity attribute of the node self.
*/
typedef
ir_entity
*
(
*
get_entity_attr_func
)(
ir_node
*
self
);
typedef
ir_entity
*
(
*
get_entity_attr_func
)(
const
ir_node
*
self
);
/**
* The verify_node operation.
...
...
ir/ir/ircons.c
View file @
671ced67
...
...
@@ -230,7 +230,7 @@ static ir_node *new_bd_Const_type(dbg_info *db, tarval *con, ir_type *tp)
ir_graph
*
irg
=
current_ir_graph
;
res
=
new_ir_node
(
db
,
irg
,
get_irg_start_block
(
irg
),
op_Const
,
get_tarval_mode
(
con
),
0
,
NULL
);
res
->
attr
.
con
.
t
v
=
con
;
res
->
attr
.
con
.
t
arval
=
con
;
set_Const_type
(
res
,
tp
);
/* Call method because of complex assertion. */
res
=
optimize_node
(
res
);
assert
(
get_Const_type
(
res
)
==
tp
);
...
...
@@ -343,21 +343,23 @@ static ir_node *new_bd_EndExcept(dbg_info *db, ir_node *block)
static
ir_node
*
new_bd_ASM
(
dbg_info
*
db
,
ir_node
*
block
,
int
arity
,
ir_node
*
in
[],
ir_asm_constraint
*
inputs
,
int
n_outs
,
ir_asm_constraint
*
outputs
,
int
n_clobber
,
ident
*
clobber
[],
ident
*
asm_
text
)
ident
*
clobber
[],
ident
*
text
)
{
ir_node
*
res
;
ir_graph
*
irg
=
current_ir_graph
;
res
=
new_ir_node
(
db
,
irg
,
block
,
op_ASM
,
mode_T
,
arity
,
in
);
res
->
attr
.
assem
.
pin_state
=
op_pin_state_pinned
;
res
->
attr
.
assem
.
inputs
=
NEW_ARR_D
(
ir_asm_constraint
,
irg
->
obst
,
arity
);
res
->
attr
.
assem
.
outputs
=
NEW_ARR_D
(
ir_asm_constraint
,
irg
->
obst
,
n_outs
);
res
->
attr
.
assem
.
clobber
=
NEW_ARR_D
(
ident
*
,
irg
->
obst
,
n_clobber
);
res
->
attr
.
assem
.
asm_text
=
asm_text
;
res
->
attr
.
assem
.
input_constraints
=
NEW_ARR_D
(
ir_asm_constraint
,
irg
->
obst
,
arity
);
res
->
attr
.
assem
.
output_constraints
=
NEW_ARR_D
(
ir_asm_constraint
,
irg
->
obst
,
n_outs
);
res
->
attr
.
assem
.
clobbers
=
NEW_ARR_D
(
ident
*
,
irg
->
obst
,
n_clobber
);
res
->
attr
.
assem
.
text
=
text
;
memcpy
(
res
->
attr
.
assem
.
inputs
,
inputs
,
sizeof
(
inputs
[
0
])
*
arity
);
memcpy
(
res
->
attr
.
assem
.
outputs
,
outputs
,
sizeof
(
outputs
[
0
])
*
n_outs
);
memcpy
(
res
->
attr
.
assem
.
clobber
,
clobber
,
sizeof
(
clobber
[
0
])
*
n_clobber
);
memcpy
(
res
->
attr
.
assem
.
input
_constraint
s
,
inputs
,
sizeof
(
inputs
[
0
])
*
arity
);
memcpy
(
res
->
attr
.
assem
.
output
_constraint
s
,
outputs
,
sizeof
(
outputs
[
0
])
*
n_outs
);
memcpy
(
res
->
attr
.
assem
.
clobber
s
,
clobber
,
sizeof
(
clobber
[
0
])
*
n_clobber
);
res
=
optimize_node
(
res
);
IRN_VRFY_IRG
(
res
,
irg
);
...
...
@@ -552,13 +554,13 @@ ir_node *new_rd_EndExcept(dbg_info *db, ir_graph *irg, ir_node *block)
ir_node
*
new_rd_ASM
(
dbg_info
*
db
,
ir_node
*
block
,
int
arity
,
ir_node
*
in
[],
ir_asm_constraint
*
inputs
,
int
n_outs
,
ir_asm_constraint
*
outputs
,
int
n_clobber
,
ident
*
clobber
[],
ident
*
asm_
text
)
int
n_clobber
,
ident
*
clobber
[],
ident
*
text
)
{
ir_node
*
res
;
ir_graph
*
rem
=
current_ir_graph
;
current_ir_graph
=
get_Block_irg
(
block
);
res
=
new_bd_ASM
(
db
,
block
,
arity
,
in
,
inputs
,
n_outs
,
outputs
,
n_clobber
,
clobber
,
asm_
text
);
res
=
new_bd_ASM
(
db
,
block
,
arity
,
in
,
inputs
,
n_outs
,
outputs
,
n_clobber
,
clobber
,
text
);
current_ir_graph
=
rem
;
return
res
;
...
...
@@ -625,9 +627,9 @@ ir_node *new_r_NoMem(ir_graph *irg)
ir_node
*
new_r_ASM
(
ir_node
*
block
,
int
arity
,
ir_node
*
in
[],
ir_asm_constraint
*
inputs
,
int
n_outs
,
ir_asm_constraint
*
outputs
,
int
n_clobber
,
ident
*
clobber
[],
ident
*
asm_
text
)
int
n_clobber
,
ident
*
clobber
[],
ident
*
text
)
{
return
new_rd_ASM
(
NULL
,
block
,
arity
,
in
,
inputs
,
n_outs
,
outputs
,
n_clobber
,
clobber
,
asm_
text
);
return
new_rd_ASM
(
NULL
,
block
,
arity
,
in
,
inputs
,
n_outs
,
outputs
,
n_clobber
,
clobber
,
text
);
}
/** ********************/
...
...
@@ -1261,9 +1263,9 @@ ir_node *new_d_EndExcept(dbg_info *db)
ir_node
*
new_d_ASM
(
dbg_info
*
db
,
int
arity
,
ir_node
*
in
[],
ir_asm_constraint
*
inputs
,
int
n_outs
,
ir_asm_constraint
*
outputs
,
int
n_clobber
,
ident
*
clobber
[],
ident
*
asm_
text
)
ident
*
clobber
[],
ident
*
text
)
{
return
new_bd_ASM
(
db
,
current_ir_graph
->
current_block
,
arity
,
in
,
inputs
,
n_outs
,
outputs
,
n_clobber
,
clobber
,
asm_
text
);
return
new_bd_ASM
(
db
,
current_ir_graph
->
current_block
,
arity
,
in
,
inputs
,
n_outs
,
outputs
,
n_clobber
,
clobber
,
text
);
}
/* new_d_ASM */
/* ********************************************************************* */
...
...
@@ -1541,9 +1543,9 @@ ir_node *new_NoMem(void)
}
ir_node
*
new_ASM
(
int
arity
,
ir_node
*
in
[],
ir_asm_constraint
*
inputs
,
int
n_outs
,
ir_asm_constraint
*
outputs
,
int
n_clobber
,
ident
*
clobber
[],
ident
*
asm_
text
)
int
n_clobber
,
ident
*
clobber
[],
ident
*
text
)
{
return
new_d_ASM
(
NULL
,
arity
,
in
,
inputs
,
n_outs
,
outputs
,
n_clobber
,
clobber
,
asm_
text
);
return
new_d_ASM
(
NULL
,
arity
,
in
,
inputs
,
n_outs
,
outputs
,
n_clobber
,
clobber
,
text
);
}
/* create a new anchor node */
...
...
ir/ir/irdump.c
View file @
671ced67
...
...
@@ -88,6 +88,8 @@ static int dump_backedge_information_flag = 1;
static
int
dump_const_local
=
1
;
/** An option to dump the node index number. */
static
int
dump_node_idx_labels
=
0
;
/** An option to dump the node number */
static
int
dump_node_nr
=
0
;
/** An option to dump all graph anchors */
static
int
dump_anchors
=
0
;
/** An option to dump the macro block edges. */
...
...
@@ -1243,11 +1245,12 @@ int dump_node_label(FILE *F, ir_node *n)
fprintf
(
F
,
" "
);
bad
|=
dump_node_typeinfo
(
F
,
n
);
bad
|=
dump_node_nodeattr
(
F
,
n
);
if
(
dump_node_idx_labels
)
{
fprintf
(
F
,
"%ld:%u"
,
get_irn_node_nr
(
n
),
get_irn_idx
(
n
));
}
else
{
if
(
dump_node_nr
)
{
fprintf
(
F
,
"%ld"
,
get_irn_node_nr
(
n
));
}
if
(
dump_node_idx_labels
)
{
fprintf
(
F
,
":%u"
,
get_irn_idx
(
n
));
}
return
bad
;
}
...
...
ir/ir/irnode.c
View file @
671ced67
This diff is collapsed.
Click to expand it.
ir/ir/irnode_t.h
View file @
671ced67
...
...
@@ -555,7 +555,7 @@ static inline ir_graph *_get_Block_irg(const ir_node *block)
static
inline
tarval
*
_get_Const_tarval
(
const
ir_node
*
node
)
{
assert
(
_get_irn_op
(
node
)
==
op_Const
);
return
node
->
attr
.
con
.
t
v
;
return
node
->
attr
.
con
.
t
arval
;
}
static
inline
int
_is_Const_null
(
const
ir_node
*
node
)
{
...
...
ir/ir/irop.c
View file @
671ced67
...
...
@@ -121,9 +121,9 @@ static void ASM_copy_attr(ir_graph *irg, const ir_node *old_node,
ir_node
*
new_node
)
{
default_copy_attr
(
irg
,
old_node
,
new_node
);
new_node
->
attr
.
assem
.
inputs
=
DUP_ARR_D
(
ir_asm_constraint
,
irg
->
obst
,
old_node
->
attr
.
assem
.
inputs
);
new_node
->
attr
.
assem
.
outputs
=
DUP_ARR_D
(
ir_asm_constraint
,
irg
->
obst
,
old_node
->
attr
.
assem
.
outputs
);
new_node
->
attr
.
assem
.
clobber
=
DUP_ARR_D
(
ir_asm_constraint
,
irg
->
obst
,
old_node
->
attr
.
assem
.
clobber
);
new_node
->
attr
.
assem
.
input
_constraint
s
=
DUP_ARR_D
(
ir_asm_constraint
,
irg
->
obst
,
old_node
->
attr
.
assem
.
input
_constraint
s
);
new_node
->
attr
.
assem
.
output
_constraint
s
=
DUP_ARR_D
(
ir_asm_constraint
,
irg
->
obst
,
old_node
->
attr
.
assem
.
output
_constraint
s
);
new_node
->
attr
.
assem
.
clobber
s
=
DUP_ARR_D
(
ir_asm_constraint
,
irg
->
obst
,
old_node
->
attr
.
assem
.
clobber
s
);
}
/**
...
...
ir/ir/iropt.c
View file @
671ced67
...
...
@@ -6966,7 +6966,7 @@ static unsigned hash_Const(const ir_node *node)
unsigned
h
;
/* special value for const, as they only differ in their tarval. */
h
=
HASH_PTR
(
node
->
attr
.
con
.
t
v
);
h
=
HASH_PTR
(
node
->
attr
.
con
.
t
arval
);
return
h
;
}
/* hash_Const */
...
...
ir/ir/irtypes.h
View file @
671ced67
...
...
@@ -170,8 +170,8 @@ typedef struct {
/** Const attributes. */
typedef
struct
{
tarval
*
t
v
;
/**< the target value */
ir_type
*
tp
;
/**< the source type, for analyses. default: type_unknown. */
tarval
*
t
arval
;
/**< the target value */
ir_type
*
tp
;
/**< the source type, for analyses. default: type_unknown. */
}
const_attr
;
/** SymConst attributes. */
...
...
@@ -305,11 +305,11 @@ typedef struct {
/** Inline Assembler support attribute. */
typedef
struct
{
/* BEWARE: pin state MUST be the first attribute */
op_pin_state
pin_state
;
/**< the pin state for operations that might generate a exception */
ident
*
asm_
text
;
/**< The inline assembler text. */
ir_asm_constraint
*
inputs
;
/**< Input constraints. */
ir_asm_constraint
*
outputs
;
/**< Output constraints. */
ident
**
clobber
;
/**< List of clobbered registers. */
op_pin_state
pin_state
;
/**< the pin state for operations that might generate a exception */
ident
*
text
;
/**< The inline assembler text. */
ir_asm_constraint
*
input
_constraint
s
;
/**< Input constraints. */
ir_asm_constraint
*
output
_constraint
s
;
/**< Output constraints. */
ident
**
clobber
s
;
/**< List of clobbered registers. */
}
asm_attr
;
/** Some IR-nodes just have one attribute, these are stored here,
...
...
ir/ir/irvrfy.c
View file @
671ced67
...
...
@@ -727,6 +727,8 @@ static int verify_node_Proj_Proj(ir_node *pred, ir_node *p)
(
proj
>=
0
&&
mode_is_datab
(
mode
)),
"wrong Proj from Proj from Call"
,
0
);
mt
=
get_Call_type
(
pred
);
ASSERT_AND_RET
(
mt
==
get_unknown_type
()
||
is_Method_type
(
mt
),
"wrong call type on call"
,
0
);
ASSERT_AND_RET
(
(
proj
<
get_method_n_ress
(
mt
)),
"More Projs for results than results in type."
,
0
);
...
...
scripts/gen_ir.py
View file @
671ced67
...
...
@@ -134,12 +134,10 @@ def format_opindex(node):
return
"-1"
def
filter_isnot
(
list
,
flag
):
result
=
[]
for
node
in
list
:
if
hasattr
(
node
,
flag
):
continue
result
.
append
(
node
)
return
result
return
filter
(
lambda
x
:
not
hasattr
(
x
,
flag
),
list
)
def
filter_hasnot
(
list
,
flag
):
return
filter
(
lambda
x
:
flag
not
in
x
,
list
)
def
format_arguments
(
string
,
voidwhenempty
=
False
):
args
=
re
.
split
(
'\s*
\n
\s*'
,
string
)
...
...
@@ -170,6 +168,7 @@ env.filters['flags'] = format_flags
env
.
filters
[
'attr_size'
]
=
format_attr_size
env
.
filters
[
'opindex'
]
=
format_opindex
env
.
filters
[
'isnot'
]
=
filter_isnot
env
.
filters
[
'hasnot'
]
=
filter_hasnot
env
.
filters
[
'arguments'
]
=
format_arguments
env
.
filters
[
'parameters'
]
=
format_parameters
...
...
@@ -370,13 +369,13 @@ ir_node *new_{{node.constrname}}(
irnode_h_template
=
env
.
from_string
(
'''
/* Warning: automatically generated code */
{% for node in nodes|isnot('custom_is') %}
{%
-
for node in nodes|isnot('custom_is') %}
static inline int _is_{{node.name}}(const ir_node *node)
{
assert(node != NULL);
return _get_irn_op(node) == op_{{node.name}};
}
{% endfor %}
{%
-
endfor
-
%}
{% for node in nodes %}
#define is_{{node.name}}(node) _is_{{node.name}}(node)
...
...
@@ -392,6 +391,38 @@ int (is_{{node.name}})(const ir_node *node)
return _is_{{node.name}}(node);
}
{% endfor %}
{%- for node in nodes %}
{%- for attr in node.attrs|hasnot("noprop") %}
{{attr.type}} (get_{{node.name}}_{{attr.name}})(const ir_node *node)
{
assert(is_{{node.name}}(node));
return node->attr.{{node.attrs_name}}.{{attr.name}};
}
void (set_{{node.name}}_{{attr.name}})(ir_node *node, {{attr.type}} {{attr.name}})
{
assert(is_{{node.name}}(node));
node->attr.{{node.attrs_name}}.{{attr.name}} = {{attr.name}};
}
{% endfor -%}
{% endfor -%}
{%- for node in nodes %}
{%- for in in node.ins %}
ir_node *(get_{{node.name}}_{{in}})(const ir_node *node)
{
assert(is_{{node.name}}(node));
return get_irn_n(node, {{node.ins.index(in)}});
}
void (set_{{node.name}}_{{in}})(ir_node *node, ir_node *{{in}})
{
assert(is_{{node.name}}(node));
set_irn_n(node, {{node.ins.index(in)}}, {{in}});
}
{% endfor %}
{% endfor %}
'''
)
irop_template
=
env
.
from_string
(
'''
...
...
scripts/ir_spec.py
View file @
671ced67
...
...
@@ -61,9 +61,10 @@ class ASM(Op):
mode
=
"mode_T"
arity
=
"variable"
flags
=
[
"keep"
,
"uses_memory"
]
attr_struct
=
"asm_attr"
pinned
=
"memory"
pinned_init
=
"op_pin_state_pinned"
attr_struct
=
"asm_attr"
attrs_name
=
"assem"
attrs
=
[
dict
(
name
=
"input_constraints"
,
...
...
@@ -72,6 +73,7 @@ class ASM(Op):
dict
(
name
=
"n_output_constraints"
,
type
=
"int"
,
noprop
=
True
,
),
dict
(
name
=
"output_constraints"
,
...
...
@@ -80,6 +82,7 @@ class ASM(Op):
dict
(
name
=
"n_clobbers"
,
type
=
"int"
,
noprop
=
True
,
),
dict
(
name
=
"clobbers"
,
...
...
@@ -175,6 +178,7 @@ class Bound(Op):
pinned
=
"exception"
pinned_init
=
"op_pin_state_pinned"
attr_struct
=
"bound_attr"
attrs_name
=
"bound"
d_post
=
'''
firm_alloc_frag_arr(res, op_Bound, &res->attr.bound.exc.frag_arr);
'''
...
...
@@ -298,6 +302,7 @@ class Confirm(Op):
),
]
attr_struct
=
"confirm_attr"
attrs_name
=
"confirm"
class
Const
(
Op
):
mode
=
""
...
...
@@ -327,6 +332,7 @@ class Conv(Unop):
)
]
attr_struct
=
"conv_attr"
attrs_name
=
"conv"
class
CopyB
(
Op
):
ins
=
[
"mem"
,
"dst"
,
"src"
]
...
...
@@ -339,6 +345,7 @@ class CopyB(Op):
)
]
attr_struct
=
"copyb_attr"
attrs_name
=
"copyb"
pinned
=
"memory"
pinned_init
=
"op_pin_state_pinned"
d_post
=
'''
...
...
@@ -435,6 +442,7 @@ class Filter(Op):
]
pinned
=
"yes"
attr_struct
=
"filter_attr"
attrs_name
=
"filter"
java_noconstr
=
True
class
Free
(
Op
):
...
...
@@ -587,7 +595,8 @@ class Proj(Op):
dict
(
type
=
"long"
,
name
=
"proj"
,
initname
=
""
initname
=
""
,
noprop
=
False
,
)
]
attr_struct
=
"long"
...
...
@@ -685,7 +694,8 @@ class SymConst(Op):
attrs
=
[
dict
(
type
=
"ir_entity*"
,
name
=
"entity"
name
=
"entity"
,
noprop
=
True
)
]
attr_struct
=
"symconst_attr"
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment