Author: shihui
Date: 2011-04-07 21:51:30 -0400 (Thu, 07 Apr 2011)
New Revision: 3541
Modified:
trunk/osprey/be/opt/opt_lmv.cxx
Log:
Fix bug754:
Loop multi-version transformation insert a pre-condition BB before loop header
BB.
If loop header BB is if_BB's merge BB, need change if BB's merge BB to newly
inserted pre-condition BB.
With attached simple case loop multi-version doesn't update the if_BB's
merge_BB correctly.
Original implementation is searching IDOM for loop header BB.
if idom BB is if_BB and its if_merge BB is loop header BB, change its if_merge
BB to pre-condition BB.
This simple test case has if statement followed by a multi-version optimized
loop.
And if statement has EH region in its body, cause if_merge BB not dominated by
if BB.
Fix in CFG::LMV_gen_precondioning_stuff
Search all the BBs, find if_BB whose merge BB is original loop header BB,
change its if_merge BB to pre-condition BB.
Code Review: Jian-Xin
Modified: trunk/osprey/be/opt/opt_lmv.cxx
===================================================================
--- trunk/osprey/be/opt/opt_lmv.cxx 2011-04-07 19:41:42 UTC (rev 3540)
+++ trunk/osprey/be/opt/opt_lmv.cxx 2011-04-08 01:51:30 UTC (rev 3541)
@@ -1637,14 +1637,14 @@
Connect_predsucc (precond, orig_phdr);
// Likewise if the preheader is the merge point of a lowered IF/THEN/ELSE
- // then we must update the merge point on the immediate dominator
- BB_NODE *idom = orig_phdr->Idom();
- while (idom) {
- if (idom->Kind()==BB_LOGIF && idom->If_merge() == orig_phdr) {
- idom->Ifinfo()->Set_merge(precond);
- break;
+ // use idom to find if parent is not safe.
+ // Case can be multientry, entry directly jump to header BB.
+ // Iterate all BBs and if bb's if_merge is header, change to precond.
+ for (IDTYPE id = _first_bb_id+1; id <= _last_bb_id; id++) {
+ BB_NODE *bb = _bb_vec[id];
+ if (bb && bb->Kind() == BB_LOGIF && bb->If_merge() == orig_phdr) {
+ bb->Ifinfo()->Set_merge(precond);
}
- idom = idom->Idom();
}
// If the original preheader is the body of the parent loop we need
------------------------------------------------------------------------------
Xperia(TM) PLAY
It's a major breakthrough. An authentic gaming
smartphone on the nation's most reliable network.
And it wants your games.
http://p.sf.net/sfu/verizon-sfdev
_______________________________________________
Open64-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/open64-devel