[cfe-commits] r123720 - in /cfe/trunk/lib/CodeGen: CGDecl.cpp CodeGenModule.cpp

John McCall rjmccall at apple.com
Tue Jan 18 10:33:45 PST 2011


(CC'ing cfe-commits)

On Jan 18, 2011, at 9:17 AM, Ken Dyck wrote:
> On Tue, Jan 18, 2011 at 12:38 AM, John McCall <rjmccall at apple.com> wrote:
>> On Jan 17, 2011, at 6:01 PM, Ken Dyck wrote:
>>> Author: kjdyck
>>> Date: Mon Jan 17 20:01:14 2011
>>> New Revision: 123720
>>> 
>>> URL: http://llvm.org/viewvc/llvm-project?rev=123720&view=rev
>>> Log:
>>> Replace calls to CharUnits::fromQuantity() with ones to
>>> ASTContext::toCharUnitsFromBits() when converting from bit sizes to char units.
>> 
>> Is there any good reason why TargetInfo and ASTContext compute size and
>> alignment in bits rather than chars in the first place?  I think most consumers of
>> this information want it in chars, and for the ones that want bits, well, a multiply
>> is a lot cheaper than a divide.
> 
> One potential snag is the special case in ASTContext::getTypeInfo()
> where the type is an enum or record with an invalid declaration, in
> which case it returns a width and alignment of 1 bit.

We are allowed to change the placeholder values we use in case of broken
translation units. :)

John.

> 
>  //...
>  case Type::Record:
>  case Type::Enum: {
>    const TagType *TT = cast<TagType>(T);
> 
>    if (TT->getDecl()->isInvalidDecl()) {
>      Width = 1;
>      Align = 1;
>      break;
>    }
> 
>    if (const EnumType *ET = dyn_cast<EnumType>(TT))
>      return getTypeInfo(ET->getDecl()->getIntegerType());
>    //...
> 
> I agree with you, though. It would probably avoid a lot of unnecessary
> divisions to calculate sizes and alignments in char units instead of
> bits.
> 
> -Ken





More information about the cfe-commits mailing list