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
9f3ed241
Commit
9f3ed241
authored
Mar 07, 2011
by
Matthias Braun
Browse files
sparc: to avoid trouble, move all nodes before sparc_Restore
parent
7747a6e6
Changes
1
Hide whitespace changes
Inline
Side-by-side
ir/be/sparc/sparc_finish.c
View file @
9f3ed241
...
...
@@ -233,6 +233,30 @@ static void peephole_sparc_FrameAddr(ir_node *node)
(
void
)
node
;
}
static
void
finish_be_Return
(
ir_node
*
node
)
{
ir_node
*
schedpoint
=
node
;
ir_node
*
restore
;
/* see that there is no code between Return and restore, if there is move
* it in front of the restore */
while
(
true
)
{
if
(
!
sched_has_prev
(
schedpoint
))
return
;
schedpoint
=
sched_prev
(
schedpoint
);
if
(
is_sparc_Restore
(
schedpoint
)
||
is_sparc_RestoreZero
(
schedpoint
))
break
;
}
restore
=
schedpoint
;
schedpoint
=
sched_prev
(
node
);
/* move all code between return and restore up */
while
(
schedpoint
!=
restore
)
{
ir_node
*
next_schedpoint
=
sched_prev
(
schedpoint
);
sched_remove
(
schedpoint
);
sched_add_before
(
restore
,
schedpoint
);
schedpoint
=
next_schedpoint
;
}
}
static
void
register_peephole_optimisation
(
ir_op
*
op
,
peephole_opt_func
func
)
{
assert
(
op
->
ops
.
generic
==
NULL
);
...
...
@@ -248,11 +272,12 @@ void sparc_finish(ir_graph *irg)
clear_irp_opcodes_generic_func
();
register_peephole_optimisation
(
op_be_IncSP
,
finish_be_IncSP
);
register_peephole_optimisation
(
op_
sparc_Save
,
finish_
sparc_Save
);
register_peephole_optimisation
(
op_
be_Return
,
finish_
be_Return
);
register_peephole_optimisation
(
op_sparc_FrameAddr
,
finish_sparc_FrameAddr
);
register_peephole_optimisation
(
op_sparc_Ld
,
finish_sparc_LdSt
);
register_peephole_optimisation
(
op_sparc_St
,
finish_sparc_LdSt
);
register_peephole_optimisation
(
op_sparc_Ldf
,
finish_sparc_LdSt
);
register_peephole_optimisation
(
op_sparc_Save
,
finish_sparc_Save
);
register_peephole_optimisation
(
op_sparc_St
,
finish_sparc_LdSt
);
register_peephole_optimisation
(
op_sparc_Stf
,
finish_sparc_LdSt
);
be_peephole_opt
(
irg
);
}
Write
Preview
Supports
Markdown
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