]> granicus.if.org Git - clang/commitdiff
delete a loop that just generates dead code. In an example
authorChris Lattner <sabre@nondot.org>
Tue, 20 Jul 2010 18:49:33 +0000 (18:49 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 20 Jul 2010 18:49:33 +0000 (18:49 +0000)
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.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@108884 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGExprCXX.cpp

index 7ff452d8c884f0b43d6146ef8b0b95afee09d067..f9c4b30d0bac870223d57e9afe6211352ed3a8f7 100644 (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())