<div dir="ltr"><div style>From ASTContext.cpp</div><div><br></div><div>unsigned ASTContext::getPreferredTypeAlign(const Type *T) const {</div><div> unsigned ABIAlign = getTypeAlign(T);</div><div><br></div><div> // Double and long long should be naturally aligned if possible.</div>
<div> if (const ComplexType* CT = T->getAs<ComplexType>())</div><div> T = CT->getElementType().getTypePtr();</div><div> if (T->isSpecificBuiltinType(BuiltinType::Double) ||</div><div> T->isSpecificBuiltinType(BuiltinType::LongLong) ||</div>
<div> T->isSpecificBuiltinType(BuiltinType::ULongLong))</div><div> return std::max(ABIAlign, (unsigned)getTypeSize(T));</div><div><br></div><div> return ABIAlign;</div><div>}</div><div><br></div><div><br></div>
<div style>Why is it necessary for clang to force 8-byte alignment for 8-byte type?</div><div style>That information can already be specified in TargetInfo if the architecture requires such alignment preference.</div><div style>
<br></div><div style>I am asking because I am working on a CPU where 8-byte alignment for 64-bit type is not required (4-bytes is just as fine).</div><div style><br></div><div style>I would like to remove that special case forcing for 64-bit type in ASTContext::getPreferredTypeAlign.</div>
<div style><br></div><div style>Any objection?</div></div>