Thank you very much. I created a page on Open64 wiki for this kind of changes: http://wiki.open64.net/index.php/WHIRLSpecUpdates
2012/2/9 Gautam Chakrabarti <gautam.c...@yahoo.com>: > The changes now look fine, please go ahead. I would also suggest to update > the WHIRL spec saying that for VLS the type size is -1. > > -Gautam > > > From: Jian-Xin Lai <laij...@gmail.com> > To: Gautam Chakrabarti <gautam.c...@yahoo.com> > Cc: open64-devel <open64-devel@lists.sourceforge.net> > Sent: Tuesday, February 7, 2012 12:47 AM > > Subject: Re: [Open64-devel] code review request for bug 933 [WGEN] > > (1): > I don't find any document about the size of VLS. But there are some > information in the debug info generated by GCC. > > For a given type: > struct ST { > char x[size]; > }; > > The debug info for the TYPE is: > <2><71>: Abbrev Number: 3 (DW_TAG_structure_type) > DW_AT_sibling : <8f> > DW_AT_name : ST > DW_AT_byte_size : 0xffffffff > DW_AT_decl_file : 1 > DW_AT_decl_line : 4 > From the output, I think we should set the size to -1. > > There is another issue if the size is set to 0 in symtab verifier. > For the following case: > struct ST { > int f1; > int f2; > char x[size]; > }; > The field f2 has 4-byte offset, which is greater than the type size if > it's 0 and will cause an assertion in symtab verifier. > > (2): > I made a new change to set the qualifiers before set the type_tree's IDX: > @@ -633,6 +632,21 @@ > Set_TY_anonymous(ty); > Set_TY_etype (ty, Get_TY (gs_tree_type(type_tree))); > Set_TY_align (idx, TY_align(TY_etype(ty))); > + > + // For GNU VLS (Variable length array in struct), > + // the size and upper boundary is expression. > + // If the TYPE_TY_IDX(type_tree) is not set, when > + // expanding the TY's size, it will fall into a infinite > + // recursion if the type_tree is referenced in the > + // size expression. So we set the TYPE_TY_IDX here. > + if (gs_type_readonly(type_tree)) > + Set_TY_is_const (idx); > + if (gs_type_volatile(type_tree)) > + Set_TY_is_volatile (idx); > + if (gs_type_restrict(type_tree)) > + Set_TY_is_restrict (idx); > + TYPE_TY_IDX(type_tree) = idx; > + > // assumes 1 dimension > // nested arrays are treated as arrays of arrays > ARB_HANDLE arb = New_ARB (); > > How do you think of the new change? > > 2012/2/7 Gautam Chakrabarti <gautam.c...@yahoo.com>: >> Hi Jian-Xin, >> >> Regarding (1): It's still not quite clear why tsize needs to be -1 for >> VLS. >> Is it just to match GCC's convention? I don't seem to find any place >> checking for this size of -1, except an assertion. If this special size is >> not really needed, then why not just use 0 for it? The size is still part >> of >> the WHIRL spec. So if it does need to be -1 for VLS, doesn't the spec need >> to be updated to reflect this? Could you explain why size needs to be -1? >> >> Regarding (2): Note that the TY_IDX can change after you set TYPE_TY_IDX >> if >> a type qualifier like volatile is applied to the type. Are type qualifiers >> applicable in this context? If no, then setting TYPE_TY_IDX in the new >> place >> should be safe. >> >> Other changes look fine. >> >> Thanks, >> Gautam >> >> >> From: Jian-Xin Lai <laij...@gmail.com> >> To: Gautam Chakrabarti <gautam.c...@yahoo.com> >> Cc: open64-devel <open64-devel@lists.sourceforge.net> >> Sent: Saturday, February 4, 2012 9:39 PM >> Subject: Re: [Open64-devel] code review request for bug 933 [WGEN] >> >> Hi Gautam, >> >> Thank you very much. Here is a new patch based on your comments. >> >> 1. The size of c99 VLA is 0 and GCC VLS is -1 in this patch now. >> In the debug info generated by GCC, the size of the GCC VLS is -1 and >> there is no size info for C99 VLA. So in the new patch, the size of >> C99 VLA is set to 0 according to the WHIRL spec and VLS to -1 to match >> GCC's behavior. >> >> 2. With VLS, the size of the TY is not an INT_CST expression. If the >> TYPE_TY_IDX(type_tree) is not set, when expanding the TY's size, it >> will fall into a infinite recursion if the type_tree is referenced in >> the size expression. I checked the assignment to the idx and found >> it's not changed between the new inserted line and the line of the >> original assignment. So it should be safe. >> >> 3. All others has been changed according to your comments. >> >> Could you please review again? Thank you very much. >> >> 2012/2/3 Gautam Chakrabarti <gautam.c...@yahoo.com>: >>> Hi Jian-Xin, >>> >>> Below are some questions/comments: >>> >>> Why did you change the tsize from 0 to -1? If this is indeed required, >>> then >>> this is an IR change, and the WHIRL symtab spec should be updated to >>> reflect >>> this. Also if this needs to change, then a global gatekeeper should >>> approve >>> this. >>> >>> In the following change from wgen_spin_symbol.cxx: >>> >>> @@ -633,6 +629,7 @@ >>> Set_TY_anonymous(ty); >>> Set_TY_etype (ty, Get_TY (gs_tree_type(type_tree))); >>> Set_TY_align (idx, TY_align(TY_etype(ty))); >>> + TYPE_TY_IDX(type_tree) = idx; >>> // assumes 1 dimension >>> // nested arrays are treated as arrays of arrays >>> ARB_HANDLE arb = New_ARB (); >>> >>> >>> why did you set TYPE_TY_IDX as above? Because this is anyway set at the >>> end >>> of this function. Are you setting it because someone queries the IDX of >>> this >>> type before it's set at the end? Note that this idx at this point may not >>> be >>> the final IDX, and may be updated with other flags. >>> >>> Below are some minor comments: >>> >>> In WGEN_Compose_Address(), you could avoid creating multiple branches >>> each >>> calling WN_CreateLda. Instead you could set up the offset based on "ofst" >>> and simplify the code, like you have done in WGEN_Create_Iload() and >>> elsewhere. >>> >>> Similarly WGEN_Create_Iload() and WGEN_Create_IStore() can be further >>> simplified to have a single call to WN_CreateIload/WN_CreateIStore by >>> first >>> setting up the address and offset. >>> >>> Thanks, >>> Gautam >>> >>> >>> From: Jian-Xin Lai <laij...@gmail.com> >>> To: open64-devel <open64-devel@lists.sourceforge.net> >>> Sent: Tuesday, January 17, 2012 3:18 AM >>> Subject: [Open64-devel] code review request for bug 933 [WGEN] >>> >>> Hi, >>> >>> Could a gatekeeper review the patch for bug #933? Thank you very much. >>> >>> This patch is used to support GCC extension - variable length array in >>> struct (VLA/VLS). There are 3 major kinds of changes in the patch: >>> 1. Set the static TY size of VLA/VLS from 0 to -1. >>> 2. Change all component offset in wgen_expr.cxx from WN_OFFSET to WN*. >>> For constant offset, the operator of WN* is INTCONST. For variable >>> offset, it's an integer expression. >>> 2. Wrap WN_CreateIload/WN_CreateIIStore/WN_CreateLdid/WN_CreateStid >>> for variable offset. If the offset is constant, the offset will be >>> attached onto the WN directly. Otherwise, an ADD node will be >>> generated for the address used by the load/store. >>> >>> So far there are still several limitation on this patch: >>> 1. don't support the copy between variable length object. >>> 2. don't support passing the variable length object by parameter or >>> return value. This one requires to patch the ABI part in BE and is >>> planed to fix later. >>> >>> I tested this patch with two methods: >>> 1. Tested the gcc regression. There is no regression found. The >>> following VLA/VLS test cases can pass now: >>> gcc.c-torture/compile/20050801-2.c >>> gcc.c-torture/compile/920428-4.c >>> gcc.c-torture/compile/920501-16.c >>> gcc.c-torture/execute/20040308-1.c >>> gcc.c-torture/execute/20040423-1.c >>> gcc.c-torture/execute/20041218-2.c >>> gcc.dg/pr19345.c >>> gcc.dg/pr30189.c >>> gcc.dg/vla-2.c >>> >>> The following cases still fails due to the limitation #2 mentioned above: >>> gcc.c-torture/compile/20010605-1.c >>> gcc.c-torture/compile/20030224-1.c >>> gcc.c-torture/execute/20020412-1.c >>> gcc.dg/compat/struct-by-value-22 >>> >>> 2. Compile the test case without VLA/VLS by different WGEN (one is >>> original and the other is with this patch) and compare the .B file >>> dump. There is no difference found in the IR generated by the two >>> WGENs. >>> >>> -- >>> Regards, >>> Lai Jian-Xin >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Keep Your Developer Skills Current with LearnDevNow! >>> The most comprehensive online learning library for Microsoft developers >>> is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, >>> Metro Style Apps, more. Free future releases when you subscribe now! >>> http://p.sf.net/sfu/learndevnow-d2d >>> _______________________________________________ >>> 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 ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel