OK. I am ok with the dce fix. The opt_bb.cxx is a new file that I
don't have a lot of experience with and I assume your change is fine.
Anyone else can help review opt_bb.cxx?
Sun

On Fri, Dec 23, 2011 at 3:23 PM, Jian-Xin Lai <laij...@gmail.com> wrote:
> The reason to remove "Reset_live_stmt":
> This line is added when I fix an issue in WHIRL SSA. That issue is
> also fixed by an extra rename pass in WHIRL SSA later. So this change
> looks like unnecessary.
>
> The reason to add Set_bb(NULL):
> Set_bb(NULL) is used to distinguish the real dead code(already removed
> from the BB) and unvisited code (marked to dead at the beginning of
> DCE).
>
> 2011/12/23 Sun Chan <sun.c...@gmail.com>:
>> Asking the third time, why remove Reset_live_stmt() and add Set_bb(null)?
>> Sun
>>
>> On Fri, Dec 23, 2011 at 2:29 PM, Jian-Xin Lai <laij...@gmail.com> wrote:
>>> The line is this one:
>>> stmt->Reset_live_stmt();  // WHIRL SSA: mark stmt dead
>>> This line is introduced by WHIRL SSA. The rename pass is in WHIRL SSA,
>>> not in HSSA. It's different problem.
>>>
>>> 2011/12/23 Sun Chan <sun.c...@gmail.com>:
>>>> I am still confused. You said you "added this line when we hit a
>>>> bug...", which line? I also recall Fred has issue with you folks
>>>> adding an extra rename pass.
>>>> My question, that you have not address, is why add this Set_bb(NULL)
>>>> and remove the line
>>>> Reset_live_stmt()?
>>>> Sun
>>>>
>>>> On Fri, Dec 23, 2011 at 2:17 PM, Jian-Xin Lai <laij...@gmail.com> wrote:
>>>>> Set_bb(NULL) is used to distinguish the real dead code(already removed
>>>>> from the BB) and unvisited code (marked to dead at the beginning of
>>>>> DCE). An alternative approach is to introduce a new flag for real dead
>>>>> code but it requires more changes. Since the statement has been
>>>>> removed from the BB, I think it's OK to set the BB to NULL.
>>>>>
>>>>> I recalled the reason why I added this line when we hit a bug in WHIRL
>>>>> SSA. It's also caused by the similar case that an opnd of phi comes
>>>>> from a chi associated to a dead statement and the version of that phi
>>>>> opnd is wrong. We added an extra rename pass to WHIRL SSA to correct
>>>>> the version. With the extra rename pass, this change becomes
>>>>> unnecessary. (This rename pass is necessary because the WHIRL CFG is
>>>>> not identical to HSSA CFG and the rename pass is needed to correct the
>>>>> order of phi opnds.)
>>>>>
>>>>> 2011/12/22 Sun Chan <sun.c...@gmail.com>:
>>>>>> can you go over why the second change, set_BB(null)? And remove the
>>>>>> mark Reset_live_stmt()?
>>>>>> Sun
>>>>>>
>>>>>> On Thu, Dec 22, 2011 at 3:54 PM, Jian-Xin Lai <laij...@gmail.com> wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> Here is a smaller case for bug #897 and a new patch based on Gang's
>>>>>>> current work. Could a gatekeeper review it? Thank you very much.
>>>>>>>
>>>>>>> A smaller case:
>>>>>>>  1  int g_1;
>>>>>>>  2  int* g_2;
>>>>>>>  3  int* func(int* p_1, short p_2) {
>>>>>>>  4      int **l_1;
>>>>>>>  5      const unsigned long l_2 = 0x2A1DFCF9L;
>>>>>>>  6      for ( ; ; p_2 = foo() ) {
>>>>>>>  7          int ***l_3 = &l_1;
>>>>>>>  8          (*l_3) = &g_2;
>>>>>>>  9          if (!l_2) {
>>>>>>> 10              // The following code is unreachable
>>>>>>> 11              if ((bar())) {
>>>>>>> 12                  (*g_2) |= g_1;
>>>>>>> 13                  (**l_1) |= (*p_1);
>>>>>>> 14                  g_2 = &g_1;
>>>>>>> 15              }
>>>>>>> 16          }
>>>>>>> 17      }
>>>>>>> 18  }
>>>>>>>
>>>>>>> in DCE phase, the unreachable code elimination runs at first and all
>>>>>>> the statements in the if block is removed and set to NOT_LIVE.  In the
>>>>>>> later Dead store elimination phase, as Gang's explaination, we follow
>>>>>>> the U-D chain of g_2, which is a global variable and has CHI on line
>>>>>>> 6(foo), 11(bar), 12 (*g_2) and a real dec in line 14. When we mark the
>>>>>>> call of foo (line 6) to be LIVE, the CHI of g_2 is also LIVE and
>>>>>>> following the U-D chain, the CHI's on bar() and (*g_2) is also marked
>>>>>>> to LIVE. When marking (*g_2) to live, we also mark that BB to live.
>>>>>>> But the BB is empty (all statements have been removed in earlier
>>>>>>> phase) and the assertion occures.
>>>>>>>
>>>>>>> Here is a new patch:
>>>>>>> Index: osprey/be/opt/opt_dce.cxx
>>>>>>> ===================================================================
>>>>>>> --- osprey/be/opt/opt_dce.cxx   (revision 3855)
>>>>>>> +++ osprey/be/opt/opt_dce.cxx   (working copy)
>>>>>>> @@ -2619,7 +2619,10 @@
>>>>>>>       // NOTE: May at some time always have a defining statement, so
>>>>>>>       //       we could remove the check for a null defstmt
>>>>>>>       //         (i.e., if live-in values get some dummy def stmt)
>>>>>>> -       if ( cr->Defstmt() != NULL && !cr->Defstmt()->Live_stmt() ) {
>>>>>>> +        // if defining statement doesn't belong to any BB, it's been
>>>>>>> +        // removed in early unreachable code elimination phase.
>>>>>>> +       if ( cr->Defstmt() != NULL && !cr->Defstmt()->Live_stmt() &&
>>>>>>> +             cr->Defstmt()->Bb() != NULL ) {
>>>>>>>         // if we're making this statement live just because it's
>>>>>>>         // associated with a chi, see if we can get rid of "i = i"
>>>>>>>         // assignments.  This only happens when zero-version is
>>>>>>> Index: osprey/be/opt/opt_bb.cxx
>>>>>>> ===================================================================
>>>>>>> --- osprey/be/opt/opt_bb.cxx    (revision 3855)
>>>>>>> +++ osprey/be/opt/opt_bb.cxx    (working copy)
>>>>>>> @@ -734,6 +734,7 @@
>>>>>>>
>>>>>>>  _stmtlist.Remove(stmt);
>>>>>>> -  stmt->Reset_live_stmt();  // WHIRL SSA: mark stmt dead
>>>>>>> +  stmt->Set_bb(NULL);
>>>>>>>  }
>>>>>>>
>>>>>>>  void
>>>>>>>
>>>>>>> If the statement has been removed from the BB, we reset its BB to
>>>>>>> NULL. In the later phase, if a statement's BB is NULL, which means the
>>>>>>> statement has been removed and we don't need to mark it to live.
>>>>>>> Reseting the bb of dead statement to NULL also helps preventing more
>>>>>>> bugs when trying to traverse the BB.
>>>>>>>
>>>>>>> --
>>>>>>> Regards,
>>>>>>> Lai Jian-Xin
>>>>>>>
>>>>>>> ------------------------------------------------------------------------------
>>>>>>> Write once. Port to many.
>>>>>>> Get the SDK and tools to simplify cross-platform app development. Create
>>>>>>> new or port existing apps to sell to consumers worldwide. Explore the
>>>>>>> Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join
>>>>>>> http://p.sf.net/sfu/intel-appdev
>>>>>>> _______________________________________________
>>>>>>> Open64-devel mailing list
>>>>>>> Open64-devel@lists.sourceforge.net
>>>>>>> https://lists.sourceforge.net/lists/listinfo/open64-devel
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Regards,
>>>>> Lai Jian-Xin
>>>
>>>
>>>
>>> --
>>> Regards,
>>> Lai Jian-Xin
>
>
>
> --
> Regards,
> Lai Jian-Xin

------------------------------------------------------------------------------
Write once. Port to many.
Get the SDK and tools to simplify cross-platform app development. Create 
new or port existing apps to sell to consumers worldwide. Explore the 
Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join
http://p.sf.net/sfu/intel-appdev
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to