this is the kind of trace I had always wanted from day one. Thx for taking the trouble to doing that right. Sun
On 10/7/11, Jian-Xin Lai <laij...@gmail.com> wrote: > Looks like the opt_vn.cxx_patch is unnecessary? > For the other two patches, they are OK to me. > > 2011/10/8 Gilmore, Doug <doug.gilm...@amd.com> > >> There are two changes I would like to have reviewed. >> >> One is trace_cleanup.patch, which cleans up CODEREP >> tracing output in WOPT. Without the patch the following >> tracing output is generated: >> >> > LDRC F10 0x0x80b67e8 <u=1 cr10> flags:0x0 b=-1 >> > LDRC F10 0x0x80b68d8 <u=1 cr20> flags:0x0 b=-1 >> > F10DIV <u=1 cr21> isop_flags:0x0 flags:0x0 b=-1 >> >> With it, we have: >> >> > LDRC F10 <1,52> <u=1 cr10> flags:0x0 b=-1 >> > LDRC F10 <1,57> <u=1 cr20> flags:0x0 b=-1 >> > F10DIV <u=1 cr21> isop_flags:0x0 flags:0x0 b=-1 >> >> The other patch to be reviewed the fix to bug 771. >> >> The issue is that there are two expressions: >> >> > LDRC F10 <1,52> <u=1 cr10> flags:0x0 b=-1 >> > LDRC F10 <1,51> <u=2 cr7> flags:0x0 b=-1 >> > F10DIV <u=2 cr11> isop_flags:0xcc040 flags:0x1 b=E1 >> >> > LDRC F10 <1,52> <u=1 cr10> flags:0x0 b=-1 >> > LDRC F10 <1,57> <u=1 cr20> flags:0x0 b=-1 >> > F10DIV <u=1 cr21> isop_flags:0xcc040 flags:0x1 b=E2 >> >> Where the symbol table entries are: >> >> >> [51]: <constant> <1,51> Constant of type .predef_F10 (#12, F10) >> value: 0.0000000000000000000 >> Address: 0(.rodata<1,58>) Alignment: 16 bytes >> Flags: 0x00000008 initialized, XLOCAL >> Sclass: FSTATIC >> [52]: <constant> <1,52> Constant of type .predef_F10 (#12, F10) >> value: 1.0000000000000000000 >> Address: 16(.rodata<1,58>) Alignment: 16 bytes >> Flags: 0x00000008 initialized, XLOCAL >> Sclass: FSTATIC >> ... >> [57]: <constant> <1,57> Constant of type .predef_F10 (#12, F10) >> value: -0.0000000000000000000 >> Address: 0(<1,57>) Alignment: 16 bytes >> Flags: 0x00000008 initialized, XLOCAL >> Sclass: FSTATIC >> >> The two expressions are incorrectly given the same value number. >> >> If we apply the debugging patch opt_vn.cxx_patch, without the patch >> for the fix we get: >> >> $ opencc bug771.c >> <cr 10> = vn37 = F10_const(1.0000000000000000000) >> <cr 7> = vn38 = F10_const(0.0000000000000000000) >> <cr 11> = vn39 = OPC_F10DIV(vn37, vn38) >> <cr 15> = vn41 = LDA cr_id(15) >> <cr 16> = vn41 = LDA cr_id(15) >> <cr 14> = vn36 = ==> ...Chi result, or has Bottom opnd >> <cr 17> = vn36 = ==> ...Chi result, or has Bottom opnd >> <cr 10> = vn37 = F10_const(1.0000000000000000000) >> <cr 20> = vn38 = F10_const(0.0000000000000000000) <==== BAD same >> value >> number as cr 7 >> <cr 21> = vn39 = OPC_F10DIV(vn37, vn38) <==== BAD same >> value >> number as cr 11 >> <cr 7> = vn38 = F10_const(0.0000000000000000000) >> <cr 22> = vn42 = OPC_I4F10LT(vn38, vn39) >> <cr 23> = vn1 = I8_const(0) >> <cr 10> = vn37 = F10_const(1.0000000000000000000) >> <cr 7> = vn38 = F10_const(0.0000000000000000000) >> <cr 11> = vn39 = OPC_F10DIV(vn37, vn38) >> <cr 15> = vn41 = LDA cr_id(15) >> <cr 16> = vn41 = LDA cr_id(15) >> <cr 14> = vn36 = ==> ...Chi result, or has Bottom opnd >> <cr 17> = vn36 = ==> ...Chi result, or has Bottom opnd >> <cr 10> = vn37 = F10_const(1.0000000000000000000) >> <cr 20> = vn38 = F10_const(0.0000000000000000000) >> <cr 21> = vn39 = OPC_F10DIV(vn37, vn38) >> <cr 7> = vn38 = F10_const(0.0000000000000000000) >> <cr 22> = vn42 = OPC_I4F10LT(vn38, vn39) >> <cr 23> = vn1 = I8_const(0) >> >> With the bad value number, an incorrect CSE transformation is generated. >> >> With the fix we see: >> >> $ opencc bug771.c >> <cr 10> = vn37 = F10_const(1.0000000000000000000) >> <cr 7> = vn38 = F10_const(0.0000000000000000000) >> <cr 11> = vn39 = OPC_F10DIV(vn37, vn38) >> <cr 15> = vn41 = LDA cr_id(15) >> <cr 16> = vn41 = LDA cr_id(15) >> <cr 14> = vn36 = ==> ...Chi result, or has Bottom opnd >> <cr 17> = vn36 = ==> ...Chi result, or has Bottom opnd >> <cr 10> = vn37 = F10_const(1.0000000000000000000) >> <cr 20> = vn42 = F10_const(-0.0000000000000000000) <=== GOOD, not the same >> as cr 7 >> <cr 21> = vn43 = OPC_F10DIV(vn37, vn42) <=== GOOD, not the same >> as cr 11 >> <cr 7> = vn38 = F10_const(0.0000000000000000000) >> <cr 22> = vn44 = OPC_I4F10LT(vn38, vn43) >> <cr 23> = vn1 = I8_const(0) >> <cr 10> = vn37 = F10_const(1.0000000000000000000) >> <cr 7> = vn38 = F10_const(0.0000000000000000000) >> <cr 11> = vn39 = OPC_F10DIV(vn37, vn38) >> <cr 15> = vn41 = LDA cr_id(15) >> <cr 16> = vn41 = LDA cr_id(15) >> <cr 14> = vn36 = ==> ...Chi result, or has Bottom opnd >> <cr 17> = vn36 = ==> ...Chi result, or has Bottom opnd >> <cr 10> = vn37 = F10_const(1.0000000000000000000) >> <cr 20> = vn42 = F10_const(-0.0000000000000000000) >> <cr 21> = vn43 = OPC_F10DIV(vn37, vn42) >> <cr 7> = vn38 = F10_const(0.0000000000000000000) >> <cr 22> = vn44 = OPC_I4F10LT(vn38, vn43) >> <cr 23> = vn1 = I8_const(0) >> $ >> >> In this case the bad CSE transformation won't be generated. >> >> Note that this problem is handled correctly when the test >> uses double (F8), so it was just a matter of adding logic >> to handle long double (F10). >> >> BTW, this test program used to work due to broken code in >> Targ_Is_Integral() for MTYPE_FQ. At that time integral value >> detection for for MTYPE_FQ was broken, thus HASH_TCON() was used to >> produce the hash index, causing different the hash indices to be >> generated for 0.0 and -0.0 of type MTYPE_FQ. >> >> The bug in Targ_Is_Integral() was fixed when MTYPE_F10 was >> introduced. However fixing that exposed this problem. >> >> Could someone review these changes when they have the chance? >> >> Thanks, >> >> Doug >> >> >> ------------------------------------------------------------------------------ >> All of the data generated in your IT infrastructure is seriously valuable. >> Why? It contains a definitive record of 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-d2dcopy2 >> _______________________________________________ >> Open64-devel mailing list >> Open64-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/open64-devel >> >> > > > -- > Regards, > Lai Jian-Xin > ------------------------------------------------------------------------------ All of the data generated in your IT infrastructure is seriously valuable. Why? It contains a definitive record of 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-d2dcopy2 _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel