diff options
Diffstat (limited to 'lib/Transforms')
-rw-r--r-- | lib/Transforms/Scalar/GVN.cpp | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/lib/Transforms/Scalar/GVN.cpp b/lib/Transforms/Scalar/GVN.cpp index a4f78fe457..efe8254cd5 100644 --- a/lib/Transforms/Scalar/GVN.cpp +++ b/lib/Transforms/Scalar/GVN.cpp @@ -1117,15 +1117,13 @@ bool GVN::processMemCpy(MemCpyInst* M, // First, we have to check that the dependency is another memcpy Instruction* dep = MD.getDependency(M); - if (dep == MemoryDependenceAnalysis::None || - dep == MemoryDependenceAnalysis::NonLocal) + if (dep == MemoryDependenceAnalysis::None || + dep == MemoryDependenceAnalysis::NonLocal) + return false; + else if (CallInst* C = dyn_cast<CallInst>(dep)) + return performReturnSlotOptzn(M, C, toErase); + else if (!isa<MemCpyInst>(dep)) return false; - else if (!isa<MemCpyInst>(dep)) { - if (CallInst* C = dyn_cast<CallInst>(dep)) - return performReturnSlotOptzn(M, C, toErase); - else - return false; - } // We can only transforms memcpy's where the dest of one is the source of the // other |