[Openmp-commits] [openmp] r317787 - [OMPT] Fix test cancel_parallel.c

Jonas Hahnfeld via Openmp-commits openmp-commits at lists.llvm.org
Thu Nov 9 06:26:14 PST 2017


Author: hahnfeld
Date: Thu Nov  9 06:26:14 2017
New Revision: 317787

URL: http://llvm.org/viewvc/llvm-project?rev=317787&view=rev
Log:
[OMPT] Fix test cancel_parallel.c

If a parallel region is cancelled, execution resumes at the end
of the structured block. That is why this test cannot use the
"normal" macros that print right after inserting the label.
Instead it previously printed the addresses before the pragma
and swapped the checks compared to the other tests.

However, this does not work because FileChecks '*' is greedy
so that RETURN_ADDRESS always matched the second address. This
makes the test fail when an "overflow" occurrs and the first
address matches the value of codeptr_ra.

I discovered this on my MacBook but I'm unable to reproduce the
failure with the current version. Nevertheless we should fix this
problem to avoid that this test fails later after an unrelated change.

Differential Revision: https://reviews.llvm.org/D39708

Modified:
    openmp/trunk/runtime/test/ompt/cancel/cancel_parallel.c

Modified: openmp/trunk/runtime/test/ompt/cancel/cancel_parallel.c
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/test/ompt/cancel/cancel_parallel.c?rev=317787&r1=317786&r2=317787&view=diff
==============================================================================
--- openmp/trunk/runtime/test/ompt/cancel/cancel_parallel.c (original)
+++ openmp/trunk/runtime/test/ompt/cancel/cancel_parallel.c Thu Nov  9 06:26:14 2017
@@ -6,37 +6,35 @@
 #include "callback.h"
 #include "omp.h"
 
-int main()
-{
+int main() {
   #pragma omp parallel num_threads(2)
   {
-    if(omp_get_thread_num() == 0)
-    {
-      printf("%" PRIu64 ": fuzzy_address=0x%lx or 0x%lx\n", ompt_get_thread_data()->value, ((uint64_t)(char*)(&& ompt_label_1))/256-1, ((uint64_t)(char*)(&& ompt_label_1))/256);
+    if (omp_get_thread_num() == 0) {
+      print_fuzzy_address_blocks(get_ompt_label_address(1));
       #pragma omp cancel parallel
-      print_fuzzy_address(1); //does not actually print the address but provides a label
-    }
-    else
-    {
+      define_ompt_label(1);
+      // We cannot print at this location because the parallel region is cancelled!
+    } else {
       delay(100);
-      printf("%" PRIu64 ": fuzzy_address=0x%lx or 0x%lx\n", ompt_get_thread_data()->value, ((uint64_t)(char*)(&& ompt_label_2))/256-1, ((uint64_t)(char*)(&& ompt_label_2))/256);
+      print_fuzzy_address_blocks(get_ompt_label_address(2));
       #pragma omp cancellation point parallel
-      print_fuzzy_address(2); //does not actually print the address but provides a label
+      define_ompt_label(2);
+      // We cannot print at this location because the parallel region is cancelled!
     }
   }
 
-
   // Check if libomp supports the callbacks for this test.
   // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_task_create'
   // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_cancel'
 
   // CHECK: {{^}}0: NULL_POINTER=[[NULL:.*$]]
   // CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_task_create: parent_task_id=[[PARENT_TASK_ID:[0-9]+]], parent_task_frame.exit=[[NULL]], parent_task_frame.reenter=[[NULL]], new_task_id=[[TASK_ID:[0-9]+]], codeptr_ra=[[NULL]], task_type=ompt_task_initial=1, has_dependences=no
-  // CHECK: {{^}}[[MASTER_ID]]: fuzzy_address={{.*}}[[RETURN_ADDRESS:0x[0-f]+]]
-  // CHECK: {{^}}[[MASTER_ID]]: ompt_event_cancel: task_data=[[TASK_ID:[0-9]+]], flags=ompt_cancel_parallel|ompt_cancel_activated=17, codeptr_ra=[[RETURN_ADDRESS]]{{[0-f][0-f]}}
+  // CHECK-DAG: {{^}}[[MASTER_ID]]: ompt_event_cancel: task_data=[[TASK_ID:[0-9]+]], flags=ompt_cancel_parallel|ompt_cancel_activated=17, codeptr_ra=[[RETURN_ADDRESS:0x[0-f]+]]{{[0-f][0-f]}}
+  // CHECK-DAG: {{^}}[[MASTER_ID]]: fuzzy_address={{.*}}[[RETURN_ADDRESS]]
 
-  // CHECK: {{^}}[[THREAD_ID:[0-9]+]]: fuzzy_address={{.*}}[[OTHER_RETURN_ADDRESS:0x[0-f]+]]
-  // CHECK: {{^}}[[THREAD_ID]]: ompt_event_cancel: task_data=[[TASK_ID:[0-9]+]], flags=ompt_cancel_parallel|ompt_cancel_detected=33, codeptr_ra=[[OTHER_RETURN_ADDRESS]]{{[0-f][0-f]}}
+  // CHECK: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin
+  // CHECK-DAG: {{^}}[[THREAD_ID]]: ompt_event_cancel: task_data=[[TASK_ID:[0-9]+]], flags=ompt_cancel_parallel|ompt_cancel_detected=33, codeptr_ra=[[OTHER_RETURN_ADDRESS:0x[0-f]+]]{{[0-f][0-f]}}
+  // CHECK-DAG: {{^}}[[THREAD_ID]]: fuzzy_address={{.*}}[[OTHER_RETURN_ADDRESS]]
 
   return 0;
 }




More information about the Openmp-commits mailing list