can you clarify #3? Sun On Tue, Jul 3, 2012 at 8:49 PM, Xiaojing Zhang <xiaojing70...@gmail.com> wrote: > Hi Sun, > The original SELECT has the same res type with its Kid1 and Kid2. and for > 32 bit systems, the function "Set_dtyp_const_val" only works for constant, > and when const`s high 4 bytes are all 0`s or 1`s, the type is set to U4, > else to I8. so for SELECT whose kids are constant, all the possible cases > should be: > 1) LDC I8 2) LDC U4 3) LDC U4 4) LDC U4 > 5) LDC U4 > LDC I8 LDC U4 LDC U4 LDC I8 > LDC U4 > I8SELECT U4SELECT I8SELECT I8SELECT > I4SELECT > for 1) and 2), it is of right form; > for 3) and 5), we will set the type of SELECT to U4; > for 4), I8U4CVT will be added for U4. > so the patch should have covered all the cases. > > 2012/7/3 Sun Chan <sun.c...@gmail.com> >> >> can you try one test case where the const's high 4 bytes are not all >> 0's nor 1's? Your change should cause a cvt for that kind of cases and >> I'm not sure your fix is enough to cover those >> Sun >> >> On Tue, Jul 3, 2012 at 10:22 AM, Xiaojing Zhang <xiaojing70...@gmail.com> >> wrote: >> > Hi Sun, >> > Here is a new patch for bug#966, could you please review again? Thank >> > you >> > very much. >> > >> > >> > 2012/6/29 Xiaojing Zhang <xiaojing70...@gmail.com> >> >> >> >> Hi Sun, >> >> >> >> Could you please review the new patch? thank you very much. >> >> >> >> For case1, the IR dump after the new patch: >> >> LDID I4 I4 sym1v4 0 ty=402 <u=1 cr13> flags:0x8 b=-1 #first >> >> LDC U4 0 <u=1 cr17> flags:0x0 b=-1 >> >> I4I4NE <u=1 cr18> isop_flags:0x0 flags:0x0 b=-1 >> >> LDC U4 4294967292 <u=1 cr19> flags:0x0 b=-1 >> >> LDC U4 4294967288 <u=1 cr20> flags:0x0 b=-1 >> >> U4SELECT <u=0 cr0> isop_flags:0x0 flags:0x0 b=-1 >> >> >> >> New suggested patch: >> >> Index: osprey/be/opt/opt_htable.cxx >> >> =================================================================== >> >> --- osprey/be/opt/opt_htable.cxx (revision 3952) >> >> +++ osprey/be/opt/opt_htable.cxx (working copy) >> >> @@ -3737,7 +3737,22 @@ >> >> cr->Set_call_op_aux_id (WN_st_idx(wn)); >> >> break; >> >> #endif >> >> - } >> >> + // Fix bug966: for SELECT, both Kid 1 and Kid 2 must have res as >> >> the >> >> result type >> >> + case OPR_SELECT: >> >> + if (cr->Get_opnd(1)->Dtyp() != cr->Get_opnd(2)->Dtyp()) >> >> + for ( INT index = 1; index < cr->Kid_count(); index++) { >> >> + CODEREP *opnd = cr->Opnd(index); >> >> + if (cr->Dtyp() != opnd->Dtyp()) { >> >> + OPCODE opc = OPCODE_make_op(OPR_CVT, cr->Dtyp(), >> >> opnd->Dtyp()); >> >> + CODEREP *cvt_cr = Add_unary_node(opc, opnd); >> >> + cr->Set_opnd(index, cvt_cr); >> >> + } >> >> + } >> >> + else { >> >> + cr->Set_dtyp(cr->Get_opnd(1)->Dtyp()); >> >> + } >> >> + break; >> >> + } >> >> >> >> BOOL do_canonicalization = TRUE; >> >> if (WOPT_Enable_Canon_Compare && _phase == MAINOPT_PHASE) { >> >> >> >> Index: osprey/be/opt/opt_bdce.cxx >> >> =================================================================== >> >> --- osprey/be/opt/opt_bdce.cxx (revision 3952) >> >> +++ osprey/be/opt/opt_bdce.cxx (working copy) >> >> @@ -1381,8 +1381,25 @@ >> >> } >> >> else new_cr->Set_opnd(i, cr->Opnd(i)); >> >> } >> >> + // Fix bug966: for SELECT, both Kid 1 and Kid 2 must have res as >> >> the >> >> result type >> >> + opr = cr->Opr(); >> >> + if (opr == OPR_SELECT) { >> >> + if (new_cr->Get_opnd(1)->Dtyp() != new_cr->Get_opnd(2)->Dtyp()) >> >> { >> >> + for (INT index = 1; index < new_cr->Kid_count(); index++) { >> >> + CODEREP *opnd = new_cr->Opnd(index); >> >> + if (new_cr->Dtyp() != opnd->Dtyp()) { >> >> + OPCODE opc = OPCODE_make_op(OPR_CVT, new_cr->Dtyp(), >> >> opnd->Dtyp()); >> >> + CODEREP *cvt_cr = Htable()->Add_unary_node(opc, opnd); >> >> + new_cr->Set_opnd(index, cvt_cr); >> >> + need_rehash = TRUE; >> >> + } >> >> + } >> >> + } >> >> + else { >> >> + new_cr->Set_dtyp(new_cr->Get_opnd(1)->Dtyp()); >> >> + } >> >> + } >> >> // check if current node can be deleted >> >> - opr = cr->Opr(); >> >> if (opr == OPR_CVTL) { >> >> if (((Livebits(cr) & ~Bitmask_of_size(cr->Offset())) == 0) || >> >> Redundant_cvtl(MTYPE_is_signed(cr->Dtyp()), >> >> >> >> >> >> 2012/6/28 Sun Chan <sun.c...@gmail.com> >> >>> >> >>> true, for 32 bit systems, this could be a I4. In that case, I why >> >>> I8SELECT later on? >> >>> >> >>> On Thu, Jun 28, 2012 at 7:14 PM, Jian-Xin Lai <laij...@gmail.com> >> >>> wrote: >> >>> > I guess this is an "optimization" for x86, especially for -m32. The >> >>> > CG >> >>> > doesn't need to use TN pair for this value since the range is in U4. >> >>> > >> >>> > 2012/6/28 Sun Chan <sun.c...@gmail.com>: >> >>> >> that is what I meant, they shouldn't >> >>> >> Sun >> >>> >> >> >>> >> On Thu, Jun 28, 2012 at 6:56 PM, Jian-Xin Lai <laij...@gmail.com> >> >>> >> wrote: >> >>> >>> They were converted into U4 in HSSA. >> >>> >>> >> >>> >>> 2012/6/28 Sun Chan <sun.c...@gmail.com>: >> >>> >>>> but it is i8 in this case >> >>> >>>> Sun >> >>> >>>> >> >>> >>>> On Thu, Jun 28, 2012 at 6:36 PM, Jian-Xin Lai <laij...@gmail.com> >> >>> >>>> wrote: >> >>> >>>>> I remember I tried this when I was doing the 4-way merge. This >> >>> >>>>> code >> >>> >>>>> came from Pathscale and it's quite different from >> >>> >>>>> IA-64/NVISA/SL. >> >>> >>>>> At >> >>> >>>>> that time, we tried to unify them but failed. There was a lot of >> >>> >>>>> failures if we set the type of the const other than U4/I8. >> >>> >>>>> >> >>> >>>>> 2012/6/28 Sun Chan <sun.c...@gmail.com>: >> >>> >>>>>> Just do an experiment, turn off this thing for this particular >> >>> >>>>>> case to >> >>> >>>>>> prevent the cvt inserted, see what would >> >>> >>>>>> happen? >> >>> >>>>>> Sun >> >>> >>>>>> >> >>> >>>>>> On Wed, Jun 27, 2012 at 10:32 PM, Xiaojing Zhang >> >>> >>>>>> <xiaojing70...@gmail.com> wrote: >> >>> >>>>>>> Hi, Sun >> >>> >>>>>>> >> >>> >>>>>>> >> >>> >>>>>>> for case1, the IR dump after if_conv phase in WOPT below: >> >>> >>>>>>> >> >>> >>>>>>> I4I4LDID 0 <st 1> T<4,.predef_I4,4> >> >>> >>>>>>> >> >>> >>>>>>> I4INTCONST 0 (0x0) >> >>> >>>>>>> >> >>> >>>>>>> I4I4NE >> >>> >>>>>>> >> >>> >>>>>>> I8INTCONST 4294967292 (0xfffffffc) >> >>> >>>>>>> >> >>> >>>>>>> I8INTCONST 4294967288 (0xfffffff8) >> >>> >>>>>>> >> >>> >>>>>>> I8SELECT >> >>> >>>>>>> >> >>> >>>>>>> I8STID 49 <st 3> T<5,.predef_I8,4> {line: 1/29} {freq: 0, ln: >> >>> >>>>>>> 29, >> >>> >>>>>>> col: 0} >> >>> >>>>>>> >> >>> >>>>>>> >> >>> >>>>>>> but after the function 'Set_dtyp_const_val' in op_htable.h, >> >>> >>>>>>> the >> >>> >>>>>>> res type of >> >>> >>>>>>> const will be turned to U4. so I8U4CVT is needed to make sure >> >>> >>>>>>> both Kid 1 and >> >>> >>>>>>> Kid 2 have the same res type as SELECT. >> >>> >>>>>>> >> >>> >>>>>>> 696 void Set_dtyp_const_val(MTYPE dt, UINT64 v) { >> >>> >>>>>>> Is_True(Kind() == >> >>> >>>>>>> CK_CONST, >> >>> >>>>>>> >> >>> >>>>>>> 697 >> >>> >>>>>>> ("CODEREP::Set_dtyp_const_val, illegal kind")); >> >>> >>>>>>> >> >>> >>>>>>> 698 if (v == (v << >> >>> >>>>>>> 32) >> >>> >>>>>>> >> 32) >> >>> >>>>>>> >> >>> >>>>>>> 699 _dtyp = >> >>> >>>>>>> MTYPE_U4; >> >>> >>>>>>> >> >>> >>>>>>> 700 else _dtyp = >> >>> >>>>>>> MTYPE_I8; >> >>> >>>>>>> >> >>> >>>>>>> 701 >> >>> >>>>>>> u2.isconst.const_val >> >>> >>>>>>> = v; } >> >>> >>>>>>> >> >>> >>>>>>> >> >>> >>>>>>> >> >>> >>>>>>> 2012/6/27 Sun Chan <sun.c...@gmail.com> >> >>> >>>>>>>> >> >>> >>>>>>>> why should there be a I8U4CVT? the LDC could have been an I8 >> >>> >>>>>>>> to >> >>> >>>>>>>> start out >> >>> >>>>>>>> with. >> >>> >>>>>>>> Sun >> >>> >>>>>>>> >> >>> >>>>>>>> On Wed, Jun 27, 2012 at 4:56 PM, Xiaojing Zhang >> >>> >>>>>>>> <xiaojing70...@gmail.com> >> >>> >>>>>>>> wrote: >> >>> >>>>>>>> > >> >>> >>>>>>>> > Hi, >> >>> >>>>>>>> > >> >>> >>>>>>>> > Could a gatekeeper please help review the fix for >> >>> >>>>>>>> > bug966? >> >>> >>>>>>>> > (http://bugs.open64.net/show_bug.cgi?id=966) >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > 1. Test case >> >>> >>>>>>>> > >> >>> >>>>>>>> > The following two cases failed with command “-m32 -O2”. >> >>> >>>>>>>> > >> >>> >>>>>>>> > ### Assertion failure at line 255 of >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > /fc/home/zxj/open64/x86_DBG/osprey/../../osprey/be/cg/x8664/expand.cxx: >> >>> >>>>>>>> > >> >>> >>>>>>>> > ### Compiler Error in file zsh.c during Code_Expansion >> >>> >>>>>>>> > phase: >> >>> >>>>>>>> > >> >>> >>>>>>>> > ### Expand_Cmov: invalid src2 >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > Case1: >> >>> >>>>>>>> > >> >>> >>>>>>>> > __extension__ typedef long long int __quad_t; >> >>> >>>>>>>> > >> >>> >>>>>>>> > __extension__ typedef __quad_t __off64_t; >> >>> >>>>>>>> > >> >>> >>>>>>>> > __extension__ typedef int __pid_t; >> >>> >>>>>>>> > >> >>> >>>>>>>> > typedef struct >> >>> >>>>>>>> > >> >>> >>>>>>>> > { >> >>> >>>>>>>> > >> >>> >>>>>>>> > struct >> >>> >>>>>>>> > >> >>> >>>>>>>> > { >> >>> >>>>>>>> > >> >>> >>>>>>>> > } __data; >> >>> >>>>>>>> > >> >>> >>>>>>>> > }; >> >>> >>>>>>>> > >> >>> >>>>>>>> > typedef struct _IO_FILE FILE; >> >>> >>>>>>>> > >> >>> >>>>>>>> > typedef struct >> >>> >>>>>>>> > >> >>> >>>>>>>> > { >> >>> >>>>>>>> > >> >>> >>>>>>>> > } _G_fpos64_t; >> >>> >>>>>>>> > >> >>> >>>>>>>> > enum __codecvt_result >> >>> >>>>>>>> > >> >>> >>>>>>>> > { >> >>> >>>>>>>> > >> >>> >>>>>>>> > __codecvt_ok, >> >>> >>>>>>>> > >> >>> >>>>>>>> > }; >> >>> >>>>>>>> > >> >>> >>>>>>>> > extern int fseeko (FILE *__stream, __off64_t __off, int >> >>> >>>>>>>> > __whence) >> >>> >>>>>>>> > __asm__ >> >>> >>>>>>>> > ("" "fseeko64"); >> >>> >>>>>>>> > >> >>> >>>>>>>> > struct utmpx >> >>> >>>>>>>> > >> >>> >>>>>>>> > { >> >>> >>>>>>>> > >> >>> >>>>>>>> > __pid_t ut_pid; >> >>> >>>>>>>> > >> >>> >>>>>>>> > }; >> >>> >>>>>>>> > >> >>> >>>>>>>> > getlogtime(struct utmpx *u, int inout) >> >>> >>>>>>>> > >> >>> >>>>>>>> > { >> >>> >>>>>>>> > >> >>> >>>>>>>> > FILE *in; >> >>> >>>>>>>> > >> >>> >>>>>>>> > struct utmpx uu; >> >>> >>>>>>>> > >> >>> >>>>>>>> > int first = 1; >> >>> >>>>>>>> > >> >>> >>>>>>>> > do { >> >>> >>>>>>>> > >> >>> >>>>>>>> > if (fseeko(in, ((first) ? -1 : -2) * sizeof(struct utmpx), >> >>> >>>>>>>> > 1)) >> >>> >>>>>>>> > { >> >>> >>>>>>>> > >> >>> >>>>>>>> > } >> >>> >>>>>>>> > >> >>> >>>>>>>> > first = 0; >> >>> >>>>>>>> > >> >>> >>>>>>>> > } >> >>> >>>>>>>> > >> >>> >>>>>>>> > while (memcmp(&uu, u, sizeof(uu))); >> >>> >>>>>>>> > >> >>> >>>>>>>> > } >> >>> >>>>>>>> > >> >>> >>>>>>>> > Case2: >> >>> >>>>>>>> > >> >>> >>>>>>>> > typedef unsigned char uint8_t; >> >>> >>>>>>>> > >> >>> >>>>>>>> > typedef unsigned int uint32_t; >> >>> >>>>>>>> > >> >>> >>>>>>>> > typedef unsigned long long int uint64_t; >> >>> >>>>>>>> > >> >>> >>>>>>>> > extern memddd(unsigned int); >> >>> >>>>>>>> > >> >>> >>>>>>>> > void build_avp(uint32_t avp_vendor, uint64_t in_value_len) >> >>> >>>>>>>> > >> >>> >>>>>>>> > { >> >>> >>>>>>>> > >> >>> >>>>>>>> > if (avp_vendor != 0) >> >>> >>>>>>>> > >> >>> >>>>>>>> > { >> >>> >>>>>>>> > >> >>> >>>>>>>> > in_value_len = in_value_len +4; >> >>> >>>>>>>> > >> >>> >>>>>>>> > } >> >>> >>>>>>>> > >> >>> >>>>>>>> > { >> >>> >>>>>>>> > >> >>> >>>>>>>> > memddd(in_value_len); >> >>> >>>>>>>> > >> >>> >>>>>>>> > } >> >>> >>>>>>>> > >> >>> >>>>>>>> > } >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > 2. Analyses >> >>> >>>>>>>> > >> >>> >>>>>>>> > The assertion failure is triggered during Code_Expansion >> >>> >>>>>>>> > phase, when >> >>> >>>>>>>> > expanding I8SELECT, the pair TN of its kid is null, so it >> >>> >>>>>>>> > hit >> >>> >>>>>>>> > the >> >>> >>>>>>>> > assertion. >> >>> >>>>>>>> > But the whirl IR after WOPT phase was not correct, so the >> >>> >>>>>>>> > root >> >>> >>>>>>>> > cause >> >>> >>>>>>>> > should >> >>> >>>>>>>> > be in WOPT phase. In SELECT, Both Kid 1 and Kid 2 must have >> >>> >>>>>>>> > res as the >> >>> >>>>>>>> > result type. In case1, the Dtyp of kid1 and kid2 turn to U4 >> >>> >>>>>>>> > from I8 in >> >>> >>>>>>>> > SSA::Create_CODEMAP phase; in case2, the Dtyp of kid 1 turn >> >>> >>>>>>>> > to >> >>> >>>>>>>> > U4 from >> >>> >>>>>>>> > U8 in >> >>> >>>>>>>> > BITWISE_DCE phase. So the fix method here is to generate >> >>> >>>>>>>> > CVT >> >>> >>>>>>>> > for the >> >>> >>>>>>>> > kids to >> >>> >>>>>>>> > make sure their Dtyp are the same with SELECT. >> >>> >>>>>>>> > >> >>> >>>>>>>> >>>In Expand_Cmov:255 >> >>> >>>>>>>> > >> >>> >>>>>>>> > Build_OP(top, result, src, rflags, ops); >> >>> >>>>>>>> > >> >>> >>>>>>>> > Set_OP_cond_def_kind(OPS_last(ops), >> >>> >>>>>>>> > OP_ALWAYS_COND_DEF); >> >>> >>>>>>>> > >> >>> >>>>>>>> > if (result2 != NULL) { >> >>> >>>>>>>> > >> >>> >>>>>>>> > è Is_True(src2 != NULL, ("Expand_Cmov: invalid src2")); >> >>> >>>>>>>> > >> >>> >>>>>>>> > Build_OP(top, result2, src2, rflags, ops); >> >>> >>>>>>>> > >> >>> >>>>>>>> > Set_OP_cond_def_kind(OPS_last(ops), >> >>> >>>>>>>> > OP_ALWAYS_COND_DEF); >> >>> >>>>>>>> > >> >>> >>>>>>>> > } >> >>> >>>>>>>> > >> >>> >>>>>>>> > the src2 value is set at: >> >>> >>>>>>>> > >> >>> >>>>>>>> > TN* result_hi = NULL; >> >>> >>>>>>>> > >> >>> >>>>>>>> > TN* true_tn_hi = NULL; >> >>> >>>>>>>> > >> >>> >>>>>>>> > if (OP_NEED_PAIR(select_type)) { >> >>> >>>>>>>> > >> >>> >>>>>>>> > result_hi = Get_TN_Pair(result); >> >>> >>>>>>>> > >> >>> >>>>>>>> > è true_tn_hi = Get_TN_Pair(true_tn); >> >>> >>>>>>>> > >> >>> >>>>>>>> > } >> >>> >>>>>>>> > >> >>> >>>>>>>> > For case 1, In function Exp_Select_And_Condition, the value >> >>> >>>>>>>> > of >> >>> >>>>>>>> > kid2 >> >>> >>>>>>>> > (false_tn, TN152) of SELECT is copied to result, and it >> >>> >>>>>>>> > also >> >>> >>>>>>>> > create a >> >>> >>>>>>>> > pair >> >>> >>>>>>>> > TN for the result. >> >>> >>>>>>>> > >> >>> >>>>>>>> > [ 0, 0] TN159 :- mov32 TN152 ; copy >> >>> >>>>>>>> > >> >>> >>>>>>>> > [ 0, 0] TN160 :- mov32 TN153 ; copy >> >>> >>>>>>>> > >> >>> >>>>>>>> > [ 0, 0] TN33(%rflags) :- test32 TN157 TN157 ; >> >>> >>>>>>>> > >> >>> >>>>>>>> > then, it will call Expand_Comv to decide whether to copy >> >>> >>>>>>>> > the >> >>> >>>>>>>> > kid1 >> >>> >>>>>>>> > (true_tn,TN149) of SELECT to result, and that depend on the >> >>> >>>>>>>> > value of the >> >>> >>>>>>>> > compare. >> >>> >>>>>>>> > >> >>> >>>>>>>> > after generate CVT for the kids, the ops below: >> >>> >>>>>>>> > >> >>> >>>>>>>> > [ 0, 0] TN159 :- mov32 TN152 ; copy, >> >>> >>>>>>>> > >> >>> >>>>>>>> > [ 0, 0] TN160 :- mov32 TN153 ; copy >> >>> >>>>>>>> > >> >>> >>>>>>>> > [ 0, 0] TN33(%rflags) :- test32 TN157 TN157 ; >> >>> >>>>>>>> > >> >>> >>>>>>>> > [ 0, 0] TN159 :- cmovne TN149 TN33(%rflags) ; cond_def >> >>> >>>>>>>> > >> >>> >>>>>>>> > [ 0, 0] TN160 :- cmovne TN150 TN33(%rflags) ; cond_def >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > 3. IR Dump >> >>> >>>>>>>> > >> >>> >>>>>>>> > Case1: >> >>> >>>>>>>> > >> >>> >>>>>>>> > Original IR: >> >>> >>>>>>>> > >> >>> >>>>>>>> > I4I4LDID 54 <1,4,.preg_I4> T<4,.predef_I4,4> # first >> >>> >>>>>>>> > >> >>> >>>>>>>> > U4INTCONST 0 (0x0) >> >>> >>>>>>>> > >> >>> >>>>>>>> > I4I4NE >> >>> >>>>>>>> > >> >>> >>>>>>>> > U4U4LDID 55 <1,8,.preg_U4> T<8,.predef_U4,4> # lpre_cst >> >>> >>>>>>>> > >> >>> >>>>>>>> > U4U4LDID 56 <1,8,.preg_U4> T<8,.predef_U4,4> # lpre_cst >> >>> >>>>>>>> > >> >>> >>>>>>>> > I8SELECT >> >>> >>>>>>>> > >> >>> >>>>>>>> > I8STID 4 <2,12,.SP> T<5,.predef_I8,4> {line: 1/29} >> >>> >>>>>>>> > >> >>> >>>>>>>> > After adding CVT: >> >>> >>>>>>>> > >> >>> >>>>>>>> > LDID I4 I4 sym1v4 0 ty=402 <u=1 cr13> flags:0x8 b=-1 >> >>> >>>>>>>> > #first >> >>> >>>>>>>> > >> >>> >>>>>>>> > LDC U4 0 <u=4 cr17> flags:0x0 b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > I4I4NE <u=1 cr18> isop_flags:0x0 flags:0x0 b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > LDC U4 4294967292 <u=1 cr19> flags:0x0 b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > I8U4CVT <u=1 cr21> isop_flags:0x0 flags:0x0 b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > LDC U4 4294967288 <u=1 cr20> flags:0x0 b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > I8U4CVT <u=1 cr22> isop_flags:0x0 flags:0x0 b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > I8SELECT <u=1 cr23> isop_flags:0x0 flags:0x0 b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > Case2: >> >>> >>>>>>>> > >> >>> >>>>>>>> > Original IR: >> >>> >>>>>>>> > >> >>> >>>>>>>> > LDID U4 U4 sym1v2 0 ty=802 <u=1 cr1> flags:0x10 b=-1 >> >>> >>>>>>>> > #avp_vendor >> >>> >>>>>>>> > >> >>> >>>>>>>> > LDC U4 0 <u=1 cr11> flags:0x0 b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > I4U4NE <u=1 cr12> isop_flags:0xcc040 flags:0x1 b=E1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > LDID U8 U8 sym6v3 49 ty=902 <u=0 cr25> flags:0x0 >> >>> >>>>>>>> > b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > U4U8CVT <u=0 cr31> isop_flags:0x0 flags:0x0 b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > LDC U4 4 <u=0 cr13> flags:0x0 b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > U4ADD <u=0 cr32> isop_flags:0x0 flags:0x1 b=E2 >> >>> >>>>>>>> > >> >>> >>>>>>>> > LDID U8 U8 sym6v3 49 ty=902 <u=0 cr25> flags:0x0 b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > U8SELECT <u=1 cr33> isop_flags:0x0 flags:0x1 b=E41 >> >>> >>>>>>>> > >> >>> >>>>>>>> > After adding CVT: >> >>> >>>>>>>> > >> >>> >>>>>>>> > LDID U4 U4 sym1v2 0 ty=802 <u=1 cr1> flags:0x10 b=-1 >> >>> >>>>>>>> > #avp_vendor >> >>> >>>>>>>> > >> >>> >>>>>>>> > LDC U4 0 <u=1 cr11> flags:0x0 b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > I4U4NE <u=1 cr12> isop_flags:0xcc040 flags:0x1 b=E1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > LDID U8 U8 sym6v3 49 ty=902 <u=2 cr25> flags:0x0 b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > U4U8CVT <u=1 cr31> isop_flags:0x0 flags:0x0 b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > LDC U4 4 <u=1 cr13> flags:0x0 b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > U4ADD <u=1 cr32> isop_flags:0x0 flags:0x1 b=E2 >> >>> >>>>>>>> > >> >>> >>>>>>>> > U8U4CVT <u=1 cr33> isop_flags:0x0 flags:0x0 b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > LDID U8 U8 sym6v3 49 ty=902 <u=2 cr25> flags:0x0 b=-1 >> >>> >>>>>>>> > >> >>> >>>>>>>> > U8SELECT <u=1 cr34> isop_flags:0x0 flags:0x1 b=E41 >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > 4. Patch: >> >>> >>>>>>>> > >> >>> >>>>>>>> > Index: osprey/be/opt/opt_htable.cxx >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > =================================================================== >> >>> >>>>>>>> > >> >>> >>>>>>>> > --- osprey/be/opt/opt_htable.cxx (revision 3952) >> >>> >>>>>>>> > >> >>> >>>>>>>> > +++ osprey/be/opt/opt_htable.cxx (working copy) >> >>> >>>>>>>> > >> >>> >>>>>>>> > @@ -3737,6 +3737,17 @@ >> >>> >>>>>>>> > >> >>> >>>>>>>> > cr->Set_call_op_aux_id (WN_st_idx(wn)); >> >>> >>>>>>>> > >> >>> >>>>>>>> > break; >> >>> >>>>>>>> > >> >>> >>>>>>>> > #endif >> >>> >>>>>>>> > >> >>> >>>>>>>> > + // Fix bug966: for SELECT, both Kid 1 and Kid 2 must >> >>> >>>>>>>> > have res as >> >>> >>>>>>>> > the >> >>> >>>>>>>> > result type >> >>> >>>>>>>> > >> >>> >>>>>>>> > + case OPR_SELECT: >> >>> >>>>>>>> > >> >>> >>>>>>>> > + for (INT index = 1; index < cr->Kid_count(); >> >>> >>>>>>>> > index++) >> >>> >>>>>>>> > { >> >>> >>>>>>>> > >> >>> >>>>>>>> > + CODEREP *opnd = cr->Opnd(index); >> >>> >>>>>>>> > >> >>> >>>>>>>> > + if (cr->Dtyp() != opnd->Dtyp()) { >> >>> >>>>>>>> > >> >>> >>>>>>>> > + OPCODE opc = OPCODE_make_op(OPR_CVT, >> >>> >>>>>>>> > cr->Dtyp(), >> >>> >>>>>>>> > opnd->Dtyp()); >> >>> >>>>>>>> > >> >>> >>>>>>>> > + CODEREP *cvt_cr = Add_unary_node(opc, >> >>> >>>>>>>> > opnd); >> >>> >>>>>>>> > >> >>> >>>>>>>> > + cr->Set_opnd(index, cvt_cr); >> >>> >>>>>>>> > >> >>> >>>>>>>> > + } >> >>> >>>>>>>> > >> >>> >>>>>>>> > + } >> >>> >>>>>>>> > >> >>> >>>>>>>> > + break; >> >>> >>>>>>>> > >> >>> >>>>>>>> > } >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > BOOL do_canonicalization = TRUE; >> >>> >>>>>>>> > >> >>> >>>>>>>> > Index: osprey/be/opt/opt_bdce.cxx >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > =================================================================== >> >>> >>>>>>>> > >> >>> >>>>>>>> > --- osprey/be/opt/opt_bdce.cxx (revision 3952) >> >>> >>>>>>>> > >> >>> >>>>>>>> > +++ osprey/be/opt/opt_bdce.cxx (working copy) >> >>> >>>>>>>> > >> >>> >>>>>>>> > @@ -1381,8 +1381,20 @@ >> >>> >>>>>>>> > >> >>> >>>>>>>> > } >> >>> >>>>>>>> > >> >>> >>>>>>>> > else new_cr->Set_opnd(i, cr->Opnd(i)); >> >>> >>>>>>>> > >> >>> >>>>>>>> > } >> >>> >>>>>>>> > >> >>> >>>>>>>> > + // Fix bug966: for SELECT, both Kid 1 and Kid 2 must >> >>> >>>>>>>> > have >> >>> >>>>>>>> > res as >> >>> >>>>>>>> > the >> >>> >>>>>>>> > result type >> >>> >>>>>>>> > >> >>> >>>>>>>> > + opr = cr->Opr(); >> >>> >>>>>>>> > >> >>> >>>>>>>> > + if (opr == OPR_SELECT) { >> >>> >>>>>>>> > >> >>> >>>>>>>> > + for (INT index = 1; index < new_cr->Kid_count(); >> >>> >>>>>>>> > index++) { >> >>> >>>>>>>> > >> >>> >>>>>>>> > + CODEREP *opnd = new_cr->Opnd(index); >> >>> >>>>>>>> > >> >>> >>>>>>>> > + if (new_cr->Dtyp() != opnd->Dtyp()) { >> >>> >>>>>>>> > >> >>> >>>>>>>> > + OPCODE opc = OPCODE_make_op(OPR_CVT, >> >>> >>>>>>>> > new_cr->Dtyp(), >> >>> >>>>>>>> > opnd->Dtyp()); >> >>> >>>>>>>> > >> >>> >>>>>>>> > + CODEREP *cvt_cr = Htable()->Add_unary_node(opc, >> >>> >>>>>>>> > opnd); >> >>> >>>>>>>> > >> >>> >>>>>>>> > + new_cr->Set_opnd(index, cvt_cr); >> >>> >>>>>>>> > >> >>> >>>>>>>> > + need_rehash = TRUE; >> >>> >>>>>>>> > >> >>> >>>>>>>> > + } >> >>> >>>>>>>> > >> >>> >>>>>>>> > + } >> >>> >>>>>>>> > >> >>> >>>>>>>> > + } >> >>> >>>>>>>> > >> >>> >>>>>>>> > // check if current node can be deleted >> >>> >>>>>>>> > >> >>> >>>>>>>> > - opr = cr->Opr(); >> >>> >>>>>>>> > >> >>> >>>>>>>> > if (opr == OPR_CVTL) { >> >>> >>>>>>>> > >> >>> >>>>>>>> > if (((Livebits(cr) & ~Bitmask_of_size(cr->Offset())) >> >>> >>>>>>>> > == >> >>> >>>>>>>> > 0) || >> >>> >>>>>>>> > >> >>> >>>>>>>> > Redundant_cvtl(MTYPE_is_signed(cr->Dtyp()), >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > >> >>> >>>>>>>> > ------------------------------------------------------------------------------ >> >>> >>>>>>>> > Live Security Virtual Conference >> >>> >>>>>>>> > Exclusive live event will cover all the ways today's >> >>> >>>>>>>> > security >> >>> >>>>>>>> > and >> >>> >>>>>>>> > threat landscape has changed and how IT managers can >> >>> >>>>>>>> > respond. >> >>> >>>>>>>> > Discussions >> >>> >>>>>>>> > will include endpoint security, mobile security and the >> >>> >>>>>>>> > latest >> >>> >>>>>>>> > in >> >>> >>>>>>>> > malware >> >>> >>>>>>>> > threats. >> >>> >>>>>>>> > http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >> >>> >>>>>>>> > _______________________________________________ >> >>> >>>>>>>> > Open64-devel mailing list >> >>> >>>>>>>> > Open64-devel@lists.sourceforge.net >> >>> >>>>>>>> > https://lists.sourceforge.net/lists/listinfo/open64-devel >> >>> >>>>>>>> > >> >>> >>>>>>> >> >>> >>>>>>> >> >>> >>>>>> >> >>> >>>>>> >> >>> >>>>>> >> >>> >>>>>> ------------------------------------------------------------------------------ >> >>> >>>>>> Live Security Virtual Conference >> >>> >>>>>> Exclusive live event will cover all the ways today's security >> >>> >>>>>> and >> >>> >>>>>> threat landscape has changed and how IT managers can respond. >> >>> >>>>>> Discussions >> >>> >>>>>> will include endpoint security, mobile security and the latest >> >>> >>>>>> in >> >>> >>>>>> malware >> >>> >>>>>> threats. >> >>> >>>>>> http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >> >>> >>>>>> _______________________________________________ >> >>> >>>>>> 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 >> >> >> >> >> > > >
------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel