Index: osprey/be/com/alias_analyzer.h
===================================================================
--- osprey/be/com/alias_analyzer.h      (revision 3586)
+++ osprey/be/com/alias_analyzer.h      (working copy)
@@ -150,6 +150,8 @@

    bool checkQueryFile(UINT32 pu, AliasTag tag1, AliasTag tag2, bool &result);

+   WN_MAP aliasTagMap() { return _aliasTagMap; }
+
 private:

    void loadQueryFile(char *filename);
Index: osprey/be/com/wn_mp.cxx
===================================================================
--- osprey/be/com/wn_mp.cxx     (revision 3586)
+++ osprey/be/com/wn_mp.cxx     (working copy)
@@ -140,6 +140,7 @@
 #include "wn_lower.h"
 #include "config_opt.h"
 #endif
+#include "alias_analyzer.h"

 /*
 MP lowerer cleanup TODO by DRK:
@@ -2758,6 +2759,16 @@
   Set_PU_Info_state(parallel_pu, WT_PROC_SYM, Subsect_InMem);
   Set_PU_Info_flags(parallel_pu, PU_IS_COMPILER_GENERATED);

+  // don't copy nystrom points to analysis, alias_tag map
+  // mp function's points to analysis will be analyzed locally.
+  AliasAnalyzer *aa = AliasAnalyzer::aliasAnalyzer();
+  if (aa) {
+    // Current_Map_Tab is update to PU_Info_maptab(parallel_pu) in PU_Info_maptab
+    Is_True(PU_Info_maptab(parallel_pu) == Current_Map_Tab,
+        ("parallel_pu's PU's maptab isn't parallel_pu\n"));
+    WN_MAP_Set_dont_copy(aa->aliasTagMap(), FALSE);
+  }
+
     // use hack to save csymtab using parallel_pu, so we can restore it
     // later when we lower parallel_pu; this is necessary because the
     // new symtab routines can't maintain more than one chain of symtabs
Index: osprey/be/com/alias_analyzer.cxx
===================================================================
--- osprey/be/com/alias_analyzer.cxx    (revision 3586)
+++ osprey/be/com/alias_analyzer.cxx    (working copy)
@@ -97,17 +97,6 @@

   MEM_POOL_Delete(&_memPool);
   IPA_WN_MAP_Delete(Current_Map_Tab, _aliasTagMap);
-  // delete the mp generate pu's map
-  PU_Info *child = PU_Info_child(Current_PU_Info);
-  while (child) {
-    if (PU_mp(PU_Info_pu(child))) {
-      FmtAssert(PU_Info_maptab(child)->_pool[_aliasTagMap] ==
-                PU_Info_maptab(Current_PU_Info)->_pool[_aliasTagMap] ,
-               ("the child mp pu pool is not equal to _memPool"));
-      IPA_WN_MAP_Delete(PU_Info_maptab(child), _aliasTagMap);
-    }
-    child = PU_Info_next(child);
-  }
 }

 ALIAS_RESULT
