brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.6 KiB · 1939ac4 Raw
162 lines · c
1// clang-format off2// RUN: %libomp-compile-and-run | %sort-threads | FileCheck %s3// REQUIRES: ompt4// UNSUPPORTED: gcc-4, gcc-5, gcc-6, gcc-75// clang-format on6#define TEST_NEED_PRINT_FRAME_FROM_OUTLINED_FN7#include "callback.h"8#include <omp.h>9#include <math.h>10 11int main() {12  omp_set_nested(0);13  print_frame(0);14#pragma omp parallel num_threads(2)15  {16    print_frame_from_outlined_fn(1);17    print_ids(0);18    print_ids(1);19    print_frame(0);20#pragma omp master21    {22      print_ids(0);23      void *creator_frame = get_frame_address(0);24      int t = (int)sin(0.1);25#pragma omp task if (t)26      {27        if (creator_frame == get_frame_address(0)) {28          printf("Assume this code was inlined which the compiler is allowed "29                 "to do:\n");30          print_frame(0);31        } else if (creator_frame == get_frame_address(1)) {32          printf("Assume this code was called from the application:\n");33          print_frame(1);34        } else {35          // The exit frame must be our parent!36          printf("Assume this code was not inlined, exit frame must be our "37                 "parent:\n");38          print_frame_from_outlined_fn(1);39        }40        print_ids(0);41        print_ids(1);42        print_ids(2);43      }44      print_fuzzy_address(1);45      print_ids(0);46    }47    print_ids(0);48  }49 50  // clang-format off51  // Check if libomp supports the callbacks for this test.52  // CHECK-NOT: {{^}}0: Could not register callback53 54  // CHECK: {{^}}0: NULL_POINTER=[[NULL:.*$]]55 56  // make sure initial data pointers are null57  // CHECK-NOT: 0: new_task_data initially not null58 59  // CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_initial_task_begin: parallel_id={{[0-f]+}}60  // CHECK-SAME: task_id={{[0-f]+}}, actual_parallelism=1, index=1, flags=1 61 62  // CHECK: {{^}}[[MASTER_ID]]: __builtin_frame_address(0)63  // CHECK-SAME: =[[MAIN_REENTER:(0x)?[0-f]+]]64  // CHECK: {{^}}[[MASTER_ID]]: ompt_event_parallel_begin65  // CHECK-SAME: parent_task_id=[[PARENT_TASK_ID:[0-f]+]]66  // CHECK-SAME: parent_task_frame.exit=[[NULL]]67  // CHECK-SAME: parent_task_frame.reenter={{(0x)?[0-f]+}}68  // CHECK-SAME: parallel_id=[[PARALLEL_ID:[0-f]+]], requested_team_size=269  // CHECK-SAME: codeptr_ra={{(0x)?[0-f]+}}, invoker={{[0-9]+}}70 71  // nested parallel masters72  // CHECK: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin73  // CHECK-SAME: parallel_id=[[PARALLEL_ID]]74  // CHECK-SAME: task_id=[[IMPLICIT_TASK_ID:[0-f]+]]75  // CHECK: {{^}}[[MASTER_ID]]: __builtin_frame_address76  // CHECK-SAME: =[[EXIT:(0x)?[0-f]+]]77 78  // CHECK: {{^}}[[MASTER_ID]]: task level 079  // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]80  // CHECK-SAME: exit_frame=[[EXIT]], reenter_frame=[[NULL]]81 82  // CHECK: {{^}}[[MASTER_ID]]: task level 183  // CHECK-SAME: parallel_id=[[IMPLICIT_PARALLEL_ID:[0-f]+]]84  // CHECK-SAME: task_id=[[PARENT_TASK_ID]],85  // CHECK-SAME: exit_frame=[[NULL]], reenter_frame={{(0x)?[0-f]+}}86 87  // CHECK: {{^}}[[MASTER_ID]]: __builtin_frame_address(0)=[[REENTER:(0x)?[0-f]+]]88  // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_create89  // CHECK-SAME: parent_task_id=[[IMPLICIT_TASK_ID]]90  // CHECK-SAME: parent_task_frame.exit=[[EXIT]]91  // CHECK-SAME: parent_task_frame.reenter={{(0x)?[0-f]+}}92  // CHECK-SAME: new_task_id=[[TASK_ID:[0-f]+]]93  // CHECK-SAME: codeptr_ra=[[RETURN_ADDRESS:(0x)?[0-f]+]]{{[0-f][0-f]}}94 95  // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_schedule:96  // CHECK-SAME: first_task_id=[[IMPLICIT_TASK_ID]], second_task_id=[[TASK_ID]]97  // CHECK: {{^}}[[MASTER_ID]]: __builtin_frame_address98  // CHECK-SAME: =[[TASK_EXIT:(0x)?[0-f]+]]99  // CHECK: {{^}}[[MASTER_ID]]: task level 0100  // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[TASK_ID]]101  // CHECK-SAME: exit_frame=[[TASK_EXIT]], reenter_frame=[[NULL]]102 103  // CHECK: {{^}}[[MASTER_ID]]: task level 1104  // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]105  // CHECK-SAME: exit_frame=[[EXIT]], reenter_frame={{(0x)?[0-f]+}}106 107  // CHECK: {{^}}[[MASTER_ID]]: task level 2108  // CHECK-SAME: parallel_id=[[IMPLICIT_PARALLEL_ID]]109  // CHECK-SAME: task_id=[[PARENT_TASK_ID]]110  // CHECK-SAME: exit_frame=[[NULL]], reenter_frame={{(0x)?[0-f]+}}111 112  // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_schedule113  // CHECK-SAME: first_task_id=[[TASK_ID]], second_task_id=[[IMPLICIT_TASK_ID]]114  // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_end: task_id=[[TASK_ID]]115  // CHECK: {{^}}[[MASTER_ID]]: fuzzy_address={{.*}}[[RETURN_ADDRESS]]116 117  // CHECK: {{^}}[[MASTER_ID]]: task level 0118  // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]119  // CHECK-SAME: exit_frame=[[EXIT]], reenter_frame=[[NULL]]120 121  // implicit barrier parallel122  // CHECK: {{^}}[[MASTER_ID]]: ompt_event_barrier_implicit_parallel_begin123  // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]124  // CHECK: {{^}}[[MASTER_ID]]: task level 0125  // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]126  // CHECK-SAME: exit_frame=[[NULL]], reenter_frame=[[NULL]]127  // CHECK: {{^}}[[MASTER_ID]]: ompt_event_barrier_implicit_parallel_end128  // parallel_id is 0 because the region ended in the barrier!129  // CHECK-SAME: parallel_id=0, task_id=[[IMPLICIT_TASK_ID]]130  // CHECK: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end131  // CHECK-SAME: parallel_id=0, task_id=[[IMPLICIT_TASK_ID]]132 133  // CHECK: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin134  // CHECK-SAME: parallel_id=[[PARALLEL_ID]]135  // CHECK-SAME: task_id=[[IMPLICIT_TASK_ID:[0-f]+]]136  // CHECK: {{^}}[[THREAD_ID]]: __builtin_frame_address137  // CHECK-SAME: =[[EXIT:(0x)?[0-f]+]]138  // CHECK: {{^}}[[THREAD_ID]]: task level 0139  // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]140  // CHECK-SAME: exit_frame=[[EXIT]], reenter_frame=[[NULL]]141  // CHECK: {{^}}[[THREAD_ID]]: task level 1142  // CHECK-SAME: parallel_id=[[IMPLICIT_PARALLEL_ID]]143  // CHECK-SAME: task_id=[[PARENT_TASK_ID]]144  // CHECK-SAME: exit_frame=[[NULL]], reenter_frame={{(0x)?[0-f]+}}145 146  // CHECK: {{^}}[[THREAD_ID]]: __builtin_frame_address(0)={{(0x)?[0-f]+}}147  // CHECK: {{^}}[[THREAD_ID]]: ompt_event_barrier_implicit_parallel_begin148  // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]149  // CHECK: {{^}}[[THREAD_ID]]: task level 0150  // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]151  // CHECK-SAME: exit_frame=[[NULL]], reenter_frame=[[NULL]]152  // parallel_id is 0 because the region ended in the barrier!153  // CHECK: {{^}}[[THREAD_ID]]: ompt_event_barrier_implicit_parallel_end154  // CHECK-SAME: parallel_id=0, task_id=[[IMPLICIT_TASK_ID]]155 156  // CHECK: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end157  // CHECK-SAME: parallel_id=0, task_id=[[IMPLICIT_TASK_ID]]158  // clang-format on159 160  return 0;161}162