forked from OSchip/llvm-project
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:
parent
529989b8b6
commit
b7a95cf165
|
@ -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())
|
||||
|
|
Loading…
Reference in New Issue