Author: dgilmore
Date: 2011-05-18 14:02:57 -0400 (Wed, 18 May 2011)
New Revision: 3609

Modified:
   trunk/osprey/be/lno/lnopt_main.cxx
Log:
Fixed runtime regression in SPEC Leslie3d that was due the field Prefer_Fuse not
being initialized in an instance of the DO_LOOP_INFO class that was constructed 
with:

DO_LOOP_INFO::DO_LOOP_INFO(DO_LOOP_INFO *dli, MEM_POOL *pool)

Also added:

    Comments to caution developers about issue.

    Other missing initializations, along with other cosmetic changes so
    that one can visually compare the two constructors with tkdiff.

Reviewed and approved by Mei Ye.


Modified: trunk/osprey/be/lno/lnopt_main.cxx
===================================================================
--- trunk/osprey/be/lno/lnopt_main.cxx  2011-05-17 19:32:07 UTC (rev 3608)
+++ trunk/osprey/be/lno/lnopt_main.cxx  2011-05-18 18:02:57 UTC (rev 3609)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008-2010 Advanced Micro Devices, Inc.  All Rights Reserved.
+ * Copyright (C) 2008-2011 Advanced Micro Devices, Inc.  All Rights Reserved.
  */
 
 /*
@@ -2291,10 +2291,12 @@
   return FALSE; 
 }
 
+// NB: the two constructors for DO_LOOP_INFO need to remain in sync.
 DO_LOOP_INFO::DO_LOOP_INFO(MEM_POOL *pool, ACCESS_ARRAY *lb, ACCESS_ARRAY *ub,
        ACCESS_VECTOR *step, BOOL has_calls, BOOL has_nested_calls, BOOL 
has_unsummarized_calls,
        BOOL has_unsummarized_call_cost, BOOL has_gotos, BOOL has_exits, 
-       BOOL has_gotos_this_level,BOOL is_inner) {
+       BOOL has_gotos_this_level,BOOL is_inner)
+{
     _pool = pool;
     _id = 0;
     LB = lb;
@@ -2306,9 +2308,7 @@
     Has_Unsummarized_Call_Cost = has_unsummarized_call_cost;
     Has_Threadprivate = FALSE; 
     Has_Gotos = has_gotos;
-#ifndef KEY
     Has_Conditional = FALSE;
-#endif
     Has_Gotos_This_Level = has_gotos_this_level;
     Has_Exits = has_exits;
     Has_EH_Regions = FALSE;
@@ -2323,9 +2323,12 @@
     No_Fission = FALSE;
     No_Fusion = FALSE; 
     Aggressive_Inner_Fission = FALSE;
+    Depth = 0;
     _wind_down_flags = 0;
     Est_Num_Iterations = -1;
     Est_Max_Iterations_Index = -1;
+    // Est_Register_Usage has it's own constructor
+    // Matching comment (provides a hint for tkdiff).
     Num_Iterations_Symbolic = TRUE;
     Num_Iterations_Profile = FALSE;
     Guard = NULL;
@@ -2345,6 +2348,7 @@
       Required_Blocksize[i] = -1;
     Permutation_Spec_Array = NULL;
     Permutation_Spec_Count = 0;
+    // Matching comment (provides a hint for tkdiff).
     Blockable_Specification = 0;
     Is_Inner_Tile = FALSE; 
     Is_Outer_Tile = FALSE; 
@@ -2357,7 +2361,7 @@
     Is_Doacross = FALSE; 
     Doacross_Tile_Size = 0; 
     Sync_Distances[0] = NULL_DIST; 
-    Sync_Distances[0] = NULL_DIST; 
+    Sync_Distances[1] = NULL_DIST; 
     Parallelizable = FALSE; 
 #ifdef KEY
     Vectorizable = FALSE; 
@@ -2399,28 +2403,29 @@
   return last_value_peeling; 
 } 
 
-DO_LOOP_INFO::DO_LOOP_INFO(DO_LOOP_INFO *dli, MEM_POOL *pool) {
+// NB: the two constructors for DO_LOOP_INFO need to remain in sync.
+DO_LOOP_INFO::DO_LOOP_INFO(DO_LOOP_INFO *dli, MEM_POOL *pool)
+{
     _pool = pool;
     _id = 0;
     if (dli->LB) LB = CXX_NEW(ACCESS_ARRAY(dli->LB,pool),pool);
     if (dli->UB) UB = CXX_NEW(ACCESS_ARRAY(dli->UB,pool),pool);
     if (dli->Step) Step = CXX_NEW(ACCESS_VECTOR(dli->Step,pool),pool);
     Has_Calls = dli->Has_Calls;
-#ifdef KEY //bug 14284
     Has_Nested_Calls = dli->Has_Nested_Calls;
-#endif    
     Has_Unsummarized_Calls = dli->Has_Unsummarized_Calls;
     Has_Unsummarized_Call_Cost = dli->Has_Unsummarized_Call_Cost;
     Has_Threadprivate = dli->Has_Threadprivate; 
     Has_Gotos = dli->Has_Gotos;
+    Has_Conditional = dli->Has_Conditional;
     Has_Gotos_This_Level = dli->Has_Gotos_This_Level;
     Has_Exits = dli->Has_Exits;
     Has_EH_Regions = dli->Has_EH_Regions;
+    Is_Inner = dli->Is_Inner;
     Has_Bad_Mem = dli->Has_Bad_Mem;
     Has_Barriers = dli->Has_Barriers;
     Multiversion_Alias = dli->Multiversion_Alias;
     Loop_Vectorized = dli->Loop_Vectorized;
-    Is_Inner = dli->Is_Inner;
     Is_Ivdep = dli->Is_Ivdep;
     Is_Concurrent_Call = dli->Is_Concurrent_Call;
     Concurrent_Directive = dli->Concurrent_Directive;
@@ -2432,6 +2437,7 @@
     Est_Num_Iterations = dli->Est_Num_Iterations;
     Est_Max_Iterations_Index = dli->Est_Max_Iterations_Index;
     Est_Register_Usage = dli->Est_Register_Usage;
+    // Matching comment (provides a hint for tkdiff).
     Num_Iterations_Symbolic = dli->Num_Iterations_Symbolic;
     Num_Iterations_Profile = dli->Num_Iterations_Profile;
     Guard = dli->Guard;
@@ -2442,6 +2448,11 @@
     Serial_Version_of_Concurrent_Loop = dli->Serial_Version_of_Concurrent_Loop;
     Auto_Parallelized = dli->Auto_Parallelized; 
     Required_Unroll = dli->Required_Unroll;
+    Prefer_Fuse = dli->Prefer_Fuse;
+    Has_Precom_Def = dli->Has_Precom_Def;
+    Has_Precom_Use = dli->Has_Precom_Use;
+    Is_Precom_Init = dli->Is_Precom_Init;
+    Sclrze_Dse = dli->Sclrze_Dse;
     for (INT i = 0; i < MHD_MAX_LEVELS; i++)
       Required_Blocksize[i] = dli->Required_Blocksize[i];
     Permutation_Spec_Array = NULL;  
@@ -2452,6 +2463,7 @@
       for (INT i = 0; i < Permutation_Spec_Count; i++) 
        Permutation_Spec_Array[i] = dli->Permutation_Spec_Array[i]; 
     }
+    // Matching comment (provides a hint for tkdiff).
     Blockable_Specification = dli->Blockable_Specification;
     Is_Inner_Tile = dli->Is_Inner_Tile; 
     Is_Outer_Tile = dli->Is_Outer_Tile; 
@@ -2473,7 +2485,7 @@
     Last_Value_Peeled = dli->Last_Value_Peeled; 
     Not_Enough_Parallel_Work = dli->Not_Enough_Parallel_Work; 
     Inside_Critical_Section = dli->Inside_Critical_Section;
-    Work_Estimate= dli->Work_Estimate; 
+    Work_Estimate = dli->Work_Estimate; 
     Lego_Mp_Key_Lower = dli->Lego_Mp_Key_Lower; 
     Lego_Mp_Key_Upper = dli->Lego_Mp_Key_Upper; 
     Lego_Mp_Key_Depth = dli->Lego_Mp_Key_Depth; 


------------------------------------------------------------------------------
What Every C/C++ and Fortran developer Should Know!
Read this article and learn how Intel has extended the reach of its 
next-generation tools to help Windows* and Linux* C/C++ and Fortran 
developers boost performance applications - including clusters. 
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to