Index: osprey/be/com/constraint_graph.cxx
===================================================================
--- osprey/be/com/constraint_graph.cxx  (revision 3534)
+++ osprey/be/com/constraint_graph.cxx  (working copy)
@@ -759,6 +759,7 @@
     }
     ptsTo.clear();
     cgNode->unionPointsTo(tmp, pti.qual());
+    tmp.clear();
   }
 }

@@ -996,7 +997,12 @@
         node = notAPointer();
       else {
         // Do initial value processing for the symbol
-        processInitValues(ST_st_idx(base_st));
+        if (ST_is_initialized(*base_st) &&
+              (_processedInitVals.find(ST_st_idx(base_st)) ==
+               _processedInitVals.end())) {
+          processInitValues(ST_st_idx(base_st));
+          _processedInitVals.insert(ST_st_idx(base_st));
+        }
         node = getCGNode(CG_ST_st_idx(base_st), base_offset);
       }
       pts.setBit(node->id());
@@ -1146,10 +1152,15 @@
       node = notAPointer();
     else {
       // Process the init vals of this symbol
+      if (ST_is_initialized(*base_st) &&
+          (_processedInitVals.find(ST_st_idx(base_st)) ==
+           _processedInitVals.end())) {
+        if (Get_Trace(TP_ALIAS,NYSTROM_CG_BUILD_FLAG))
+          fprintf(stderr, "Processing symbol value...\n");
+        processInitValues(ST_st_idx(base_st));
+        _processedInitVals.insert(ST_st_idx(base_st));
+      }
       if (Get_Trace(TP_ALIAS,NYSTROM_CG_BUILD_FLAG))
-        fprintf(stderr, "Processing symbol value...\n");
-      processInitValues(ST_st_idx(base_st));
-      if (Get_Trace(TP_ALIAS,NYSTROM_CG_BUILD_FLAG))
         fprintf(stderr, "End processing symbol value...\n");
       node = getCGNode(CG_ST_st_idx(base_st), base_offset);
     }
@@ -1332,8 +1343,11 @@
     }

     // If the init vals did not have a pointer, ignore any initializations
-    if (!foundPtr)
+    if (!foundPtr) {
+      MEM_POOL_Delete(&memPool);
+      tmp.clear();
       return;
+    }

     ConstraintGraphNode::sanitizePointsTo(tmp,NULL,CQ_NONE);
     ConstraintGraphNode *node = getCGNode(CG_ST_st_idx(base_st), base_offset);
@@ -1344,6 +1358,8 @@
       node->print(stderr);
       fprintf(stderr, "\n");
     }
+    MEM_POOL_Delete(&memPool);
+    tmp.clear();
     return;
   }

Index: osprey/be/com/constraint_graph_solve.cxx
===================================================================
--- osprey/be/com/constraint_graph_solve.cxx    (revision 3534)
+++ osprey/be/com/constraint_graph_solve.cxx    (working copy)
@@ -333,6 +333,7 @@
       }
       ptsTo.clear();
       rep->unionPointsTo(tmp, pti.qual());
+      tmp.clear();
     }
   }
 }
@@ -1274,6 +1275,7 @@


   bool change = dst.setUnion(diff);
+  diff.clear();
   return change;
 }

@@ -1363,6 +1365,7 @@
     printPointsTo(dst);
     fprintf(stderr,"\n");
   }
+  diff.clear();

   Is_True(sanityCheckPointsTo(qual),
           ("Node %d destination contains <ST,x> and <ST,-1>\n",id()));
@@ -1456,7 +1459,6 @@
   }

   CGNodeId trackNodeId = 0;
-  PointsTo origPts;

   UINT32 assignSize = edge->size();
   StInfo *dstStInfo = dst->cg()->stInfo(dst->cg_st_idx());
@@ -1559,6 +1561,7 @@
         ConstraintGraph::solverModList()->push(dst);
         updateOffsets(dst,tmp,dstQual);
       }
+      tmp.clear();
     }
   }
 }
