Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Zwinkau
libfirm
Commits
d580fc08
Commit
d580fc08
authored
May 08, 2007
by
Matthias Braun
Browse files
add correct compare functions for be nodes
[r13724]
parent
b61de8a0
Changes
1
Hide whitespace changes
Inline
Side-by-side
ir/be/benode.c
View file @
d580fc08
...
...
@@ -155,7 +155,7 @@ static const ir_op_ops be_node_op_ops;
*
* @return zero if both attributes are identically
*/
static
int
cmp
_node_attr
(
be_node_attr_t
*
a
,
be_node_attr_t
*
b
)
{
static
int
_node_
cmp_
attr
(
be_node_attr_t
*
a
,
be_node_attr_t
*
b
)
{
int
i
,
len
;
if
(
ARR_LEN
(
a
->
reg_data
)
!=
ARR_LEN
(
b
->
reg_data
))
...
...
@@ -172,6 +172,13 @@ static int cmp_node_attr(be_node_attr_t *a, be_node_attr_t *b) {
return
0
;
}
static
int
node_cmp_attr
(
ir_node
*
a
,
ir_node
*
b
)
{
be_node_attr_t
*
a_attr
=
get_irn_attr
(
a
);
be_node_attr_t
*
b_attr
=
get_irn_attr
(
b
);
return
_node_cmp_attr
(
a_attr
,
b_attr
);
}
/**
* Compare the attributes of two FrameAddr nodes.
*
...
...
@@ -181,9 +188,41 @@ static int FrameAddr_cmp_attr(ir_node *a, ir_node *b) {
be_frame_attr_t
*
a_attr
=
get_irn_attr
(
a
);
be_frame_attr_t
*
b_attr
=
get_irn_attr
(
b
);
if
(
a_attr
->
ent
==
b_attr
->
ent
&&
a_attr
->
offset
==
b_attr
->
offset
)
return
cmp_node_attr
(
&
a_attr
->
node_attr
,
&
b_attr
->
node_attr
);
return
1
;
if
(
a_attr
->
ent
!=
b_attr
->
ent
||
a_attr
->
offset
!=
b_attr
->
offset
)
return
1
;
return
_node_cmp_attr
((
be_node_attr_t
*
)
a_attr
,
(
be_node_attr_t
*
)
b_attr
);
}
static
int
Return_cmp_attr
(
ir_node
*
a
,
ir_node
*
b
)
{
be_return_attr_t
*
a_attr
=
get_irn_attr
(
a
);
be_return_attr_t
*
b_attr
=
get_irn_attr
(
b
);
if
(
a_attr
->
num_ret_vals
!=
b_attr
->
num_ret_vals
)
return
1
;
return
_node_cmp_attr
((
be_node_attr_t
*
)
a_attr
,
(
be_node_attr_t
*
)
b_attr
);
}
static
int
Stack_cmp_attr
(
ir_node
*
a
,
ir_node
*
b
)
{
be_stack_attr_t
*
a_attr
=
get_irn_attr
(
a
);
be_stack_attr_t
*
b_attr
=
get_irn_attr
(
b
);
if
(
a_attr
->
offset
!=
b_attr
->
offset
)
return
1
;
return
_node_cmp_attr
((
be_node_attr_t
*
)
a_attr
,
(
be_node_attr_t
*
)
b_attr
);
}
static
int
Call_cmp_attr
(
ir_node
*
a
,
ir_node
*
b
)
{
be_call_attr_t
*
a_attr
=
get_irn_attr
(
a
);
be_call_attr_t
*
b_attr
=
get_irn_attr
(
b
);
if
(
a_attr
->
ent
!=
b_attr
->
ent
||
a_attr
->
call_tp
!=
b_attr
->
call_tp
)
return
1
;
return
_node_cmp_attr
((
be_node_attr_t
*
)
a_attr
,
(
be_node_attr_t
*
)
b_attr
);
}
static
INLINE
be_req_t
*
get_be_req
(
const
ir_node
*
node
,
int
pos
)
...
...
@@ -245,26 +284,43 @@ void be_node_init(void) {
op_be_Barrier
=
new_ir_op
(
beo_base
+
beo_Barrier
,
"be_Barrier"
,
op_pin_state_pinned
,
N
,
oparity_dynamic
,
0
,
sizeof
(
be_node_attr_t
),
&
be_node_op_ops
);
set_op_tag
(
op_be_Spill
,
&
be_node_tag
);
op_be_Spill
->
ops
.
node_cmp_attr
=
FrameAddr_cmp_attr
;
set_op_tag
(
op_be_Reload
,
&
be_node_tag
);
op_be_Reload
->
ops
.
node_cmp_attr
=
FrameAddr_cmp_attr
;
set_op_tag
(
op_be_Perm
,
&
be_node_tag
);
op_be_Perm
->
ops
.
node_cmp_attr
=
node_cmp_attr
;
set_op_tag
(
op_be_MemPerm
,
&
be_node_tag
);
op_be_MemPerm
->
ops
.
node_cmp_attr
=
node_cmp_attr
;
set_op_tag
(
op_be_Copy
,
&
be_node_tag
);
op_be_Copy
->
ops
.
node_cmp_attr
=
node_cmp_attr
;
set_op_tag
(
op_be_Keep
,
&
be_node_tag
);
op_be_Keep
->
ops
.
node_cmp_attr
=
node_cmp_attr
;
set_op_tag
(
op_be_CopyKeep
,
&
be_node_tag
);
op_be_CopyKeep
->
ops
.
node_cmp_attr
=
node_cmp_attr
;
set_op_tag
(
op_be_Call
,
&
be_node_tag
);
op_be_Call
->
ops
.
node_cmp_attr
=
Call_cmp_attr
;
set_op_tag
(
op_be_Return
,
&
be_node_tag
);
op_be_Return
->
ops
.
node_cmp_attr
=
Return_cmp_attr
;
set_op_tag
(
op_be_AddSP
,
&
be_node_tag
);
op_be_AddSP
->
ops
.
node_cmp_attr
=
node_cmp_attr
;
set_op_tag
(
op_be_SubSP
,
&
be_node_tag
);
op_be_SubSP
->
ops
.
node_cmp_attr
=
node_cmp_attr
;
set_op_tag
(
op_be_SetSP
,
&
be_node_tag
);
op_be_SetSP
->
ops
.
node_cmp_attr
=
Stack_cmp_attr
;
set_op_tag
(
op_be_IncSP
,
&
be_node_tag
);
op_be_IncSP
->
ops
.
node_cmp_attr
=
Stack_cmp_attr
;
set_op_tag
(
op_be_RegParams
,
&
be_node_tag
);
op_be_RegParams
->
ops
.
node_cmp_attr
=
node_cmp_attr
;
set_op_tag
(
op_be_StackParam
,
&
be_node_tag
);
op_be_StackParam
->
ops
.
node_cmp_attr
=
FrameAddr_cmp_attr
;
set_op_tag
(
op_be_FrameLoad
,
&
be_node_tag
);
op_be_FrameLoad
->
ops
.
node_cmp_attr
=
FrameAddr_cmp_attr
;
set_op_tag
(
op_be_FrameStore
,
&
be_node_tag
);
op_be_FrameStore
->
ops
.
node_cmp_attr
=
FrameAddr_cmp_attr
;
set_op_tag
(
op_be_FrameAddr
,
&
be_node_tag
);
set_op_tag
(
op_be_Barrier
,
&
be_node_tag
);
op_be_FrameAddr
->
ops
.
node_cmp_attr
=
FrameAddr_cmp_attr
;
set_op_tag
(
op_be_Barrier
,
&
be_node_tag
);
op_be_Barrier
->
ops
.
node_cmp_attr
=
node_cmp_attr
;
}
/**
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a 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