Skip to content

Commit 9248a03

Browse files
authored
[clang] Added test to check exec_mode of 0 for a bare kernel. (llvm#2180)
2 parents e5c7d7e + 8be103f commit 9248a03

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

clang/test/OpenMP/ompx_bare.c

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple x86_64-unknown-unknown -fopenmp-targets=amdgcn-amd-amdhsa -emit-llvm-bc %s -o %t-ppc-host.bc
2+
// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple amdgcn-amd-amdhsa -fopenmp-targets=amdgcn-amd-amdhsa -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck %s
3+
// expected-no-diagnostics
4+
5+
// This test is to verify that exec_mode of 0 is passed down from compiler to runtime.
6+
// Based on existing test offload/test/offloading/ompx_bare.c.
7+
8+
#include <ompx.h>
9+
10+
int foo(int *data) {
11+
const int num_blocks = 64;
12+
const int block_size = 64;
13+
const int N = num_blocks * block_size;
14+
15+
#pragma omp target teams ompx_bare num_teams(num_blocks) thread_limit(block_size) map(from: data[0:N])
16+
{
17+
int bid = ompx_block_id_x();
18+
int bdim = ompx_block_dim_x();
19+
int tid = ompx_thread_id_x();
20+
int idx = bid * bdim + tid;
21+
data[idx] = idx;
22+
}
23+
24+
return 0;
25+
}
26+
// CHECK-DAG: @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooPi_l15_exec_mode = weak addrspace(1) constant i8 0
27+
28+
// CHECK-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooPi_l15
29+
// CHECK-SAME: (ptr noalias noundef [[DYN_PTR:%.*]], ptr noundef [[DATA:%.*]]) #[[ATTR0:[0-9]+]] {
30+
// CHECK-NEXT: entry:
31+
// CHECK-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 8, addrspace(5)
32+
// CHECK-NEXT: [[DATA_ADDR:%.*]] = alloca ptr, align 8, addrspace(5)
33+
// CHECK-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4, addrspace(5)
34+
// CHECK-NEXT: [[DYN_PTR_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DYN_PTR_ADDR]] to ptr
35+
// CHECK-NEXT: [[DATA_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DATA_ADDR]] to ptr
36+
// CHECK-NEXT: [[DOTZERO_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[DOTZERO_ADDR]] to ptr
37+
// CHECK-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR_ASCAST]], align 8
38+
// CHECK-NEXT: store ptr [[DATA]], ptr [[DATA_ADDR_ASCAST]], align 8
39+
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[DATA_ADDR_ASCAST]], align 8
40+
// CHECK-NEXT: store i32 0, ptr [[DOTZERO_ADDR_ASCAST]], align 4
41+
// CHECK-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooPi_l15_omp_outlined(ptr null, ptr [[DOTZERO_ADDR_ASCAST]], ptr [[TMP0]]) #[[ATTR4:[0-9]+]]
42+
// CHECK-NEXT: ret void
43+
//

0 commit comments

Comments
 (0)