Fix a memory leak.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41739 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/LiveInterval.cpp b/lib/CodeGen/LiveInterval.cpp
index 4d38f0a..9b4872d 100644
--- a/lib/CodeGen/LiveInterval.cpp
+++ b/lib/CodeGen/LiveInterval.cpp
@@ -476,7 +476,9 @@
   // ~1U so it can be nuked later.
   if (V1->id == getNumValNums()-1) {
     do {
+      VNInfo *VNI = valnos.back();
       valnos.pop_back();
+      VNI->~VNInfo();
     } while (valnos.back()->def == ~1U);
   } else {
     V1->def = ~1U;
diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp
index 2f93b76..3d324b7 100644
--- a/lib/CodeGen/LiveIntervalAnalysis.cpp
+++ b/lib/CodeGen/LiveIntervalAnalysis.cpp
@@ -62,10 +62,11 @@
 }
 
 void LiveIntervals::releaseMemory() {
-  VNInfoAllocator.Reset();
   mi2iMap_.clear();
   i2miMap_.clear();
   r2iMap_.clear();
+  // Release VNInfo memroy regions after all VNInfo objects are dtor'd.
+  VNInfoAllocator.Reset();
   for (unsigned i = 0, e = ClonedMIs.size(); i != e; ++i)
     delete ClonedMIs[i];
 }