r207900 - [leaks] Re-shuffle code such that we don't create a basic block for
Chandler Carruth
chandlerc at gmail.com
Sat May 3 02:16:57 PDT 2014
Author: chandlerc
Date: Sat May 3 04:16:57 2014
New Revision: 207900
URL: http://llvm.org/viewvc/llvm-project?rev=207900&view=rev
Log:
[leaks] Re-shuffle code such that we don't create a basic block for
initializing an array unless we need it. Specifically, position the
creation of a new basic block after we've checked all of the cases that
bypass the need for it.
Fixes another leak in test/CodeGen* found by LSan.
Modified:
cfe/trunk/lib/CodeGen/CGExprCXX.cpp
Modified: cfe/trunk/lib/CodeGen/CGExprCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprCXX.cpp?rev=207900&r1=207899&r2=207900&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExprCXX.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExprCXX.cpp Sat May 3 04:16:57 2014
@@ -814,20 +814,22 @@ CodeGenFunction::EmitNewArrayInitializer
explicitPtr = Builder.CreateBitCast(explicitPtr, beginPtr->getType());
}
+ llvm::ConstantInt *constNum = dyn_cast<llvm::ConstantInt>(numElements);
+
+ // If all elements have already been initialized, skip the whole loop.
+ if (constNum && constNum->getZExtValue() <= initializerElements) {
+ // If there was a cleanup, deactivate it.
+ if (cleanupDominator)
+ DeactivateCleanupBlock(cleanup, cleanupDominator);
+ return;
+ }
+
// Create the continuation block.
llvm::BasicBlock *contBB = createBasicBlock("new.loop.end");
// If the number of elements isn't constant, we have to now check if there is
// anything left to initialize.
- if (llvm::ConstantInt *constNum = dyn_cast<llvm::ConstantInt>(numElements)) {
- // If all elements have already been initialized, skip the whole loop.
- if (constNum->getZExtValue() <= initializerElements) {
- // If there was a cleanup, deactivate it.
- if (cleanupDominator)
- DeactivateCleanupBlock(cleanup, cleanupDominator);
- return;
- }
- } else {
+ if (!constNum) {
llvm::BasicBlock *nonEmptyBB = createBasicBlock("new.loop.nonempty");
llvm::Value *isEmpty = Builder.CreateICmpEQ(explicitPtr, endPtr,
"array.isempty");
More information about the cfe-commits
mailing list