remove the special case for constant array sizes from

EmitCXXNewAllocSize.  This code uses IRBuilder, which does
constant folding already.

llvm-svn: 108882
This commit is contained in:
Chris Lattner 2010-07-20 18:45:57 +00:00
parent 4ab47682bb
commit cb46bdc34f
1 changed files with 2 additions and 24 deletions

View File

@ -420,9 +420,9 @@ static CharUnits CalculateCookiePadding(ASTContext &Ctx, const CXXNewExpr *E) {
}
static llvm::Value *EmitCXXNewAllocSize(ASTContext &Context,
CodeGenFunction &CGF,
CodeGenFunction &CGF,
const CXXNewExpr *E,
llvm::Value *& NumElements) {
llvm::Value *&NumElements) {
QualType Type = E->getAllocatedType();
CharUnits TypeSize = CGF.getContext().getTypeSizeInChars(Type);
const llvm::Type *SizeTy = CGF.ConvertType(CGF.getContext().getSizeType());
@ -432,28 +432,6 @@ static llvm::Value *EmitCXXNewAllocSize(ASTContext &Context,
CharUnits CookiePadding = CalculateCookiePadding(CGF.getContext(), E);
Expr::EvalResult Result;
if (E->getArraySize()->Evaluate(Result, CGF.getContext()) &&
!Result.HasSideEffects && Result.Val.isInt()) {
CharUnits AllocSize =
Result.Val.getInt().getZExtValue() * TypeSize + CookiePadding;
NumElements =
llvm::ConstantInt::get(SizeTy, Result.Val.getInt().getZExtValue());
while (const ArrayType *AType = Context.getAsArrayType(Type)) {
const llvm::ArrayType *llvmAType =
cast<llvm::ArrayType>(CGF.ConvertType(Type));
NumElements =
CGF.Builder.CreateMul(NumElements,
llvm::ConstantInt::get(
SizeTy, llvmAType->getNumElements()));
Type = AType->getElementType();
}
return llvm::ConstantInt::get(SizeTy, AllocSize.getQuantity());
}
// Emit the array size expression.
NumElements = CGF.EmitScalarExpr(E->getArraySize());