how about fix proactive_opt (or whatever the name is)? It is something
added not too long ago
Sun

On Fri, Dec 16, 2011 at 6:27 PM, Gang Yu <yugang...@gmail.com> wrote:

> Hi, Sun
>
>    Would you please kindly furthur input to this issue? If we could not
> find alternative better fix, can we check in the patch firstly? the
> regression bugs are marked major priority, we should get it fixed quickly.
>
> Thanks
>
> Regards
> Gang
>
>
>  On Thu, Dec 15, 2011 at 10:19 AM, Gang Yu <yugang...@gmail.com> wrote:
>
>> Thanks for your comments.
>>  On Wed, Dec 14, 2011 at 10:06 PM, Sun Chan <sun.c...@gmail.com> wrote:
>>
>>> I don't understand the rationale for this fix. You are saying that the
>>> dead branch is not dce'd, and lno does not like it. So, why not fix dce? A
>>> dead branch is dead branch, why this workaround?
>>> Sun
>>>
>>>
>> This segmentation is in the preopt, but intermediate optimized result as:
>>  IF {line: 1/131}
>> U4INTCONST 1 (0x1)
>> THEN
>> ...
>> ELSE
>> BLOCK
>> END_BLOCK
>> END_IF
>>  is acceptable, not 100% optimized but still in its own right and later
>> mainopt can still eliminate the dead branch.
>>
>> for a long term, we should fix proactive_loop_transform, since we should
>> not always assume the intermediate input in perfect form.
>>
>> Coding style in open64.net pointing this out:
>>
>>  no assumption across
>>
>>    - No assumption across different phases
>>
>>
>> As a temporary workaround, we assume the previously code work quite well
>> except for cases like bug912, so, we make more effort on limit the changes,
>> i.e, more constraint on the change. if we add the MAINOPT condition, the
>> branch get eliminted by later DCE in preopt, then proactive_loop_transform
>> happy. we get things done.
>>
>> Regards
>> Gang
>>
>>
>>>   On Wed, Dec 14, 2011 at 12:34 PM, Gang Yu <yugang...@gmail.com> wrote:
>>>
>>>>  Hi,
>>>>
>>>>    Would a gatekeeper please help review the fix for bug934 ,
>>>> regression caused by r3843?
>>>>
>>>> segment-fault function snippet of  bug case:
>>>>
>>>> void LibRaw:: tiff_set (ushort *ntag,
>>>>  ushort tag, ushort type, int count, int val)
>>>> {
>>>>   struct tiff_tag *tt;
>>>>   int c;
>>>>   if (type < 3 && count <= 4)
>>>>     for (c=0; c < 4; c++) tt->val.c[c] = val >> (c << 3);
>>>> }
>>>> void LibRaw:: tiff_head (struct tiff_hdr *th, int full)
>>>> {
>>>>   if (full) {
>>>>     tiff_set (&th->ngps, 3, 2, 2, (imgdata.other.gpsdata)[30]);
>>>>     tiff_set (&th->ngps, 4, 5, 3, ((char *)(&(th->gps[6])) - (char
>>>> *)th));
>>>>     tiff_set (&th->ngps, 5, 1, 1, (imgdata.other.gpsdata)[31]);
>>>>   }
>>>>   int c, row, col, soff, rstep, cstep;
>>>>   for (row=0; row < (imgdata.sizes.height); row++, soff += rstep) {
>>>>   }
>>>> }
>>>>
>>>> at O3 ,  tiff_set is inlined into tiff_set, at PREOPT_LNO_PHASE,
>>>> expression
>>>> if (type <3 && count <=4), i.e, whirl expression
>>>>
>>>>    U4U2LDID 0 <st 89> T<7,.predef_U2,2>
>>>>    U4INTCONST 2 (0x2)
>>>>   U4U4LE
>>>>    I4I4LDID 0 <st 90> T<4,.predef_I4,4>
>>>>    I4INTCONST 4 (0x4)
>>>>   U4I4LE
>>>>  I4CAND
>>>> U4I4CVT
>>>> after codemap, is transfered to
>>>> >  LDC U4 1 <u=2 cr19> flags:0x0 b=-1
>>>> > U4I4CVT <u=2 cr33> isop_flags:0xc0000 flags:0x1 b=-1
>>>> >OPR_FALSEBR 6914 b=-1 flags:0x2 pj2 Sid-1
>>>> DCE does not delete the unreachable branch under this condition, which
>>>> then emits back to H whirl
>>>> as
>>>>   IF {line: 1/131}
>>>>    U4INTCONST 1 (0x1)
>>>>   THEN
>>>>      ...
>>>>   ELSE
>>>>      BLOCK
>>>>      END_BLOCK
>>>>   END_IF
>>>>
>>>> this will make proactive transformation phase in PREOPT_LNO1_PHASE
>>>> uncomfort, then it asserts.
>>>>
>>>> Suggested patch, keep the orginal handling of U4I4CVT const , only
>>>> change under the MAINOPT_phase.
>>>>
>>>>
>>>> osprey/be/opt/opt_htable.cxx    -- 148c4e2..6499b99 100644
>>>> --- a/osprey/be/opt/opt_htable.cxx
>>>> +++ b/osprey/be/opt/opt_htable.cxx
>>>> @@ -2273,7 +2273,9 @@ CODEMAP::Canon_cvt(WN       *wn,
>>>>         Get_mtype_class(OPCODE_desc(op))) != 0 &&
>>>>        MTYPE_size_min(OPCODE_rtype(op)) ==
>>>> MTYPE_size_min(OPCODE_desc(op)) &&
>>>>        // bug912 open64.net. Do not delete U4I4CVT if his kid is a
>>>> constant
>>>> -      (!(OPCODE_rtype(op) == MTYPE_U4 &&
>>>> +      // bug934 open64.net. Only do this at MAINOPT_PHASE.
>>>> +      (!(_phase == MAINOPT_PHASE &&
>>>> +         OPCODE_rtype(op) == MTYPE_U4 &&
>>>>           OPCODE_desc(op) == MTYPE_I4 &&
>>>>           ccr->Tree() == NULL)))
>>>>      return propagated;
>>>>
>>>> Would a gatekeeper help a review?
>>>>
>>>> BTW, thanks for Xiaojing for report the bug.
>>>>
>>>> Regards
>>>> Gang
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> Cloud Computing - Latest Buzzword or a Glimpse of the Future?
>>>> This paper surveys cloud computing today: What are the benefits?
>>>> Why are businesses embracing it? What are its payoffs and pitfalls?
>>>> http://www.accelacomm.com/jaw/sdnl/114/51425149/
>>>> _______________________________________________
>>>> Open64-devel mailing list
>>>> Open64-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/open64-devel
>>>>
>>>>
>>>
>>
>
------------------------------------------------------------------------------
Learn Windows Azure Live!  Tuesday, Dec 13, 2011
Microsoft is holding a special Learn Windows Azure training event for 
developers. It will provide a great way to learn Windows Azure and what it 
provides. You can attend the event by watching it streamed LIVE online.  
Learn more at http://p.sf.net/sfu/ms-windowsazure
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to