diff options
author | Chris B <chris.bieneman@me.com> | 2024-03-26 14:15:56 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-26 14:15:56 -0500 |
commit | 28ddbd4a863c4c1b6c36deb6edf305ee93412cd4 (patch) | |
tree | cef32f4f8feb366d657791c11c42317e7d7c5e87 /clang/lib/CodeGen/CGCall.cpp | |
parent | 0e5c504d3d80eb1488483a15269c2155f9e04bd7 (diff) | |
download | llvm-28ddbd4a863c4c1b6c36deb6edf305ee93412cd4.zip llvm-28ddbd4a863c4c1b6c36deb6edf305ee93412cd4.tar.gz llvm-28ddbd4a863c4c1b6c36deb6edf305ee93412cd4.tar.bz2 |
[NFC] Refactor ConstantArrayType size storage (#85716)
In PR #79382, I need to add a new type that derives from
ConstantArrayType. This means that ConstantArrayType can no longer use
`llvm::TrailingObjects` to store the trailing optional Expr*.
This change refactors ConstantArrayType to store a 60-bit integer and
4-bits for the integer size in bytes. This replaces the APInt field
previously in the type but preserves enough information to recreate it
where needed.
To reduce the number of places where the APInt is re-constructed I've
also added some helper methods to the ConstantArrayType to allow some
common use cases that operate on either the stored small integer or the
APInt as appropriate.
Resolves #85124.
Diffstat (limited to 'clang/lib/CodeGen/CGCall.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGCall.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index a28d788..475d96b 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -933,8 +933,8 @@ struct NoExpansion : TypeExpansion { static std::unique_ptr<TypeExpansion> getTypeExpansion(QualType Ty, const ASTContext &Context) { if (const ConstantArrayType *AT = Context.getAsConstantArrayType(Ty)) { - return std::make_unique<ConstantArrayExpansion>( - AT->getElementType(), AT->getSize().getZExtValue()); + return std::make_unique<ConstantArrayExpansion>(AT->getElementType(), + AT->getZExtSize()); } if (const RecordType *RT = Ty->getAs<RecordType>()) { SmallVector<const CXXBaseSpecifier *, 1> Bases; @@ -3086,7 +3086,7 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI, llvm::Align Alignment = CGM.getNaturalTypeAlignment(ETy).getAsAlign(); AI->addAttrs(llvm::AttrBuilder(getLLVMContext()).addAlignmentAttr(Alignment)); - uint64_t ArrSize = ArrTy->getSize().getZExtValue(); + uint64_t ArrSize = ArrTy->getZExtSize(); if (!ETy->isIncompleteType() && ETy->isConstantSizeType() && ArrSize) { llvm::AttrBuilder Attrs(getLLVMContext()); |