81 lines · c
1// RUN: %clang_cc1 -verify -fopenmp -x c -triple x86_64-unknown-linux -emit-llvm %s -o - | FileCheck %s2// RUN: %clang_cc1 -verify -fopenmp -x c -triple aarch64-unknown-linux -emit-llvm %s -o - | FileCheck %s3// RUN: %clang_cc1 -verify -fopenmp -x c -triple ppc64le-unknown-linux -emit-llvm %s -o - | FileCheck %s4// expected-no-diagnostics5#ifndef HEADER6#define HEADER7 8void bar(void);9 10void foo(void) {11#pragma omp metadirective when(device = {kind(any)} \12 : parallel)13 bar();14#pragma omp metadirective when(device = {kind(host, cpu)} \15 : parallel for num_threads(4))16 for (int i = 0; i < 100; i++)17 ;18#pragma omp metadirective when(device = {kind(host)} \19 : parallel for)20 for (int i = 0; i < 100; i++)21 ;22#pragma omp metadirective when(device = {kind(nohost, gpu)} \23 :) when(device = {kind(cpu)} \24 : parallel)25 bar();26#pragma omp metadirective when(device = {kind(any, cpu)} \27 : parallel)28 bar();29#pragma omp metadirective when(device = {kind(any, host)} \30 : parallel)31 bar();32#pragma omp metadirective when(device = {kind(gpu)} \33 : target parallel for) default(parallel for)34 for (int i = 0; i < 100; i++)35 ;36}37 38// CHECK-LABEL: define {{.+}} void @foo()39// CHECK: @__kmpc_fork_call(ptr {{.+}}, i32 0, ptr [[OUTLINED_1:@.+]])40// CHECK-NEXT: @__kmpc_push_num_threads41// CHECK: @__kmpc_fork_call(ptr {{.+}}, i32 0, ptr [[OUTLINED_2:@.+]])42// CHECK: @__kmpc_fork_call(ptr {{.+}}, i32 0, ptr [[OUTLINED_3:@.+]])43// CHECK: @__kmpc_fork_call(ptr {{.+}}, i32 0, ptr [[OUTLINED_4:@.+]])44// CHECK: @__kmpc_fork_call(ptr {{.+}}, i32 0, ptr [[OUTLINED_5:@.+]])45// CHECK: @__kmpc_fork_call(ptr {{.+}}, i32 0, ptr [[OUTLINED_6:@.+]])46// CHECK: @__kmpc_fork_call(ptr {{.+}}, i32 0, ptr [[OUTLINED_7:@.+]])47// CHECK: ret void48 49// CHECK: define internal void [[OUTLINED_1]](50// CHECK: call void @bar51// CHECK: ret void52 53// CHECK: define internal void [[OUTLINED_2]](54// CHECK: call void @__kmpc_for_static_init55// CHECK: call void @__kmpc_for_static_fini56// CHECK: ret void57 58// CHECK: define internal void [[OUTLINED_3]](59// CHECK: call void @__kmpc_for_static_init60// CHECK: call void @__kmpc_for_static_fini61// CHECK: ret void62 63// CHECK: define internal void [[OUTLINED_4]](64// CHECK: call void @bar65// CHECK: ret void66 67// CHECK: define internal void [[OUTLINED_5]](68// CHECK: call void @bar69// CHECK: ret void70 71// CHECK: define internal void [[OUTLINED_6]](72// CHECK: call void @bar73// CHECK: ret void74 75// CHECK: define internal void [[OUTLINED_7]](76// CHECK: call void @__kmpc_for_static_init77// CHECK: call void @__kmpc_for_static_fini78// CHECK: ret void79 80#endif81