Skip to content
Snippets Groups Projects
Commit dddefa4e authored by sof's avatar sof
Browse files

[project @ 1999-01-23 17:38:52 by sof]

do_if_stmt: insert extra (I_) to avoid minInt blues.
parent fd2d74d6
No related branches found
No related tags found
No related merge requests found
...@@ -170,6 +170,7 @@ pprAbsC (CSwitch discrim [(tag,alt_code)] deflt) c -- only one alt ...@@ -170,6 +170,7 @@ pprAbsC (CSwitch discrim [(tag,alt_code)] deflt) c -- only one alt
Just dc -> -- make it an "if" Just dc -> -- make it an "if"
do_if_stmt discrim tag alt_code dc c do_if_stmt discrim tag alt_code dc c
-- What problem is the re-ordering trying to solve ?
pprAbsC (CSwitch discrim [(tag1@(MachInt i1 _), alt_code1), pprAbsC (CSwitch discrim [(tag1@(MachInt i1 _), alt_code1),
(tag2@(MachInt i2 _), alt_code2)] deflt) c (tag2@(MachInt i2 _), alt_code2)] deflt) c
| empty_deflt && ((i1 == 0 && i2 == 1) || (i1 == 1 && i2 == 0)) | empty_deflt && ((i1 == 0 && i2 == 1) || (i1 == 1 && i2 == 0))
...@@ -625,9 +626,23 @@ do_if_stmt discrim tag alt_code deflt c ...@@ -625,9 +626,23 @@ do_if_stmt discrim tag alt_code deflt c
deflt alt_code deflt alt_code
(addrModeCosts discrim Rhs) c (addrModeCosts discrim Rhs) c
other -> let other -> let
cond = hcat [ pprAmode discrim, cond = hcat [ pprAmode discrim
ptext SLIT(" == "), , ptext SLIT(" == ")
pprAmode (CLit tag) ] , tcast
, pprAmode (CLit tag)
]
-- to be absolutely sure that none of the
-- conversion rules hit, e.g.,
--
-- minInt is different to (int)minInt
--
-- in C (when minInt is a number not a constant
-- expression which evaluates to it.)
--
tcast =
case other of
MachInt _ signed | signed -> ptext SLIT("(I_)")
_ -> empty
in in
ppr_if_stmt cond ppr_if_stmt cond
alt_code deflt alt_code deflt
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment