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
9aaa91c5
Commit
9aaa91c5
authored
Dec 12, 2007
by
Michael Beck
Browse files
handle Return(Unknown) == missing return when lowering compound returns (fixes fehler105.c)
[r16966]
parent
665c5fa3
Changes
1
Hide whitespace changes
Inline
Side-by-side
ir/lower/lower_calls.c
View file @
9aaa91c5
...
...
@@ -534,7 +534,7 @@ static void transform_irg(const lower_params_t *lp, ir_graph *irg)
wlk_env
env
;
add_hidden
hidden_params
;
assert
(
ent
&&
"Cannot tranform graph without an entity"
);
assert
(
ent
&&
"Cannot tran
s
form graph without an entity"
);
assert
(
get_irg_phase_state
(
irg
)
==
phase_high
&&
"call lowering must be done in phase high"
);
mtp
=
get_entity_type
(
ent
);
...
...
@@ -634,20 +634,25 @@ static void transform_irg(const lower_params_t *lp, ir_graph *irg)
arg
=
new_r_Proj
(
irg
,
get_nodes_block
(
arg
),
arg
,
mode_P_data
,
env
.
first_hidden
+
k
);
++
k
;
if
(
is_compound_address
(
ft
,
pred
))
{
/* we can do the copy-return optimization here */
cr_opt
[
n_cr_opt
].
ent
=
get_Sel_entity
(
pred
);
cr_opt
[
n_cr_opt
].
arg
=
arg
;
++
n_cr_opt
;
}
else
{
/* copy-return optimization is impossible, do the copy. */
copy
=
new_r_CopyB
(
irg
,
bl
,
mem
,
arg
,
pred
,
tp
);
mem
=
new_r_Proj
(
irg
,
bl
,
copy
,
mode_M
,
pn_CopyB_M_regular
);
if
(
is_Unknown
(
pred
))
{
/* The Return(Unknown) is the Firm construct for a missing return.
Do nothing. */
}
else
{
if
(
is_compound_address
(
ft
,
pred
))
{
/* we can do the copy-return optimization here */
cr_opt
[
n_cr_opt
].
ent
=
get_Sel_entity
(
pred
);
cr_opt
[
n_cr_opt
].
arg
=
arg
;
++
n_cr_opt
;
}
else
{
/* copy-return optimization is impossible, do the copy. */
copy
=
new_r_CopyB
(
irg
,
bl
,
mem
,
arg
,
pred
,
tp
);
mem
=
new_r_Proj
(
irg
,
bl
,
copy
,
mode_M
,
pn_CopyB_M_regular
);
}
}
if
(
lp
->
flags
&
LF_RETURN_HIDDEN
)
{
new_in
[
j
]
=
arg
;
...
...
@@ -763,8 +768,7 @@ void lower_calls_with_compounds(const lower_params_t *params)
if
(
param
.
find_pointer_type
==
NULL
)
{
param
.
find_pointer_type
=
def_find_pointer_type
;
type_map
=
pmap_create_ex
(
8
);
}
else
}
else
type_map
=
NULL
;
/* first step: Transform all graphs */
...
...
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