Skip to content

Commit 06da9b9

Browse files
committed
[OpenMP] Extend the lit test for uses_allocators in target region
This patch improves the LIT tests on the following : 1. The test on `uses_allocators` clause in the `target` region by adding the respective CHECK lines. Allocator `omp_thread_mem_alloc` is also added in the test. 2. The `defaultmap` clause wasn't being tested for the variable- category `scalar` and the implicit-behavior `tofrom` with respect to the OpenMP default version. These improvements are inspired from SOLLVE tests. SOLLVE repo: https://github.com/SOLLVE/sollve_vv Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D132855
1 parent 85e41fc commit 06da9b9

File tree

2 files changed

+85
-11
lines changed

2 files changed

+85
-11
lines changed

clang/test/OpenMP/target_map_codegen_10.cpp

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,20 @@
33
#define HEADER
44

55
///==========================================================================///
6-
// RUN: %clang_cc1 -DCK11 -verify -fopenmp -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK11
6+
7+
// RUN: %clang_cc1 -DCK11 -verify -fopenmp -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefixes CK11,CK11_4
78
// RUN: %clang_cc1 -DCK11 -fopenmp -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
8-
// RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK11
9-
// RUN: %clang_cc1 -DCK11 -verify -fopenmp -fopenmp-version=45 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK11
9+
// RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefixes CK11,CK11_4
10+
// RUN: %clang_cc1 -DCK11 -verify -fopenmp -fopenmp-version=45 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefixes CK11,CK11_4
1011
// RUN: %clang_cc1 -DCK11 -fopenmp -fopenmp-version=45 -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
11-
// RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK11
12+
// RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefixes CK11,CK11_4
13+
14+
// RUN: %clang_cc1 -DCK11 -verify -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefixes CK11,CK11_5
15+
// RUN: %clang_cc1 -DCK11 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
16+
// RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefixes CK11,CK11_5
17+
// RUN: %clang_cc1 -DCK11 -verify -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefixes CK11,CK11_5
18+
// RUN: %clang_cc1 -DCK11 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
19+
// RUN: %clang_cc1 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefixes CK11,CK11_5
1220

1321
// RUN: %clang_cc1 -DCK11 -verify -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap --check-prefix SIMD-ONLY10 %s
1422
// RUN: %clang_cc1 -DCK11 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
@@ -20,10 +28,11 @@
2028
#ifdef CK11
2129

2230
// CK11-LABEL: @.__omp_offloading_{{.*}}implicit_maps_double_complex{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
23-
24-
// CK11-DAG: [[SIZES:@.+]] = {{.+}}constant [2 x i64] [i64 16, i64 {{8|4}}]
31+
// CK11_4-DAG: [[SIZES:@.+]] = {{.+}}constant [2 x i64] [i64 16, i64 {{8|4}}]
32+
// CK11_5-DAG: [[SIZES:@.+]] = {{.+}}constant [2 x i64] [i64 16, i64 0]
2533
// Map types: OMP_MAP_TO | OMP_MAP_FROM | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 547
26-
// CK11-DAG: [[TYPES:@.+]] = {{.+}}constant [2 x i64] [i64 547, i64 547]
34+
// CK11_4-DAG: [[TYPES:@.+]] = {{.+}}constant [2 x i64] [i64 547, i64 547]
35+
// CK11_5-DAG: [[TYPES:@.+]] = {{.+}}constant [2 x i64] [i64 547, i64 544]
2736

