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/CodeGenFunction.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/CodeGenFunction.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.cpp | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index fad26c4..f2ebaf7 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -2189,8 +2189,8 @@ llvm::Value *CodeGenFunction::emitArrayLength(const ArrayType *origArrayType, dyn_cast<llvm::ArrayType>(addr.getElementType()); while (llvmArrayType) { assert(isa<ConstantArrayType>(arrayType)); - assert(cast<ConstantArrayType>(arrayType)->getSize().getZExtValue() - == llvmArrayType->getNumElements()); + assert(cast<ConstantArrayType>(arrayType)->getZExtSize() == + llvmArrayType->getNumElements()); gepIndices.push_back(zero); countFromCLAs *= llvmArrayType->getNumElements(); @@ -2208,8 +2208,7 @@ llvm::Value *CodeGenFunction::emitArrayLength(const ArrayType *origArrayType, // as some other type (probably a packed struct). Compute the array // size, and just emit the 'begin' expression as a bitcast. while (arrayType) { - countFromCLAs *= - cast<ConstantArrayType>(arrayType)->getSize().getZExtValue(); + countFromCLAs *= cast<ConstantArrayType>(arrayType)->getZExtSize(); eltType = arrayType->getElementType(); arrayType = getContext().getAsArrayType(eltType); } |