<div dir="ltr">


















<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span style="font-family:"Times New Roman",serif;color:rgb(197,90,17)">1. "a real name is more readable"<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif">Hi Eli, could you elaborate a little more on what real name
you are expecting?<span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span style="font-family:"Times New Roman",serif"><span> </span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span style="font-family:"Times New Roman",serif;color:rgb(197,90,17)">2. "I guess the question here is what the “default”
getTypeAlign means; either it’s the ABI alignment, and we fix all the places
that want the “AIX preferred” alignment, or it’s the “AIX preferred” alignment,
and we fix all the places that want the ABI alignment."<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span style="font-family:"Times New Roman",serif"><span> </span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span style="font-family:"Times New Roman",serif">Based on the comment on `getTypeAlignInChars`, "<i>Return
the ABI-specified alignment of a type, in characters. This method does not work
on incomplete types</i>.", I believe `getTypeAlignInChars` and all other
three functions I mentioned earlier(which have similar comments) are designed
for getting ABI alignment. And these functions are used pervasively in Clang
code.  So we need to fix all the places where an "AIX preferred"
alignment is wanted when the target defaults to AIX power alignment. And the
problem we are trying to deal with is how do we fix those alignment issues. So
far we can think of:<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span style="font-family:"Times New Roman",serif"><span> </span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span style="font-family:"Times New Roman",serif">1) Replace "getTypeAlign" with the following all
over the places(which I think this chunk would make the code a bit ugly, and
also has migration risk)<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span style="font-family:"Times New Roman",serif"><span> </span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><i><span style="font-size:10pt;font-family:"Times New Roman",serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">DefaultsToAIXPowerAlignment</span></i><span style="font-family:"Times New Roman",serif;background:rgb(217,217,217) none repeat scroll 0% 0%"><span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><i><span style="font-size:10pt;font-family:"Times New Roman",serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">       
? getPreferredTypeAlign</span></i><span style="font-family:"Times New Roman",serif;background:rgb(217,217,217) none repeat scroll 0% 0%"><span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><i><span style="font-size:10pt;font-family:"Times New Roman",serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">        
: getTypeAlign</span></i><span style="font-family:"Times New Roman",serif;background:rgb(217,217,217) none repeat scroll 0% 0%"><span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US">2) Wrap above with a new function with
migration risk as I stated before<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US">3) Add a flag as I stated before<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span> </span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US">Any other ideas are also welcome.</span><span style="font-family:"Times New Roman",serif" lang="EN-US"><span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span style="color:rgb(197,90,17)">3. “</span><span style="font-family:"Times New Roman",serif;color:rgb(197,90,17)">please specify what the other cases are that need to change</span><span style="color:rgb(197,90,17)">”<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span style="color:black">The usage of
those functions are way too many to be listed all here(probably at least 50
spots), so I just picked several residing on the common path for all targets.</span><span style="color:black" lang="EN-US"><span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span style="color:rgb(197,90,17)"><span> </span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif">Eg.1:<span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><lib/Sema/SemaChecking.cpp><span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif">static CharUnits getPresumedAlignmentOfPointer(const Expr
*E, Sema &S) {<span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span>  </span>// See if we can
compute the alignment of a VarDecl and an offset from it.<span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span> 
</span>Optional<std::pair<CharUnits, CharUnits>> P =<span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span>     
</span>getBaseAlignmentAndOffsetFromPtr(E, S.Context);<span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span> </span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span>  </span>if (P)<span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span>    </span>return
P->first.alignmentAtOffset(P->second);<span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span> </span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span>  </span>// If that failed,
return the type's alignment.<span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span>  </span>return S.Context.<span style="color:rgb(197,90,17)">getTypeAlignInChars</span>(E->getType()->getPointeeType());<span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif">}<span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span> </span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif">Eg.2:<span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><lib/Sema/SemaChecking.cpp><span lang="EN-US"><span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US">void
Sema::DiscardMisalignedMemberAddress(const Type *T, Expr *E) {<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>  </span>E = E->IgnoreParens();<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>  </span>if (!T->isPointerType() &&
!T->isIntegerType())<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>    </span>return;<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>  </span>if (isa<UnaryOperator>(E) &&<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>     
</span>cast<UnaryOperator>(E)->getOpcode() == UO_AddrOf) {<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>    </span>auto *Op =
cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens();<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>    </span>if (isa<MemberExpr>(Op)) {<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>      </span>auto MA = llvm::find(MisalignedMembers,
MisalignedMember(Op));<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>      </span>if (MA != MisalignedMembers.end()
&&<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>          </span>(T->isIntegerType() ||<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>           </span>(T->isPointerType() &&
(T->getPointeeType()->isIncompleteType() ||<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>                                   </span>Context.<span style="color:rgb(197,90,17)">getTypeAlignInChars</span>(<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>                                      
</span>T->getPointeeType()) <= MA->Alignment))))<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>        </span>MisalignedMembers.erase(MA);<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>    </span>}<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>  </span>}<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US">}<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span> </span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US">Eg.3:<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif">< lib/CodeGen/CGOpenMPRuntime.cpp><span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US">Address
CGOpenMPRuntime::getOrCreateDefaultLocation(unsigned Flags) {<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>  </span>CharUnits Align = CGM.getContext().<span style="color:rgb(197,90,17)">getTypeAlignInChars</span>(IdentQTy);<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>  </span>unsigned Reserved2Flags =
getDefaultLocationReserved2Flags();<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span> </span><span> </span>...<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US">}<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span> </span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US">Eg.4:<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif">< lib/CodeGen/CGAtomic.cpp><span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US">static void<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US">AddDirectArgument(CodeGenFunction
&CGF, CallArgList &Args,<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>                  </span>bool UseOptimizedLibcall,
llvm::Value *Val, QualType ValTy,<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>                  </span>SourceLocation Loc, CharUnits
SizeInChars) {<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>  </span>if (UseOptimizedLibcall) {<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>    </span>// Load value and pass it to the function
directly.<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>    </span>CharUnits Align = CGF.getContext().<span style="color:rgb(197,90,17)">getTypeAlignInChars</span>(ValTy);<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US">...<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US">}<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span> </span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US">Eg.5:<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif">< lib/CodeGen/TargetInfo.cpp><span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US">ABIArgInfo
ABIInfo::getNaturalAlignIndirect(QualType Ty, bool ByVal,<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>                                           
</span>bool Realign,<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>     </span><span>                                       </span>llvm::Type
*Padding) const {<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>  </span>return ABIArgInfo::getIndirect(getContext().<span style="color:rgb(197,90,17)">getTypeAlignInChars</span>(Ty),
ByVal,<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span>                                 </span>Realign,
Padding);<span></span></span></p>

<p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US">}</span></p><p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><br></p><p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif">Thank you,</p><p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif">Xiangling<br></p><p class="MsoNormal" style="margin:0cm;font-size:12pt;font-family:"Georgia",serif"><span lang="EN-US"><span></span></span></p>





</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Aug 12, 2020 at 3:08 PM James Y Knight <<a href="mailto:jyknight@google.com">jyknight@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Agree with Eli -- please specify what the other cases are that need to change, besides the alignment used for "new".</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Aug 12, 2020 at 2:46 PM Eli Friedman <<a href="mailto:efriedma@quicinc.com" target="_blank">efriedma@quicinc.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-US">
<div>
<p class="MsoNormal">I don’t think using a boolean argument is appropriate here; nobody is going to pass in anything other than constant true/false, so a real name is more readable.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I guess the question here is what the “default” getTypeAlign means; either it’s the ABI alignment, and we fix all the places that want the “AIX preferred” alignment, or it’s the “AIX preferred” alignment, and we fix all the places that
 want the ABI alignment.  I think it’s essentially a numbers game: which one is actually more commonly used?  Please give more examples.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">-Eli<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border-color:rgb(225,225,225) currentcolor currentcolor;border-style:solid none none;border-width:1pt medium medium;padding:3pt 0in 0in">
<p class="MsoNormal" style="margin-left:0.5in"><b>From:</b> Xiangling Liao <<a href="mailto:xiangxdh@gmail.com" target="_blank">xiangxdh@gmail.com</a>>
<br>
<b>Sent:</b> Wednesday, August 12, 2020 10:56 AM<br>
<b>To:</b> <a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<b>Cc:</b> <a href="mailto:hubert.reinterpretcast@gmail.com" target="_blank">hubert.reinterpretcast@gmail.com</a>; <a href="mailto:jasonliu.development@gmail.com" target="_blank">jasonliu.development@gmail.com</a>; Eli Friedman <<a href="mailto:efriedma@quicinc.com" target="_blank">efriedma@quicinc.com</a>>; James Y Knight <<a href="mailto:jyknight@google.com" target="_blank">jyknight@google.com</a>>; Reid Kleckner <<a href="mailto:rnk@google.com" target="_blank">rnk@google.com</a>><br>
<b>Subject:</b> [EXT] [RFC] Use preferred alignment instead of ABI alignment for complete object when applicable<u></u><u></u></p>
</div>
<p class="MsoNormal" style="margin-left:0.5in"><u></u> <u></u></p>
<div>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">On some targets, preferred alignment is larger than ABI alignment in some cases. For example, on AIX we have special power alignment rules which would cause
 that. The full discussion details can be found here if interested: <a href="http://lists.llvm.org/pipermail/cfe-dev/2020-April/065304.html" target="_blank">
<span style="color:rgb(5,99,193)">http://lists.llvm.org/pipermail/cfe-dev/2020-April/065304.html</span></a> .</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif"> </span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">Previously, to support those cases, we added a “PreferredAlignment” field in the `RecordLayout` to store the AIX special alignment values in “PreferredAlignment”
 as the community suggested. It makes sure both `_alignof` and `alignof` return correct values for AIX objects. (The related patch is here:
<a href="https://reviews.llvm.org/D79719" target="_blank"><span style="color:rgb(220,161,13);text-decoration:none">https://reviews.llvm.org/D79719</span></a> .)</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif"> </span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p style="margin-right:0in;margin-left:0.5in;margin-bottom:0.0001pt">
<span style="font-size:12pt;font-family:Times,serif">However, that patch alone is not enough. With AIX’s special alignment rule, we need to use “PreferredAlignment” for a majority of the places where ABI alignment are currently used in .</span><span style="font-size:10pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p style="margin-right:0in;margin-left:0.5in;margin-bottom:0.0001pt">
<span style="font-size:12pt;font-family:Times,serif"> </span><span style="font-size:10pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">Take the cookie size for array new operator calculation for example, the clang invokes `<i>getTypeAlignInChars`
</i>to get ABI alignment value:</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Georgia,serif"><u></u> <u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">CharUnits ItaniumCXXABI::getArrayCookieSizeImpl(QualType elementType) {</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">  // The array cookie is a size_t; pad that up to the element alignment.</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">  // The cookie is actually right-justified in that space.</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">  return std::max(CharUnits::fromQuantity(CGM.SizeSizeInBytes),</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">                           
<b>CGM.getContext().getTypeAlignInChars(elementType));</b></span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">}</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<div>
<p class="MsoNormal" style="margin-left:0.5in"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">So far, we identify that there are 4 functions returning ABI alignment:</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">1) getTypeAlignInChars [invokes getTypeAlign]</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">2) getTypeAlign <=> getTypeInfo(T).<a href="https://clang.llvm.org/doxygen/structclang_1_1TypeInfo.html#af98dcefc364629eff868a1bb4010ebd8" target="_blank"><span style="color:rgb(220,161,13)">Align</span></a></span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">3) getTypeInfo [ invokes ‘getTypeInfoImpl’]</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">4) getTypeInfoInChars</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif"> </span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">Some possible ways we can think of are:</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:0.5in"><b><span style="font-size:12pt;font-family:Times,serif">1. Create a new function to be invoked instead</span></b><span style="font-size:12pt;font-family:Times,serif">, e.g:</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">/// getTypeProperAlignInChars - Return the ABI-specified alignment of a type, in</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">/// characters. Except on AIX, return the preferred type alignment instead when</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">/// under power alignment rules.</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">CharUnits ASTContext::getTypeProperAlignInChars(QualType T) const {</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">  if (Target->defaultsToAIXPowerAlignment())</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">    return toCharUnitsFromBits(getPreferredTypeAlign(T.getTypePtr()));</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%"> </span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">  return getTypeAlignInChars(T);</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">}</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif"> </span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">Take the calculation of cookie size for array new operator for example, we need:</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif"> </span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">CharUnits ItaniumCXXABI::getArrayCookieSizeImpl(QualType elementType) {</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">  // The array cookie is a size_t; pad that up to the element alignment.</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">  // The cookie is actually right-justified in that space.</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">  return std::max(CharUnits::fromQuantity(CGM.SizeSizeInBytes),</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">-                           CGM.getContext().getTypeAlignInChars(elementType));</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">+                          CGM.getContext().getTypeProperAlignInChars(elementType));</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">}</span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><i><span style="font-size:12pt;font-family:Times,serif"> </span></i><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><b><i><span style="font-size:12pt;font-family:Times,serif">Cons:</span></i></b><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">The migration risk is high. We cannot guarantee in the future the developers would know this is the interface they should use as always for any common path
 code. So it seems this is not a viable method.</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif"> </span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><b><span style="font-size:12pt;font-family:Times,serif">2. Add a flag
</span></b><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">Adding a flag like the following can help us:</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif"> </span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">e.g.1 – getTypeAlignInChars</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">/// If `<b> NeedsABIAlignment
</b>` is false, this function will smartly return preferred alignment </span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">/// or ABI alignment depends on if the target defaults to AIX power alignment or not;</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">/// Set `<b> NeedsABIAlignment
</b>` as true if an ABI alignment is needed no matter what target is.</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">CharUnits ASTContext::getTypeAlignInChars(QualType T, <b>bool NeedsABIAlignment = false</b>) const {<br>
   if (NeedsABIAlignment)<br>
     return toCharUnitsFromBits(getTypeAlign(T));<br>
   if (Target->defaultsToAIXPowerAlignment())<br>
     return toCharUnitsFromBits(getPreferredTypeAlign(T.getTypePtr())); </span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%"> </span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">   return toCharUnitsFromBits(getTypeAlign(T));<br>
}</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Georgia,serif"><u></u> <u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">Take cookie size for array new operator calculation for example again, we don’t need to make any change anymore.</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Georgia,serif"><u></u> <u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif"> </span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">e.g.2 - getTypeInfoImpl</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">TypeInfo ASTContext::getTypeInfoImpl(const Type *T,
<b>bool NeedsABIAlignment = false</b>) const {</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">...</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">  switch (T->getTypeClass()) {</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">...</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">    case Type::Record:</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">        const auto *RT = cast<RecordType>(TT);</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">        const RecordDecl *RD = RT->getDecl();</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">        const ASTRecordLayout &Layout = getASTRecordLayout(RD);</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">        Width = toBits(Layout.getSize());</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><b><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">+     if (NeedsABIAlignment)</span></b><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><b><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">+       Align = toBits(Layout.getAlignment());</span></b><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><b><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">+     else if (</span></i></b><b><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">Target->defaultsToAIXPowerAlignment()<i>)</i></span></b><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><b><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">+       Align = toBits(Layout.getPreferredAlignment());</span></i></b><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><b><i><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">+     else</span></i></b><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><b><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">          Align = toBits(Layout.getAlignment());</span></b><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">        AlignIsRequired = RD->hasAttr<AlignedAttr>();</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">        break;</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">  }</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">...</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">}</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Georgia,serif"><u></u> <u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><b><span style="font-size:12pt;font-family:Georgia,serif">An usage example on the call site:</span></b><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Georgia,serif"><Clang/ lib/AST/RecordLayoutBuilder.cpp><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">  auto setDeclInfo = [&](bool IsIncompleteArrayType) {</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">-   TypeInfo TI = Context.getTypeInfo(D->getType());</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">+  TypeInfo TI = Context.getTypeInfo(D->getType(), true/* NeedsABIAlignment */);</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">    FieldAlign = Context.toCharUnitsFromBits(TI.Align);</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">    // Flexible array members don't have any size, but they have to be</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">    // aligned appropriately for their element type.</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">    EffectiveFieldSize = FieldSize =</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">        IsIncompleteArrayType ? CharUnits::Zero()</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">                              : Context.toCharUnitsFromBits(TI.Width);</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">    AlignIsRequired = TI.AlignIsRequired;</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif;color:black;background:rgb(217,217,217) none repeat scroll 0% 0%">  };</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Georgia,serif"><u></u> <u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Georgia,serif"><u></u> <u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><b><span style="font-size:12pt;font-family:Times,serif">Pros:</span></b><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">1) By adding a flag like above, we can minimize the changes needed to make. The scope of changes will be shortened to only a few spots where an ABI alignment
 is necessary even when AIX special alignment is set.</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">2) Letting people consciously pass `true`  in if needed is another benefit. Then targets like AIX don’t need to worry about things going wrong accidentally
 in the future.</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif"> </span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif"> </span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><b><span style="font-size:12pt;font-family:Times,serif">cons:</span></b><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif">Those four functions I mentioned above won’t return ABI-specified alignment values all the time anymore.</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif"> </span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Times,serif"> </span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in;text-align:justify"><span style="font-size:12pt;font-family:Times,serif">I would like to see how people think about our proposal. Any concerns? Or any other ideas to suggest?</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in;text-align:justify"><span style="font-size:12pt;font-family:Times,serif"> </span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in;text-align:justify"><span style="font-size:12pt;font-family:Times,serif">Please let me know if there are any questions about our current proposal and design. Your feedback is appreciated.</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in;text-align:justify"><span style="font-size:12pt;font-family:Times,serif"> </span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in;text-align:justify"><span style="font-size:12pt;font-family:Times,serif">Regards,</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in;text-align:justify"><span style="font-size:12pt;font-family:Times,serif"> </span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-left:0.5in;text-align:justify"><span style="font-size:12pt;font-family:Times,serif">Xiangling Liao</span><span style="font-size:12pt;font-family:Georgia,serif"><u></u><u></u></span></p>
</div>
<p class="MsoNormal" style="margin-left:0.5in"><span style="font-size:12pt;font-family:Georgia,serif"><u></u> <u></u></span></p>
</div>
</div>
</div>

</blockquote></div>
</blockquote></div>