All these are valid to me. I have another question for Zqing. Why does Align_aggregate=8 work? What is changed? Sun
2011/8/25 Stephen Clarke <stephen.cla...@st.com>: > I really don't have strong opinions on this issue, but it is > something that I have needed to think about from time to > time for our target, so I can at least give my thoughts. > Disclaimer: this is just based on working with the code and > documentation, I don't have any particular insights, and I may > well misinterpret something. > > My understanding of the align information in the ty_idx > is that it is, initially, a "summary" of the required alignment, > given the alignment requirements of the ABI, the type, > and the decl (including any gnu attributes). For the > output of the frontend, this is the "intended alignment". > > After the frontend, an optimization phase should be allowed > to change the alignment of objects, for code improvement > purposes, where such a change is legal. (By "legal" I mean, > it doesn't break the language semantics, or the ABI.) > And in the implementation this is done by rewriting the align > information in the ty_idx. > > But now it's necessary to support a gcc attribute which forbids > optimizing the alignment of an object. It's a new > "language semantics" rule that the alignment optimizer needs > to follow. Somehow, the alignment optimizer needs to know > when this rule applies to an object. > > What I don't have a very strong idea of, is how to consider > the Aggregate_Alignment variable, which is treated by > Adjusted_Alignment(). I think of it as an optimization, i.e. > it doesn't change language or ABI rules, so Adjusted_Alignment() > is just like an optimization phase performing an alignment > optimization. > > Rgds, > Steve. > > Sun Chan wrote: >> you are always welcome to give opinion, why not! >> I am forgetting a lot of the details, why can't the bit in ty_idx to >> specify the "intended" alignment? If one can specify a larger >> alignment, the reverse is possible too, right? When we did the >> alignment bit, I don't believe we were thinking of just increasing >> alignment. >> Sun >> >> 2011/8/25 Stephen Clarke <stephen.cla...@st.com>: >>> Ok. I deliberately avoided giving an opinion on where >>> the "user aligned" information should be stored. >>> >>> But I can think of three possibilities: >>> 1. A flag in the ST (i.e. the proposal). >>> 2. A bit in the TY_IDX (the same place as the align). >>> 3. A flag in the TY. >>> >>> For #2, there is some issue that it is a fixed 32-bit >>> entity, and there are no free bits. So a bit needs to be stolen, >>> either from the (currently 24-bit) index into the type table, >>> or else from the (currently 5-bit) alignment value. >>> I worry about stealing a bit from the alignment, leaving only >>> 4 bits, so I suppose it would have to come from the index field. >>> >>> Rgds, >>> Steve. >>> >>> Sun Chan wrote: >>>> I am not disputing that. I am objecting to two ways (and in diff >>>> places) to handle that >>>> >>>> 2011/8/25 Stephen Clarke <stephen.cla...@st.com>: >>>>> Gcc behaviour for attribute aligned has changed a little in the >>>>> last few years. Previously it used to state: >>>>> >>>>> "The `aligned' attribute can only increase the alignment; but you >>>>> can decrease it by specifying `packed' as well." >>>>> >>>>> and so it used to be okay for Adjust_Alignment to always >>>>> increase the alignment. >>>>> >>>>> But in most gcc recent versions, it allows for attribute aligned >>>>> to decrease alignment also, and so to match gcc behaviour, >>>>> Adjust_Alignment ought not to increase the alignment in that case. >>>>> So there needs to be some way to detect the case. The proposal is >>>>> to handle that by adding a boolean flag indicating that the >>>>> alignment was user-specified. >>>>> >>>>> (Ok, I'm just repeating what Jian-Xin Lai has already said... but >>>>> with some explanation for why there used not to be a problem here.) >>>>> >>>>> Rgds, >>>>> Steve. >>>>> >>>>> Sun Chan wrote: >>>>>> the point is, I don't think you need two places to store alignment >>>>>> info, user specified or not >>>>>> Sun >>>>>> >>>>>> 2011/8/25 Jian-Xin Lai <laij...@gmail.com>: >>>>>>> No, there is no case with 2 different alignment. ST's alignment is >>>>>>> saved in >>>>>>> ST's TY_IDX, not in the TY. The front end will set the correct >>>>>>> alignment for >>>>>>> the ST for all cases. TY only keeps the size of the type. TY doen't >>>>>>> have the >>>>>>> alignment size. >>>>>>> >>>>>>> 在 2011年8月25日 下午4:19,Sun Chan <sun.c...@gmail.com>写道: >>>>>>>> it's not a question. I am saying, symbol of different alignment should >>>>>>>> have different type. Hence, the alignment is associated at type table, >>>>>>>> not symtab >>>>>>>> Sim >>>>>>>> >>>>>>>> 2011/8/25 Jian-Xin Lai <laij...@gmail.com>: >>>>>>>>> I'm not sure if I understand your question. The TY_IDX is composed by >>>>>>>>> 2 >>>>>>>>> parts: index to TY_TABLE and extra flags for volatile, restrict and >>>>>>>>> alignment. Every symbol with the same TY has its own alignment embeded >>>>>>>>> in >>>>>>>>> the TY_IDX. >>>>>>>>> >>>>>>>>> 在 2011年8月25日 下午4:01,Sun Chan <sun.c...@gmail.com>写道: >>>>>>>>>> I have problem having one attribute that have annotation in 2 >>>>>>>>>> different places. Also, the reason it is in TYPE is that symbols of >>>>>>>>>> the same declaration but of different alignment should really be of >>>>>>>>>> different type. >>>>>>>>>> Sun >>>>>>>>>> >>>>>>>>>> 2011/8/25 Jian-Xin Lai <laij...@gmail.com>: >>>>>>>>>>> The TY has "packed" flag and it's detected in Adjust_Alignment: >>>>>>>>>>> 125 align= TY_align(ty_idx); >>>>>>>>>>> 126 >>>>>>>>>>> 127 if (Is_Structure_Type(ty) && TY_is_packed(ty)) >>>>>>>>>>> 128 { >>>>>>>>>>> 129 return align; >>>>>>>>>>> 130 } >>>>>>>>>>> >>>>>>>>>>> If the TY is packed, the BE don't change its alignment. We did the >>>>>>>>>>> similar >>>>>>>>>>> thing. The different is our change is applied on ST instead of TY >>>>>>>>>>> because >>>>>>>>>>> this is a GNU extension on variable. >>>>>>>>>>> >>>>>>>>>>> 在 2011年8月25日 下午3:05,Sun Chan <sun.c...@gmail.com>写道: >>>>>>>>>>>> How would you classify "pack" data? >>>>>>>>>>>> Sun >>>>>>>>>>>> >>>>>>>>>>>> 2011/8/25 Jian-Xin Lai <laij...@gmail.com>: >>>>>>>>>>>>> The reason we introduce the "user align" is to separate this kind >>>>>>>>>>>>> of >>>>>>>>>>>>> case >>>>>>>>>>>>> from the generic aggregate. So that we can do the two things well: >>>>>>>>>>>>> If user specifies an alignment, we follow the size. Otherwise, the >>>>>>>>>>>>> compiler >>>>>>>>>>>>> can decide what's the proper alignment. >>>>>>>>>>>>> >>>>>>>>>>>>> 在 2011年8月25日 下午1:57,Mike Murphy <mmur...@nvidia.com>写道: >>>>>>>>>>>>>> So Aggregate_Alignment is a settable option (defaults to 16 in >>>>>>>>>>>>>> some >>>>>>>>>>>>>> targets). What if you compile with -TENV:align_aggregates=8, or >>>>>>>>>>>>>> don't >>>>>>>>>>>>>> default it to 16? >>>>>>>>>>>>>> >>>>>>>>>>>>>> -----Original Message----- >>>>>>>>>>>>>> From: 朱庆 [mailto:zqing1...@gmail.com] >>>>>>>>>>>>>> Sent: Wednesday, August 24, 2011 10:53 PM >>>>>>>>>>>>>> To: Mike Murphy >>>>>>>>>>>>>> Cc: Sun Chan; open64-devel@lists.sourceforge.net >>>>>>>>>>>>>> Subject: Re: [Open64-devel] Code Review request for bug832[wgen] >>>>>>>>>>>>>> >>>>>>>>>>>>>> The alignment is correct in .B file, but in Adjusted_Alignment >>>>>>>>>>>>>> there >>>>>>>>>>>>>> are following code to modify the align. In our case we do not >>>>>>>>>>>>>> want >>>>>>>>>>>>>> this happen. >>>>>>>>>>>>>> else { >>>>>>>>>>>>>> align = MAX(align, Aggregate_Alignment); >>>>>>>>>>>>>> } >>>>>>>>>>>>>> >>>>>>>>>>>>>> Best wishes >>>>>>>>>>>>>> zhuqing >>>>>>>>>>>>>> 在 2011年8月25日 下午12:28,Mike Murphy <mmur...@nvidia.com> 写道: >>>>>>>>>>>>>>> The alignment is stored in the ty_idx (see TY_align), and then >>>>>>>>>>>>>>> there >>>>>>>>>>>>>>> are >>>>>>>>>>>>>>> routines like Adjusted_Alignment in stblock that can modify it. >>>>>>>>>>>>>>> I >>>>>>>>>>>>>>> suspect >>>>>>>>>>>>>>> the problem here is that the alignment is being put on the >>>>>>>>>>>>>>> object >>>>>>>>>>>>>>> rather >>>>>>>>>>>>>>> than the type, and then is lost (but should still be possible, >>>>>>>>>>>>>>> because the >>>>>>>>>>>>>>> TY_align is like qualifiers that can vary from the base type). >>>>>>>>>>>>>>> Does >>>>>>>>>>>>>>> the >>>>>>>>>>>>>>> alignment show up properly in the intermediate .B file? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> -----Original Message----- >>>>>>>>>>>>>>> From: Sun Chan [mailto:sun.c...@gmail.com] >>>>>>>>>>>>>>> Sent: Wednesday, August 24, 2011 7:51 PM >>>>>>>>>>>>>>> To: 朱庆 >>>>>>>>>>>>>>> Cc: open64-devel@lists.sourceforge.net >>>>>>>>>>>>>>> Subject: Re: [Open64-devel] Code Review request for >>>>>>>>>>>>>>> bug832[wgen] >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> The reason I asked for the file is that I think there has to be >>>>>>>>>>>>>>> some >>>>>>>>>>>>>>> alignment attribute somewhere. I am sure data alignment has >>>>>>>>>>>>>>> been >>>>>>>>>>>>>>> dealt >>>>>>>>>>>>>>> with in the compiler. That it is due to user, or just language >>>>>>>>>>>>>>> attribute might be irrelevant from compiler point of view. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Mike or Murthy, >>>>>>>>>>>>>>> Do you remember where alignment is handled? I only found >>>>>>>>>>>>>>> Alignment >>>>>>>>>>>>>>> field in BLK of the symtab_defs.h >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Sun >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> 2011/8/25 朱庆 <zqing1...@gmail.com>: >>>>>>>>>>>>>>>> Hi Sun, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Attached symtab_defs.h. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Thanks >>>>>>>>>>>>>>>> zhuqing >>>>>>>>>>>>>>>> 2011/8/24 Sun Chan <sun.c...@gmail.com>: >>>>>>>>>>>>>>>>> can you send me the full symtab_defs.h? >>>>>>>>>>>>>>>>> Sun >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On Wed, Aug 24, 2011 at 4:56 PM, 朱庆 <zqing1...@gmail.com> >>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>> Hi all, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Can gatekeeper help review following fix for bug832? >>>>>>>>>>>>>>>>>> https://bugs.open64.net/show_bug.cgi?id=832 >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> small case, a.c: >>>>>>>>>>>>>>>>>> struct obs_kernel_param { >>>>>>>>>>>>>>>>>> const char *str; >>>>>>>>>>>>>>>>>> }; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> const char str1[] = "acpi_parse_apic_instance="; >>>>>>>>>>>>>>>>>> const char str2[] = "acpi_os_name"; >>>>>>>>>>>>>>>>>> struct obs_kernel_param var1 >>>>>>>>>>>>>>>>>> __attribute__ ((aligned ((sizeof (long))))) = >>>>>>>>>>>>>>>>>> {str1}; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> struct obs_kernel_param var2 >>>>>>>>>>>>>>>>>> __attribute__ ((aligned ((sizeof (long))))) = >>>>>>>>>>>>>>>>>> {str2}; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> when compile with opencc, nm a.o >>>>>>>>>>>>>>>>>> 0000000000000000 D var1 >>>>>>>>>>>>>>>>>> 0000000000000010 D var2 >>>>>>>>>>>>>>>>>> compile with gcc, nm a.o >>>>>>>>>>>>>>>>>> 0000000000000000 D var1 >>>>>>>>>>>>>>>>>> 0000000000000008 D var2 >>>>>>>>>>>>>>>>>> the offset of var1 and var2 are different, the problem with >>>>>>>>>>>>>>>>>> opencc >>>>>>>>>>>>>>>>>> is >>>>>>>>>>>>>>>>>> :fixed align attribute does not work, this may cause some >>>>>>>>>>>>>>>>>> problems >>>>>>>>>>>>>>>>>> when mix link two files with opencc and gcc. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> The fix is to add a new ST flag to record >>>>>>>>>>>>>>>>>> user_defined_align. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Thanks >>>>>>>>>>>>>>>>>> zhuqing >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>>>>>>>>>>> EMC VNX: the world's simplest storage, starting under $10K >>>>>>>>>>>>>>>>>> The only unified storage solution that offers unified >>>>>>>>>>>>>>>>>> management >>>>>>>>>>>>>>>>>> Up to 160% more powerful than alternatives and 25% more >>>>>>>>>>>>>>>>>> efficient. >>>>>>>>>>>>>>>>>> Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev >>>>>>>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>>>>>>> Open64-devel mailing list >>>>>>>>>>>>>>>>>> Open64-devel@lists.sourceforge.net >>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/open64-devel >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>>>>>>>> EMC VNX: the world's simplest storage, starting under $10K >>>>>>>>>>>>>>> The only unified storage solution that offers unified >>>>>>>>>>>>>>> management >>>>>>>>>>>>>>> Up to 160% more powerful than alternatives and 25% more >>>>>>>>>>>>>>> efficient. >>>>>>>>>>>>>>> Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev >>>>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>>>> Open64-devel mailing list >>>>>>>>>>>>>>> Open64-devel@lists.sourceforge.net >>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/open64-devel >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> ----------------------------------------------------------------------------------- >>>>>>>>>>>>>>> This email message is for the sole use of the intended >>>>>>>>>>>>>>> recipient(s) >>>>>>>>>>>>>>> and >>>>>>>>>>>>>>> may contain >>>>>>>>>>>>>>> confidential information. Any unauthorized review, use, >>>>>>>>>>>>>>> disclosure >>>>>>>>>>>>>>> or >>>>>>>>>>>>>>> distribution >>>>>>>>>>>>>>> is prohibited. If you are not the intended recipient, please >>>>>>>>>>>>>>> contact >>>>>>>>>>>>>>> the sender by >>>>>>>>>>>>>>> reply email and destroy all copies of the original message. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> ----------------------------------------------------------------------------------- >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>>>>>>> EMC VNX: the world's simplest storage, starting under $10K >>>>>>>>>>>>>> The only unified storage solution that offers unified management >>>>>>>>>>>>>> Up to 160% more powerful than alternatives and 25% more >>>>>>>>>>>>>> efficient. >>>>>>>>>>>>>> Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev >>>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>>> Open64-devel mailing list >>>>>>>>>>>>>> Open64-devel@lists.sourceforge.net >>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/open64-devel >>>>>>>>>>>>> -- >>>>>>>>>>>>> Regards, >>>>>>>>>>>>> Lai Jian-Xin >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>>>>>> EMC VNX: the world's simplest storage, starting under $10K >>>>>>>>>>>>> The only unified storage solution that offers unified management >>>>>>>>>>>>> Up to 160% more powerful than alternatives and 25% more efficient. >>>>>>>>>>>>> Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev >>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>> 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 >>>>>>> >>>>>> ------------------------------------------------------------------------------ >>>>>> EMC VNX: the world's simplest storage, starting under $10K >>>>>> The only unified storage solution that offers unified management >>>>>> Up to 160% more powerful than alternatives and 25% more efficient. >>>>>> Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev >>>>>> _______________________________________________ >>>>>> Open64-devel mailing list >>>>>> Open64-devel@lists.sourceforge.net >>>>>> https://lists.sourceforge.net/lists/listinfo/open64-devel >>> > > ------------------------------------------------------------------------------ EMC VNX: the world's simplest storage, starting under $10K The only unified storage solution that offers unified management Up to 160% more powerful than alternatives and 25% more efficient. Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel