77 blocks copy do:[:bb | |
77 blocks copy do:[:bb | |
78 bb last isBranch ifTrue:[ |
78 bb last isBranch ifTrue:[ |
79 | targetAddress succBB | |
79 | targetAddress succBB | |
80 |
80 |
81 targetAddress := bb last branchTarget. |
81 targetAddress := bb last branchTarget. |
82 "/ Find successor block. Note, that we may found none if the branch target is |
82 targetAddress notNil ifTrue:[ |
83 "/ outside given coce. |
83 "/ Find successor block. Note, that we may found none if the branch target is |
84 succBB := blocks detect:[:e | e includesAddress: targetAddress ] ifNone: [ nil ]. |
84 "/ outside given coce. |
85 succBB notNil ifTrue:[ |
85 succBB := blocks detect:[:e | e includesAddress: targetAddress ] ifNone: [ nil ]. |
86 "/ If `targetAddress` points into the middle of `succBB` we have to split |
86 succBB notNil ifTrue:[ |
87 "/ succBB into two. |
87 "/ If `targetAddress` points into the middle of `succBB` we have to split |
88 succBB firstAddress < targetAddress ifTrue:[ |
88 "/ succBB into two. |
89 | succBBs | |
89 succBB firstAddress < targetAddress ifTrue:[ |
90 |
90 | succBBs | |
91 succBBs := succBB splitAtAddress: targetAddress. |
91 |
92 blocks remove: succBB; addAll: succBBs. |
92 succBBs := succBB splitAtAddress: targetAddress. |
93 succBB := succBBs last. |
93 blocks remove: succBB; addAll: succBBs. |
|
94 succBB := succBBs last. |
|
95 ]. |
|
96 bb setSuccessor2: succBB. |
94 ]. |
97 ]. |
95 bb setSuccessor2: succBB. |
98 ] |
96 ]. |
|
97 ]. |
99 ]. |
98 ]. |
100 ]. |
99 |
101 |
100 "/ Jo done!! |
102 "/ Jo done!! |
101 ^ blocks. |
103 ^ blocks. |