Changeset View
Changeset View
Standalone View
Standalone View
clang/test/OpenMP/target_map_codegen.cpp
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | |||||
// CK1-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 800] | // CK1-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 800] | ||||
// CK1-LABEL: implicit_maps_integer{{.*}}( | // CK1-LABEL: implicit_maps_integer{{.*}}( | ||||
void implicit_maps_integer (int a){ | void implicit_maps_integer (int a){ | ||||
// CK1: call void{{.*}}modify | // CK1: call void{{.*}}modify | ||||
B::modify(a); | B::modify(a); | ||||
int i = a; | int i = a; | ||||
// CK1-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}) | // CK1-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null) | ||||
// CK1-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK1-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK1-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK1-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK1-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK1-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK1-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK1-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK1-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | // CK1-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | ||||
// CK1-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | // CK1-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | ||||
// CK1-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | // CK1-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | ||||
// CK1-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP1]] | // CK1-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP1]] | ||||
▲ Show 20 Lines • Show All 43 Lines • ▼ Show 20 Lines | |||||
// CK2-LABEL: @.__omp_offloading_{{.*}}implicit_maps_reference{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0 | // CK2-LABEL: @.__omp_offloading_{{.*}}implicit_maps_reference{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0 | ||||
// CK2: [[SIZES2:@.+]] = {{.+}}constant [1 x i64] zeroinitializer | // CK2: [[SIZES2:@.+]] = {{.+}}constant [1 x i64] zeroinitializer | ||||
// Map types: OMP_MAP_IS_PTR | OMP_MAP_IMPLICIT = 544 | // Map types: OMP_MAP_IS_PTR | OMP_MAP_IMPLICIT = 544 | ||||
// CK2: [[TYPES2:@.+]] = {{.+}}constant [1 x i64] [i64 544] | // CK2: [[TYPES2:@.+]] = {{.+}}constant [1 x i64] [i64 544] | ||||
// CK2-LABEL: implicit_maps_reference{{.*}}( | // CK2-LABEL: implicit_maps_reference{{.*}}( | ||||
void implicit_maps_reference (int a, int *b){ | void implicit_maps_reference (int a, int *b){ | ||||
int &i = a; | int &i = a; | ||||
// CK2-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}) | // CK2-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null) | ||||
// CK2-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK2-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK2-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK2-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK2-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK2-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK2-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK2-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK2-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | // CK2-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | ||||
// CK2-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | // CK2-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | ||||
// CK2-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | // CK2-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | ||||
// CK2-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP1]] | // CK2-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP1]] | ||||
// CK2-DAG: [[VAL]] = load i[[sz]], i[[sz]]* [[ADDR:%.+]], | // CK2-DAG: [[VAL]] = load i[[sz]], i[[sz]]* [[ADDR:%.+]], | ||||
// CK2-64-DAG: [[CADDR:%.+]] = bitcast i[[sz]]* [[ADDR]] to i32* | // CK2-64-DAG: [[CADDR:%.+]] = bitcast i[[sz]]* [[ADDR]] to i32* | ||||
// CK2-64-DAG: store i32 {{.+}}, i32* [[CADDR]], | // CK2-64-DAG: store i32 {{.+}}, i32* [[CADDR]], | ||||
// CK2: call void [[KERNEL:@.+]](i[[sz]] [[VAL]]) | // CK2: call void [[KERNEL:@.+]](i[[sz]] [[VAL]]) | ||||
#pragma omp target | #pragma omp target | ||||
{ | { | ||||
++i; | ++i; | ||||
} | } | ||||
int *&p = b; | int *&p = b; | ||||
// CK2-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES2]]{{.+}}, {{.+}}[[TYPES2]]{{.+}}) | // CK2-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES2]]{{.+}}, {{.+}}[[TYPES2]]{{.+}}, i8** null) | ||||
// CK2-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK2-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK2-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK2-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK2-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK2-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK2-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK2-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK2-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i32** | // CK2-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i32** | ||||
// CK2-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i32** | // CK2-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i32** | ||||
// CK2-DAG: store i32* [[VAL:%[^,]+]], i32** [[CBP1]] | // CK2-DAG: store i32* [[VAL:%[^,]+]], i32** [[CBP1]] | ||||
// CK2-DAG: store i32* [[VAL]], i32** [[CP1]] | // CK2-DAG: store i32* [[VAL]], i32** [[CP1]] | ||||
▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | |||||
// CK3-DAG: [[SIZES:@.+]] = {{.+}}constant [1 x i64] [i64 4] | // CK3-DAG: [[SIZES:@.+]] = {{.+}}constant [1 x i64] [i64 4] | ||||
// Map types: OMP_MAP_PRIVATE_VAL | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 800 | // Map types: OMP_MAP_PRIVATE_VAL | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 800 | ||||
// CK3-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 800] | // CK3-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 800] | ||||
// CK3-LABEL: implicit_maps_parameter{{.*}}( | // CK3-LABEL: implicit_maps_parameter{{.*}}( | ||||
void implicit_maps_parameter (int a){ | void implicit_maps_parameter (int a){ | ||||
// CK3-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}) | // CK3-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null) | ||||
// CK3-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK3-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK3-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK3-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK3-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK3-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK3-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK3-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK3-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | // CK3-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | ||||
// CK3-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | // CK3-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | ||||
// CK3-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | // CK3-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | ||||
// CK3-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP1]] | // CK3-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP1]] | ||||
▲ Show 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | void implicit_maps_nested_integer (int a){ | ||||
// The captures in parallel are by reference. Only the capture in target is by | // The captures in parallel are by reference. Only the capture in target is by | ||||
// copy. | // copy. | ||||
// CK4: call void {{.+}}@__kmpc_fork_call({{.+}} [[KERNELP1:@.+]] to void (i32*, i32*, ...)*), i32* {{.+}}) | // CK4: call void {{.+}}@__kmpc_fork_call({{.+}} [[KERNELP1:@.+]] to void (i32*, i32*, ...)*), i32* {{.+}}) | ||||
// CK4: define internal void [[KERNELP1]](i32* {{[^,]+}}, i32* {{[^,]+}}, i32* {{[^,]+}}) | // CK4: define internal void [[KERNELP1]](i32* {{[^,]+}}, i32* {{[^,]+}}, i32* {{[^,]+}}) | ||||
#pragma omp parallel | #pragma omp parallel | ||||
{ | { | ||||
// CK4-DAG: call i32 @__tgt_target_teams(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i32 1, i32 0) | // CK4-DAG: call i32 @__tgt_target_teams_mapper(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null, i32 1, i32 0) | ||||
// CK4-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK4-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK4-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK4-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK4-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK4-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK4-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK4-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK4-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | // CK4-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | ||||
// CK4-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | // CK4-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | ||||
// CK4-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | // CK4-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | ||||
// CK4-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP1]] | // CK4-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP1]] | ||||
▲ Show 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | |||||
void implicit_maps_nested_integer_and_enum (int a){ | void implicit_maps_nested_integer_and_enum (int a){ | ||||
enum Bla { | enum Bla { | ||||
SomeEnum = 0x09 | SomeEnum = 0x09 | ||||
}; | }; | ||||
// Using an enum should not change the mapping information. | // Using an enum should not change the mapping information. | ||||
int i = a; | int i = a; | ||||
// CK5-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}) | // CK5-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null) | ||||
// CK5-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK5-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK5-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK5-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK5-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK5-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK5-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK5-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK5-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | // CK5-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | ||||
// CK5-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | // CK5-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | ||||
// CK5-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | // CK5-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | ||||
// CK5-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP1]] | // CK5-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP1]] | ||||
Show All 38 Lines | |||||
// CK6-DAG: [[GBL:@Gi]] = global i32 0 | // CK6-DAG: [[GBL:@Gi]] = global i32 0 | ||||
// CK6-DAG: [[SIZES:@.+]] = {{.+}}constant [1 x i64] [i64 4] | // CK6-DAG: [[SIZES:@.+]] = {{.+}}constant [1 x i64] [i64 4] | ||||
// Map types: OMP_MAP_PRIVATE_VAL | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 800 | // Map types: OMP_MAP_PRIVATE_VAL | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 800 | ||||
// CK6-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 800] | // CK6-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 800] | ||||
// CK6-LABEL: implicit_maps_host_global{{.*}}( | // CK6-LABEL: implicit_maps_host_global{{.*}}( | ||||
int Gi; | int Gi; | ||||
void implicit_maps_host_global (int a){ | void implicit_maps_host_global (int a){ | ||||
// CK6-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}) | // CK6-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null) | ||||
// CK6-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK6-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK6-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK6-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK6-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK6-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK6-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK6-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK6-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | // CK6-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | ||||
// CK6-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | // CK6-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | ||||
// CK6-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | // CK6-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | ||||
// CK6-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP1]] | // CK6-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP1]] | ||||
▲ Show 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | |||||
// CK7-64-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 800] | // CK7-64-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 800] | ||||
// Map types: OMP_MAP_TO | OMP_MAP_PRIVATE | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 673 | // Map types: OMP_MAP_TO | OMP_MAP_PRIVATE | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 673 | ||||
// CK7-32-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 673] | // CK7-32-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 673] | ||||
// CK7-LABEL: implicit_maps_double{{.*}}( | // CK7-LABEL: implicit_maps_double{{.*}}( | ||||
void implicit_maps_double (int a){ | void implicit_maps_double (int a){ | ||||
double d = (double)a; | double d = (double)a; | ||||
// CK7-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}) | // CK7-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null) | ||||
// CK7-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK7-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK7-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK7-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK7-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK7-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK7-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK7-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK7-64-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | // CK7-64-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | ||||
// CK7-64-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | // CK7-64-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | ||||
// CK7-64-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | // CK7-64-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | ||||
▲ Show 20 Lines • Show All 50 Lines • ▼ Show 20 Lines | |||||
// CK8-DAG: [[SIZES:@.+]] = {{.+}}constant [1 x i64] [i64 4] | // CK8-DAG: [[SIZES:@.+]] = {{.+}}constant [1 x i64] [i64 4] | ||||
// Map types: OMP_MAP_PRIVATE_VAL | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 800 | // Map types: OMP_MAP_PRIVATE_VAL | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 800 | ||||
// CK8-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 800] | // CK8-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 800] | ||||
// CK8-LABEL: implicit_maps_float{{.*}}( | // CK8-LABEL: implicit_maps_float{{.*}}( | ||||
void implicit_maps_float (int a){ | void implicit_maps_float (int a){ | ||||
float f = (float)a; | float f = (float)a; | ||||
// CK8-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}) | // CK8-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null) | ||||
// CK8-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK8-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK8-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK8-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK8-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK8-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK8-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK8-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK8-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | // CK8-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | ||||
// CK8-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | // CK8-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | ||||
// CK8-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | // CK8-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | ||||
// CK8-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP1]] | // CK8-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP1]] | ||||
Show All 37 Lines | |||||
// CK9-DAG: [[SIZES:@.+]] = {{.+}}constant [1 x i64] [i64 16] | // CK9-DAG: [[SIZES:@.+]] = {{.+}}constant [1 x i64] [i64 16] | ||||
// Map types: OMP_MAP_TO + OMP_MAP_FROM + OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 547 | // Map types: OMP_MAP_TO + OMP_MAP_FROM + OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 547 | ||||
// CK9-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 547] | // CK9-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 547] | ||||
// CK9-LABEL: implicit_maps_array{{.*}}( | // CK9-LABEL: implicit_maps_array{{.*}}( | ||||
void implicit_maps_array (int a){ | void implicit_maps_array (int a){ | ||||
double darr[2] = {(double)a, (double)a}; | double darr[2] = {(double)a, (double)a}; | ||||
// CK9-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}) | // CK9-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null) | ||||
// CK9-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK9-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK9-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK9-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK9-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK9-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK9-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK9-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK9-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [2 x double]** | // CK9-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [2 x double]** | ||||
// CK9-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to [2 x double]** | // CK9-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to [2 x double]** | ||||
// CK9-DAG: store [2 x double]* [[DECL:%[^,]+]], [2 x double]** [[CBP1]] | // CK9-DAG: store [2 x double]* [[DECL:%[^,]+]], [2 x double]** [[CBP1]] | ||||
// CK9-DAG: store [2 x double]* [[DECL]], [2 x double]** [[CP1]] | // CK9-DAG: store [2 x double]* [[DECL]], [2 x double]** [[CP1]] | ||||
Show All 34 Lines | |||||
// CK10-DAG: [[SIZES:@.+]] = {{.+}}constant [1 x i64] zeroinitializer | // CK10-DAG: [[SIZES:@.+]] = {{.+}}constant [1 x i64] zeroinitializer | ||||
// Map types: OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 544 | // Map types: OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 544 | ||||
// CK10-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 544] | // CK10-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 544] | ||||
// CK10-LABEL: implicit_maps_pointer{{.*}}( | // CK10-LABEL: implicit_maps_pointer{{.*}}( | ||||
void implicit_maps_pointer (){ | void implicit_maps_pointer (){ | ||||
double *ddyn; | double *ddyn; | ||||
// CK10-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}) | // CK10-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null) | ||||
// CK10-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK10-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK10-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK10-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK10-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK10-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK10-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK10-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK10-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to double** | // CK10-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to double** | ||||
// CK10-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to double** | // CK10-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to double** | ||||
// CK10-DAG: store double* [[PTR:%[^,]+]], double** [[CBP1]] | // CK10-DAG: store double* [[PTR:%[^,]+]], double** [[CBP1]] | ||||
// CK10-DAG: store double* [[PTR]], double** [[CP1]] | // CK10-DAG: store double* [[PTR]], double** [[CP1]] | ||||
Show All 35 Lines | |||||
// CK11-DAG: [[SIZES:@.+]] = {{.+}}constant [2 x i64] [i64 16, i64 {{8|4}}] | // CK11-DAG: [[SIZES:@.+]] = {{.+}}constant [2 x i64] [i64 16, i64 {{8|4}}] | ||||
// Map types: OMP_MAP_TO | OMP_MAP_FROM | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 547 | // Map types: OMP_MAP_TO | OMP_MAP_FROM | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 547 | ||||
// CK11-DAG: [[TYPES:@.+]] = {{.+}}constant [2 x i64] [i64 547, i64 547] | // CK11-DAG: [[TYPES:@.+]] = {{.+}}constant [2 x i64] [i64 547, i64 547] | ||||
// CK11-LABEL: implicit_maps_double_complex{{.*}}( | // CK11-LABEL: implicit_maps_double_complex{{.*}}( | ||||
void implicit_maps_double_complex (int a, int *b){ | void implicit_maps_double_complex (int a, int *b){ | ||||
double _Complex dc = (double)a; | double _Complex dc = (double)a; | ||||
// CK11-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 2, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}) | // CK11-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 2, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null) | ||||
// CK11-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK11-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK11-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK11-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK11-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK11-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK11-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK11-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK11-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to { double, double }** | // CK11-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to { double, double }** | ||||
// CK11-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to { double, double }** | // CK11-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to { double, double }** | ||||
// CK11-DAG: store { double, double }* [[PTR:%[^,]+]], { double, double }** [[CBP1]] | // CK11-DAG: store { double, double }* [[PTR:%[^,]+]], { double, double }** [[CBP1]] | ||||
// CK11-DAG: store { double, double }* [[PTR]], { double, double }** [[CP1]] | // CK11-DAG: store { double, double }* [[PTR]], { double, double }** [[CP1]] | ||||
Show All 38 Lines | |||||
// CK12-64-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 800] | // CK12-64-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 800] | ||||
// Map types: OMP_MAP_TO | OMP_MAP_PRIVATE | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 673 | // Map types: OMP_MAP_TO | OMP_MAP_PRIVATE | OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 673 | ||||
// CK12-32-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 673] | // CK12-32-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 673] | ||||
// CK12-LABEL: implicit_maps_float_complex{{.*}}( | // CK12-LABEL: implicit_maps_float_complex{{.*}}( | ||||
void implicit_maps_float_complex (int a){ | void implicit_maps_float_complex (int a){ | ||||
float _Complex fc = (float)a; | float _Complex fc = (float)a; | ||||
// CK12-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}) | // CK12-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null) | ||||
// CK12-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK12-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK12-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK12-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK12-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK12-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK12-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK12-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK12-64-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | // CK12-64-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | ||||
// CK12-64-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | // CK12-64-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | ||||
// CK12-64-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | // CK12-64-DAG: store i[[sz]] [[VAL:%[^,]+]], i[[sz]]* [[CBP1]] | ||||
▲ Show 20 Lines • Show All 52 Lines • ▼ Show 20 Lines | |||||
// - OMP_MAP_PRIVATE_VAL + OMP_MAP_TARGET_PARAM + OMP_MAP_IMPLICIT = 800 (vla size) | // - OMP_MAP_PRIVATE_VAL + OMP_MAP_TARGET_PARAM + OMP_MAP_IMPLICIT = 800 (vla size) | ||||
// - OMP_MAP_TO + OMP_MAP_FROM + OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 547 | // - OMP_MAP_TO + OMP_MAP_FROM + OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 547 | ||||
// CK13-DAG: [[TYPES:@.+]] = {{.+}}constant [3 x i64] [i64 800, i64 800, i64 547] | // CK13-DAG: [[TYPES:@.+]] = {{.+}}constant [3 x i64] [i64 800, i64 800, i64 547] | ||||
// CK13-LABEL: implicit_maps_variable_length_array{{.*}}( | // CK13-LABEL: implicit_maps_variable_length_array{{.*}}( | ||||
void implicit_maps_variable_length_array (int a){ | void implicit_maps_variable_length_array (int a){ | ||||
double vla[2][a]; | double vla[2][a]; | ||||
// CK13-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 3, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], i64* [[SGEP:%[^,]+]], {{.+}}[[TYPES]]{{.+}}) | // CK13-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 3, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], i64* [[SGEP:%[^,]+]], {{.+}}[[TYPES]]{{.+}}, i8** null) | ||||
// CK13-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK13-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK13-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK13-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK13-DAG: [[SGEP]] = getelementptr inbounds {{.+}}[[SS:%[^,]+]], i32 0, i32 0 | // CK13-DAG: [[SGEP]] = getelementptr inbounds {{.+}}[[SS:%[^,]+]], i32 0, i32 0 | ||||
// CK13-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK13-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK13-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK13-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK13-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[SS]], i32 0, i32 0 | // CK13-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[SS]], i32 0, i32 0 | ||||
// CK13-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[sz:64|32]]* | // CK13-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[sz:64|32]]* | ||||
▲ Show 20 Lines • Show All 84 Lines • ▼ Show 20 Lines | public: | ||||
SSS(int a, double b) : a(a), b(b) {} | SSS(int a, double b) : a(a), b(b) {} | ||||
}; | }; | ||||
// CK14-LABEL: implicit_maps_class{{.*}}( | // CK14-LABEL: implicit_maps_class{{.*}}( | ||||
void implicit_maps_class (int a){ | void implicit_maps_class (int a){ | ||||
SSS sss(a, (double)a); | SSS sss(a, (double)a); | ||||
// CK14: define {{.*}}void @{{.+}}foo{{.+}}([[ST]]* {{[^,]+}}, i32 {{[^,]+}}) | // CK14: define {{.*}}void @{{.+}}foo{{.+}}([[ST]]* {{[^,]+}}, i32 {{[^,]+}}) | ||||
// CK14-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 4, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], i64* [[SIZES:%[^,]+]], {{.+}}[[TYPES]]{{.+}}) | // CK14-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 4, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], i64* [[SIZES:%[^,]+]], {{.+}}[[TYPES]]{{.+}}, i8** null) | ||||
// CK14-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK14-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK14-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK14-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK14-DAG: [[SIZES]] = getelementptr inbounds {{.+}}[[S:%[^,]+]], i32 0, i32 0 | // CK14-DAG: [[SIZES]] = getelementptr inbounds {{.+}}[[S:%[^,]+]], i32 0, i32 0 | ||||
// CK14-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK14-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK14-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK14-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK14-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 0 | // CK14-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 0 | ||||
// CK14-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | // CK14-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | ||||
▲ Show 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | public: | ||||
SSST(int a, double b) : a(a), b(b) {} | SSST(int a, double b) : a(a), b(b) {} | ||||
}; | }; | ||||
// CK15-LABEL: implicit_maps_templated_class{{.*}}( | // CK15-LABEL: implicit_maps_templated_class{{.*}}( | ||||
void implicit_maps_templated_class (int a){ | void implicit_maps_templated_class (int a){ | ||||
SSST<123> ssst(a, (double)a); | SSST<123> ssst(a, (double)a); | ||||
// CK15: define {{.*}}void @{{.+}}foo{{.+}}([[ST]]* {{[^,]+}}, i32 {{[^,]+}}) | // CK15: define {{.*}}void @{{.+}}foo{{.+}}([[ST]]* {{[^,]+}}, i32 {{[^,]+}}) | ||||
// CK15-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 4, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], i64* [[SIZES:%[^,]+]], {{.+}}[[TYPES]]{{.+}}) | // CK15-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 4, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], i64* [[SIZES:%[^,]+]], {{.+}}[[TYPES]]{{.+}}, i8** null) | ||||
// CK15-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK15-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK15-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK15-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK15-DAG: [[SIZES]] = getelementptr inbounds {{.+}}[[S:%[^,]+]], i32 0, i32 0 | // CK15-DAG: [[SIZES]] = getelementptr inbounds {{.+}}[[S:%[^,]+]], i32 0, i32 0 | ||||
// CK15-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK15-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK15-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK15-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK15-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 0 | // CK15-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 0 | ||||
// CK15-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | // CK15-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | ||||
Show All 31 Lines | void implicit_maps_templated_class (int a){ | ||||
// CK15-DAG: [[VAL]] = load i[[sz]], i[[sz]]* [[ADDR:%.+]], | // CK15-DAG: [[VAL]] = load i[[sz]], i[[sz]]* [[ADDR:%.+]], | ||||
// CK15-64-DAG: [[CADDR:%.+]] = bitcast i[[sz]]* [[ADDR]] to i32* | // CK15-64-DAG: [[CADDR:%.+]] = bitcast i[[sz]]* [[ADDR]] to i32* | ||||
// CK15-64-DAG: store i32 {{.+}}, i32* [[CADDR]], | // CK15-64-DAG: store i32 {{.+}}, i32* [[CADDR]], | ||||
// CK15: call void [[KERNEL:@.+]]([[ST]]* [[DECL]], i[[sz]] {{.+}}) | // CK15: call void [[KERNEL:@.+]]([[ST]]* [[DECL]], i[[sz]] {{.+}}) | ||||
ssst.foo(456); | ssst.foo(456); | ||||
// CK15: define {{.*}}void @{{.+}}bar{{.+}}([[ST]]* {{[^,]+}}, i32 {{[^,]+}}) | // CK15: define {{.*}}void @{{.+}}bar{{.+}}([[ST]]* {{[^,]+}}, i32 {{[^,]+}}) | ||||
// CK15-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 4, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], i64* [[SIZES:[^,]+]], {{.+}}[[TYPES2]]{{.+}}) | // CK15-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 4, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], i64* [[SIZES:[^,]+]], {{.+}}[[TYPES2]]{{.+}}, i8** null) | ||||
// CK15-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK15-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK15-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK15-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK15-DAG: [[SIZES]] = getelementptr inbounds {{.+}}[[S:%[^,]+]], i32 0, i32 0 | // CK15-DAG: [[SIZES]] = getelementptr inbounds {{.+}}[[S:%[^,]+]], i32 0, i32 0 | ||||
// CK15-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK15-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK15-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK15-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK15-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 0 | // CK15-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 0 | ||||
// CK15-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | // CK15-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | ||||
▲ Show 20 Lines • Show All 90 Lines • ▼ Show 20 Lines | int foo(int d) { | ||||
} | } | ||||
return res; | return res; | ||||
} | } | ||||
// CK16-LABEL: implicit_maps_templated_function{{.*}}( | // CK16-LABEL: implicit_maps_templated_function{{.*}}( | ||||
void implicit_maps_templated_function (int a){ | void implicit_maps_templated_function (int a){ | ||||
int i = a; | int i = a; | ||||
// CK16: define {{.*}}i32 @{{.+}}foo{{.+}}(i32 {{[^,]+}}) | // CK16: define {{.*}}i32 @{{.+}}foo{{.+}}(i32 {{[^,]+}}) | ||||
// CK16-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}) | // CK16-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null) | ||||
// CK16-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK16-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK16-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK16-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK16-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK16-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK16-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK16-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK16-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | // CK16-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | ||||
// CK16-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | // CK16-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | ||||
// CK16-DAG: store i[[sz]] [[VAL:%.+]], i[[sz]]* [[CBP1]] | // CK16-DAG: store i[[sz]] [[VAL:%.+]], i[[sz]]* [[CBP1]] | ||||
▲ Show 20 Lines • Show All 41 Lines • ▼ Show 20 Lines | public: | ||||
int a; | int a; | ||||
double b; | double b; | ||||
}; | }; | ||||
// CK17-LABEL: implicit_maps_struct{{.*}}( | // CK17-LABEL: implicit_maps_struct{{.*}}( | ||||
void implicit_maps_struct (int a){ | void implicit_maps_struct (int a){ | ||||
SSS s = {a, (double)a}; | SSS s = {a, (double)a}; | ||||
// CK17-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}) | // CK17-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null) | ||||
// CK17-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK17-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK17-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK17-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK17-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK17-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK17-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK17-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK17-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[ST]]** | // CK17-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[ST]]** | ||||
// CK17-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to [[ST]]** | // CK17-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to [[ST]]** | ||||
// CK17-DAG: store [[ST]]* [[DECL:%.+]], [[ST]]** [[CBP1]] | // CK17-DAG: store [[ST]]* [[DECL:%.+]], [[ST]]** [[CBP1]] | ||||
// CK17-DAG: store [[ST]]* [[DECL]], [[ST]]** [[CP1]] | // CK17-DAG: store [[ST]]* [[DECL]], [[ST]]** [[CP1]] | ||||
▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | int foo(T d) { | ||||
} | } | ||||
return d; | return d; | ||||
} | } | ||||
// CK18-LABEL: implicit_maps_template_type_capture{{.*}}( | // CK18-LABEL: implicit_maps_template_type_capture{{.*}}( | ||||
void implicit_maps_template_type_capture (int a){ | void implicit_maps_template_type_capture (int a){ | ||||
int i = a; | int i = a; | ||||
// CK18: define {{.*}}i32 @{{.+}}foo{{.+}}(i32 {{[^,]+}}) | // CK18: define {{.*}}i32 @{{.+}}foo{{.+}}(i32 {{[^,]+}}) | ||||
// CK18-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}) | // CK18-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null) | ||||
// CK18-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK18-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK18-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK18-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK18-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK18-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK18-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK18-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK18-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | // CK18-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz:64|32]]* | ||||
// CK18-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | // CK18-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]* | ||||
// CK18-DAG: store i[[sz]] [[VAL:%.+]], i[[sz]]* [[CBP1]] | // CK18-DAG: store i[[sz]] [[VAL:%.+]], i[[sz]]* [[CBP1]] | ||||
▲ Show 20 Lines • Show All 201 Lines • ▼ Show 20 Lines | |||||
// CK19: [[MTYPE44:@.+]] = private {{.*}}constant [1 x i64] [i64 34] | // CK19: [[MTYPE44:@.+]] = private {{.*}}constant [1 x i64] [i64 34] | ||||
// CK19-LABEL: explicit_maps_single{{.*}}( | // CK19-LABEL: explicit_maps_single{{.*}}( | ||||
void explicit_maps_single (int ii){ | void explicit_maps_single (int ii){ | ||||
// Map of a scalar. | // Map of a scalar. | ||||
int a = ii; | int a = ii; | ||||
// Region 00 | // Region 00 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | // CK19-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | ||||
// CK19-DAG: store i32* [[VAR0]], i32** [[CP0]] | // CK19-DAG: store i32* [[VAR0]], i32** [[CP0]] | ||||
// CK19: call void [[CALL00:@.+]](i32* {{[^,]+}}) | // CK19: call void [[CALL00:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(alloc:a) | #pragma omp target map(alloc:a) | ||||
{ | { | ||||
++a; | ++a; | ||||
} | } | ||||
// Map of a scalar in nested region. | // Map of a scalar in nested region. | ||||
int b = a; | int b = a; | ||||
// Region 00n | // Region 00n | ||||
// CK19-DAG: call i32 @__tgt_target_teams(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00n]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00n]]{{.+}}, i32 1, i32 0) | // CK19-DAG: call i32 @__tgt_target_teams_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00n]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00n]]{{.+}}, i8** null, i32 1, i32 0) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | // CK19-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | ||||
// CK19-DAG: store i32* [[VAR0]], i32** [[CP0]] | // CK19-DAG: store i32* [[VAR0]], i32** [[CP0]] | ||||
// CK19: call void [[CALL00n:@.+]](i32* {{[^,]+}}) | // CK19: call void [[CALL00n:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(alloc:b) | #pragma omp target map(alloc:b) | ||||
#pragma omp parallel | #pragma omp parallel | ||||
{ | { | ||||
++b; | ++b; | ||||
} | } | ||||
// Map of an array. | // Map of an array. | ||||
int arra[100]; | int arra[100]; | ||||
// Region 01 | // Region 01 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [100 x i32]** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [100 x i32]** | ||||
// CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | // CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | ||||
// CK19-DAG: store [100 x i32]* [[VAR0]], [100 x i32]** [[CP0]] | // CK19-DAG: store [100 x i32]* [[VAR0]], [100 x i32]** [[CP0]] | ||||
// CK19: call void [[CALL01:@.+]]([100 x i32]* {{[^,]+}}) | // CK19: call void [[CALL01:@.+]]([100 x i32]* {{[^,]+}}) | ||||
#pragma omp target map(to:arra) | #pragma omp target map(to:arra) | ||||
{ | { | ||||
arra[50]++; | arra[50]++; | ||||
} | } | ||||
// Region 02 | // Region 02 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE02]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE02]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | // CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | ||||
// CK19-DAG: store i32* [[SEC0:%[^,]+]], i32** [[CP0]] | // CK19-DAG: store i32* [[SEC0:%[^,]+]], i32** [[CP0]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.*}}[100 x i32]* [[VAR0]], i{{.+}} 0, i{{.+}} 20 | // CK19-DAG: [[SEC0]] = getelementptr {{.*}}[100 x i32]* [[VAR0]], i{{.+}} 0, i{{.+}} 20 | ||||
// CK19: call void [[CALL02:@.+]]([100 x i32]* {{[^,]+}}) | // CK19: call void [[CALL02:@.+]]([100 x i32]* {{[^,]+}}) | ||||
#pragma omp target map(from:arra[20:60]) | #pragma omp target map(from:arra[20:60]) | ||||
{ | { | ||||
arra[50]++; | arra[50]++; | ||||
} | } | ||||
// Region 03 | // Region 03 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE03]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE03]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | // CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | ||||
// CK19-DAG: store i32* [[SEC0:%[^,]+]], i32** [[CP0]] | // CK19-DAG: store i32* [[SEC0:%[^,]+]], i32** [[CP0]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.*}}[100 x i32]* [[VAR0]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[SEC0]] = getelementptr {{.*}}[100 x i32]* [[VAR0]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19: call void [[CALL03:@.+]]([100 x i32]* {{[^,]+}}) | // CK19: call void [[CALL03:@.+]]([100 x i32]* {{[^,]+}}) | ||||
#pragma omp target map(tofrom:arra[:60]) | #pragma omp target map(tofrom:arra[:60]) | ||||
{ | { | ||||
arra[50]++; | arra[50]++; | ||||
} | } | ||||
// Region 04 | // Region 04 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE04]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE04]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE04]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE04]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | // CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | ||||
// CK19-DAG: store i32* [[SEC0:%[^,]+]], i32** [[CP0]] | // CK19-DAG: store i32* [[SEC0:%[^,]+]], i32** [[CP0]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.*}}[100 x i32]* [[VAR0]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[SEC0]] = getelementptr {{.*}}[100 x i32]* [[VAR0]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19: call void [[CALL04:@.+]]([100 x i32]* {{[^,]+}}) | // CK19: call void [[CALL04:@.+]]([100 x i32]* {{[^,]+}}) | ||||
#pragma omp target map(alloc:arra[:]) | #pragma omp target map(alloc:arra[:]) | ||||
{ | { | ||||
arra[50]++; | arra[50]++; | ||||
} | } | ||||
// Region 05 | // Region 05 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE05]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE05]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE05]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE05]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | // CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | ||||
// CK19-DAG: store i32* [[SEC0:%[^,]+]], i32** [[CP0]] | // CK19-DAG: store i32* [[SEC0:%[^,]+]], i32** [[CP0]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.*}}[100 x i32]* [[VAR0]], i{{.+}} 0, i{{.+}} 15 | // CK19-DAG: [[SEC0]] = getelementptr {{.*}}[100 x i32]* [[VAR0]], i{{.+}} 0, i{{.+}} 15 | ||||
// CK19: call void [[CALL05:@.+]]([100 x i32]* {{[^,]+}}) | // CK19: call void [[CALL05:@.+]]([100 x i32]* {{[^,]+}}) | ||||
#pragma omp target map(to:arra[15]) | #pragma omp target map(to:arra[15]) | ||||
{ | { | ||||
arra[15]++; | arra[15]++; | ||||
} | } | ||||
// Region 06 | // Region 06 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE06]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE06]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | // CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | ||||
// CK19-DAG: store i32* [[SEC0:%[^,]+]], i32** [[CP0]] | // CK19-DAG: store i32* [[SEC0:%[^,]+]], i32** [[CP0]] | ||||
// CK19-DAG: store i{{.+}} [[CSVAL0:%[^,]+]], i{{.+}}* [[S0]] | // CK19-DAG: store i{{.+}} [[CSVAL0:%[^,]+]], i{{.+}}* [[S0]] | ||||
// CK19-DAG: [[CSVAL0]] = {{mul nuw i.+ %.*, 4|sext i32 .+ to i64}} | // CK19-DAG: [[CSVAL0]] = {{mul nuw i.+ %.*, 4|sext i32 .+ to i64}} | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.*}}[100 x i32]* [[VAR0]], i{{.+}} 0, i{{.+}} %{{.*}} | // CK19-DAG: [[SEC0]] = getelementptr {{.*}}[100 x i32]* [[VAR0]], i{{.+}} 0, i{{.+}} %{{.*}} | ||||
// CK19: call void [[CALL06:@.+]]([100 x i32]* {{[^,]+}}) | // CK19: call void [[CALL06:@.+]]([100 x i32]* {{[^,]+}}) | ||||
#pragma omp target map(tofrom:arra[ii:ii+23]) | #pragma omp target map(tofrom:arra[ii:ii+23]) | ||||
{ | { | ||||
arra[50]++; | arra[50]++; | ||||
} | } | ||||
// Region 07 | // Region 07 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE07]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE07]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | // CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | ||||
// CK19-DAG: store i32* [[SEC0:%[^,]+]], i32** [[CP0]] | // CK19-DAG: store i32* [[SEC0:%[^,]+]], i32** [[CP0]] | ||||
// CK19-DAG: store i{{.+}} [[CSVAL0:%[^,]+]], i{{.+}}* [[S0]] | // CK19-DAG: store i{{.+}} [[CSVAL0:%[^,]+]], i{{.+}}* [[S0]] | ||||
// CK19-DAG: [[CSVAL0]] = {{mul nuw i.+ %.*, 4|sext i32 .+ to i64}} | // CK19-DAG: [[CSVAL0]] = {{mul nuw i.+ %.*, 4|sext i32 .+ to i64}} | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.*}}[100 x i32]* [[VAR0]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[SEC0]] = getelementptr {{.*}}[100 x i32]* [[VAR0]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19: call void [[CALL07:@.+]]([100 x i32]* {{[^,]+}}) | // CK19: call void [[CALL07:@.+]]([100 x i32]* {{[^,]+}}) | ||||
#pragma omp target map(alloc:arra[:ii]) | #pragma omp target map(alloc:arra[:ii]) | ||||
{ | { | ||||
arra[50]++; | arra[50]++; | ||||
} | } | ||||
// Region 08 | // Region 08 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE08]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE08]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE08]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE08]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | // CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | ||||
// CK19-DAG: store i32* [[SEC0:%[^,]+]], i32** [[CP0]] | // CK19-DAG: store i32* [[SEC0:%[^,]+]], i32** [[CP0]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.*}}[100 x i32]* [[VAR0]], i{{.+}} 0, i{{.+}} %{{.*}} | // CK19-DAG: [[SEC0]] = getelementptr {{.*}}[100 x i32]* [[VAR0]], i{{.+}} 0, i{{.+}} %{{.*}} | ||||
// CK19: call void [[CALL08:@.+]]([100 x i32]* {{[^,]+}}) | // CK19: call void [[CALL08:@.+]]([100 x i32]* {{[^,]+}}) | ||||
#pragma omp target map(tofrom:arra[ii]) | #pragma omp target map(tofrom:arra[ii]) | ||||
{ | { | ||||
arra[15]++; | arra[15]++; | ||||
} | } | ||||
// Map of a pointer. | // Map of a pointer. | ||||
int *pa; | int *pa; | ||||
// Region 09 | // Region 09 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE09]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE09]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE09]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE09]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32*** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32*** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32*** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32*** | ||||
// CK19-DAG: store i32** [[VAR0:%.+]], i32*** [[CBP0]] | // CK19-DAG: store i32** [[VAR0:%.+]], i32*** [[CBP0]] | ||||
// CK19-DAG: store i32** [[VAR0]], i32*** [[CP0]] | // CK19-DAG: store i32** [[VAR0]], i32*** [[CP0]] | ||||
// CK19: call void [[CALL09:@.+]](i32** {{[^,]+}}) | // CK19: call void [[CALL09:@.+]](i32** {{[^,]+}}) | ||||
#pragma omp target map(from:pa) | #pragma omp target map(from:pa) | ||||
{ | { | ||||
pa[50]++; | pa[50]++; | ||||
} | } | ||||
// Region 10 | // Region 10 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE10]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE10]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE10]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE10]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | // CK19-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | ||||
// CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | // CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | ||||
// CK19-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | // CK19-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} 20 | // CK19-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} 20 | ||||
// CK19-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | // CK19-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | ||||
// CK19: call void [[CALL10:@.+]](i32* {{[^,]+}}) | // CK19: call void [[CALL10:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(tofrom:pa[20:60]) | #pragma omp target map(tofrom:pa[20:60]) | ||||
{ | { | ||||
pa[50]++; | pa[50]++; | ||||
} | } | ||||
// Region 11 | // Region 11 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE11]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE11]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE11]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE11]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | // CK19-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | ||||
// CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | // CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | ||||
// CK19-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | // CK19-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} 0 | // CK19-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} 0 | ||||
// CK19-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | // CK19-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | ||||
// CK19: call void [[CALL11:@.+]](i32* {{[^,]+}}) | // CK19: call void [[CALL11:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(alloc:pa[:60]) | #pragma omp target map(alloc:pa[:60]) | ||||
{ | { | ||||
pa[50]++; | pa[50]++; | ||||
} | } | ||||
// Region 12 | // Region 12 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE12]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE12]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE12]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE12]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | // CK19-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | ||||
// CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | // CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | ||||
// CK19-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | // CK19-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} 15 | // CK19-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} 15 | ||||
// CK19-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | // CK19-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | ||||
// CK19: call void [[CALL12:@.+]](i32* {{[^,]+}}) | // CK19: call void [[CALL12:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(to:pa[15]) | #pragma omp target map(to:pa[15]) | ||||
{ | { | ||||
pa[15]++; | pa[15]++; | ||||
} | } | ||||
// Region 13 | // Region 13 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE13]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE13]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | // CK19-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | ||||
// CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | // CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | ||||
// CK19-DAG: store i{{.+}} [[CSVAL0:%[^,]+]], i{{.+}}* [[S0]] | // CK19-DAG: store i{{.+}} [[CSVAL0:%[^,]+]], i{{.+}}* [[S0]] | ||||
// CK19-DAG: [[CSVAL0]] = {{mul nuw i64 %.*, 4|sext i32 .+ to i64}} | // CK19-DAG: [[CSVAL0]] = {{mul nuw i64 %.*, 4|sext i32 .+ to i64}} | ||||
// CK19-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | // CK19-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} %{{.*}} | // CK19-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} %{{.*}} | ||||
// CK19-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | // CK19-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | ||||
// CK19: call void [[CALL13:@.+]](i32* {{[^,]+}}) | // CK19: call void [[CALL13:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(alloc:pa[ii-23:ii]) | #pragma omp target map(alloc:pa[ii-23:ii]) | ||||
{ | { | ||||
pa[50]++; | pa[50]++; | ||||
} | } | ||||
// Region 14 | // Region 14 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE14]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE14]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | // CK19-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | ||||
// CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | // CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | ||||
// CK19-DAG: store i{{.+}} [[CSVAL0:%[^,]+]], i{{.+}}* [[S0]] | // CK19-DAG: store i{{.+}} [[CSVAL0:%[^,]+]], i{{.+}}* [[S0]] | ||||
// CK19-DAG: [[CSVAL0]] = {{mul nuw i64 %.*, 4|sext i32 .+ to i64}} | // CK19-DAG: [[CSVAL0]] = {{mul nuw i64 %.*, 4|sext i32 .+ to i64}} | ||||
// CK19-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | // CK19-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} 0 | // CK19-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} 0 | ||||
// CK19-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | // CK19-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | ||||
// CK19: call void [[CALL14:@.+]](i32* {{[^,]+}}) | // CK19: call void [[CALL14:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(to:pa[:ii]) | #pragma omp target map(to:pa[:ii]) | ||||
{ | { | ||||
pa[50]++; | pa[50]++; | ||||
} | } | ||||
// Region 15 | // Region 15 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE15]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE15]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE15]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE15]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | // CK19-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | ||||
// CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | // CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | ||||
// CK19-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | // CK19-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} %{{.*}} | // CK19-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} %{{.*}} | ||||
// CK19-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | // CK19-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | ||||
// CK19: call void [[CALL15:@.+]](i32* {{[^,]+}}) | // CK19: call void [[CALL15:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(from:pa[ii+12]) | #pragma omp target map(from:pa[ii+12]) | ||||
{ | { | ||||
pa[15]++; | pa[15]++; | ||||
} | } | ||||
// Map of a variable-size array. | // Map of a variable-size array. | ||||
int va[ii]; | int va[ii]; | ||||
// Region 16 | // Region 16 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE16]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE16]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z:64|32]]* | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z:64|32]]* | ||||
Show All 14 Lines | void explicit_maps_single (int ii){ | ||||
// CK19: call void [[CALL16:@.+]](i{{.+}} {{[^,]+}}, i32* {{[^,]+}}) | // CK19: call void [[CALL16:@.+]](i{{.+}} {{[^,]+}}, i32* {{[^,]+}}) | ||||
#pragma omp target map(to:va) | #pragma omp target map(to:va) | ||||
{ | { | ||||
va[50]++; | va[50]++; | ||||
} | } | ||||
// Region 17 | // Region 17 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE17]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE17]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE17]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE17]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]* | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]* | ||||
// CK19-DAG: store i[[Z]] {{%.+}}, i[[Z]]* [[CBP0]] | // CK19-DAG: store i[[Z]] {{%.+}}, i[[Z]]* [[CBP0]] | ||||
Show All 9 Lines | void explicit_maps_single (int ii){ | ||||
// CK19: call void [[CALL17:@.+]](i{{.+}} {{[^,]+}}, i32* {{[^,]+}}) | // CK19: call void [[CALL17:@.+]](i{{.+}} {{[^,]+}}, i32* {{[^,]+}}) | ||||
#pragma omp target map(from:va[20:60]) | #pragma omp target map(from:va[20:60]) | ||||
{ | { | ||||
va[50]++; | va[50]++; | ||||
} | } | ||||
// Region 18 | // Region 18 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE18]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE18]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE18]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE18]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]* | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]* | ||||
// CK19-DAG: store i[[Z]] {{%.+}}, i[[Z]]* [[CBP0]] | // CK19-DAG: store i[[Z]] {{%.+}}, i[[Z]]* [[CBP0]] | ||||
Show All 9 Lines | void explicit_maps_single (int ii){ | ||||
// CK19: call void [[CALL18:@.+]](i{{.+}} {{[^,]+}}, i32* {{[^,]+}}) | // CK19: call void [[CALL18:@.+]](i{{.+}} {{[^,]+}}, i32* {{[^,]+}}) | ||||
#pragma omp target map(tofrom:va[:60]) | #pragma omp target map(tofrom:va[:60]) | ||||
{ | { | ||||
va[50]++; | va[50]++; | ||||
} | } | ||||
// Region 19 | // Region 19 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE19]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE19]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | ||||
Show All 15 Lines | void explicit_maps_single (int ii){ | ||||
// CK19: call void [[CALL19:@.+]](i{{.+}} {{[^,]+}}, i32* {{[^,]+}}) | // CK19: call void [[CALL19:@.+]](i{{.+}} {{[^,]+}}, i32* {{[^,]+}}) | ||||
#pragma omp target map(alloc:va[:]) | #pragma omp target map(alloc:va[:]) | ||||
{ | { | ||||
va[50]++; | va[50]++; | ||||
} | } | ||||
// Region 20 | // Region 20 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE20]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE20]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE20]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE20]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]* | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]* | ||||
// CK19-DAG: store i[[Z]] {{%.+}}, i[[Z]]* [[CBP0]] | // CK19-DAG: store i[[Z]] {{%.+}}, i[[Z]]* [[CBP0]] | ||||
Show All 9 Lines | void explicit_maps_single (int ii){ | ||||
// CK19: call void [[CALL20:@.+]](i{{.+}} {{[^,]+}}, i32* {{[^,]+}}) | // CK19: call void [[CALL20:@.+]](i{{.+}} {{[^,]+}}, i32* {{[^,]+}}) | ||||
#pragma omp target map(to:va[15]) | #pragma omp target map(to:va[15]) | ||||
{ | { | ||||
va[15]++; | va[15]++; | ||||
} | } | ||||
// Region 21 | // Region 21 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE21]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE21]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | ||||
Show All 15 Lines | void explicit_maps_single (int ii){ | ||||
// CK19: call void [[CALL21:@.+]](i{{.+}} {{[^,]+}}, i32* {{[^,]+}}) | // CK19: call void [[CALL21:@.+]](i{{.+}} {{[^,]+}}, i32* {{[^,]+}}) | ||||
#pragma omp target map(tofrom:va[ii:ii+23]) | #pragma omp target map(tofrom:va[ii:ii+23]) | ||||
{ | { | ||||
va[50]++; | va[50]++; | ||||
} | } | ||||
// Region 22 | // Region 22 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE22]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE22]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE22]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE22]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]* | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]* | ||||
// CK19-DAG: store i[[Z]] {{%.+}}, i[[Z]]* [[CBP0]] | // CK19-DAG: store i[[Z]] {{%.+}}, i[[Z]]* [[CBP0]] | ||||
Show All 10 Lines | void explicit_maps_single (int ii){ | ||||
// CK19: call void [[CALL22:@.+]](i{{.+}} {{[^,]+}}, i32* {{[^,]+}}) | // CK19: call void [[CALL22:@.+]](i{{.+}} {{[^,]+}}, i32* {{[^,]+}}) | ||||
#pragma omp target map(tofrom:va[ii]) | #pragma omp target map(tofrom:va[ii]) | ||||
{ | { | ||||
va[15]++; | va[15]++; | ||||
} | } | ||||
// Always. | // Always. | ||||
// Region 23 | // Region 23 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE23]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE23]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE23]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE23]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | // CK19-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | ||||
// CK19-DAG: store i32* [[VAR0]], i32** [[CP0]] | // CK19-DAG: store i32* [[VAR0]], i32** [[CP0]] | ||||
// CK19: call void [[CALL23:@.+]](i32* {{[^,]+}}) | // CK19: call void [[CALL23:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(always, tofrom: a) | #pragma omp target map(always, tofrom: a) | ||||
{ | { | ||||
a++; | a++; | ||||
} | } | ||||
// Multidimensional arrays. | // Multidimensional arrays. | ||||
int marr[4][5][6]; | int marr[4][5][6]; | ||||
int ***mptr; | int ***mptr; | ||||
// Region 24 | // Region 24 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE24]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE24]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE24]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE24]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [4 x [5 x [6 x i32]]]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [4 x [5 x [6 x i32]]]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [4 x [5 x [6 x i32]]]** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [4 x [5 x [6 x i32]]]** | ||||
// CK19-DAG: store [4 x [5 x [6 x i32]]]* [[VAR0:%.+]], [4 x [5 x [6 x i32]]]** [[CBP0]] | // CK19-DAG: store [4 x [5 x [6 x i32]]]* [[VAR0:%.+]], [4 x [5 x [6 x i32]]]** [[CBP0]] | ||||
// CK19-DAG: store [4 x [5 x [6 x i32]]]* [[VAR0]], [4 x [5 x [6 x i32]]]** [[CP0]] | // CK19-DAG: store [4 x [5 x [6 x i32]]]* [[VAR0]], [4 x [5 x [6 x i32]]]** [[CP0]] | ||||
// CK19: call void [[CALL24:@.+]]([4 x [5 x [6 x i32]]]* {{[^,]+}}) | // CK19: call void [[CALL24:@.+]]([4 x [5 x [6 x i32]]]* {{[^,]+}}) | ||||
#pragma omp target map(tofrom: marr) | #pragma omp target map(tofrom: marr) | ||||
{ | { | ||||
marr[1][2][3]++; | marr[1][2][3]++; | ||||
} | } | ||||
// Region 25 | // Region 25 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE25]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE25]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE25]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE25]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [4 x [5 x [6 x i32]]]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [4 x [5 x [6 x i32]]]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store [4 x [5 x [6 x i32]]]* [[VAR0:%.+]], [4 x [5 x [6 x i32]]]** [[CBP0]] | // CK19-DAG: store [4 x [5 x [6 x i32]]]* [[VAR0:%.+]], [4 x [5 x [6 x i32]]]** [[CBP0]] | ||||
// CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | // CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.*}}[6 x i32]* [[SEC00:[^,]+]], i{{.+}} 0, i{{.+}} 2 | // CK19-DAG: [[SEC0]] = getelementptr {{.*}}[6 x i32]* [[SEC00:[^,]+]], i{{.+}} 0, i{{.+}} 2 | ||||
// CK19-DAG: [[SEC00]] = getelementptr {{.*}}[5 x [6 x i32]]* [[SEC000:[^,]+]], i{{.+}} 0, i{{.+}} 2 | // CK19-DAG: [[SEC00]] = getelementptr {{.*}}[5 x [6 x i32]]* [[SEC000:[^,]+]], i{{.+}} 0, i{{.+}} 2 | ||||
// CK19-DAG: [[SEC000]] = getelementptr {{.*}}[4 x [5 x [6 x i32]]]* [[VAR0]], i{{.+}} 0, i{{.+}} 1 | // CK19-DAG: [[SEC000]] = getelementptr {{.*}}[4 x [5 x [6 x i32]]]* [[VAR0]], i{{.+}} 0, i{{.+}} 1 | ||||
// CK19: call void [[CALL25:@.+]]([4 x [5 x [6 x i32]]]* {{[^,]+}}) | // CK19: call void [[CALL25:@.+]]([4 x [5 x [6 x i32]]]* {{[^,]+}}) | ||||
#pragma omp target map(tofrom: marr[1][2][2:4]) | #pragma omp target map(tofrom: marr[1][2][2:4]) | ||||
{ | { | ||||
marr[1][2][3]++; | marr[1][2][3]++; | ||||
} | } | ||||
// Region 26 | // Region 26 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE26]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE26]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE26]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE26]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [4 x [5 x [6 x i32]]]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [4 x [5 x [6 x i32]]]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store [4 x [5 x [6 x i32]]]* [[VAR0:%.+]], [4 x [5 x [6 x i32]]]** [[CBP0]] | // CK19-DAG: store [4 x [5 x [6 x i32]]]* [[VAR0:%.+]], [4 x [5 x [6 x i32]]]** [[CBP0]] | ||||
// CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | // CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.*}}[6 x i32]* [[SEC00:[^,]+]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[SEC0]] = getelementptr {{.*}}[6 x i32]* [[SEC00:[^,]+]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[SEC00]] = getelementptr {{.*}}[5 x [6 x i32]]* [[SEC000:[^,]+]], i{{.+}} 0, i{{.+}} 2 | // CK19-DAG: [[SEC00]] = getelementptr {{.*}}[5 x [6 x i32]]* [[SEC000:[^,]+]], i{{.+}} 0, i{{.+}} 2 | ||||
// CK19-DAG: [[SEC000]] = getelementptr {{.*}}[4 x [5 x [6 x i32]]]* [[VAR0]], i{{.+}} 0, i{{.+}} 1 | // CK19-DAG: [[SEC000]] = getelementptr {{.*}}[4 x [5 x [6 x i32]]]* [[VAR0]], i{{.+}} 0, i{{.+}} 1 | ||||
// CK19: call void [[CALL26:@.+]]([4 x [5 x [6 x i32]]]* {{[^,]+}}) | // CK19: call void [[CALL26:@.+]]([4 x [5 x [6 x i32]]]* {{[^,]+}}) | ||||
#pragma omp target map(tofrom: marr[1][2][:]) | #pragma omp target map(tofrom: marr[1][2][:]) | ||||
{ | { | ||||
marr[1][2][3]++; | marr[1][2][3]++; | ||||
} | } | ||||
// Region 27 | // Region 27 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE27]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE27]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE27]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE27]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [4 x [5 x [6 x i32]]]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [4 x [5 x [6 x i32]]]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store [4 x [5 x [6 x i32]]]* [[VAR0:%.+]], [4 x [5 x [6 x i32]]]** [[CBP0]] | // CK19-DAG: store [4 x [5 x [6 x i32]]]* [[VAR0:%.+]], [4 x [5 x [6 x i32]]]** [[CBP0]] | ||||
// CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | // CK19-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.*}}[6 x i32]* [[SEC00:[^,]+]], i{{.+}} 0, i{{.+}} 3 | // CK19-DAG: [[SEC0]] = getelementptr {{.*}}[6 x i32]* [[SEC00:[^,]+]], i{{.+}} 0, i{{.+}} 3 | ||||
// CK19-DAG: [[SEC00]] = getelementptr {{.*}}[5 x [6 x i32]]* [[SEC000:[^,]+]], i{{.+}} 0, i{{.+}} 2 | // CK19-DAG: [[SEC00]] = getelementptr {{.*}}[5 x [6 x i32]]* [[SEC000:[^,]+]], i{{.+}} 0, i{{.+}} 2 | ||||
// CK19-DAG: [[SEC000]] = getelementptr {{.*}}[4 x [5 x [6 x i32]]]* [[VAR0]], i{{.+}} 0, i{{.+}} 1 | // CK19-DAG: [[SEC000]] = getelementptr {{.*}}[4 x [5 x [6 x i32]]]* [[VAR0]], i{{.+}} 0, i{{.+}} 1 | ||||
// CK19: call void [[CALL27:@.+]]([4 x [5 x [6 x i32]]]* {{[^,]+}}) | // CK19: call void [[CALL27:@.+]]([4 x [5 x [6 x i32]]]* {{[^,]+}}) | ||||
#pragma omp target map(tofrom: marr[1][2][3]) | #pragma omp target map(tofrom: marr[1][2][3]) | ||||
{ | { | ||||
marr[1][2][3]++; | marr[1][2][3]++; | ||||
} | } | ||||
// Region 28 | // Region 28 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE28]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE28]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE28]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE28]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32**** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32**** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32**** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32**** | ||||
// CK19-DAG: store i32*** [[VAR0:%.+]], i32**** [[CBP0]] | // CK19-DAG: store i32*** [[VAR0:%.+]], i32**** [[CBP0]] | ||||
Show All 28 Lines | void explicit_maps_single (int ii){ | ||||
// CK19: call void [[CALL28:@.+]](i32*** {{[^,]+}}) | // CK19: call void [[CALL28:@.+]](i32*** {{[^,]+}}) | ||||
#pragma omp target map(tofrom: mptr[1][2][2:4]) | #pragma omp target map(tofrom: mptr[1][2][2:4]) | ||||
{ | { | ||||
mptr[1][2][3]++; | mptr[1][2][3]++; | ||||
} | } | ||||
// Region 29 | // Region 29 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE29]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE29]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE29]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE29]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32**** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32**** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32**** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32**** | ||||
// CK19-DAG: store i32*** [[VAR0:%.+]], i32**** [[CBP0]] | // CK19-DAG: store i32*** [[VAR0:%.+]], i32**** [[CBP0]] | ||||
Show All 31 Lines | void explicit_maps_single (int ii){ | ||||
{ | { | ||||
mptr[1][2][3]++; | mptr[1][2][3]++; | ||||
} | } | ||||
// Multidimensional VLA. | // Multidimensional VLA. | ||||
double mva[23][ii][ii+5]; | double mva[23][ii][ii+5]; | ||||
// Region 30 | // Region 30 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 4, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[MTYPE30]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 4, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[MTYPE30]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// | // | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | ||||
Show All 36 Lines | void explicit_maps_single (int ii){ | ||||
// CK19: call void [[CALL30:@.+]](i[[Z]] 23, i[[Z]] %{{[^,]+}}, i[[Z]] %{{[^,]+}}, double* %{{[^,]+}}) | // CK19: call void [[CALL30:@.+]](i[[Z]] 23, i[[Z]] %{{[^,]+}}, i[[Z]] %{{[^,]+}}, double* %{{[^,]+}}) | ||||
#pragma omp target map(tofrom: mva) | #pragma omp target map(tofrom: mva) | ||||
{ | { | ||||
mva[1][2][3]++; | mva[1][2][3]++; | ||||
} | } | ||||
// Region 31 | // Region 31 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 4, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[SIZE31]], {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[MTYPE31]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 4, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[SIZE31]], {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[MTYPE31]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// | // | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]* | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]* | ||||
// CK19-DAG: store i[[Z]] 23, i[[Z]]* [[CBP0]] | // CK19-DAG: store i[[Z]] 23, i[[Z]]* [[CBP0]] | ||||
Show All 32 Lines | void explicit_maps_single (int ii){ | ||||
} | } | ||||
// Multidimensional array sections. | // Multidimensional array sections. | ||||
double marras[11][12][13]; | double marras[11][12][13]; | ||||
double mvlaas[11][ii][13]; | double mvlaas[11][ii][13]; | ||||
double ***mptras; | double ***mptras; | ||||
// Region 32 | // Region 32 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE32]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE32]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE32]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE32]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [11 x [12 x [13 x double]]]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [11 x [12 x [13 x double]]]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [11 x [12 x [13 x double]]]** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [11 x [12 x [13 x double]]]** | ||||
// CK19-DAG: store [11 x [12 x [13 x double]]]* [[VAR0:%.+]], [11 x [12 x [13 x double]]]** [[CBP0]] | // CK19-DAG: store [11 x [12 x [13 x double]]]* [[VAR0:%.+]], [11 x [12 x [13 x double]]]** [[CBP0]] | ||||
// CK19-DAG: store [11 x [12 x [13 x double]]]* [[VAR0]], [11 x [12 x [13 x double]]]** [[CP0]] | // CK19-DAG: store [11 x [12 x [13 x double]]]* [[VAR0]], [11 x [12 x [13 x double]]]** [[CP0]] | ||||
// CK19: call void [[CALL32:@.+]]([11 x [12 x [13 x double]]]* {{[^,]+}}) | // CK19: call void [[CALL32:@.+]]([11 x [12 x [13 x double]]]* {{[^,]+}}) | ||||
#pragma omp target map(marras) | #pragma omp target map(marras) | ||||
{ | { | ||||
marras[1][2][3]++; | marras[1][2][3]++; | ||||
} | } | ||||
// Region 33 | // Region 33 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE33]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE33]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE33]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE33]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [11 x [12 x [13 x double]]]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [11 x [12 x [13 x double]]]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [12 x [13 x double]]** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [12 x [13 x double]]** | ||||
// CK19-DAG: store [11 x [12 x [13 x double]]]* [[VAR0:%.+]], [11 x [12 x [13 x double]]]** [[CBP0]] | // CK19-DAG: store [11 x [12 x [13 x double]]]* [[VAR0:%.+]], [11 x [12 x [13 x double]]]** [[CBP0]] | ||||
// CK19-DAG: store [12 x [13 x double]]* [[SEC0:%.+]], [12 x [13 x double]]** [[CP0]] | // CK19-DAG: store [12 x [13 x double]]* [[SEC0:%.+]], [12 x [13 x double]]** [[CP0]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.+}}[11 x [12 x [13 x double]]]* [[VAR0]], i[[Z]] 0, i[[Z]] 0 | // CK19-DAG: [[SEC0]] = getelementptr {{.+}}[11 x [12 x [13 x double]]]* [[VAR0]], i[[Z]] 0, i[[Z]] 0 | ||||
// CK19: call void [[CALL33:@.+]]([11 x [12 x [13 x double]]]* {{[^,]+}}) | // CK19: call void [[CALL33:@.+]]([11 x [12 x [13 x double]]]* {{[^,]+}}) | ||||
#pragma omp target map(marras[:]) | #pragma omp target map(marras[:]) | ||||
{ | { | ||||
marras[1][2][3]++; | marras[1][2][3]++; | ||||
} | } | ||||
// Region 34 | // Region 34 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE34]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE34]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE34]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE34]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [11 x [12 x [13 x double]]]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [11 x [12 x [13 x double]]]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [12 x [13 x double]]** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [12 x [13 x double]]** | ||||
// CK19-DAG: store [11 x [12 x [13 x double]]]* [[VAR0:%.+]], [11 x [12 x [13 x double]]]** [[CBP0]] | // CK19-DAG: store [11 x [12 x [13 x double]]]* [[VAR0:%.+]], [11 x [12 x [13 x double]]]** [[CBP0]] | ||||
// CK19-DAG: store [12 x [13 x double]]* [[SEC0:%.+]], [12 x [13 x double]]** [[CP0]] | // CK19-DAG: store [12 x [13 x double]]* [[SEC0:%.+]], [12 x [13 x double]]** [[CP0]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.+}}[11 x [12 x [13 x double]]]* [[VAR0]], i[[Z]] 0, i[[Z]] 0 | // CK19-DAG: [[SEC0]] = getelementptr {{.+}}[11 x [12 x [13 x double]]]* [[VAR0]], i[[Z]] 0, i[[Z]] 0 | ||||
// CK19: call void [[CALL34:@.+]]([11 x [12 x [13 x double]]]* {{[^,]+}}) | // CK19: call void [[CALL34:@.+]]([11 x [12 x [13 x double]]]* {{[^,]+}}) | ||||
#pragma omp target map(marras[:][:][:]) | #pragma omp target map(marras[:][:][:]) | ||||
{ | { | ||||
marras[1][2][3]++; | marras[1][2][3]++; | ||||
} | } | ||||
// Region 35 | // Region 35 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE35]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE35]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// | // | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [11 x [12 x [13 x double]]]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [11 x [12 x [13 x double]]]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [13 x double]** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [13 x double]** | ||||
// CK19-DAG: store [11 x [12 x [13 x double]]]* [[VAR0:%.+]], [11 x [12 x [13 x double]]]** [[CBP0]] | // CK19-DAG: store [11 x [12 x [13 x double]]]* [[VAR0:%.+]], [11 x [12 x [13 x double]]]** [[CBP0]] | ||||
// CK19-DAG: store [13 x double]* [[SEC0:%.+]], [13 x double]** [[CP0]] | // CK19-DAG: store [13 x double]* [[SEC0:%.+]], [13 x double]** [[CP0]] | ||||
// CK19-DAG: store i64 [[CSVAL0:%[^,]+]], i64* [[S0]] | // CK19-DAG: store i64 [[CSVAL0:%[^,]+]], i64* [[S0]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.+}}[12 x [13 x double]]* [[SEC00:%[^,]+]], i[[Z]] 0, i[[Z]] 0 | // CK19-DAG: [[SEC0]] = getelementptr {{.+}}[12 x [13 x double]]* [[SEC00:%[^,]+]], i[[Z]] 0, i[[Z]] 0 | ||||
// CK19-DAG: [[SEC00]] = getelementptr {{.+}}[11 x [12 x [13 x double]]]* [[VAR0]], i[[Z]] 0, i[[Z]] 1 | // CK19-DAG: [[SEC00]] = getelementptr {{.+}}[11 x [12 x [13 x double]]]* [[VAR0]], i[[Z]] 0, i[[Z]] 1 | ||||
// CK19-DAG: [[CSVAL0]] = {{mul nuw i64 %[^,]+, 104|sext i32 .+ to i64}} | // CK19-DAG: [[CSVAL0]] = {{mul nuw i64 %[^,]+, 104|sext i32 .+ to i64}} | ||||
// CK19: call void [[CALL35:@.+]]([11 x [12 x [13 x double]]]* {{[^,]+}}) | // CK19: call void [[CALL35:@.+]]([11 x [12 x [13 x double]]]* {{[^,]+}}) | ||||
#pragma omp target map(marras[1][:ii][:]) | #pragma omp target map(marras[1][:ii][:]) | ||||
{ | { | ||||
marras[1][2][3]++; | marras[1][2][3]++; | ||||
} | } | ||||
// Region 36 | // Region 36 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE36]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE36]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE36]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE36]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [11 x [12 x [13 x double]]]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [11 x [12 x [13 x double]]]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [13 x double]** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [13 x double]** | ||||
// CK19-DAG: store [11 x [12 x [13 x double]]]* [[VAR0:%.+]], [11 x [12 x [13 x double]]]** [[CBP0]] | // CK19-DAG: store [11 x [12 x [13 x double]]]* [[VAR0:%.+]], [11 x [12 x [13 x double]]]** [[CBP0]] | ||||
// CK19-DAG: store [13 x double]* [[SEC0:%.+]], [13 x double]** [[CP0]] | // CK19-DAG: store [13 x double]* [[SEC0:%.+]], [13 x double]** [[CP0]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.+}}[13 x double]* [[SEC00:%[^,]+]], i{{.+}} 0 | // CK19-DAG: [[SEC0]] = getelementptr {{.+}}[13 x double]* [[SEC00:%[^,]+]], i{{.+}} 0 | ||||
// CK19-DAG: [[SEC00]] = getelementptr {{.+}}[12 x [13 x double]]* [[SEC000:%[^,]+]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[SEC00]] = getelementptr {{.+}}[12 x [13 x double]]* [[SEC000:%[^,]+]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[SEC000]] = getelementptr {{.+}}[11 x [12 x [13 x double]]]* [[VAR0]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[SEC000]] = getelementptr {{.+}}[11 x [12 x [13 x double]]]* [[VAR0]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19: call void [[CALL36:@.+]]([11 x [12 x [13 x double]]]* {{[^,]+}}) | // CK19: call void [[CALL36:@.+]]([11 x [12 x [13 x double]]]* {{[^,]+}}) | ||||
#pragma omp target map(marras[:1][:2][:13]) | #pragma omp target map(marras[:1][:2][:13]) | ||||
{ | { | ||||
marras[1][2][3]++; | marras[1][2][3]++; | ||||
} | } | ||||
// Region 37 | // Region 37 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE37]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE37]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// | // | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | ||||
Show All 23 Lines | void explicit_maps_single (int ii){ | ||||
// CK19: call void [[CALL37:@.+]](i[[Z]] 11, i[[Z]] %{{[^,]+}}, [13 x double]* %{{[^,]+}}) | // CK19: call void [[CALL37:@.+]](i[[Z]] 11, i[[Z]] %{{[^,]+}}, [13 x double]* %{{[^,]+}}) | ||||
#pragma omp target map(mvlaas) | #pragma omp target map(mvlaas) | ||||
{ | { | ||||
mvlaas[1][2][3]++; | mvlaas[1][2][3]++; | ||||
} | } | ||||
// Region 38 | // Region 38 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE38]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE38]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// | // | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | ||||
Show All 25 Lines | |||||
// CK19: call void [[CALL38:@.+]](i[[Z]] 11, i[[Z]] %{{[^,]+}}, [13 x double]* %{{[^,]+}}) | // CK19: call void [[CALL38:@.+]](i[[Z]] 11, i[[Z]] %{{[^,]+}}, [13 x double]* %{{[^,]+}}) | ||||
#pragma omp target map(mvlaas[:]) | #pragma omp target map(mvlaas[:]) | ||||
{ | { | ||||
mvlaas[1][2][3]++; | mvlaas[1][2][3]++; | ||||
} | } | ||||
// Region 39 | // Region 39 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE39]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE39]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// | // | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | ||||
Show All 25 Lines | |||||
// CK19: call void [[CALL39:@.+]](i[[Z]] 11, i[[Z]] %{{[^,]+}}, [13 x double]* %{{[^,]+}}) | // CK19: call void [[CALL39:@.+]](i[[Z]] 11, i[[Z]] %{{[^,]+}}, [13 x double]* %{{[^,]+}}) | ||||
#pragma omp target map(mvlaas[:][:][:]) | #pragma omp target map(mvlaas[:][:][:]) | ||||
{ | { | ||||
mvlaas[1][2][3]++; | mvlaas[1][2][3]++; | ||||
} | } | ||||
// Region 40 | // Region 40 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE40]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE40]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// | // | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | ||||
Show All 25 Lines | |||||
// CK19: call void [[CALL40:@.+]](i[[Z]] 11, i[[Z]] %{{[^,]+}}, [13 x double]* %{{[^,]+}}) | // CK19: call void [[CALL40:@.+]](i[[Z]] 11, i[[Z]] %{{[^,]+}}, [13 x double]* %{{[^,]+}}) | ||||
#pragma omp target map(mvlaas[1][:ii][:]) | #pragma omp target map(mvlaas[1][:ii][:]) | ||||
{ | { | ||||
mvlaas[1][2][3]++; | mvlaas[1][2][3]++; | ||||
} | } | ||||
// Region 41 | // Region 41 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE41]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE41]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE41]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE41]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// | // | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]* | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]* | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]* | ||||
// CK19-DAG: store i[[Z]] 11, i[[Z]]* [[CBP0]] | // CK19-DAG: store i[[Z]] 11, i[[Z]]* [[CBP0]] | ||||
Show All 18 Lines | |||||
// CK19: call void [[CALL41:@.+]](i[[Z]] 11, i[[Z]] %{{[^,]+}}, [13 x double]* %{{[^,]+}}) | // CK19: call void [[CALL41:@.+]](i[[Z]] 11, i[[Z]] %{{[^,]+}}, [13 x double]* %{{[^,]+}}) | ||||
#pragma omp target map(mvlaas[:1][:2][:13]) | #pragma omp target map(mvlaas[:1][:2][:13]) | ||||
{ | { | ||||
mvlaas[1][2][3]++; | mvlaas[1][2][3]++; | ||||
} | } | ||||
// Region 42 | // Region 42 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE42]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE42]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE42]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE42]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to double**** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to double**** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double**** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double**** | ||||
// CK19-DAG: store double*** [[VAR0:%.+]], double**** [[CBP0]] | // CK19-DAG: store double*** [[VAR0:%.+]], double**** [[CBP0]] | ||||
Show All 28 Lines | |||||
// CK19: call void [[CALL42:@.+]](double*** {{[^,]+}}) | // CK19: call void [[CALL42:@.+]](double*** {{[^,]+}}) | ||||
#pragma omp target map(mptras[:1][2][:13]) | #pragma omp target map(mptras[:1][2][:13]) | ||||
{ | { | ||||
mptras[1][2][3]++; | mptras[1][2][3]++; | ||||
} | } | ||||
// Region 43 - the memory is not contiguous for this map - will map the whole last dimension. | // Region 43 - the memory is not contiguous for this map - will map the whole last dimension. | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE43]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE43]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// | // | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [11 x [12 x [13 x double]]]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [11 x [12 x [13 x double]]]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [13 x double]** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [13 x double]** | ||||
// CK19-DAG: store [11 x [12 x [13 x double]]]* [[VAR0:%.+]], [11 x [12 x [13 x double]]]** [[CBP0]] | // CK19-DAG: store [11 x [12 x [13 x double]]]* [[VAR0:%.+]], [11 x [12 x [13 x double]]]** [[CBP0]] | ||||
// CK19-DAG: store [13 x double]* [[SEC0:%.+]], [13 x double]** [[CP0]] | // CK19-DAG: store [13 x double]* [[SEC0:%.+]], [13 x double]** [[CP0]] | ||||
// CK19-DAG: store i64 [[CSVAL0:%[^,]+]], i64* [[S0]] | // CK19-DAG: store i64 [[CSVAL0:%[^,]+]], i64* [[S0]] | ||||
// CK19-DAG: [[SEC0]] = getelementptr {{.+}}[12 x [13 x double]]* [[SEC00:%[^,]+]], i[[Z]] 0, i[[Z]] 0 | // CK19-DAG: [[SEC0]] = getelementptr {{.+}}[12 x [13 x double]]* [[SEC00:%[^,]+]], i[[Z]] 0, i[[Z]] 0 | ||||
// CK19-DAG: [[SEC00]] = getelementptr {{.+}}[11 x [12 x [13 x double]]]* [[VAR0]], i[[Z]] 0, i[[Z]] 1 | // CK19-DAG: [[SEC00]] = getelementptr {{.+}}[11 x [12 x [13 x double]]]* [[VAR0]], i[[Z]] 0, i[[Z]] 1 | ||||
// CK19-DAG: [[CSVAL0]] = {{mul nuw i64 %[^,]+, 104|sext i32 .+ to i64}} | // CK19-DAG: [[CSVAL0]] = {{mul nuw i64 %[^,]+, 104|sext i32 .+ to i64}} | ||||
// CK19: call void [[CALL43:@.+]]([11 x [12 x [13 x double]]]* {{[^,]+}}) | // CK19: call void [[CALL43:@.+]]([11 x [12 x [13 x double]]]* {{[^,]+}}) | ||||
#pragma omp target map(marras[1][:ii][1:]) | #pragma omp target map(marras[1][:ii][1:]) | ||||
{ | { | ||||
marras[1][2][3]++; | marras[1][2][3]++; | ||||
} | } | ||||
// Region 44 | // Region 44 | ||||
// CK19-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE44]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE44]]{{.+}}) | // CK19-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE44]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE44]]{{.+}}, i8** null) | ||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK19-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | // CK19-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | ||||
// CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK19-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | // CK19-DAG: store [100 x i32]* [[VAR0:%.+]], [100 x i32]** [[CBP0]] | ||||
▲ Show 20 Lines • Show All 92 Lines • ▼ Show 20 Lines | |||||
void explicit_maps_references_and_function_args (int a, float b, int (&c)[10], float *d){ | void explicit_maps_references_and_function_args (int a, float b, int (&c)[10], float *d){ | ||||
int &aa = a; | int &aa = a; | ||||
float &bb = b; | float &bb = b; | ||||
int (&cc)[10] = c; | int (&cc)[10] = c; | ||||
float *&dd = d; | float *&dd = d; | ||||
// Region 00 | // Region 00 | ||||
// CK20-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}) | // CK20-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null) | ||||
// CK20-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK20-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK20-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK20-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK20-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK20-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK20-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK20-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK20-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK20-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK20-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK20-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK20-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | // CK20-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | ||||
// CK20-DAG: store i32* [[RVAR00:%.+]], i32** [[CP0]] | // CK20-DAG: store i32* [[RVAR00:%.+]], i32** [[CP0]] | ||||
// CK20-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | // CK20-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | ||||
// CK20-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | // CK20-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | ||||
// CK20: call void [[CALL00:@.+]](i32* {{[^,]+}}) | // CK20: call void [[CALL00:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(to:aa) | #pragma omp target map(to:aa) | ||||
{ | { | ||||
aa += 1; | aa += 1; | ||||
} | } | ||||
// Region 01 | // Region 01 | ||||
// CK20-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}) | // CK20-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}, i8** null) | ||||
// CK20-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK20-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK20-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK20-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK20-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK20-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK20-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK20-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK20-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [10 x i32]** | // CK20-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [10 x i32]** | ||||
// CK20-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK20-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK20-DAG: store [10 x i32]* [[RVAR0:%.+]], [10 x i32]** [[CBP0]] | // CK20-DAG: store [10 x i32]* [[RVAR0:%.+]], [10 x i32]** [[CBP0]] | ||||
// CK20-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | // CK20-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | ||||
// CK20-DAG: [[SEC0]] = getelementptr {{.*}}[10 x i32]* [[RVAR00:%.+]], i{{.+}} 0, i{{.+}} 0 | // CK20-DAG: [[SEC0]] = getelementptr {{.*}}[10 x i32]* [[RVAR00:%.+]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK20-DAG: [[RVAR0]] = load [10 x i32]*, [10 x i32]** [[VAR0:%[^,]+]] | // CK20-DAG: [[RVAR0]] = load [10 x i32]*, [10 x i32]** [[VAR0:%[^,]+]] | ||||
// CK20-DAG: [[RVAR00]] = load [10 x i32]*, [10 x i32]** [[VAR0]] | // CK20-DAG: [[RVAR00]] = load [10 x i32]*, [10 x i32]** [[VAR0]] | ||||
// CK20: call void [[CALL01:@.+]]([10 x i32]* {{[^,]+}}) | // CK20: call void [[CALL01:@.+]]([10 x i32]* {{[^,]+}}) | ||||
#pragma omp target map(to:cc[:5]) | #pragma omp target map(to:cc[:5]) | ||||
{ | { | ||||
cc[3] += 1; | cc[3] += 1; | ||||
} | } | ||||
// Region 02 | // Region 02 | ||||
// CK20-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE02]]{{.+}}) | // CK20-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE02]]{{.+}}, i8** null) | ||||
// CK20-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK20-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK20-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK20-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK20-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK20-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK20-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK20-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK20-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float** | // CK20-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float** | ||||
// CK20-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** | // CK20-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** | ||||
// CK20-DAG: store float* [[VAR0:%.+]], float** [[CBP0]] | // CK20-DAG: store float* [[VAR0:%.+]], float** [[CBP0]] | ||||
// CK20-DAG: store float* [[VAR0]], float** [[CP0]] | // CK20-DAG: store float* [[VAR0]], float** [[CP0]] | ||||
// CK20: call void [[CALL02:@.+]](float* {{[^,]+}}) | // CK20: call void [[CALL02:@.+]](float* {{[^,]+}}) | ||||
#pragma omp target map(from:b) | #pragma omp target map(from:b) | ||||
{ | { | ||||
b += 1.0f; | b += 1.0f; | ||||
} | } | ||||
// Region 03 | // Region 03 | ||||
// CK20-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE03]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}) | // CK20-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE03]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}, i8** null) | ||||
// CK20-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK20-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK20-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK20-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK20-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK20-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK20-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK20-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK20-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float** | // CK20-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float** | ||||
// CK20-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** | // CK20-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** | ||||
// CK20-DAG: store float* [[RVAR0:%.+]], float** [[CBP0]] | // CK20-DAG: store float* [[RVAR0:%.+]], float** [[CBP0]] | ||||
▲ Show 20 Lines • Show All 62 Lines • ▼ Show 20 Lines | struct CC { | ||||
int A2; | int A2; | ||||
float *B; | float *B; | ||||
int foo(T arg) { | int foo(T arg) { | ||||
float la[X]; | float la[X]; | ||||
T *lb; | T *lb; | ||||
// Region 00 | // Region 00 | ||||
// CK21-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}) | // CK21-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null) | ||||
// CK21-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK21-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK21-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK21-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK21-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK21-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK21-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK21-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK21-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK21-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK21-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK21-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK21-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | // CK21-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | ||||
Show All 15 Lines | int foo(T arg) { | ||||
// CK21: call void [[CALL00:@.+]]([[ST]]* {{[^,]+}}) | // CK21: call void [[CALL00:@.+]]([[ST]]* {{[^,]+}}) | ||||
#pragma omp target map(A) | #pragma omp target map(A) | ||||
{ | { | ||||
A += 1; | A += 1; | ||||
} | } | ||||
// Region 01 | // Region 01 | ||||
// CK21-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}) | // CK21-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}, i8** null) | ||||
// CK21-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK21-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK21-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK21-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK21-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK21-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK21-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK21-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK21-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK21-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK21-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK21-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK21-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | // CK21-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | ||||
// CK21-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | // CK21-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | ||||
// CK21-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | // CK21-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | ||||
// CK21-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} 0 | // CK21-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} 0 | ||||
// CK21-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | // CK21-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | ||||
// CK21: call void [[CALL01:@.+]](i32* {{[^,]+}}) | // CK21: call void [[CALL01:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(lb[:X]) | #pragma omp target map(lb[:X]) | ||||
{ | { | ||||
lb[4] += 1; | lb[4] += 1; | ||||
} | } | ||||
// Region 02 | // Region 02 | ||||
// CK21-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE02]]{{.+}}) | // CK21-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE02]]{{.+}}, i8** null) | ||||
// CK21-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK21-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK21-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK21-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK21-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK21-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK21-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK21-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK21-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK21-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK21-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK21-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK21-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | // CK21-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | ||||
Show All 17 Lines | int foo(T arg) { | ||||
// CK21: call void [[CALL02:@.+]]([[ST]]* {{[^,]+}}) | // CK21: call void [[CALL02:@.+]]([[ST]]* {{[^,]+}}) | ||||
#pragma omp target map(from:B[X:X+2]) | #pragma omp target map(from:B[X:X+2]) | ||||
{ | { | ||||
B[2] += 1.0f; | B[2] += 1.0f; | ||||
} | } | ||||
// Region 03 | // Region 03 | ||||
// CK21-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE03]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}) | // CK21-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE03]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}, i8** null) | ||||
// CK21-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK21-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK21-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK21-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK21-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK21-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK21-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK21-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK21-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [123 x float]** | // CK21-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [123 x float]** | ||||
// CK21-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [123 x float]** | // CK21-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [123 x float]** | ||||
// CK21-DAG: store [123 x float]* [[VAR0:%.+]], [123 x float]** [[CBP0]] | // CK21-DAG: store [123 x float]* [[VAR0:%.+]], [123 x float]** [[CBP0]] | ||||
// CK21-DAG: store [123 x float]* [[VAR0]], [123 x float]** [[CP0]] | // CK21-DAG: store [123 x float]* [[VAR0]], [123 x float]** [[CP0]] | ||||
// CK21: call void [[CALL03:@.+]]([123 x float]* {{[^,]+}}) | // CK21: call void [[CALL03:@.+]]([123 x float]* {{[^,]+}}) | ||||
#pragma omp target map(from:la) | #pragma omp target map(from:la) | ||||
{ | { | ||||
la[3] += 1.0f; | la[3] += 1.0f; | ||||
} | } | ||||
// Region 04 | // Region 04 | ||||
// CK21-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE04]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE04]]{{.+}}) | // CK21-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE04]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE04]]{{.+}}, i8** null) | ||||
// CK21-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK21-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK21-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK21-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK21-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK21-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK21-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK21-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK21-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK21-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK21-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK21-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK21-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | // CK21-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | ||||
// CK21-DAG: store i32* [[VAR0]], i32** [[CP0]] | // CK21-DAG: store i32* [[VAR0]], i32** [[CP0]] | ||||
// CK21: call void [[CALL04:@.+]](i32* {{[^,]+}}) | // CK21: call void [[CALL04:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(from:arg) | #pragma omp target map(from:arg) | ||||
{ | { | ||||
arg +=1; | arg +=1; | ||||
} | } | ||||
// Make sure the extra flag is passed to the second map. | // Make sure the extra flag is passed to the second map. | ||||
// Region 05 | // Region 05 | ||||
// CK21-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE05]]{{.+}}) | // CK21-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE05]]{{.+}}, i8** null) | ||||
// CK21-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK21-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK21-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK21-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK21-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK21-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK21-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK21-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK21-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK21-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK21-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK21-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK21-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | // CK21-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | ||||
▲ Show 20 Lines • Show All 143 Lines • ▼ Show 20 Lines | |||||
STT<int> sta ; | STT<int> sta ; | ||||
STT<int> stc[100]; | STT<int> stc[100]; | ||||
STT<int> *std; | STT<int> *std; | ||||
// CK22-LABEL: explicit_maps_globals{{.*}}( | // CK22-LABEL: explicit_maps_globals{{.*}}( | ||||
int explicit_maps_globals(void){ | int explicit_maps_globals(void){ | ||||
// Region 00 | // Region 00 | ||||
// CK22-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}) | // CK22-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null) | ||||
// CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK22-DAG: store i32* @a, i32** [[CBP0]] | // CK22-DAG: store i32* @a, i32** [[CBP0]] | ||||
// CK22-DAG: store i32* @a, i32** [[CP0]] | // CK22-DAG: store i32* @a, i32** [[CP0]] | ||||
// CK22: call void [[CALL00:@.+]](i32* {{[^,]+}}) | // CK22: call void [[CALL00:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(a) | #pragma omp target map(a) | ||||
{ a+=1; } | { a+=1; } | ||||
// Region 01 | // Region 01 | ||||
// CK22-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}) | // CK22-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}, i8** null) | ||||
// CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | // CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | ||||
// CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [100 x i32]** | // CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [100 x i32]** | ||||
// CK22-DAG: store [100 x i32]* @c, [100 x i32]** [[CBP0]] | // CK22-DAG: store [100 x i32]* @c, [100 x i32]** [[CBP0]] | ||||
// CK22-DAG: store [100 x i32]* @c, [100 x i32]** [[CP0]] | // CK22-DAG: store [100 x i32]* @c, [100 x i32]** [[CP0]] | ||||
// CK22: call void [[CALL01:@.+]]([100 x i32]* {{[^,]+}}) | // CK22: call void [[CALL01:@.+]]([100 x i32]* {{[^,]+}}) | ||||
#pragma omp target map(c) | #pragma omp target map(c) | ||||
{ c[3]+=1; } | { c[3]+=1; } | ||||
// Region 02 | // Region 02 | ||||
// CK22-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE02]]{{.+}}) | // CK22-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE02]]{{.+}}, i8** null) | ||||
// CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32*** | // CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32*** | ||||
// CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32*** | // CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32*** | ||||
// CK22-DAG: store i32** @d, i32*** [[CBP0]] | // CK22-DAG: store i32** @d, i32*** [[CBP0]] | ||||
// CK22-DAG: store i32** @d, i32*** [[CP0]] | // CK22-DAG: store i32** @d, i32*** [[CP0]] | ||||
// CK22: call void [[CALL02:@.+]](i32** {{[^,]+}}) | // CK22: call void [[CALL02:@.+]](i32** {{[^,]+}}) | ||||
#pragma omp target map(d) | #pragma omp target map(d) | ||||
{ d[3]+=1; } | { d[3]+=1; } | ||||
// Region 03 | // Region 03 | ||||
// CK22-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE03]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}) | // CK22-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE03]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}, i8** null) | ||||
// CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | // CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x i32]** | ||||
// CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK22-DAG: store [100 x i32]* @c, [100 x i32]** [[CBP0]] | // CK22-DAG: store [100 x i32]* @c, [100 x i32]** [[CBP0]] | ||||
// CK22-DAG: store i32* getelementptr inbounds ([100 x i32], [100 x i32]* @c, i{{.+}} 0, i{{.+}} 1), i32** [[CP0]] | // CK22-DAG: store i32* getelementptr inbounds ([100 x i32], [100 x i32]* @c, i{{.+}} 0, i{{.+}} 1), i32** [[CP0]] | ||||
// CK22: call void [[CALL03:@.+]]([100 x i32]* {{[^,]+}}) | // CK22: call void [[CALL03:@.+]]([100 x i32]* {{[^,]+}}) | ||||
#pragma omp target map(c[1:4]) | #pragma omp target map(c[1:4]) | ||||
{ c[3]+=1; } | { c[3]+=1; } | ||||
// Region 04 | // Region 04 | ||||
// CK22-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE04]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE04]]{{.+}}) | // CK22-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE04]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE04]]{{.+}}, i8** null) | ||||
// CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK22-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | // CK22-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | ||||
// CK22-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | // CK22-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | ||||
// CK22-DAG: [[RVAR0]] = load i32*, i32** @d | // CK22-DAG: [[RVAR0]] = load i32*, i32** @d | ||||
// CK22-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} 2 | // CK22-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} 2 | ||||
// CK22-DAG: [[RVAR00]] = load i32*, i32** @d | // CK22-DAG: [[RVAR00]] = load i32*, i32** @d | ||||
// CK22: call void [[CALL04:@.+]](i32* {{[^,]+}}) | // CK22: call void [[CALL04:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(d[2:5]) | #pragma omp target map(d[2:5]) | ||||
{ d[3]+=1; } | { d[3]+=1; } | ||||
// Region 05 | // Region 05 | ||||
// CK22-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE05]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE05]]{{.+}}) | // CK22-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE05]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE05]]{{.+}}, i8** null) | ||||
// CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | // CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | ||||
// CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[ST]]** | // CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[ST]]** | ||||
// CK22-DAG: store [[ST]]* @sa, [[ST]]** [[CBP0]] | // CK22-DAG: store [[ST]]* @sa, [[ST]]** [[CBP0]] | ||||
// CK22-DAG: store [[ST]]* @sa, [[ST]]** [[CP0]] | // CK22-DAG: store [[ST]]* @sa, [[ST]]** [[CP0]] | ||||
// CK22: call void [[CALL05:@.+]]([[ST]]* {{[^,]+}}) | // CK22: call void [[CALL05:@.+]]([[ST]]* {{[^,]+}}) | ||||
#pragma omp target map(sa) | #pragma omp target map(sa) | ||||
{ sa.fa+=1; } | { sa.fa+=1; } | ||||
// Region 06 | // Region 06 | ||||
// CK22-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE06]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE06]]{{.+}}) | // CK22-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE06]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE06]]{{.+}}, i8** null) | ||||
// CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x [[ST]]]** | // CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x [[ST]]]** | ||||
// CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [100 x [[ST]]]** | // CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [100 x [[ST]]]** | ||||
// CK22-DAG: store [100 x [[ST]]]* @sc, [100 x [[ST]]]** [[CBP0]] | // CK22-DAG: store [100 x [[ST]]]* @sc, [100 x [[ST]]]** [[CBP0]] | ||||
// CK22-DAG: store [100 x [[ST]]]* @sc, [100 x [[ST]]]** [[CP0]] | // CK22-DAG: store [100 x [[ST]]]* @sc, [100 x [[ST]]]** [[CP0]] | ||||
// CK22: call void [[CALL06:@.+]]([100 x [[ST]]]* {{[^,]+}}) | // CK22: call void [[CALL06:@.+]]([100 x [[ST]]]* {{[^,]+}}) | ||||
#pragma omp target map(sc) | #pragma omp target map(sc) | ||||
{ sc[3].fa+=1; } | { sc[3].fa+=1; } | ||||
// Region 07 | // Region 07 | ||||
// CK22-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE07]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE07]]{{.+}}) | // CK22-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE07]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE07]]{{.+}}, i8** null) | ||||
// CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]*** | // CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]*** | ||||
// CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[ST]]*** | // CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[ST]]*** | ||||
// CK22-DAG: store [[ST]]** @sd, [[ST]]*** [[CBP0]] | // CK22-DAG: store [[ST]]** @sd, [[ST]]*** [[CBP0]] | ||||
// CK22-DAG: store [[ST]]** @sd, [[ST]]*** [[CP0]] | // CK22-DAG: store [[ST]]** @sd, [[ST]]*** [[CP0]] | ||||
// CK22: call void [[CALL07:@.+]]([[ST]]** {{[^,]+}}) | // CK22: call void [[CALL07:@.+]]([[ST]]** {{[^,]+}}) | ||||
#pragma omp target map(sd) | #pragma omp target map(sd) | ||||
{ sd[3].fa+=1; } | { sd[3].fa+=1; } | ||||
// Region 08 | // Region 08 | ||||
// CK22-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE08]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE08]]{{.+}}) | // CK22-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE08]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE08]]{{.+}}, i8** null) | ||||
// CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x [[ST]]]** | // CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x [[ST]]]** | ||||
// CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[ST]]** | // CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[ST]]** | ||||
// CK22-DAG: store [100 x [[ST]]]* @sc, [100 x [[ST]]]** [[CBP0]] | // CK22-DAG: store [100 x [[ST]]]* @sc, [100 x [[ST]]]** [[CBP0]] | ||||
// CK22-DAG: store [[ST]]* getelementptr inbounds ([100 x [[ST]]], [100 x [[ST]]]* @sc, i{{.+}} 0, i{{.+}} 1), [[ST]]** [[CP0]] | // CK22-DAG: store [[ST]]* getelementptr inbounds ([100 x [[ST]]], [100 x [[ST]]]* @sc, i{{.+}} 0, i{{.+}} 1), [[ST]]** [[CP0]] | ||||
// CK22: call void [[CALL08:@.+]]([100 x [[ST]]]* {{[^,]+}}) | // CK22: call void [[CALL08:@.+]]([100 x [[ST]]]* {{[^,]+}}) | ||||
#pragma omp target map(sc[1:4]) | #pragma omp target map(sc[1:4]) | ||||
{ sc[3].fa+=1; } | { sc[3].fa+=1; } | ||||
// Region 09 | // Region 09 | ||||
// CK22-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE09]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE09]]{{.+}}) | // CK22-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE09]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE09]]{{.+}}, i8** null) | ||||
// CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | // CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | ||||
// CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[ST]]** | // CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[ST]]** | ||||
// CK22-DAG: store [[ST]]* [[RVAR0:%.+]], [[ST]]** [[CBP0]] | // CK22-DAG: store [[ST]]* [[RVAR0:%.+]], [[ST]]** [[CBP0]] | ||||
// CK22-DAG: store [[ST]]* [[SEC0:%.+]], [[ST]]** [[CP0]] | // CK22-DAG: store [[ST]]* [[SEC0:%.+]], [[ST]]** [[CP0]] | ||||
// CK22-DAG: [[RVAR0]] = load [[ST]]*, [[ST]]** @sd | // CK22-DAG: [[RVAR0]] = load [[ST]]*, [[ST]]** @sd | ||||
// CK22-DAG: [[SEC0]] = getelementptr {{.*}}[[ST]]* [[RVAR00:%.+]], i{{.+}} 2 | // CK22-DAG: [[SEC0]] = getelementptr {{.*}}[[ST]]* [[RVAR00:%.+]], i{{.+}} 2 | ||||
// CK22-DAG: [[RVAR00]] = load [[ST]]*, [[ST]]** @sd | // CK22-DAG: [[RVAR00]] = load [[ST]]*, [[ST]]** @sd | ||||
// CK22: call void [[CALL09:@.+]]([[ST]]* {{[^,]+}}) | // CK22: call void [[CALL09:@.+]]([[ST]]* {{[^,]+}}) | ||||
#pragma omp target map(sd[2:5]) | #pragma omp target map(sd[2:5]) | ||||
{ sd[3].fa+=1; } | { sd[3].fa+=1; } | ||||
// Region 10 | // Region 10 | ||||
// CK22-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE10]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE10]]{{.+}}) | // CK22-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE10]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE10]]{{.+}}, i8** null) | ||||
// CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[STT]]** | // CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[STT]]** | ||||
// CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[STT]]** | // CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[STT]]** | ||||
// CK22-DAG: store [[STT]]* @sta, [[STT]]** [[CBP0]] | // CK22-DAG: store [[STT]]* @sta, [[STT]]** [[CBP0]] | ||||
// CK22-DAG: store [[STT]]* @sta, [[STT]]** [[CP0]] | // CK22-DAG: store [[STT]]* @sta, [[STT]]** [[CP0]] | ||||
// CK22: call void [[CALL10:@.+]]([[STT]]* {{[^,]+}}) | // CK22: call void [[CALL10:@.+]]([[STT]]* {{[^,]+}}) | ||||
#pragma omp target map(sta) | #pragma omp target map(sta) | ||||
{ sta.fa+=1; } | { sta.fa+=1; } | ||||
// Region 11 | // Region 11 | ||||
// CK22-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE11]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE11]]{{.+}}) | // CK22-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE11]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE11]]{{.+}}, i8** null) | ||||
// CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x [[STT]]]** | // CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x [[STT]]]** | ||||
// CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [100 x [[STT]]]** | // CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [100 x [[STT]]]** | ||||
// CK22-DAG: store [100 x [[STT]]]* @stc, [100 x [[STT]]]** [[CBP0]] | // CK22-DAG: store [100 x [[STT]]]* @stc, [100 x [[STT]]]** [[CBP0]] | ||||
// CK22-DAG: store [100 x [[STT]]]* @stc, [100 x [[STT]]]** [[CP0]] | // CK22-DAG: store [100 x [[STT]]]* @stc, [100 x [[STT]]]** [[CP0]] | ||||
// CK22: call void [[CALL11:@.+]]([100 x [[STT]]]* {{[^,]+}}) | // CK22: call void [[CALL11:@.+]]([100 x [[STT]]]* {{[^,]+}}) | ||||
#pragma omp target map(stc) | #pragma omp target map(stc) | ||||
{ stc[3].fa+=1; } | { stc[3].fa+=1; } | ||||
// Region 12 | // Region 12 | ||||
// CK22-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE12]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE12]]{{.+}}) | // CK22-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE12]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE12]]{{.+}}, i8** null) | ||||
// CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[STT]]*** | // CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[STT]]*** | ||||
// CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[STT]]*** | // CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[STT]]*** | ||||
// CK22-DAG: store [[STT]]** @std, [[STT]]*** [[CBP0]] | // CK22-DAG: store [[STT]]** @std, [[STT]]*** [[CBP0]] | ||||
// CK22-DAG: store [[STT]]** @std, [[STT]]*** [[CP0]] | // CK22-DAG: store [[STT]]** @std, [[STT]]*** [[CP0]] | ||||
// CK22: call void [[CALL12:@.+]]([[STT]]** {{[^,]+}}) | // CK22: call void [[CALL12:@.+]]([[STT]]** {{[^,]+}}) | ||||
#pragma omp target map(std) | #pragma omp target map(std) | ||||
{ std[3].fa+=1; } | { std[3].fa+=1; } | ||||
// Region 13 | // Region 13 | ||||
// CK22-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE13]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE13]]{{.+}}) | // CK22-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE13]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE13]]{{.+}}, i8** null) | ||||
// CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x [[STT]]]** | // CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x [[STT]]]** | ||||
// CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[STT]]** | // CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[STT]]** | ||||
// CK22-DAG: store [100 x [[STT]]]* @stc, [100 x [[STT]]]** [[CBP0]] | // CK22-DAG: store [100 x [[STT]]]* @stc, [100 x [[STT]]]** [[CBP0]] | ||||
// CK22-DAG: store [[STT]]* getelementptr inbounds ([100 x [[STT]]], [100 x [[STT]]]* @stc, i{{.+}} 0, i{{.+}} 1), [[STT]]** [[CP0]] | // CK22-DAG: store [[STT]]* getelementptr inbounds ([100 x [[STT]]], [100 x [[STT]]]* @stc, i{{.+}} 0, i{{.+}} 1), [[STT]]** [[CP0]] | ||||
// CK22: call void [[CALL13:@.+]]([100 x [[STT]]]* {{[^,]+}}) | // CK22: call void [[CALL13:@.+]]([100 x [[STT]]]* {{[^,]+}}) | ||||
#pragma omp target map(stc[1:4]) | #pragma omp target map(stc[1:4]) | ||||
{ stc[3].fa+=1; } | { stc[3].fa+=1; } | ||||
// Region 14 | // Region 14 | ||||
// CK22-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE14]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE14]]{{.+}}) | // CK22-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE14]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE14]]{{.+}}, i8** null) | ||||
// CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK22-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK22-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK22-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[STT]]** | // CK22-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[STT]]** | ||||
// CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[STT]]** | // CK22-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[STT]]** | ||||
// CK22-DAG: store [[STT]]* [[RVAR0:%.+]], [[STT]]** [[CBP0]] | // CK22-DAG: store [[STT]]* [[RVAR0:%.+]], [[STT]]** [[CBP0]] | ||||
▲ Show 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | int explicit_maps_inside_captured(int a){ | ||||
float b; | float b; | ||||
float c[100]; | float c[100]; | ||||
float *d; | float *d; | ||||
// CK23: call void @{{.*}}explicit_maps_inside_captured{{.*}}([[SA:%.+]]* {{.*}}) | // CK23: call void @{{.*}}explicit_maps_inside_captured{{.*}}([[SA:%.+]]* {{.*}}) | ||||
// CK23: define {{.*}}explicit_maps_inside_captured{{.*}} | // CK23: define {{.*}}explicit_maps_inside_captured{{.*}} | ||||
[&](void){ | [&](void){ | ||||
// Region 00 | // Region 00 | ||||
// CK23-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}) | // CK23-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null) | ||||
// CK23-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK23-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK23-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK23-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK23-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK23-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK23-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK23-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK23-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK23-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK23-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK23-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK23-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | // CK23-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | ||||
// CK23-DAG: store i32* [[VAR00:%.+]], i32** [[CP0]] | // CK23-DAG: store i32* [[VAR00:%.+]], i32** [[CP0]] | ||||
// CK23-DAG: [[VAR0]] = load i32*, i32** [[CAP0:%[^,]+]] | // CK23-DAG: [[VAR0]] = load i32*, i32** [[CAP0:%[^,]+]] | ||||
// CK23-DAG: [[CAP0]] = getelementptr inbounds [[SA]], [[SA]] | // CK23-DAG: [[CAP0]] = getelementptr inbounds [[SA]], [[SA]] | ||||
// CK23-DAG: [[VAR00]] = load i32*, i32** [[CAP00:%[^,]+]] | // CK23-DAG: [[VAR00]] = load i32*, i32** [[CAP00:%[^,]+]] | ||||
// CK23-DAG: [[CAP00]] = getelementptr inbounds [[SA]], [[SA]] | // CK23-DAG: [[CAP00]] = getelementptr inbounds [[SA]], [[SA]] | ||||
// CK23: call void [[CALL00:@.+]](i32* {{[^,]+}}) | // CK23: call void [[CALL00:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(a) | #pragma omp target map(a) | ||||
{ a+=1; } | { a+=1; } | ||||
// Region 01 | // Region 01 | ||||
// CK23-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}) | // CK23-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}, i8** null) | ||||
// CK23-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK23-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK23-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK23-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK23-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK23-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK23-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK23-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK23-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float** | // CK23-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float** | ||||
// CK23-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** | // CK23-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** | ||||
// CK23-DAG: store float* [[VAR0:%.+]], float** [[CBP0]] | // CK23-DAG: store float* [[VAR0:%.+]], float** [[CBP0]] | ||||
// CK23-DAG: store float* [[VAR00:%.+]], float** [[CP0]] | // CK23-DAG: store float* [[VAR00:%.+]], float** [[CP0]] | ||||
// CK23-DAG: [[VAR0]] = load float*, float** [[CAP0:%[^,]+]] | // CK23-DAG: [[VAR0]] = load float*, float** [[CAP0:%[^,]+]] | ||||
// CK23-DAG: [[CAP0]] = getelementptr inbounds [[SA]], [[SA]] | // CK23-DAG: [[CAP0]] = getelementptr inbounds [[SA]], [[SA]] | ||||
// CK23-DAG: [[VAR00]] = load float*, float** [[CAP00:%[^,]+]] | // CK23-DAG: [[VAR00]] = load float*, float** [[CAP00:%[^,]+]] | ||||
// CK23-DAG: [[CAP00]] = getelementptr inbounds [[SA]], [[SA]] | // CK23-DAG: [[CAP00]] = getelementptr inbounds [[SA]], [[SA]] | ||||
// CK23: call void [[CALL01:@.+]](float* {{[^,]+}}) | // CK23: call void [[CALL01:@.+]](float* {{[^,]+}}) | ||||
#pragma omp target map(b) | #pragma omp target map(b) | ||||
{ b+=1; } | { b+=1; } | ||||
// Region 02 | // Region 02 | ||||
// CK23-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE02]]{{.+}}) | // CK23-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE02]]{{.+}}, i8** null) | ||||
// CK23-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK23-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK23-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK23-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK23-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK23-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK23-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK23-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK23-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x float]** | // CK23-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x float]** | ||||
// CK23-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [100 x float]** | // CK23-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [100 x float]** | ||||
// CK23-DAG: store [100 x float]* [[VAR0:%.+]], [100 x float]** [[CBP0]] | // CK23-DAG: store [100 x float]* [[VAR0:%.+]], [100 x float]** [[CBP0]] | ||||
// CK23-DAG: store [100 x float]* [[VAR00:%.+]], [100 x float]** [[CP0]] | // CK23-DAG: store [100 x float]* [[VAR00:%.+]], [100 x float]** [[CP0]] | ||||
// CK23-DAG: [[VAR0]] = load [100 x float]*, [100 x float]** [[CAP0:%[^,]+]] | // CK23-DAG: [[VAR0]] = load [100 x float]*, [100 x float]** [[CAP0:%[^,]+]] | ||||
// CK23-DAG: [[CAP0]] = getelementptr inbounds [[SA]], [[SA]] | // CK23-DAG: [[CAP0]] = getelementptr inbounds [[SA]], [[SA]] | ||||
// CK23-DAG: [[VAR00]] = load [100 x float]*, [100 x float]** [[CAP00:%[^,]+]] | // CK23-DAG: [[VAR00]] = load [100 x float]*, [100 x float]** [[CAP00:%[^,]+]] | ||||
// CK23-DAG: [[CAP00]] = getelementptr inbounds [[SA]], [[SA]] | // CK23-DAG: [[CAP00]] = getelementptr inbounds [[SA]], [[SA]] | ||||
// CK23: call void [[CALL02:@.+]]([100 x float]* {{[^,]+}}) | // CK23: call void [[CALL02:@.+]]([100 x float]* {{[^,]+}}) | ||||
#pragma omp target map(c) | #pragma omp target map(c) | ||||
{ c[3]+=1; } | { c[3]+=1; } | ||||
// Region 03 | // Region 03 | ||||
// CK23-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE03]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}) | // CK23-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE03]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}, i8** null) | ||||
// CK23-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK23-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK23-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK23-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK23-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK23-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK23-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK23-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK23-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float*** | // CK23-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float*** | ||||
// CK23-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float*** | // CK23-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float*** | ||||
// CK23-DAG: store float** [[VAR0:%.+]], float*** [[CBP0]] | // CK23-DAG: store float** [[VAR0:%.+]], float*** [[CBP0]] | ||||
// CK23-DAG: store float** [[VAR00:%.+]], float*** [[CP0]] | // CK23-DAG: store float** [[VAR00:%.+]], float*** [[CP0]] | ||||
// CK23-DAG: [[VAR0]] = load float**, float*** [[CAP0:%[^,]+]] | // CK23-DAG: [[VAR0]] = load float**, float*** [[CAP0:%[^,]+]] | ||||
// CK23-DAG: [[CAP0]] = getelementptr inbounds [[SA]], [[SA]] | // CK23-DAG: [[CAP0]] = getelementptr inbounds [[SA]], [[SA]] | ||||
// CK23-DAG: [[VAR00]] = load float**, float*** [[CAP00:%[^,]+]] | // CK23-DAG: [[VAR00]] = load float**, float*** [[CAP00:%[^,]+]] | ||||
// CK23-DAG: [[CAP00]] = getelementptr inbounds [[SA]], [[SA]] | // CK23-DAG: [[CAP00]] = getelementptr inbounds [[SA]], [[SA]] | ||||
// CK23: call void [[CALL03:@.+]](float** {{[^,]+}}) | // CK23: call void [[CALL03:@.+]](float** {{[^,]+}}) | ||||
#pragma omp target map(d) | #pragma omp target map(d) | ||||
{ d[3]+=1; } | { d[3]+=1; } | ||||
// Region 04 | // Region 04 | ||||
// CK23-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE04]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE04]]{{.+}}) | // CK23-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE04]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE04]]{{.+}}, i8** null) | ||||
// CK23-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK23-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK23-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK23-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK23-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK23-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK23-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK23-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK23-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x float]** | // CK23-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x float]** | ||||
// CK23-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** | // CK23-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** | ||||
// CK23-DAG: store [100 x float]* [[VAR0:%.+]], [100 x float]** [[CBP0]] | // CK23-DAG: store [100 x float]* [[VAR0:%.+]], [100 x float]** [[CBP0]] | ||||
// CK23-DAG: store float* [[SEC0:%.+]], float** [[CP0]] | // CK23-DAG: store float* [[SEC0:%.+]], float** [[CP0]] | ||||
// CK23-DAG: [[SEC0]] = getelementptr {{.*}}[100 x float]* [[VAR00:%.+]], i{{.+}} 0, i{{.+}} 2 | // CK23-DAG: [[SEC0]] = getelementptr {{.*}}[100 x float]* [[VAR00:%.+]], i{{.+}} 0, i{{.+}} 2 | ||||
// CK23-DAG: [[VAR0]] = load [100 x float]*, [100 x float]** [[CAP0:%[^,]+]] | // CK23-DAG: [[VAR0]] = load [100 x float]*, [100 x float]** [[CAP0:%[^,]+]] | ||||
// CK23-DAG: [[CAP0]] = getelementptr inbounds [[SA]], [[SA]] | // CK23-DAG: [[CAP0]] = getelementptr inbounds [[SA]], [[SA]] | ||||
// CK23-DAG: [[VAR00]] = load [100 x float]*, [100 x float]** [[CAP00:%[^,]+]] | // CK23-DAG: [[VAR00]] = load [100 x float]*, [100 x float]** [[CAP00:%[^,]+]] | ||||
// CK23-DAG: [[CAP00]] = getelementptr inbounds [[SA]], [[SA]] | // CK23-DAG: [[CAP00]] = getelementptr inbounds [[SA]], [[SA]] | ||||
// CK23: call void [[CALL04:@.+]]([100 x float]* {{[^,]+}}) | // CK23: call void [[CALL04:@.+]]([100 x float]* {{[^,]+}}) | ||||
#pragma omp target map(c[2:4]) | #pragma omp target map(c[2:4]) | ||||
{ c[3]+=1; } | { c[3]+=1; } | ||||
// Region 05 | // Region 05 | ||||
// CK23-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE05]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE05]]{{.+}}) | // CK23-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE05]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE05]]{{.+}}, i8** null) | ||||
// CK23-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK23-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK23-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK23-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK23-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK23-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK23-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK23-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK23-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float** | // CK23-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float** | ||||
// CK23-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** | // CK23-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** | ||||
// CK23-DAG: store float* [[RVAR0:%.+]], float** [[CBP0]] | // CK23-DAG: store float* [[RVAR0:%.+]], float** [[CBP0]] | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
// CK24: [[MTYPE24:@.+]] = private {{.*}}constant [4 x i64] [i64 32, i64 281474976710672, i64 16, i64 19] | // CK24: [[MTYPE24:@.+]] = private {{.*}}constant [4 x i64] [i64 32, i64 281474976710672, i64 16, i64 19] | ||||
// CK24-LABEL: explicit_maps_struct_fields | // CK24-LABEL: explicit_maps_struct_fields | ||||
int explicit_maps_struct_fields(int a){ | int explicit_maps_struct_fields(int a){ | ||||
SC s; | SC s; | ||||
SC *p; | SC *p; | ||||
// Region 01 | // Region 01 | ||||
// CK24-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE01]]{{.+}}) | // CK24-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE01]]{{.+}}, i8** null) | ||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | // CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | ||||
Show All 15 Lines | |||||
// CK24: call void [[CALL01:@.+]]([[SC]]* {{[^,]+}}) | // CK24: call void [[CALL01:@.+]]([[SC]]* {{[^,]+}}) | ||||
#pragma omp target map(s.a) | #pragma omp target map(s.a) | ||||
{ s.a++; } | { s.a++; } | ||||
// | // | ||||
// Same thing but starting from a pointer. | // Same thing but starting from a pointer. | ||||
// | // | ||||
// Region 13 | // Region 13 | ||||
// CK24-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE13]]{{.+}}) | // CK24-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE13]]{{.+}}, i8** null) | ||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | // CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | ||||
Show All 15 Lines | |||||
// CK24-DAG: [[VAR0]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR0]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24: call void [[CALL13:@.+]]([[SC]]* {{[^,]+}}) | // CK24: call void [[CALL13:@.+]]([[SC]]* {{[^,]+}}) | ||||
#pragma omp target map(p->a) | #pragma omp target map(p->a) | ||||
{ p->a++; } | { p->a++; } | ||||
// Region 14 | // Region 14 | ||||
// CK24-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE14]]{{.+}}) | // CK24-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE14]]{{.+}}, i8** null) | ||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | // CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | ||||
Show All 16 Lines | |||||
// CK24-DAG: [[VAR0]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR0]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24: call void [[CALL14:@.+]]([[SC]]* {{[^,]+}}) | // CK24: call void [[CALL14:@.+]]([[SC]]* {{[^,]+}}) | ||||
#pragma omp target map(p->s.s) | #pragma omp target map(p->s.s) | ||||
{ p->a++; } | { p->a++; } | ||||
// Region 15 | // Region 15 | ||||
// CK24-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz:64|32]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE15]]{{.+}}) | // CK24-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz:64|32]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE15]]{{.+}}, i8** null) | ||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | // CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | ||||
Show All 17 Lines | |||||
// CK24-DAG: [[VAR0]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR0]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24: call void [[CALL15:@.+]]([[SC]]* {{[^,]+}}) | // CK24: call void [[CALL15:@.+]]([[SC]]* {{[^,]+}}) | ||||
#pragma omp target map(p->s.s.a) | #pragma omp target map(p->s.s.a) | ||||
{ p->a++; } | { p->a++; } | ||||
// Region 16 | // Region 16 | ||||
// CK24-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE16]]{{.+}}) | // CK24-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE16]]{{.+}}, i8** null) | ||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | // CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | ||||
Show All 16 Lines | |||||
// CK24-DAG: [[VAR0]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR0]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24: call void [[CALL16:@.+]]([[SC]]* {{[^,]+}}) | // CK24: call void [[CALL16:@.+]]([[SC]]* {{[^,]+}}) | ||||
#pragma omp target map(p->b[:5]) | #pragma omp target map(p->b[:5]) | ||||
{ p->a++; } | { p->a++; } | ||||
// Region 17 | // Region 17 | ||||
// CK24-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE17]]{{.+}}) | // CK24-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE17]]{{.+}}, i8** null) | ||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | // CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | ||||
Show All 19 Lines | |||||
// CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24-DAG: [[VAR000]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR000]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24: call void [[CALL17:@.+]]([[SC]]* {{[^,]+}}) | // CK24: call void [[CALL17:@.+]]([[SC]]* {{[^,]+}}) | ||||
#pragma omp target map(p->p[:5]) | #pragma omp target map(p->p[:5]) | ||||
{ p->a++; } | { p->a++; } | ||||
// Region 18 | // Region 18 | ||||
// CK24-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE18]]{{.+}}) | // CK24-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE18]]{{.+}}, i8** null) | ||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | // CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | ||||
Show All 18 Lines | |||||
// CK24-DAG: [[VAR0]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR0]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24: call void [[CALL18:@.+]]([[SC]]* {{[^,]+}}) | // CK24: call void [[CALL18:@.+]]([[SC]]* {{[^,]+}}) | ||||
#pragma omp target map(p->s.sa[3].a) | #pragma omp target map(p->s.sa[3].a) | ||||
{ p->a++; } | { p->a++; } | ||||
// Region 19 | // Region 19 | ||||
// CK24-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE19]]{{.+}}) | // CK24-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE19]]{{.+}}, i8** null) | ||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | // CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | ||||
Show All 30 Lines | |||||
// CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24-DAG: [[VAR000]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR000]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24: call void [[CALL19:@.+]]([[SC]]* {{[^,]+}}) | // CK24: call void [[CALL19:@.+]]([[SC]]* {{[^,]+}}) | ||||
#pragma omp target map(p->s.sp[3]->a) | #pragma omp target map(p->s.sp[3]->a) | ||||
{ p->a++; } | { p->a++; } | ||||
// Region 20 | // Region 20 | ||||
// CK24-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE20]]{{.+}}) | // CK24-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE20]]{{.+}}, i8** null) | ||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | // CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | ||||
Show All 17 Lines | |||||
// CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24-DAG: [[VAR000]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR000]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24: call void [[CALL20:@.+]]([[SC]]* {{[^,]+}}) | // CK24: call void [[CALL20:@.+]]([[SC]]* {{[^,]+}}) | ||||
#pragma omp target map(p->p->a) | #pragma omp target map(p->p->a) | ||||
{ p->a++; } | { p->a++; } | ||||
// Region 21 | // Region 21 | ||||
// CK24-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE21]]{{.+}}) | // CK24-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE21]]{{.+}}, i8** null) | ||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | // CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | ||||
Show All 30 Lines | |||||
// CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24-DAG: [[VAR000]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR000]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24: call void [[CALL21:@.+]]([[SC]]* {{[^,]+}}) | // CK24: call void [[CALL21:@.+]]([[SC]]* {{[^,]+}}) | ||||
#pragma omp target map(p->s.p->a) | #pragma omp target map(p->s.p->a) | ||||
{ p->a++; } | { p->a++; } | ||||
// Region 22 | // Region 22 | ||||
// CK24-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE22]]{{.+}}) | // CK24-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE22]]{{.+}}, i8** null) | ||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | // CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | ||||
Show All 18 Lines | |||||
// CK24-DAG: [[VAR0]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR0]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24: call void [[CALL22:@.+]]([[SC]]* {{[^,]+}}) | // CK24: call void [[CALL22:@.+]]([[SC]]* {{[^,]+}}) | ||||
#pragma omp target map(p->s.s.b[:2]) | #pragma omp target map(p->s.s.b[:2]) | ||||
{ p->a++; } | { p->a++; } | ||||
// Region 23 | // Region 23 | ||||
// CK24-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE23]]{{.+}}) | // CK24-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE23]]{{.+}}, i8** null) | ||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | // CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | ||||
Show All 31 Lines | |||||
// CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24-DAG: [[VAR000]] = load [[SC]]*, [[SC]]** %{{.+}} | // CK24-DAG: [[VAR000]] = load [[SC]]*, [[SC]]** %{{.+}} | ||||
// CK24: call void [[CALL23:@.+]]([[SC]]* {{[^,]+}}) | // CK24: call void [[CALL23:@.+]]([[SC]]* {{[^,]+}}) | ||||
#pragma omp target map(p->s.p->b[:2]) | #pragma omp target map(p->s.p->b[:2]) | ||||
{ p->a++; } | { p->a++; } | ||||
// Region 24 | // Region 24 | ||||
// CK24-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 4, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[MTYPE24]]{{.+}}) | // CK24-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 4, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[MTYPE24]]{{.+}}, i8** null) | ||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | // CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]** | ||||
▲ Show 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | |||||
template <int X, typename T> | template <int X, typename T> | ||||
struct CC { | struct CC { | ||||
T A; | T A; | ||||
float B; | float B; | ||||
int foo(T arg) { | int foo(T arg) { | ||||
// Region 00 | // Region 00 | ||||
// CK25-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}) | // CK25-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null) | ||||
// CK25-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK25-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK25-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK25-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK25-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK25-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK25-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK25-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK25-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK25-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK25-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK25-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK25-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | // CK25-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | ||||
Show All 16 Lines | int foo(T arg) { | ||||
#pragma omp target map(to:A) | #pragma omp target map(to:A) | ||||
{ | { | ||||
[&]() { | [&]() { | ||||
A += 1; | A += 1; | ||||
}(); | }(); | ||||
} | } | ||||
// Region 01 | // Region 01 | ||||
// CK25-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}) | // CK25-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}, i8** null) | ||||
// CK25-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK25-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK25-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK25-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK25-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK25-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK25-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK25-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK25-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK25-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK25-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK25-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK25-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | // CK25-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | ||||
▲ Show 20 Lines • Show All 78 Lines • ▼ Show 20 Lines | struct CC { | ||||
CC(float &B) : fB(B), pB(B) { | CC(float &B) : fB(B), pB(B) { | ||||
// CK26: call {{.*}}@__kmpc_fork_call{{.*}} [[OUTCALL:@.+]] to void (i32*, i32*, ...)* | // CK26: call {{.*}}@__kmpc_fork_call{{.*}} [[OUTCALL:@.+]] to void (i32*, i32*, ...)* | ||||
// define {{.*}}void [[OUTCALL]] | // define {{.*}}void [[OUTCALL]] | ||||
#pragma omp parallel firstprivate(fA,fB) private(pA,pB) | #pragma omp parallel firstprivate(fA,fB) private(pA,pB) | ||||
{ | { | ||||
// Region 00 | // Region 00 | ||||
// CK26-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}) | // CK26-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null) | ||||
// CK26-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK26-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK26-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK26-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK26-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK26-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK26-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK26-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK26-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | // CK26-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | ||||
// CK26-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[ST]]** | // CK26-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[ST]]** | ||||
// CK26-DAG: store [[ST]]* [[VAR0:%.+]], [[ST]]** [[CBP0]] | // CK26-DAG: store [[ST]]* [[VAR0:%.+]], [[ST]]** [[CBP0]] | ||||
Show All 10 Lines | #pragma omp parallel firstprivate(fA,fB) private(pA,pB) | ||||
// CK26: call void [[CALL00:@.+]]([[ST]]* {{[^,]+}}, i32* {{[^,]+}}) | // CK26: call void [[CALL00:@.+]]([[ST]]* {{[^,]+}}, i32* {{[^,]+}}) | ||||
#pragma omp target map(fA) | #pragma omp target map(fA) | ||||
{ | { | ||||
++fA; | ++fA; | ||||
} | } | ||||
// Region 01 | // Region 01 | ||||
// CK26-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE01]]{{.+}}) | // CK26-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE01]]{{.+}}, i8** null) | ||||
// CK26-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK26-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK26-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK26-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK26-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK26-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK26-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK26-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK26-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | // CK26-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | ||||
// CK26-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[ST]]** | // CK26-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[ST]]** | ||||
// CK26-DAG: store [[ST]]* [[VAR0:%.+]], [[ST]]** [[CBP0]] | // CK26-DAG: store [[ST]]* [[VAR0:%.+]], [[ST]]** [[CBP0]] | ||||
Show All 10 Lines | #pragma omp parallel firstprivate(fA,fB) private(pA,pB) | ||||
// CK26: call void [[CALL01:@.+]]([[ST]]* {{[^,]+}}, float* {{[^,]+}}) | // CK26: call void [[CALL01:@.+]]([[ST]]* {{[^,]+}}, float* {{[^,]+}}) | ||||
#pragma omp target map(fB) | #pragma omp target map(fB) | ||||
{ | { | ||||
fB += 1.0; | fB += 1.0; | ||||
} | } | ||||
// Region 02 | // Region 02 | ||||
// CK26-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE02]]{{.+}}) | // CK26-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE02]]{{.+}}, i8** null) | ||||
// CK26-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK26-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK26-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK26-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK26-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK26-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK26-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK26-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK26-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | // CK26-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | ||||
// CK26-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[ST]]** | // CK26-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[ST]]** | ||||
// CK26-DAG: store [[ST]]* [[VAR0:%.+]], [[ST]]** [[CBP0]] | // CK26-DAG: store [[ST]]* [[VAR0:%.+]], [[ST]]** [[CBP0]] | ||||
Show All 10 Lines | #pragma omp parallel firstprivate(fA,fB) private(pA,pB) | ||||
// CK26: call void [[CALL02:@.+]]([[ST]]* {{[^,]+}}, i32* {{[^,]+}}) | // CK26: call void [[CALL02:@.+]]([[ST]]* {{[^,]+}}, i32* {{[^,]+}}) | ||||
#pragma omp target map(pA) | #pragma omp target map(pA) | ||||
{ | { | ||||
++pA; | ++pA; | ||||
} | } | ||||
// Region 01 | // Region 01 | ||||
// CK26-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE03]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE03]]{{.+}}) | // CK26-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE03]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE03]]{{.+}}, i8** null) | ||||
// CK26-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK26-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK26-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK26-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK26-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK26-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK26-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK26-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK26-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | // CK26-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | ||||
// CK26-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[ST]]** | // CK26-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[ST]]** | ||||
// CK26-DAG: store [[ST]]* [[VAR0:%.+]], [[ST]]** [[CBP0]] | // CK26-DAG: store [[ST]]* [[VAR0:%.+]], [[ST]]** [[CBP0]] | ||||
▲ Show 20 Lines • Show All 112 Lines • ▼ Show 20 Lines | |||||
// CK27-LABEL: zero_size_section_and_private_maps{{.*}}( | // CK27-LABEL: zero_size_section_and_private_maps{{.*}}( | ||||
void zero_size_section_and_private_maps (int ii){ | void zero_size_section_and_private_maps (int ii){ | ||||
// Map of a pointer. | // Map of a pointer. | ||||
int *pa; | int *pa; | ||||
// Region 00 | // Region 00 | ||||
// CK27-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}) | // CK27-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null) | ||||
// CK27-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK27-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK27-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK27-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK27-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK27-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK27-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK27-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK27-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK27-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK27-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK27-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK27-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | // CK27-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | ||||
// CK27-DAG: store i32* [[VAR0]], i32** [[CP0]] | // CK27-DAG: store i32* [[VAR0]], i32** [[CP0]] | ||||
// CK27: call void [[CALL00:@.+]](i32* {{[^,]+}}) | // CK27: call void [[CALL00:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target | #pragma omp target | ||||
{ | { | ||||
pa[50]++; | pa[50]++; | ||||
} | } | ||||
// Region 01 | // Region 01 | ||||
// CK27-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}) | // CK27-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}, i8** null) | ||||
// CK27-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK27-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK27-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK27-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK27-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK27-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK27-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK27-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK27-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK27-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK27-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK27-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK27-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | // CK27-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | ||||
// CK27-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | // CK27-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | ||||
// CK27-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | // CK27-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | ||||
// CK27-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} 0 | // CK27-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} 0 | ||||
// CK27-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | // CK27-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | ||||
// CK27: call void [[CALL01:@.+]](i32* {{[^,]+}}) | // CK27: call void [[CALL01:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(pa[:0]) | #pragma omp target map(pa[:0]) | ||||
{ | { | ||||
pa[50]++; | pa[50]++; | ||||
} | } | ||||
// Region 02 | // Region 02 | ||||
// CK27-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE02]]{{.+}}) | // CK27-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE02]]{{.+}}, i8** null) | ||||
// CK27-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK27-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK27-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK27-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK27-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK27-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK27-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK27-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK27-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK27-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK27-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK27-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK27-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | // CK27-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | ||||
// CK27-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | // CK27-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | ||||
// CK27-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | // CK27-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | ||||
// CK27-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} 0 | // CK27-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} 0 | ||||
// CK27-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | // CK27-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | ||||
// CK27: call void [[CALL02:@.+]](i32* {{[^,]+}}) | // CK27: call void [[CALL02:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(pa[0:0]) | #pragma omp target map(pa[0:0]) | ||||
{ | { | ||||
pa[50]++; | pa[50]++; | ||||
} | } | ||||
// Region 03 | // Region 03 | ||||
// CK27-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE03]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}) | // CK27-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE03]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}, i8** null) | ||||
// CK27-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK27-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK27-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK27-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK27-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK27-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK27-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK27-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK27-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK27-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK27-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK27-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK27-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | // CK27-DAG: store i32* [[RVAR0:%.+]], i32** [[CBP0]] | ||||
// CK27-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | // CK27-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]] | ||||
// CK27-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | // CK27-DAG: [[RVAR0]] = load i32*, i32** [[VAR0:%[^,]+]] | ||||
// CK27-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} %{{.+}} | // CK27-DAG: [[SEC0]] = getelementptr {{.*}}i32* [[RVAR00:%.+]], i{{.+}} %{{.+}} | ||||
// CK27-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | // CK27-DAG: [[RVAR00]] = load i32*, i32** [[VAR0]] | ||||
// CK27: call void [[CALL03:@.+]](i32* {{[^,]+}}) | // CK27: call void [[CALL03:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(pa[ii:0]) | #pragma omp target map(pa[ii:0]) | ||||
{ | { | ||||
pa[50]++; | pa[50]++; | ||||
} | } | ||||
int *pvtPtr; | int *pvtPtr; | ||||
int pvtScl; | int pvtScl; | ||||
int pvtArr[10]; | int pvtArr[10]; | ||||
// Region 04 | // Region 04 | ||||
// CK27: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 0, i8** null, i8** null, i{{64|32}}* null, i64* null) | // CK27: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 0, i8** null, i8** null, i{{64|32}}* null, i64* null, i8** null) | ||||
// CK27: call void [[CALL04:@.+]]() | // CK27: call void [[CALL04:@.+]]() | ||||
#pragma omp target private(pvtPtr) | #pragma omp target private(pvtPtr) | ||||
{ | { | ||||
pvtPtr[5]++; | pvtPtr[5]++; | ||||
} | } | ||||
// Region 05 | // Region 05 | ||||
// CK27-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE05]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE05]]{{.+}}) | // CK27-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE05]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE05]]{{.+}}, i8** null) | ||||
// CK27-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK27-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK27-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK27-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK27-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK27-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK27-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK27-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK27-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK27-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK27-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK27-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK27-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | // CK27-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | ||||
// CK27-DAG: store i32* [[VAR0]], i32** [[CP0]] | // CK27-DAG: store i32* [[VAR0]], i32** [[CP0]] | ||||
// CK27: call void [[CALL05:@.+]](i32* {{[^,]+}}) | // CK27: call void [[CALL05:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target firstprivate(pvtPtr) | #pragma omp target firstprivate(pvtPtr) | ||||
{ | { | ||||
pvtPtr[5]++; | pvtPtr[5]++; | ||||
} | } | ||||
// Region 06 | // Region 06 | ||||
// CK27: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 0, i8** null, i8** null, i{{64|32}}* null, i64* null) | // CK27: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 0, i8** null, i8** null, i{{64|32}}* null, i64* null, i8** null) | ||||
// CK27: call void [[CALL06:@.+]]() | // CK27: call void [[CALL06:@.+]]() | ||||
#pragma omp target private(pvtScl) | #pragma omp target private(pvtScl) | ||||
{ | { | ||||
pvtScl++; | pvtScl++; | ||||
} | } | ||||
// Region 07 | // Region 07 | ||||
// CK27-DAG: call i32 @__tgt_target(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZE07]]{{.+}}, {{.+}}[[MTYPE07]]{{.+}}) | // CK27-DAG: call i32 @__tgt_target_mapper(i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZE07]]{{.+}}, {{.+}}[[MTYPE07]]{{.+}}, i8** null) | ||||
// CK27-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | // CK27-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0 | ||||
// CK27-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | // CK27-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0 | ||||
// CK27-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | // CK27-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0 | ||||
// CK27-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | // CK27-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0 | ||||
// CK27-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[Z:64|32]]* | // CK27-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[Z:64|32]]* | ||||
// CK27-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[Z]]* | // CK27-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[Z]]* | ||||
// CK27-DAG: store i[[Z]] [[VAL:%.+]], i[[Z]]* [[CBP1]] | // CK27-DAG: store i[[Z]] [[VAL:%.+]], i[[Z]]* [[CBP1]] | ||||
// CK27-DAG: store i[[Z]] [[VAL]], i[[Z]]* [[CP1]] | // CK27-DAG: store i[[Z]] [[VAL]], i[[Z]]* [[CP1]] | ||||
// CK27-DAG: [[VAL]] = load i[[Z]], i[[Z]]* [[ADDR:%.+]], | // CK27-DAG: [[VAL]] = load i[[Z]], i[[Z]]* [[ADDR:%.+]], | ||||
// CK27-64-DAG: [[CADDR:%.+]] = bitcast i[[Z]]* [[ADDR]] to i32* | // CK27-64-DAG: [[CADDR:%.+]] = bitcast i[[Z]]* [[ADDR]] to i32* | ||||
// CK27-64-DAG: store i32 {{.+}}, i32* [[CADDR]], | // CK27-64-DAG: store i32 {{.+}}, i32* [[CADDR]], | ||||
// CK27: call void [[CALL07:@.+]](i[[Z]] [[VAL]]) | // CK27: call void [[CALL07:@.+]](i[[Z]] [[VAL]]) | ||||
#pragma omp target firstprivate(pvtScl) | #pragma omp target firstprivate(pvtScl) | ||||
{ | { | ||||
pvtScl++; | pvtScl++; | ||||
} | } | ||||
// Region 08 | // Region 08 | ||||
// CK27: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 0, i8** null, i8** null, i{{64|32}}* null, i64* null) | // CK27: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 0, i8** null, i8** null, i{{64|32}}* null, i64* null, i8** null) | ||||
// CK27: call void [[CALL08:@.+]]() | // CK27: call void [[CALL08:@.+]]() | ||||
#pragma omp target private(pvtArr) | #pragma omp target private(pvtArr) | ||||
{ | { | ||||
pvtArr[5]++; | pvtArr[5]++; | ||||
} | } | ||||
// Region 09 | // Region 09 | ||||
// CK27-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE09]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE09]]{{.+}}) | // CK27-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE09]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE09]]{{.+}}, i8** null) | ||||
// CK27-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK27-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK27-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK27-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK27-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK27-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK27-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK27-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK27-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [10 x i32]** | // CK27-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [10 x i32]** | ||||
// CK27-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [10 x i32]** | // CK27-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [10 x i32]** | ||||
// CK27-DAG: store [10 x i32]* [[VAR0:%.+]], [10 x i32]** [[CBP0]] | // CK27-DAG: store [10 x i32]* [[VAR0:%.+]], [10 x i32]** [[CBP0]] | ||||
Show All 40 Lines | |||||
// CK28: [[SIZE01:@.+]] = private {{.*}}constant [1 x i64] [i64 400] | // CK28: [[SIZE01:@.+]] = private {{.*}}constant [1 x i64] [i64 400] | ||||
// CK28: [[MTYPE01:@.+]] = private {{.*}}constant [1 x i64] [i64 35] | // CK28: [[MTYPE01:@.+]] = private {{.*}}constant [1 x i64] [i64 35] | ||||
// CK28-LABEL: explicit_maps_pointer_references{{.*}}( | // CK28-LABEL: explicit_maps_pointer_references{{.*}}( | ||||
void explicit_maps_pointer_references (int *p){ | void explicit_maps_pointer_references (int *p){ | ||||
int *&a = p; | int *&a = p; | ||||
// Region 00 | // Region 00 | ||||
// CK28-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}) | // CK28-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null) | ||||
// CK28-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK28-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK28-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK28-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK28-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK28-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK28-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK28-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK28-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32*** | // CK28-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32*** | ||||
// CK28-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32*** | // CK28-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32*** | ||||
// CK28-DAG: store i32** [[VAR0:%.+]], i32*** [[CBP0]] | // CK28-DAG: store i32** [[VAR0:%.+]], i32*** [[CBP0]] | ||||
// CK28-DAG: store i32** [[VAR1:%.+]], i32*** [[CP0]] | // CK28-DAG: store i32** [[VAR1:%.+]], i32*** [[CP0]] | ||||
// CK28-DAG: [[VAR0]] = load i32**, i32*** [[VAR00:%.+]], | // CK28-DAG: [[VAR0]] = load i32**, i32*** [[VAR00:%.+]], | ||||
// CK28-DAG: [[VAR1]] = load i32**, i32*** [[VAR11:%.+]], | // CK28-DAG: [[VAR1]] = load i32**, i32*** [[VAR11:%.+]], | ||||
// CK28: call void [[CALL00:@.+]](i32** {{[^,]+}}) | // CK28: call void [[CALL00:@.+]](i32** {{[^,]+}}) | ||||
#pragma omp target map(a) | #pragma omp target map(a) | ||||
{ | { | ||||
++a; | ++a; | ||||
} | } | ||||
// Region 01 | // Region 01 | ||||
// CK28-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}) | // CK28-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}, i8** null) | ||||
// CK28-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK28-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK28-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK28-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK28-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK28-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK28-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK28-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK28-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK28-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK28-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK28-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK28-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | // CK28-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | ||||
▲ Show 20 Lines • Show All 50 Lines • ▼ Show 20 Lines | struct SSB{ | ||||
SSA *p; | SSA *p; | ||||
SSA *≺ | SSA *≺ | ||||
SSB(SSA *&pr) : pr(pr) {} | SSB(SSA *&pr) : pr(pr) {} | ||||
// CK29-LABEL: define {{.+}}foo | // CK29-LABEL: define {{.+}}foo | ||||
void foo() { | void foo() { | ||||
// Region 00 | // Region 00 | ||||
// CK29-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[Z:64|32]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE00]]{{.+}}) | // CK29-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[Z:64|32]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null) | ||||
// CK29-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK29-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK29-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK29-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK29-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK29-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK29-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK29-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK29-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK29-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK29-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK29-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
Show All 29 Lines | void foo() { | ||||
// CK29: call void [[CALL00:@.+]]([[SSB]]* {{[^,]+}}) | // CK29: call void [[CALL00:@.+]]([[SSB]]* {{[^,]+}}) | ||||
#pragma omp target map(p->pr[:10]) | #pragma omp target map(p->pr[:10]) | ||||
{ | { | ||||
p->pr++; | p->pr++; | ||||
} | } | ||||
// Region 01 | // Region 01 | ||||
// CK29-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE01]]{{.+}}) | // CK29-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE01]]{{.+}}, i8** null) | ||||
// CK29-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK29-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK29-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK29-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK29-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK29-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK29-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK29-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK29-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK29-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK29-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK29-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
Show All 28 Lines | void foo() { | ||||
// CK29: call void [[CALL00:@.+]]([[SSB]]* {{[^,]+}}) | // CK29: call void [[CALL00:@.+]]([[SSB]]* {{[^,]+}}) | ||||
#pragma omp target map(pr->p[:10]) | #pragma omp target map(pr->p[:10]) | ||||
{ | { | ||||
pr->p++; | pr->p++; | ||||
} | } | ||||
// Region 02 | // Region 02 | ||||
// CK29-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE02]]{{.+}}) | // CK29-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE02]]{{.+}}, i8** null) | ||||
// CK29-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK29-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK29-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK29-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK29-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK29-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK29-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK29-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK29-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK29-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK29-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK29-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
▲ Show 20 Lines • Show All 76 Lines • ▼ Show 20 Lines | |||||
typedef struct StructWithPtrTag : public Base { | typedef struct StructWithPtrTag : public Base { | ||||
int *ptr; | int *ptr; | ||||
int *ptr2; | int *ptr2; | ||||
int val; | int val; | ||||
int *ptr1; | int *ptr1; | ||||
} StructWithPtr; | } StructWithPtr; | ||||
// CK30-DAG: call i32 @__tgt_target(i64 -1, i8* @.__omp_offloading_{{.*}}map_with_deep_copy{{.*}}_l{{[0-9]+}}.region_id, i32 6, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], i64* getelementptr inbounds ([6 x i64], [6 x i64]* [[MTYPE00]], i32 0, i32 0)) | // CK30-DAG: call i32 @__tgt_target_mapper(i64 -1, i8* @.__omp_offloading_{{.*}}map_with_deep_copy{{.*}}_l{{[0-9]+}}.region_id, i32 6, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], i64* getelementptr inbounds ([6 x i64], [6 x i64]* [[MTYPE00]], i32 0, i32 0), i8** null) | ||||
// CK30-DAG: [[GEPS]] = getelementptr inbounds [6 x i{{64|32}}], [6 x i64]* [[SIZES:%.+]], i32 0, i32 0 | // CK30-DAG: [[GEPS]] = getelementptr inbounds [6 x i{{64|32}}], [6 x i64]* [[SIZES:%.+]], i32 0, i32 0 | ||||
// CK30-DAG: [[GEPP]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[PTRS:%.+]], i32 0, i32 0 | // CK30-DAG: [[GEPP]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[PTRS:%.+]], i32 0, i32 0 | ||||
// CK30-DAG: [[GEPBP]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[BASES:%.+]], i32 0, i32 0 | // CK30-DAG: [[GEPBP]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[BASES:%.+]], i32 0, i32 0 | ||||
// CK30-DAG: [[BASE_PTR:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[BASES]], i32 0, i32 0 | // CK30-DAG: [[BASE_PTR:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[BASES]], i32 0, i32 0 | ||||
// CK30-DAG: [[BC:%.+]] = bitcast i8** [[BASE_PTR]] to [[STRUCT]]** | // CK30-DAG: [[BC:%.+]] = bitcast i8** [[BASE_PTR]] to [[STRUCT]]** | ||||
// CK30-DAG: store [[STRUCT]]* [[S:%.+]], [[STRUCT]]** [[BC]], | // CK30-DAG: store [[STRUCT]]* [[S:%.+]], [[STRUCT]]** [[BC]], | ||||
// CK30-DAG: [[PTR:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[PTRS]], i32 0, i32 0 | // CK30-DAG: [[PTR:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[PTRS]], i32 0, i32 0 | ||||
▲ Show 20 Lines • Show All 125 Lines • ▼ Show 20 Lines | |||||
// CK31-LABEL: explicit_maps_single{{.*}}( | // CK31-LABEL: explicit_maps_single{{.*}}( | ||||
void explicit_maps_single (int ii){ | void explicit_maps_single (int ii){ | ||||
// Map of a scalar. | // Map of a scalar. | ||||
int a = ii; | int a = ii; | ||||
// Close. | // Close. | ||||
// Region 00 | // Region 00 | ||||
// CK31-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}) | // CK31-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null) | ||||
// CK31-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK31-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK31-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK31-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK31-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK31-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK31-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK31-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK31-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK31-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK31-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK31-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK31-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | // CK31-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | ||||
// CK31-DAG: store i32* [[VAR0]], i32** [[CP0]] | // CK31-DAG: store i32* [[VAR0]], i32** [[CP0]] | ||||
// CK31: call void [[CALL00:@.+]](i32* {{[^,]+}}) | // CK31: call void [[CALL00:@.+]](i32* {{[^,]+}}) | ||||
#pragma omp target map(close, tofrom: a) | #pragma omp target map(close, tofrom: a) | ||||
{ | { | ||||
a++; | a++; | ||||
} | } | ||||
// Always Close. | // Always Close. | ||||
// Region 01 | // Region 01 | ||||
// CK31-DAG: call i32 @__tgt_target(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}) | // CK31-DAG: call i32 @__tgt_target_mapper(i64 {{[^,]+}}, i8* {{[^,]+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE01]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE01]]{{.+}}, i8** null) | ||||
// CK31-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK31-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK31-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK31-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK31-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK31-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK31-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK31-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK31-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK31-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK31-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK31-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK31-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | // CK31-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | ||||
Show All 26 Lines | |||||
// SIMD-ONLY32-NOT: {{__kmpc|__tgt}} | // SIMD-ONLY32-NOT: {{__kmpc|__tgt}} | ||||
#ifdef CK32 | #ifdef CK32 | ||||
// CK32-DAG: [[MTYPE_TO:@.+]] = {{.+}}constant [1 x i64] [i64 33] | // CK32-DAG: [[MTYPE_TO:@.+]] = {{.+}}constant [1 x i64] [i64 33] | ||||
// CK32-DAG: [[MTYPE_FROM:@.+]] = {{.+}}constant [1 x i64] [i64 34] | // CK32-DAG: [[MTYPE_FROM:@.+]] = {{.+}}constant [1 x i64] [i64 34] | ||||
void array_shaping(float *f, int sa) { | void array_shaping(float *f, int sa) { | ||||
// CK32-DAG: call i32 @__tgt_target(i64 -1, i8* @{{.+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE_TO]]{{.+}}) | // CK32-DAG: call i32 @__tgt_target_mapper(i64 -1, i8* @{{.+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE_TO]]{{.+}}, i8** null) | ||||
// CK32-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK32-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK32-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK32-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK32-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK32-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK32-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK32-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK32-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK32-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK32-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK32-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
Show All 9 Lines | void array_shaping(float *f, int sa) { | ||||
// CK32-64-DAG: [[SIZE]] = mul nuw i64 [[SZ1:%.+]], 4 | // CK32-64-DAG: [[SIZE]] = mul nuw i64 [[SZ1:%.+]], 4 | ||||
// CK32-64-DAG: [[SZ1]] = mul nuw i64 12, %{{.+}} | // CK32-64-DAG: [[SZ1]] = mul nuw i64 12, %{{.+}} | ||||
// CK32-32-DAG: [[SIZE]] = sext i32 [[SZ1:%.+]] to i64 | // CK32-32-DAG: [[SIZE]] = sext i32 [[SZ1:%.+]] to i64 | ||||
// CK32-32-DAG: [[SZ1]] = mul nuw i32 [[SZ2:%.+]], 4 | // CK32-32-DAG: [[SZ1]] = mul nuw i32 [[SZ2:%.+]], 4 | ||||
// CK32-32-DAG: [[SZ2]] = mul nuw i32 12, %{{.+}} | // CK32-32-DAG: [[SZ2]] = mul nuw i32 12, %{{.+}} | ||||
#pragma omp target map(to:([3][sa][4])f) | #pragma omp target map(to:([3][sa][4])f) | ||||
f[0] = 1; | f[0] = 1; | ||||
sa = 1; | sa = 1; | ||||
// CK32-DAG: call i32 @__tgt_target(i64 -1, i8* @{{.+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE_FROM]]{{.+}}) | // CK32-DAG: call i32 @__tgt_target_mapper(i64 -1, i8* @{{.+}}, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE_FROM]]{{.+}}, i8** null) | ||||
// CK32-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK32-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK32-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK32-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK32-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK32-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK32-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK32-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK32-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK32-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK32-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK32-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
Show All 20 Lines |