Commit ca9c90e5 authored by Michael D. Adams's avatar Michael D. Adams

Keep the CPS pass from creating proc points due to unreachable parents.

The parser/flattener will generate an extra block after an if/else 
statement even if both branches exit the function.  So it is possible
for the input to the CPS pass to have dead/unreachable blocks.

If a dead block goes to a live block then the live block would
have more parents than the dead block and prior to this patch
the live block would then be identified as a proc point.
This is fixed by adding a check to see if the parent
has at least one owner.
parent a9eda064
......@@ -79,8 +79,12 @@ calculateNewProcPoints owners block =
where
parent_owners = lookupWithDefaultUFM owners emptyUniqSet parent_id
child_owners = lookupWithDefaultUFM owners emptyUniqSet child_id
needs_proc_point = not $ isEmptyUniqSet $
child_owners `minusUniqSet` parent_owners
needs_proc_point =
-- only if parent isn't dead
(not $ isEmptyUniqSet parent_owners) &&
-- and only if child has more owners than parent
(not $ isEmptyUniqSet $
child_owners `minusUniqSet` parent_owners)
calculateOwnership :: BlockEnv BrokenBlock
-> UniqSet BlockId
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment