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
8848f5a5
Commit
8848f5a5
authored
May 26, 2011
by
Andreas Zwinkau
Browse files
simplify merge_env struct
parent
49938636
Changes
1
Hide whitespace changes
Inline
Side-by-side
ir/opt/cfopt.c
View file @
8848f5a5
...
...
@@ -64,7 +64,6 @@
typedef
struct
merge_env
{
bool
changed
;
/**< Set if the graph was changed. */
bool
phis_moved
;
/**< Set if Phi nodes were moved. */
ir_node
**
switch_conds
;
/**< Helper list for all found Switch Conds. */
}
merge_env
;
static
void
set_Block_removable
(
ir_node
*
block
,
bool
removable
)
...
...
@@ -99,7 +98,7 @@ static void clear_link(ir_node *node, void *ctx)
*/
static
void
collect_nodes
(
ir_node
*
n
,
void
*
ctx
)
{
merge_env
*
env
=
(
merge_env
*
)
ctx
;
ir_node
***
switch_conds
=
(
ir_node
**
*
)
ctx
;
if
(
is_Phi
(
n
))
{
/* Collect Phi nodes to compact ins along with block's ins. */
...
...
@@ -121,7 +120,7 @@ static void collect_nodes(ir_node *n, void *ctx)
set_irn_link
(
pred
,
n
);
}
else
if
(
is_Cond
(
n
)
&&
is_switch_Cond
(
n
))
{
/* found a switch-Cond, collect */
ARR_APP1
(
ir_node
*
,
env
->
switch_conds
,
n
);
ARR_APP1
(
ir_node
*
,
*
switch_conds
,
n
);
}
}
}
...
...
@@ -730,6 +729,7 @@ void optimize_cf(ir_graph *irg)
/* The switch Cond optimization might expose unreachable code, so we loop */
for
(;;)
{
int
length
;
ir_node
**
switch_conds
=
NULL
;
env
.
changed
=
false
;
env
.
phis_moved
=
false
;
...
...
@@ -741,16 +741,16 @@ void optimize_cf(ir_graph *irg)
* Finally it marks all blocks that do not contain useful
* computations, i.e., these blocks might be removed.
*/
env
.
switch_conds
=
NEW_ARR_F
(
ir_node
*
,
0
);
irg_walk
(
end
,
clear_link
,
collect_nodes
,
&
env
);
switch_conds
=
NEW_ARR_F
(
ir_node
*
,
0
);
irg_walk
(
end
,
clear_link
,
collect_nodes
,
&
switch_conds
);
/* handle all collected switch-Conds */
length
=
ARR_LEN
(
env
.
switch_conds
);
length
=
ARR_LEN
(
switch_conds
);
for
(
i
=
0
;
i
<
length
;
++
i
)
{
ir_node
*
cond
=
env
.
switch_conds
[
i
];
ir_node
*
cond
=
switch_conds
[
i
];
env
.
changed
|=
handle_switch_cond
(
cond
);
}
DEL_ARR_F
(
env
.
switch_conds
);
DEL_ARR_F
(
switch_conds
);
if
(
!
env
.
changed
)
break
;
...
...
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