Thx! I guess we'll live with that for now, knowing dce and cprop is
dependent for some ASM stmts
Sun

On Tue, Jan 10, 2012 at 7:28 PM, Rao, Shivarama <shivarama....@amd.com> wrote:
> It passes at -O0 and at -O1. Fails at -O2.
>
> Regards,
> Shivaram
>
> -----Original Message-----
> From: Sun Chan [mailto:sun.c...@gmail.com]
> Sent: Tuesday, January 10, 2012 6:00 AM
> To: Ye, Mei
> Cc: open64-devel
> Subject: Re: [Open64-devel] Review request for fix bug787[WOPT]
>
> I wonder what the behavior at O0 for this bug?
> Sun
>
> On Tue, Jan 10, 2012 at 8:28 AM, Sun Chan <sun.c...@gmail.com> wrote:
>> thx for pointing this out, it could cause  problem for automatic bug 
>> triaging.
>> Sun
>>
>> On Tue, Jan 10, 2012 at 1:34 AM, Ye, Mei <mei...@amd.com> wrote:
>>> I don't have objection to this fix.  But this bug exposes a design problem 
>>> in DCE, i.e.,
>>> DCE can't handle a situation where copy prop is disabled upstream.
>>>
>>> -Mei
>>>
>>> -----Original Message-----
>>> From: Sun Chan [mailto:sun.c...@gmail.com]
>>> Sent: Friday, January 06, 2012 9:55 PM
>>> To: Gang Yu
>>> Cc: open64-devel
>>> Subject: Re: [Open64-devel] Review request for fix bug787[WOPT]
>>>
>>> this fix looks better. i am still a bit worry about regressions
>>> (performance). Have you checked perf regression with this change?
>>> Sun
>>>
>>> On Sat, Jan 7, 2012 at 1:36 PM, Gang Yu <yugang...@gmail.com> wrote:
>>>> Hi,
>>>>
>>>>  I have a new fix for the bug787, the cut-down case from Rao(thanks) is as
>>>> follows:
>>>>
>>>> extern int main(int argc)
>>>> {
>>>>   int res1;
>>>>   int val0,val1;
>>>>   val1=100;
>>>>   if(1)
>>>>   {
>>>>     asm("bswapl %0" : "=r" (val0) : "0" (val1));
>>>>     res1=val0;
>>>>   }
>>>>   val0=res1;
>>>>   asm("bswapl %0" : "=r" (val1) : "0" (val0));
>>>> } /* main */
>>>> analysis:
>>>>
>>>> Current open64 disallows copy propagation into ASM_INPUT for the var and
>>>> ivar cases, this is reasonable since some constraints do only allow the
>>>> parameter in specific form.
>>>>
>>>> If we fix following Rao's suggested way, i.e, mark some identity assignment
>>>> undeletable for DCE, then we need special marking work for the identity
>>>> assignment.
>>>>
>>>> a sound way as RAO suggested is say if the LHS of the identity assignment
>>>> has flag CR_DONT_PROP, we disable deleting this identiy assign. However,
>>>> this triggers the problem that other identity assign also undeletable only
>>>> if its LHS has CR_DONT_PROP, so bug882 thrown out and it is hard to patch
>>>> again for this special handling, this changes the default verifycation
>>>> and DCE behavior.
>>>>
>>>> My suggested way is that we try propagate to a var inside ASM_INPUT, if the
>>>> propagated expr is also a var, we allow this propagation. in the above case
>>>>
>>>>>LINE 13___
>>>>> LDID I4 I4 sym5v3 0 ty=402  <u=2 cr13> flags:0x8 b=-1 #res1
>>>>>OPR_STID I4 I4 sym4v4 0 <u=0 cr15> b=-1 flags:0x2 pj2 Sid-1
>>>> chi <> 0x0x80e1e40
>>>>>LINE 14___
>>>>  mu<9/cr14 >
>>>>>   LDID I4 I4 sym4v4 0 ty=402  <u=0 cr15> flags:0x0 b=-1 #val0
>>>>>  ASM_INPUT opnd:1 <u=0 cr16> isop_flags:0xc0000 flags:0x0 b=E1
>>>>> ASM_STMT <u=0 cr17> isop_flags:0xc0000 flags:0x0 b=-1
>>>>>OPR_ASM_STMT b=-1 flags:0x2 pj2 Sid-1
>>>> sym5v3 is propagated into OPR_ASMINPUT.
>>>>
>>>> The patch below:
>>>>
>>>> --- a/osprey/be/opt/opt_prop.cxx
>>>> +++ b/osprey/be/opt/opt_prop.cxx
>>>> @@ -1504,9 +1504,23 @@ COPYPROP::Copy_propagate_cr(CODEREP *x, BB_NODE
>>>> *curbb,
>>>>           expr = Copy_propagate_cr(x->Opnd(i), curbb, inside_cse, 
>>>> in_array);
>>>>          else {
>>>>           // OSP_384
>>>> -         if(opr == OPR_ASM_INPUT)
>>>> -           x->Opnd(i)->Set_flag(CF_DONT_PROP);
>>>> -          expr = NULL;
>>>> +         if(opr == OPR_ASM_INPUT) {
>>>> +            // open64.net bug787. Try propagate for VAR first, if the
>>>> propagated expr is the same
>>>> +            // kind to the original one,i.e, also a VAR. we allow this
>>>> propagation. otherwise, disable it.
>>>> +            if ( x->Opnd(i)->Kind() == CK_VAR ) {
>>>> +              CODEREP *possible_prop = Copy_propagate_cr(x->Opnd(i), 
>>>> curbb,
>>>> inside_cse, in_array);
>>>> +              if (possible_prop && possible_prop->Kind() ==
>>>> x->Opnd(i)->Kind())
>>>> +                expr = possible_prop;
>>>> +              else {
>>>> +                x->Opnd(i)->Set_flag(CF_DONT_PROP);
>>>> +                expr = NULL;
>>>> +              }
>>>> +            }
>>>> +            else {
>>>> +              x->Opnd(i)->Set_flag(CF_DONT_PROP);
>>>> +              expr = NULL;
>>>> +            }
>>>> +          }
>>>>         }
>>>>  #else
>>>> please gatekeeper help a review
>>>>
>>>> Thanks.
>>>>
>>>> Regards
>>>> Gang
>>>>
>>>> ------------------------------------------------------------------------------
>>>> Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
>>>> infrastructure or vast IT resources to deliver seamless, secure access to
>>>> virtual desktops. With this all-in-one solution, easily deploy virtual
>>>> desktops for less than the cost of PCs and save 60% on VDI infrastructure
>>>> costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox
>>>> _______________________________________________
>>>> Open64-devel mailing list
>>>> Open64-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/open64-devel
>>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
>>> infrastructure or vast IT resources to deliver seamless, secure access to
>>> virtual desktops. With this all-in-one solution, easily deploy virtual
>>> desktops for less than the cost of PCs and save 60% on VDI infrastructure
>>> costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox
>>> _______________________________________________
>>> Open64-devel mailing list
>>> Open64-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/open64-devel
>>>
>>>
>
> ------------------------------------------------------------------------------
> 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
>
>

------------------------------------------------------------------------------
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