mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-12 13:38:21 +00:00
Allow multiple invokes per landing pad. This (probably) fixes PR1410.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36977 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -1669,8 +1669,8 @@ LandingPadInfo &MachineModuleInfo::getOrCreateLandingPadInfo
|
||||
void MachineModuleInfo::addInvoke(MachineBasicBlock *LandingPad,
|
||||
unsigned BeginLabel, unsigned EndLabel) {
|
||||
LandingPadInfo &LP = getOrCreateLandingPadInfo(LandingPad);
|
||||
if (!LP.BeginLabel) LP.BeginLabel = BeginLabel;
|
||||
LP.EndLabel = EndLabel;
|
||||
LP.BeginLabels.push_back(BeginLabel);
|
||||
LP.EndLabels.push_back(EndLabel);
|
||||
}
|
||||
|
||||
/// addLandingPad - Provide the label of a try LandingPad block.
|
||||
@ -1711,16 +1711,29 @@ void MachineModuleInfo::setIsFilterLandingPad(MachineBasicBlock *LandingPad) {
|
||||
void MachineModuleInfo::TidyLandingPads() {
|
||||
for (unsigned i = 0; i != LandingPads.size(); ) {
|
||||
LandingPadInfo &LandingPad = LandingPads[i];
|
||||
LandingPad.BeginLabel = MappedLabel(LandingPad.BeginLabel);
|
||||
LandingPad.EndLabel = MappedLabel(LandingPad.EndLabel);
|
||||
LandingPad.LandingPadLabel = MappedLabel(LandingPad.LandingPadLabel);
|
||||
|
||||
if (!LandingPad.BeginLabel ||
|
||||
!LandingPad.EndLabel ||
|
||||
!LandingPad.LandingPadLabel) {
|
||||
|
||||
if (!LandingPad.LandingPadLabel) {
|
||||
LandingPads.erase(LandingPads.begin() + i);
|
||||
continue;
|
||||
}
|
||||
|
||||
for (unsigned j=0; j != LandingPads[i].BeginLabels.size(); ) {
|
||||
unsigned BeginLabel = MappedLabel(LandingPad.BeginLabels[j]);
|
||||
unsigned EndLabel = MappedLabel(LandingPad.EndLabels[j]);
|
||||
|
||||
|
||||
if (!BeginLabel || !EndLabel) {
|
||||
printf("Tidy: %d, %d, %d\n", BeginLabel, EndLabel, LandingPad.LandingPadLabel);
|
||||
LandingPad.BeginLabels.erase(LandingPad.BeginLabels.begin() + j);
|
||||
LandingPad.EndLabels.erase(LandingPad.EndLabels.begin() + j);
|
||||
continue;
|
||||
}
|
||||
|
||||
LandingPad.BeginLabels[j] = BeginLabel;
|
||||
LandingPad.EndLabels[j] = EndLabel;
|
||||
++j;
|
||||
}
|
||||
|
||||
++i;
|
||||
}
|
||||
|
Reference in New Issue
Block a user