we can go on forever if you only want to give me minimum info. Pls send me
the entire expr
Sun

On Tue, Nov 29, 2011 at 10:16 AM, Gang Yu <yugang...@gmail.com> wrote:

> Before the change, the input expression is wrongly codemapped to
>
>  >LDC I8 -2147483649 <u=1 cr17> flags:0x0 b=-1
>
> it should be rightly mapped to:
>
> > LDC I8 -2147483649 <u=1 cr17> flags:0x0 b=-1
> >U4I4CVT <u=1 cr18> isop_flags:0x0 flags:0x0 b=-1
>
> Regards
> Gang
>
>
>  On Mon, Nov 28, 2011 at 8:22 PM, Sun Chan <sun.c...@gmail.com> wrote:
>
>> without your change, what is the output of this function for the same
>> input expr?
>> Sun
>>
>>  On Mon, Nov 28, 2011 at 10:50 AM, Gang Yu <yugang...@gmail.com> wrote:
>>
>>> opt_htable.cxx
>>> 2244BOOL
>>> 2245CODEMAP::Canon_cvt(WN       *wn,
>>> 2246                   OPT_STAB *opt_stab,
>>> 2247                   STMTREP  *stmt,
>>> 2248                   CANON_CR *ccr,
>>> 2249                   CODEREP  *cr,
>>> 2250                   COPYPROP *copyprop)
>>> 2251{
>>> 2252  const OPCODE op = WN_opcode(wn);
>>> 2253  WN   *kid = WN_kid(wn, 0);
>>> 2254  BOOL  propagated = Add_expr(kid, opt_stab, stmt, ccr, copyprop);
>>> 2255#if defined(TARG_NVISA)
>>> 2256  if (ccr->Tree() == NULL) {
>>> 2257    // There is only a constant value in ccr
>>> 2258    return propagated;
>>> 2259  }
>>> 2260#endif
>>> 2261
>>> 2262#if defined (TARG_MIPS) && !defined (TARG_SL)
>>> 2263  // U8I4CVT and I8I4CVT are nops so return kid, MIPS III and above
>>> 2264  // since U8I4CVT is required to preserve the type of its type for
>>> 2265  // Fix_var_type at emitter time, we do not delete U8I4CVT #329096
>>> 2266  if (Is_Target_ISA_M3Plus() && (op == OPC_I8I4CVT || op ==
>>> OPC_U8I4CVT))
>>> 2267    return propagated;
>>> 2268#elif defined(TARG_X8664)
>>> 2269  if (! Is_Target_32bit() && op == OPC_U8U4CVT)
>>> 2270    return propagated;
>>> 2271#endif
>>> 2272  if ((Get_mtype_class(OPCODE_rtype(op)) &
>>> 2273       Get_mtype_class(OPCODE_desc(op))) != 0 &&
>>> 2274      MTYPE_size_min(OPCODE_rtype(op)) ==
>>> MTYPE_size_min(OPCODE_desc(op)) &&
>>> 2275      // bug912 open64.net. Do not delete U4I4CVT if his kid is a
>>> constant
>>> 2276      (!(OPCODE_rtype(op) == MTYPE_U4 &&
>>> 2277         OPCODE_desc(op) == MTYPE_I4 &&
>>> 2278         ccr->Tree() == NULL)))
>>> 2279    return propagated;
>>> 2280
>>> 2281  if ( WOPT_Enable_Cvt_Folding &&
>>> 2282#if defined(TARG_X8664) || defined(TARG_NVISA) || defined (TARG_SL)
>>> // bug 5851
>>> 2283       ! Is_Target_32bit() &&
>>> 2284#endif
>>> 2285      (op == OPC_I8U4CVT || op == OPC_U8U4CVT) &&
>>> 2286      WN_operator(kid) == OPR_LSHR ) {
>>> 2287    WN *bits = WN_kid1(kid);
>>> 2288    if ( WN_operator(bits) == OPR_INTCONST ) {
>>> 2289      INT bits_cnt = WN_const_val(bits);
>>> 2290      INT result_size = Actual_data_size(kid);
>>> 2291      if ( ( result_size <= MTYPE_size_min(MTYPE_I4) ) &&
>>> 2292          ( ( bits_cnt & 0x1F ) != 0 ) )
>>> 2293        {
>>> 2294          return propagated;
>>> 2295        }
>>> 2296    }
>>> 2297  }
>>> 2298
>>> 2299  CODEREP *retv;
>>> 2300  CODEREP *expr;
>>> 2301#if defined(TARG_X8664) || defined(TARG_NVISA)
>>> 2302  if (!Is_Target_32bit() && ccr->Tree() != NULL &&
>>> Allow_wrap_around_opt) {
>>> 2303    if (ccr->Tree()->Kind() == CK_OP && ccr->Tree()->Op() ==
>>> OPC_I8I4CVT &&
>>> 2304        op == OPC_I4I8CVT) { // bug 10707
>>> 2305      retv = ccr->Tree()->Opnd(0);
>>> 2306      ccr->Set_tree(retv);
>>> 2307    }
>>> 2308    else {
>>> 2309      cr->Set_opnd(0, ccr->Tree());
>>> 2310      retv = Hash_Op(cr);
>>> 2311      ccr->Set_tree(retv); // move the CVT to the operand
>>> 2312    }
>>> 2313  }
>>> 2314  else {
>>> 2315#endif
>>> 2316  expr = ccr->Convert2cr(WN_kid0(wn), this, propagated);
>>> 2317  cr->Set_opnd(0, expr);
>>> 2318  retv = Hash_Op(cr);
>>> 2319  ccr->Set_tree(retv);
>>> 2320  ccr->Set_scale(0);
>>> 2321#if defined(TARG_X8664) || defined(TARG_NVISA)
>>> 2322  }
>>> 2323#endif
>>> 2324  return propagated;
>>> 2325}
>>>
>>> With this fix, controls goes to 2316,
>>> expr is
>>> >LDC I8 -2147483649 <u=1 cr17> flags:0x0 b=-1
>>> retv is
>>> > LDC I8 -2147483649 <u=1 cr17> flags:0x0 b=-1
>>> >U4I4CVT <u=1 cr18> isop_flags:0x0 flags:0x0 b=-1
>>> the input is still:
>>>       I4INTCONST 1 (0x1)
>>>      I4I4LDID 0 <st 20> T<4,.predef_I4,4>
>>>     I4SHL
>>>     I4INTCONST -1 (0xffffffffffffffff)
>>>   I4ADD
>>> U4I4CVT
>>>
>>>
>>> Regards
>>> Gang
>>>
>>>
>>>  On Mon, Nov 28, 2011 at 10:40 AM, Sun Chan <sun.c...@gmail.com> wrote:
>>>
>>>> Sorry, pls send the corresponding function so I get a bigger picture of
>>>> what the deal is. It will be good to give me the expression tree before and
>>>> after this function call
>>>> Sun
>>>>
>>>>  On Mon, Nov 28, 2011 at 10:30 AM, Gang Yu <yugang...@gmail.com> wrote:
>>>>
>>>>> Inspired by your comments, I get a more reasonable fix.
>>>>>
>>>>> osprey/be/opt/opt_htable.cxx    -- 1fc05d0..0b7a14a 100644
>>>>> --- a/osprey/be/opt/opt_htable.cxx
>>>>> +++ b/osprey/be/opt/opt_htable.cxx
>>>>> @@ -2271,7 +2271,11 @@ CODEMAP::Canon_cvt(WN       *wn,
>>>>>  #endif
>>>>>    if ((Get_mtype_class(OPCODE_rtype(op)) &
>>>>>         Get_mtype_class(OPCODE_desc(op))) != 0 &&
>>>>> -      MTYPE_size_min(OPCODE_rtype(op)) ==
>>>>> MTYPE_size_min(OPCODE_desc(op)))
>>>>> +      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 &&
>>>>> +         OPCODE_desc(op) == MTYPE_I4 &&
>>>>> +         ccr->Tree() == NULL)))
>>>>>      return propagated;
>>>>>    if ( WOPT_Enable_Cvt_Folding &&
>>>>> This new patch does not lost the chances to U4I4CVT optimisation,
>>>>> while it makes the case of U4I4CVT const right.
>>>>>
>>>>> Thanks a lot.
>>>>>
>>>>> Regards
>>>>> Gang
>>>>>
>>>>>
>>>>>  On Mon, Nov 28, 2011 at 6:23 AM, Sun Chan <sun.c...@gmail.com> wrote:
>>>>>
>>>>>> so the const is of the right type to start out with. I'm not sure
>>>>>> htable is the right place to fix this (you could well be inhibiting
>>>>>> perfectly good optimization with your change).
>>>>>> I will need much more detail dump (e.g.when BAND first appear, before
>>>>>> and after) to know more about that.
>>>>>> Sun
>>>>>>
>>>>>>  On Sun, Nov 27, 2011 at 9:48 PM, Gang Yu <yugang...@gmail.com>wrote:
>>>>>>
>>>>>>>
>>>>>>> On 11/27/2011 03:02 PM, Sun Chan wrote:
>>>>>>>
>>>>>>> you only showed the output, can you show input to htable?
>>>>>>> Sun
>>>>>>>
>>>>>>> Sun, Input of this expression:
>>>>>>>
>>>>>>>    I4INTCONST 1 (0x1)
>>>>>>>    I4I4LDID 0 <st 20> T<4,.predef_I4,4>
>>>>>>>   I4SHL
>>>>>>>   I4INTCONST -1 (0xffffffffffffffff)
>>>>>>>  I4ADD
>>>>>>> U4I4CVT
>>>>>>>
>>>>>>> st 20 is var i ( copyproped to 31)
>>>>>>>
>>>>>>> regards
>>>>>>> Gang
>>>>>>>
>>>>>>> On Sun, Nov 27, 2011 at 11:24 AM, Gang Yu <yugang...@gmail.com>wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>>    Could a gatekeeper please help review the fix for bug912?
>>>>>>>> http://bugs.open64.net/show_bug.cgi?id=912
>>>>>>>>
>>>>>>>> The cut down bug case:
>>>>>>>>
>>>>>>>> struct go7007 {
>>>>>>>>   int sensor_framerate;
>>>>>>>>   int fps_scale;
>>>>>>>> };
>>>>>>>> int vti_bitlen(struct go7007 *go)
>>>>>>>> {
>>>>>>>>  unsigned int i, max_time_incr = go->sensor_framerate /
>>>>>>>> go->fps_scale;
>>>>>>>>  for (i = 31; (max_time_incr & ((1 << i) - 1)) == max_time_incr;
>>>>>>>> --i);
>>>>>>>>  return i + 1;
>>>>>>>> }
>>>>>>>> ### Assertion failure at line 2109 of
>>>>>>>> /fc/proj/ctires/open64/o64guru/src/Sat/trunk/osprey/be/cg/cgemit.cxx:
>>>>>>>> ### Compiler Error in file bug912-cutdown.c during Assembly phase:
>>>>>>>> ### literal for operand 1 is not in range
>>>>>>>> Analysis:
>>>>>>>> WHIRL dump snippet after WOPT:
>>>>>>>>  ......
>>>>>>>>  U4STID 50 <1,8,.preg_U4> T<8,.predef_U4,4> # max_time_incr {line:
>>>>>>>> 1/8}
>>>>>>>>    U4U4LDID 50 <1,8,.preg_U4> T<8,.predef_U4,4> # max_time_incr
>>>>>>>>     U4U4LDID 50 <1,8,.preg_U4> T<8,.predef_U4,4> # max_time_incr
>>>>>>>>     I8INTCONST -2147483649 (0xffffffff7fffffff)
>>>>>>>>    U4BAND
>>>>>>>>   I4U4EQ
>>>>>>>>  FALSEBR L2562 {line: 0/0}
>>>>>>>>
>>>>>>>> This is already wrong, U4BAND should not accept I8INTCONST kids.
>>>>>>>>
>>>>>>>> ((1 << 31) - 1) in such context should be codemapped to U4INTCONST
>>>>>>>> 2147483647 (0x7fffffff)
>>>>>>>>
>>>>>>>> Suggested patch:
>>>>>>>>
>>>>>>>> --- a/osprey/be/opt/opt_htable.cxx
>>>>>>>> +++ b/osprey/be/opt/opt_htable.cxx
>>>>>>>> @@ -3679,7 +3679,10 @@ CODEMAP::Add_expr(WN *wn, OPT_STAB
>>>>>>>> *opt_stab, STMTREP *stmt, CANON_CR *ccr,
>>>>>>>>         if ((MTYPE_type_class(OPCODE_rtype(op)) &
>>>>>>>> MTYPE_CLASS_INTEGER) != 0
>>>>>>>>  #ifdef TARG_X8664 // bug 7733
>>>>>>>>             && ! MTYPE_is_vector(OPCODE_rtype(op))
>>>>>>>> -           && ! MTYPE_is_vector(OPCODE_desc(op))
>>>>>>>> +           && ! MTYPE_is_vector(OPCODE_desc(op))
>>>>>>>> +            // bug912 open64.net. do not Canonicalize U4I4CVT
>>>>>>>> +            && ! (OPCODE_rtype(op) == MTYPE_U4 &&
>>>>>>>> +                  OPCODE_desc(op) == MTYPE_I4)
>>>>>>>>  #endif
>>>>>>>>            )
>>>>>>>>           return Canon_cvt(wn, opt_stab, stmt, ccr, cr, copyprop);
>>>>>>>> Could a gatekeeper please help review ? Thanks
>>>>>>>>
>>>>>>>> Regards
>>>>>>>> Gang
>>>>>>>>
>>>>>>>>
>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>> 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