Author: meiye
Date: 2011-05-23 18:52:35 -0400 (Mon, 23 May 2011)
New Revision: 3618

Modified:
   trunk/osprey/be/opt/opt_cfg.cxx
Log:
 in 'CFG::Remove_bb', When an EH region end block is removed, we did not 
provide a new region end. This fix identifies whether the BB to be deleted is 
an EH region end.  If so, we use its previous node as the new region end. CR: 
Min Zhao

Modified: trunk/osprey/be/opt/opt_cfg.cxx
===================================================================
--- trunk/osprey/be/opt/opt_cfg.cxx     2011-05-23 22:15:28 UTC (rev 3617)
+++ trunk/osprey/be/opt/opt_cfg.cxx     2011-05-23 22:52:35 UTC (rev 3618)
@@ -226,6 +226,32 @@
     pred->Remove_succ( bb, Mem_pool() );
   }
 
+  if (bb->EH_region() && bb->Rid()) {
+    // If bb is in a EH region, walk up Prev() link to find the region start.
+    // If bb is the region end, make its Prev() node to be the new
+    // region end.
+    INT id = RID_id(bb->Rid());
+    STACK<INT> * stk = CXX_NEW(STACK<INT> (Mem_pool()), Mem_pool());
+    stk->Push(id);
+    BB_NODE * bb_iter = bb;
+    while (bb_iter && bb_iter->Rid() && !stk->Is_Empty()) {
+      INT iter_id = RID_id(bb_iter->Rid());
+      if (stk->Top() != iter_id) {
+       stk->Push(iter_id);
+      }
+      else if (bb_iter->Kind() == BB_REGIONSTART) {
+       BB_REGION * region = bb_iter->Regioninfo();
+       if (region && (region->Region_end() == bb)) {
+         BB_NODE * bb_prev = bb->Prev();
+         region->Set_region_end(bb_prev);
+       }
+       stk->Pop();
+      }
+      bb_iter = bb_iter->Prev();
+    }
+    CXX_DELETE(stk, Mem_pool());
+  }
+
   if (bb->Is_first())
     _first_bb = bb->Next();
   if (bb->Is_last())


------------------------------------------------------------------------------
vRanger cuts backup time in half-while increasing security.
With the market-leading solution for virtual backup and recovery, 
you get blazing-fast, flexible, and affordable data protection.
Download your free trial now. 
http://p.sf.net/sfu/quest-d2dcopy1
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to