forked from OSchip/llvm-project
[CGExpr] Use getCharWidth() more consistently in CCGExprConstant. NFC
Most of CGExprConstant.cpp is using the CharUnits abstraction and is using getCharWidth() (directly of indirectly) when converting between size of a char and size in bits. This patch is making that abstraction more consistent by adding CharTy to the CodeGenTypeCache (honoring getCharWidth() when mapping from char to LLVM IR types, instead of using Int8Ty directly). Reviewed By: rjmccall Differential Revision: https://reviews.llvm.org/D94979
This commit is contained in:
parent
72f863fd37
commit
ea2cfda386
|
@ -58,14 +58,14 @@ struct ConstantAggregateBuilderUtils {
|
|||
}
|
||||
|
||||
llvm::Constant *getPadding(CharUnits PadSize) const {
|
||||
llvm::Type *Ty = CGM.Int8Ty;
|
||||
llvm::Type *Ty = CGM.CharTy;
|
||||
if (PadSize > CharUnits::One())
|
||||
Ty = llvm::ArrayType::get(Ty, PadSize.getQuantity());
|
||||
return llvm::UndefValue::get(Ty);
|
||||
}
|
||||
|
||||
llvm::Constant *getZeroes(CharUnits ZeroSize) const {
|
||||
llvm::Type *Ty = llvm::ArrayType::get(CGM.Int8Ty, ZeroSize.getQuantity());
|
||||
llvm::Type *Ty = llvm::ArrayType::get(CGM.CharTy, ZeroSize.getQuantity());
|
||||
return llvm::ConstantAggregateZero::get(Ty);
|
||||
}
|
||||
};
|
||||
|
@ -1069,7 +1069,7 @@ public:
|
|||
|
||||
assert(CurSize <= TotalSize && "Union size mismatch!");
|
||||
if (unsigned NumPadBytes = TotalSize - CurSize) {
|
||||
llvm::Type *Ty = CGM.Int8Ty;
|
||||
llvm::Type *Ty = CGM.CharTy;
|
||||
if (NumPadBytes > 1)
|
||||
Ty = llvm::ArrayType::get(Ty, NumPadBytes);
|
||||
|
||||
|
|
|
@ -123,6 +123,8 @@ CodeGenModule::CodeGenModule(ASTContext &C, const HeaderSearchOptions &HSO,
|
|||
C.toCharUnitsFromBits(C.getTargetInfo().getMaxPointerWidth()).getQuantity();
|
||||
IntAlignInBytes =
|
||||
C.toCharUnitsFromBits(C.getTargetInfo().getIntAlign()).getQuantity();
|
||||
CharTy =
|
||||
llvm::IntegerType::get(LLVMContext, C.getTargetInfo().getCharWidth());
|
||||
IntTy = llvm::IntegerType::get(LLVMContext, C.getTargetInfo().getIntWidth());
|
||||
IntPtrTy = llvm::IntegerType::get(LLVMContext,
|
||||
C.getTargetInfo().getMaxPointerWidth());
|
||||
|
|
|
@ -41,6 +41,9 @@ struct CodeGenTypeCache {
|
|||
/// int
|
||||
llvm::IntegerType *IntTy;
|
||||
|
||||
/// char
|
||||
llvm::IntegerType *CharTy;
|
||||
|
||||
/// intptr_t, size_t, and ptrdiff_t, which we assume are the same size.
|
||||
union {
|
||||
llvm::IntegerType *IntPtrTy;
|
||||
|
|
Loading…
Reference in New Issue