diff src/gpu/hsail/vm/gpu_hsail.cpp @ 15609:66d31e70bd79

HSAIL: fixed deopt bug; cleaned up C++ code Contributed-by: Tom Deneau <tom.deneau@amd.com>
author Doug Simon <doug.simon@oracle.com>
date Tue, 13 May 2014 14:35:15 +0200
parents 063ec2920d21
children 66a9286203a2
line wrap: on
line diff
--- a/src/gpu/hsail/vm/gpu_hsail.cpp	Tue May 13 11:55:11 2014 +0200
+++ b/src/gpu/hsail/vm/gpu_hsail.cpp	Tue May 13 14:35:15 2014 +0200
@@ -392,19 +392,16 @@
   // Reset the kernel arguments
   _okra_clearargs(kernel);
 
-  // get how many bytes per deopt save area are required
-  int saveAreaCounts = OopSaver::getSaveAreaCounts(oop_map_array);
-  int numSRegs = saveAreaCounts & 0xff;
-  int numDRegs = (saveAreaCounts >> 8) & 0xff;
-  int numStackSlots = (saveAreaCounts >> 16);
-  int bytesPerSaveArea = numSRegs * 4 + (numDRegs + numStackSlots) * 8;
-
   HSAILDeoptimizationInfo* e;
   if (UseHSAILDeoptimization) {
-    e = new (MAX_DEOPT_SLOTS, bytesPerSaveArea) HSAILDeoptimizationInfo(MAX_DEOPT_SLOTS, bytesPerSaveArea);
-    e->set_never_ran_array(NEW_C_HEAP_ARRAY(jboolean, dimX, mtInternal));
-    memset(e->never_ran_array(), 0, dimX * sizeof(jboolean));
-    e->set_donor_threads(donorThreads);
+    // get how many bytes per deopt save area are required
+    int saveAreaCounts = OopSaver::getSaveAreaCounts(oop_map_array);
+    int numSRegs = saveAreaCounts & 0xff;
+    int numDRegs = (saveAreaCounts >> 8) & 0xff;
+    int numStackSlots = (saveAreaCounts >> 16);
+    int bytesPerSaveArea = numSRegs * 4 + (numDRegs + numStackSlots) * 8;
+
+    e = new (MAX_DEOPT_SLOTS, bytesPerSaveArea) HSAILDeoptimizationInfo(MAX_DEOPT_SLOTS, bytesPerSaveArea, dimX, donorThreads);
   }
 
   // This object sets up the kernel arguments
@@ -455,7 +452,6 @@
   }
 
   if (UseHSAILDeoptimization) {
-    kernelStats.incDeopts();
     // check if any workitem requested a deopt
     int deoptcode = e->deopt_occurred();
     if (deoptcode != 1) {
@@ -470,6 +466,7 @@
         guarantee(deoptcode == 1, msg);
       }
     } else {
+      kernelStats.incDeopts();
 
       {
         TraceTime t3("handle deoptimizing workitems", TraceGPUInteraction);
@@ -586,7 +583,6 @@
       } // end of never-ran handling
     }
 
-    FREE_C_HEAP_ARRAY(jboolean, e->never_ran_array(), mtInternal);
     delete e;
   }
   kernelStats.finishDispatch();