<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>