Switch the Alignment argument on AggValueSlot over to CharUnits, per John's review comment.
llvm-svn: 145741
This commit is contained in:
parent
25f6670003
commit
38cd36dbdb
|
@ -397,8 +397,7 @@ static void EmitBaseInitializer(CodeGenFunction &CGF,
|
|||
CGF.GetAddressOfDirectBaseInCompleteClass(ThisPtr, ClassDecl,
|
||||
BaseClassDecl,
|
||||
isBaseVirtual);
|
||||
unsigned Alignment =
|
||||
CGF.getContext().getTypeAlignInChars(BaseType).getQuantity();
|
||||
CharUnits Alignment = CGF.getContext().getTypeAlignInChars(BaseType);
|
||||
AggValueSlot AggSlot =
|
||||
AggValueSlot::forAddr(V, Alignment, Qualifiers(),
|
||||
AggValueSlot::IsDestructed,
|
||||
|
@ -1345,7 +1344,7 @@ CodeGenFunction::EmitDelegatingCXXConstructorCall(const CXXConstructorDecl *Ctor
|
|||
llvm::Value *ThisPtr = LoadCXXThis();
|
||||
|
||||
QualType Ty = getContext().getTagDeclType(Ctor->getParent());
|
||||
unsigned Alignment = getContext().getTypeAlignInChars(Ty).getQuantity();
|
||||
CharUnits Alignment = getContext().getTypeAlignInChars(Ty);
|
||||
AggValueSlot AggSlot =
|
||||
AggValueSlot::forAddr(ThisPtr, Alignment, Qualifiers(),
|
||||
AggValueSlot::IsDestructed,
|
||||
|
|
|
@ -1039,7 +1039,7 @@ static void InitCatchParam(CodeGenFunction &CGF,
|
|||
CGF.EHStack.pushTerminate();
|
||||
|
||||
// Perform the copy construction.
|
||||
unsigned Alignment = CGF.getContext().getDeclAlign(&CatchParam).getQuantity();
|
||||
CharUnits Alignment = CGF.getContext().getDeclAlign(&CatchParam);
|
||||
CGF.EmitAggExpr(copyExpr,
|
||||
AggValueSlot::forAddr(ParamAddr, Alignment, Qualifiers(),
|
||||
AggValueSlot::IsNotDestructed,
|
||||
|
|
|
@ -139,8 +139,7 @@ void CodeGenFunction::EmitAnyExprToMem(const Expr *E,
|
|||
if (E->getType()->isAnyComplexType()) {
|
||||
EmitComplexExprIntoAddr(E, Location, Quals.hasVolatile());
|
||||
} else if (hasAggregateLLVMType(E->getType())) {
|
||||
unsigned Alignment =
|
||||
getContext().getTypeAlignInChars(E->getType()).getQuantity();
|
||||
CharUnits Alignment = getContext().getTypeAlignInChars(E->getType());
|
||||
EmitAggExpr(E, AggValueSlot::forAddr(Location, Alignment, Quals,
|
||||
AggValueSlot::IsDestructed_t(IsInit),
|
||||
AggValueSlot::DoesNotNeedGCBarriers,
|
||||
|
@ -361,8 +360,7 @@ EmitExprForReferenceBinding(CodeGenFunction &CGF, const Expr *E,
|
|||
!E->getType()->isAnyComplexType()) {
|
||||
ReferenceTemporary = CreateReferenceTemporary(CGF, E->getType(),
|
||||
InitializedDecl);
|
||||
unsigned Alignment =
|
||||
CGF.getContext().getTypeAlignInChars(E->getType()).getQuantity();
|
||||
CharUnits Alignment = CGF.getContext().getTypeAlignInChars(E->getType());
|
||||
AggValueSlot::IsDestructed_t isDestructed
|
||||
= AggValueSlot::IsDestructed_t(InitializedDecl != 0);
|
||||
AggSlot = AggValueSlot::forAddr(ReferenceTemporary, Alignment,
|
||||
|
|
|
@ -750,10 +750,10 @@ static void StoreAnyExprIntoOneUnit(CodeGenFunction &CGF, const CXXNewExpr *E,
|
|||
const Expr *Init = E->getConstructorArg(0);
|
||||
QualType AllocType = E->getAllocatedType();
|
||||
|
||||
unsigned Alignment =
|
||||
CGF.getContext().getTypeAlignInChars(AllocType).getQuantity();
|
||||
CharUnits Alignment = CGF.getContext().getTypeAlignInChars(AllocType);
|
||||
if (!CGF.hasAggregateLLVMType(AllocType))
|
||||
CGF.EmitScalarInit(Init, 0, CGF.MakeAddrLValue(NewPtr, AllocType, Alignment),
|
||||
CGF.EmitScalarInit(Init, 0, CGF.MakeAddrLValue(NewPtr, AllocType,
|
||||
Alignment.getQuantity()),
|
||||
false);
|
||||
else if (AllocType->isAnyComplexType())
|
||||
CGF.EmitComplexExprIntoAddr(Init, NewPtr,
|
||||
|
|
|
@ -772,8 +772,7 @@ void CodeGenFunction::EmitReturnStmt(const ReturnStmt &S) {
|
|||
} else if (RV->getType()->isAnyComplexType()) {
|
||||
EmitComplexExprIntoAddr(RV, ReturnValue, false);
|
||||
} else {
|
||||
unsigned Alignment =
|
||||
getContext().getTypeAlignInChars(RV->getType()).getQuantity();
|
||||
CharUnits Alignment = getContext().getTypeAlignInChars(RV->getType());
|
||||
EmitAggExpr(RV, AggValueSlot::forAddr(ReturnValue, Alignment, Qualifiers(),
|
||||
AggValueSlot::IsDestructed,
|
||||
AggValueSlot::DoesNotNeedGCBarriers,
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#define CLANG_CODEGEN_CGVALUE_H
|
||||
|
||||
#include "clang/AST/ASTContext.h"
|
||||
#include "clang/AST/CharUnits.h"
|
||||
#include "clang/AST/Type.h"
|
||||
|
||||
namespace llvm {
|
||||
|
@ -366,7 +367,7 @@ public:
|
|||
/// for calling destructors on this object
|
||||
/// \param needsGC - true if the slot is potentially located
|
||||
/// somewhere that ObjC GC calls should be emitted for
|
||||
static AggValueSlot forAddr(llvm::Value *addr, unsigned align,
|
||||
static AggValueSlot forAddr(llvm::Value *addr, CharUnits align,
|
||||
Qualifiers quals,
|
||||
IsDestructed_t isDestructed,
|
||||
NeedsGCBarriers_t needsGC,
|
||||
|
@ -374,7 +375,7 @@ public:
|
|||
IsZeroed_t isZeroed = IsNotZeroed) {
|
||||
AggValueSlot AV;
|
||||
AV.Addr = addr;
|
||||
AV.Alignment = align;
|
||||
AV.Alignment = align.getQuantity();
|
||||
AV.Quals = quals;
|
||||
AV.DestructedFlag = isDestructed;
|
||||
AV.ObjCGCFlag = needsGC;
|
||||
|
@ -387,8 +388,8 @@ public:
|
|||
NeedsGCBarriers_t needsGC,
|
||||
IsAliased_t isAliased,
|
||||
IsZeroed_t isZeroed = IsNotZeroed) {
|
||||
return forAddr(LV.getAddress(), LV.getAlignment(), LV.getQuals(),
|
||||
isDestructed, needsGC, isAliased, isZeroed);
|
||||
return forAddr(LV.getAddress(), CharUnits::fromQuantity(LV.getAlignment()),
|
||||
LV.getQuals(), isDestructed, needsGC, isAliased, isZeroed);
|
||||
}
|
||||
|
||||
IsDestructed_t isExternallyDestructed() const {
|
||||
|
@ -420,8 +421,8 @@ public:
|
|||
return Addr == 0;
|
||||
}
|
||||
|
||||
unsigned getAlignment() const {
|
||||
return Alignment;
|
||||
CharUnits getAlignment() const {
|
||||
return CharUnits::fromQuantity(Alignment);
|
||||
}
|
||||
|
||||
IsAliased_t isPotentiallyAliased() const {
|
||||
|
|
|
@ -1574,7 +1574,7 @@ public:
|
|||
/// CreateAggTemp - Create a temporary memory object for the given
|
||||
/// aggregate type.
|
||||
AggValueSlot CreateAggTemp(QualType T, const Twine &Name = "tmp") {
|
||||
unsigned Alignment = getContext().getTypeAlignInChars(T).getQuantity();
|
||||
CharUnits Alignment = getContext().getTypeAlignInChars(T);
|
||||
return AggValueSlot::forAddr(CreateMemTemp(T, Name), Alignment,
|
||||
T.getQualifiers(),
|
||||
AggValueSlot::IsNotDestructed,
|
||||
|
|
Loading…
Reference in New Issue