delete a loop that just generates dead code. In an example

like this:

void *test(long N) {
  return new int[N][42][42];
}

the loop generates two dead mul instructions:

  %tmp = load i64* %N.addr                        ; <i64> [#uses=2]
  %0 = mul i64 %tmp, 7056                         ; <i64> [#uses=1]
  %1 = mul i64 %tmp, 42                           ; <i64> [#uses=1]
  %2 = mul i64 %1, 42                             ; <i64> [#uses=0]
  %call = call noalias i8* @_Znam(i64 %0)         ; <i8*> [#uses=1]

The scale of these multiplies is already handled by the typesize stuff.

llvm-svn: 108884
This commit is contained in:
Chris Lattner 2010-07-20 18:49:33 +00:00
parent 529989b8b6
commit b7a95cf165
1 changed files with 0 additions and 10 deletions

View File

@ -440,16 +440,6 @@ static llvm::Value *EmitCXXNewAllocSize(ASTContext &Context,
CGF.Builder.CreateMul(NumElements,
llvm::ConstantInt::get(SizeTy,
TypeSize.getQuantity()));
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();
}
// And add the cookie padding if necessary.
if (!CookiePadding.isZero())