2837
// CK11-LABEL: implicit_maps_double_complex{{.*}}(
2938
void implicit_maps_double_complex (int a, int *b){
@@ -41,6 +50,7 @@ void implicit_maps_double_complex (int a, int *b){
4150
// CK11-DAG: store ptr [[PTR:%[^,]+]], ptr [[BP1]]
4251
// CK11-DAG: store ptr [[PTR]], ptr [[P1]]
4352

53+
4454
// CK11: call void [[KERNEL:@.+]](ptr [[PTR]], ptr %{{.+}})
4555
#pragma omp target defaultmap(tofrom \
4656
: scalar)

clang/test/OpenMP/target_uses_allocators.c

Lines changed: 68 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
// Test host codegen.
2-
// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=50 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix CHECK --check-prefix CHECK-64
3-
// RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s
4-
// RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu
2+
// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=50 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s
3+
// RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -verify -emit-pch -o %t %s
4+
// RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -include-pch %t %s -emit-llvm -o - | FileCheck %s
55

6-
// expected-no-diagnostics
76
#ifndef HEADER
87
#define HEADER
98

@@ -39,6 +38,71 @@ void fie(void) {
3938
{}
4039
#pragma omp target uses_allocators(omp_pteam_mem_alloc) allocate(omp_pteam_mem_alloc: x) firstprivate(x)
4140
{}
41+
#pragma omp target uses_allocators(omp_thread_mem_alloc) allocate(omp_thread_mem_alloc: x) firstprivate(x) // expected-warning {{allocator with the 'thread' trait access has unspecified behavior on 'target' directive}}
42+
{}
4243
}
4344

4445
#endif
46+
47+
// CHECK: %[[#R0:]] = call i32 @__kmpc_global_thread_num(ptr @1)
48+
// CHECK-NEXT: store i64 %x, ptr %x.addr, align 8
49+
// CHECK-NEXT: %.x..void.addr = call ptr @__kmpc_alloc(i32 %[[#R0]], i64 4, ptr null)
50+
// CHECK-NEXT: %[[#R1:]] = load i32, ptr %x.addr, align 4
51+
// CHECK-NEXT: store i32 %[[#R1]], ptr %.x..void.addr, align 4
52+
// CHECK-NEXT: call void @__kmpc_free(i32 %[[#R0]], ptr %.x..void.addr, ptr null)
53+
54+
// CHECK: %[[#R0:]] = call i32 @__kmpc_global_thread_num(ptr @1)
55+
// CHECK-NEXT: store i64 %x, ptr %x.addr, align 8
56+
// CHECK-NEXT: %.x..void.addr = call ptr @__kmpc_alloc(i32 %[[#R0]], i64 4, ptr inttoptr (i64 1 to ptr))
57+
// CHECK-NEXT: %[[#R1:]] = load i32, ptr %x.addr, align 4
58+
// CHECK-NEXT: store i32 %[[#R1]], ptr %.x..void.addr, align 4
59+
// CHECK-NEXT: call void @__kmpc_free(i32 %[[#R0]], ptr %.x..void.addr, ptr inttoptr (i64 1 to ptr))
60+
61+
// CHECK: %[[#R0:]] = call i32 @__kmpc_global_thread_num(ptr @1)
62+
// CHECK-NEXT: store i64 %x, ptr %x.addr, align 8
63+
// CHECK-NEXT: %.x..void.addr = call ptr @__kmpc_alloc(i32 %[[#R0]], i64 4, ptr inttoptr (i64 2 to ptr))
64+
// CHECK-NEXT: %[[#R1:]] = load i32, ptr %x.addr, align 4
65+
// CHECK-NEXT: store i32 %[[#R1]], ptr %.x..void.addr, align 4
66+
// CHECK-NEXT: call void @__kmpc_free(i32 %[[#R0]], ptr %.x..void.addr, ptr inttoptr (i64 2 to ptr))
67+
68+
// CHECK: %[[#R0:]] = call i32 @__kmpc_global_thread_num(ptr @1)
69+
// CHECK-NEXT: store i64 %x, ptr %x.addr, align 8
70+
// CHECK-NEXT: %.x..void.addr = call ptr @__kmpc_alloc(i32 %[[#R0]], i64 4, ptr inttoptr (i64 3 to ptr))
71+
// CHECK-NEXT: %[[#R1:]] = load i32, ptr %x.addr, align 4
72+
// CHECK-NEXT: store i32 %[[#R1]], ptr %.x..void.addr, align 4
73+
// CHECK-NEXT: call void @__kmpc_free(i32 %[[#R0]], ptr %.x..void.addr, ptr inttoptr (i64 3 to ptr))
74+
75+
// CHECK: %[[#R0:]] = call i32 @__kmpc_global_thread_num(ptr @1)
76+
// CHECK-NEXT: store i64 %x, ptr %x.addr, align 8
77+
// CHECK-NEXT: %.x..void.addr = call ptr @__kmpc_alloc(i32 %[[#R0]], i64 4, ptr inttoptr (i64 4 to ptr))
78+
// CHECK-NEXT: %[[#R1:]] = load i32, ptr %x.addr, align 4
79+
// CHECK-NEXT: store i32 %[[#R1]], ptr %.x..void.addr, align 4
80+
// CHECK-NEXT: call void @__kmpc_free(i32 %[[#R0]], ptr %.x..void.addr, ptr inttoptr (i64 4 to ptr))
81+
82+
// CHECK: %[[#R0:]] = call i32 @__kmpc_global_thread_num(ptr @1)
83+
// CHECK-NEXT: store i64 %x, ptr %x.addr, align 8
84+
// CHECK-NEXT: %.x..void.addr = call ptr @__kmpc_alloc(i32 %[[#R0]], i64 4, ptr inttoptr (i64 5 to ptr))
85+
// CHECK-NEXT: %[[#R1:]] = load i32, ptr %x.addr, align 4
86+
// CHECK-NEXT: store i32 %[[#R1]], ptr %.x..void.addr, align 4
87+
// CHECK-NEXT: call void @__kmpc_free(i32 %[[#R0]], ptr %.x..void.addr, ptr inttoptr (i64 5 to ptr))
88+
89+
// CHECK: %[[#R0:]] = call i32 @__kmpc_global_thread_num(ptr @1)
90+
// CHECK-NEXT: store i64 %x, ptr %x.addr, align 8
91+
// CHECK-NEXT: %.x..void.addr = call ptr @__kmpc_alloc(i32 %[[#R0]], i64 4, ptr inttoptr (i64 6 to ptr))
92+
// CHECK-NEXT: %[[#R1:]] = load i32, ptr %x.addr, align 4
93+
// CHECK-NEXT: store i32 %[[#R1]], ptr %.x..void.addr, align 4
94+
// CHECK-NEXT: call void @__kmpc_free(i32 %[[#R0]], ptr %.x..void.addr, ptr inttoptr (i64 6 to ptr))
95+
96+
// CHECK: %[[#R0:]] = call i32 @__kmpc_global_thread_num(ptr @1)
97+
// CHECK-NEXT: store i64 %x, ptr %x.addr, align 8
98+
// CHECK-NEXT: %.x..void.addr = call ptr @__kmpc_alloc(i32 %[[#R0]], i64 4, ptr inttoptr (i64 7 to ptr))
99+
// CHECK-NEXT: %[[#R1:]] = load i32, ptr %x.addr, align 4
100+
// CHECK-NEXT: store i32 %[[#R1]], ptr %.x..void.addr, align 4
101+
// CHECK-NEXT: call void @__kmpc_free(i32 %[[#R0]], ptr %.x..void.addr, ptr inttoptr (i64 7 to ptr))
102+
103+
// CHECK: %[[#R0:]] = call i32 @__kmpc_global_thread_num(ptr @1)
104+
// CHECK-NEXT: store i64 %x, ptr %x.addr, align 8
105+
// CHECK-NEXT: %.x..void.addr = call ptr @__kmpc_alloc(i32 %[[#R0]], i64 4, ptr inttoptr (i64 8 to ptr))
106+
// CHECK-NEXT: %[[#R1:]] = load i32, ptr %x.addr, align 4
107+
// CHECK-NEXT: store i32 %[[#R1]], ptr %.x..void.addr, align 4
108+
// CHECK-NEXT: call void @__kmpc_free(i32 %[[#R0]], ptr %.x..void.addr, ptr inttoptr (i64 8 to ptr))

0 commit comments

Comments
 (0)