[PATCH] D94977: [CodeGen] Honor getCharWidth() in CGRecordLowering
Bjorn Pettersson via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Jan 19 09:19:16 PST 2021
bjope created this revision.
bjope requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
When using getByteArrayType the requested size was calculated in
char units, but the type used for the array was hardcoded to the
Int8Ty. Honor the size of char, and use getIntNTy in combination
with getCharWidth to make the code a bit more consistent.
This can be considered as NFC, as getCharWidth always return 8
and can't be configured (at least not in-tree). It just makes the
code a bit more consistent, and it might be helpful for out-of-tree
targets that implement different char widths.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D94977
Files:
clang/lib/CodeGen/CGRecordLayoutBuilder.cpp
Index: clang/lib/CodeGen/CGRecordLayoutBuilder.cpp
===================================================================
--- clang/lib/CodeGen/CGRecordLayoutBuilder.cpp
+++ clang/lib/CodeGen/CGRecordLayoutBuilder.cpp
@@ -127,15 +127,20 @@
/// Wraps llvm::Type::getIntNTy with some implicit arguments.
llvm::Type *getIntNType(uint64_t NumBits) {
+ unsigned AlignedBits = llvm::alignTo(NumBits, Context.getCharWidth());
+ return llvm::Type::getIntNTy(Types.getLLVMContext(), AlignedBits);
+ }
+ /// Get the LLVM type sized as one character unit.
+ llvm::Type *getCharType() {
return llvm::Type::getIntNTy(Types.getLLVMContext(),
- (unsigned)llvm::alignTo(NumBits, 8));
+ Context.getCharWidth());
}
- /// Gets an llvm type of size NumBytes and alignment 1.
- llvm::Type *getByteArrayType(CharUnits NumBytes) {
- assert(!NumBytes.isZero() && "Empty byte arrays aren't allowed.");
- llvm::Type *Type = llvm::Type::getInt8Ty(Types.getLLVMContext());
- return NumBytes == CharUnits::One() ? Type :
- (llvm::Type *)llvm::ArrayType::get(Type, NumBytes.getQuantity());
+ /// Gets an llvm type of size NumChars and alignment 1.
+ llvm::Type *getByteArrayType(CharUnits NumChars) {
+ assert(!NumChars.isZero() && "Empty byte arrays aren't allowed.");
+ llvm::Type *Type = getCharType();
+ return NumChars == CharUnits::One() ? Type :
+ (llvm::Type *)llvm::ArrayType::get(Type, NumChars.getQuantity());
}
/// Gets the storage type for a field decl and handles storage
/// for itanium bitfields that are smaller than their declared type.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D94977.317602.patch
Type: text/x-patch
Size: 1656 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210119/7e1e05c9/attachment.bin>
More information about the cfe-commits
mailing list