Sorry, stupid of me.
I understand wopt does not do copy prop of mload to mstore. OTOH, this had
been a goal for a long time. Anyway you can make that work?
Sun

On Tue, Nov 29, 2011 at 12:37 PM, Yiran Wang <yiran.w...@gmail.com> wrote:

> Em, I think you are saying that once entered, it would not exit, but the
> loop is not entered at the very beginning, as the initial test would fail.
>
> Regards,
> Yiran
>
>
>  On Mon, Nov 28, 2011 at 6:15 PM, Sun Chan <sun.c...@gmail.com> wrote:
>
>> your example should infinite loop. Pls double check before we further
>> discuss this
>> Sun
>>
>>  On Tue, Nov 29, 2011 at 8:41 AM, Yiran Wang <yiran.w...@gmail.com>wrote:
>>
>>>   Hi All,
>>>
>>> Could a gatekeeper review this patch?
>>>
>>> The test case is as following, and the bug is triggered, when compiling
>>> it with -O2.
>>>
>>>  #include <string.h>
>>>
>>> struct x{
>>>   int y;
>>>   int z;
>>> };
>>>
>>> int foo()
>>> {
>>>   struct x xyz,abc;
>>>   int i;
>>>   memset(&xyz,0,sizeof(xyz));
>>>   i = 1;
>>>   while( i < 0 )
>>>   {
>>>     abc.y += xyz.z;
>>>     xyz.z += 1;
>>>     i+=i;
>>>   }
>>>   memcpy(&abc,&xyz,sizeof(xyz));
>>>   return abc.y ;
>>> }
>>>
>>> The issue is that after WOPT remove the while loop, it renames SSA and
>>> connect the MSTORE and MLOAD lowered from memset and memcpy respectively.
>>> It would then try to copy propagate
>>>
>>>   LDC 0
>>>   LDA ...
>>>   LDC 8
>>> MSTORE
>>>
>>> to
>>>
>>>   LDA ...
>>>   LDC 8
>>> MLOAD
>>>
>>> And, it fails to make a CVT op of type I4 and M.
>>>
>>> As WOPT is not doing copy propagation for MLOAD, so we just abandon the
>>> opportunity as a fix.
>>> It should be noted that, the DEF is passing the "Propagatable" test, as
>>> it is LDC I4, while usual DEF of an MLOAD would be MLOAD.
>>>
>>> The patch is as following:
>>> Index: opt_prop.cxx
>>> ===================================================================
>>> --- opt_prop.cxx (revision 3827)
>>> +++ opt_prop.cxx (working copy)
>>> @@ -1307,6 +1307,16 @@
>>>    if (prop == NOT_PROPAGATABLE)
>>>      return NULL;
>>>
>>> +  // MLOAD may be defined by a MSTORE as following
>>> +  //   LDC 0
>>> +  //   LDA
>>> +  //   LDC
>>> +  //  MSTORE
>>> +  // The definition would pass Propagatable test, but we are not going
>>> +  // to propagate it.
>>> +  if (x->Opr() == OPR_MLOAD)
>>> +    return NULL;
>>> +
>>>    x->DecUsecnt();
>>>    if (icopy_phase)
>>>      Htable()->Inc_inputprops();
>>>
>>> Best Regards,
>>> Yiran
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> All the data continuously generated in your IT infrastructure
>>> contains a definitive record of customers, application performance,
>>> security threats, fraudulent activity, and more. Splunk takes this
>>> data and makes sense of it. IT sense. And common sense.
>>> http://p.sf.net/sfu/splunk-novd2d
>>> _______________________________________________
>>> Open64-devel mailing list
>>> Open64-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/open64-devel
>>>
>>>
>>
>
------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure 
contains a definitive record of customers, application performance, 
security threats, fraudulent activity, and more. Splunk takes this 
data and makes sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-novd2d
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to