Changeset View
Changeset View
Standalone View
Standalone View
clang/test/OpenMP/target_data_codegen.cpp
Show First 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | |||||
// CK1: [[MTYPE06:@.+]] = {{.+}}constant [1 x i64] [i64 1061] | // CK1: [[MTYPE06:@.+]] = {{.+}}constant [1 x i64] [i64 1061] | ||||
// CK1-LABEL: _Z3fooi | // CK1-LABEL: _Z3fooi | ||||
void foo(int arg) { | void foo(int arg) { | ||||
int la; | int la; | ||||
float lb[arg]; | float lb[arg]; | ||||
// Region 00 | // Region 00 | ||||
// CK1-DAG: call void @__tgt_target_data_begin(i64 [[DEV:%[^,]+]], i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}) | // CK1-DAG: call void @__tgt_target_data_begin_mapper(i64 [[DEV:%[^,]+]], i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null) | ||||
// CK1-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 | // CK1-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 | ||||
// CK1-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, | // CK1-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, | ||||
// CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x double]** | // CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x double]** | ||||
// CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [100 x double]** | // CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [100 x double]** | ||||
// CK1-DAG: store [100 x double]* @gc, [100 x double]** [[CBP0]] | // CK1-DAG: store [100 x double]* @gc, [100 x double]** [[CBP0]] | ||||
// CK1-DAG: store [100 x double]* @gc, [100 x double]** [[CP0]] | // CK1-DAG: store [100 x double]* @gc, [100 x double]** [[CP0]] | ||||
// CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | ||||
// CK1-DAG: call void @__tgt_target_data_end(i64 [[DEV:%[^,]+]], i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}) | // CK1-DAG: call void @__tgt_target_data_end_mapper(i64 [[DEV:%[^,]+]], i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null) | ||||
// CK1-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 | // CK1-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 | ||||
// CK1-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, | // CK1-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, | ||||
// CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] | // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] | ||||
// CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] | // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] | ||||
#pragma omp target data if(1+3-5) device(arg) map(from: gc) | #pragma omp target data if(1+3-5) device(arg) map(from: gc) | ||||
{++arg;} | {++arg;} | ||||
// Region 01 | // Region 01 | ||||
// CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | ||||
#pragma omp target data map(la) if(1+3-4) | #pragma omp target data map(la) if(1+3-4) | ||||
{++arg;} | {++arg;} | ||||
// Region 02 | // Region 02 | ||||
// CK1: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] | // CK1: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] | ||||
// CK1: [[IFTHEN]] | // CK1: [[IFTHEN]] | ||||
// CK1-DAG: call void @__tgt_target_data_begin(i64 4, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE02]]{{.+}}) | // CK1-DAG: call void @__tgt_target_data_begin_mapper(i64 4, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE02]]{{.+}}, i8** null) | ||||
// CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | // CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** | ||||
// CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | // CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** | ||||
// CK1-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | // CK1-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] | ||||
// CK1-DAG: store i32* [[VAR0]], i32** [[CP0]] | // CK1-DAG: store i32* [[VAR0]], i32** [[CP0]] | ||||
// CK1: br label %[[IFEND:[^,]+]] | // CK1: br label %[[IFEND:[^,]+]] | ||||
// CK1: [[IFELSE]] | // CK1: [[IFELSE]] | ||||
// CK1: br label %[[IFEND]] | // CK1: br label %[[IFEND]] | ||||
// CK1: [[IFEND]] | // CK1: [[IFEND]] | ||||
// CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | ||||
// CK1: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] | // CK1: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] | ||||
// CK1: [[IFTHEN]] | // CK1: [[IFTHEN]] | ||||
// CK1-DAG: call void @__tgt_target_data_end(i64 4, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE02]]{{.+}}) | // CK1-DAG: call void @__tgt_target_data_end_mapper(i64 4, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE02]]{{.+}}, i8** null) | ||||
// CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] | // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] | ||||
// CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] | // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] | ||||
// CK1: br label %[[IFEND:[^,]+]] | // CK1: br label %[[IFEND:[^,]+]] | ||||
// CK1: [[IFELSE]] | // CK1: [[IFELSE]] | ||||
// CK1: br label %[[IFEND]] | // CK1: br label %[[IFEND]] | ||||
// CK1: [[IFEND]] | // CK1: [[IFEND]] | ||||
#pragma omp target data map(to: arg) if(arg) device(4) | #pragma omp target data map(to: arg) if(arg) device(4) | ||||
{++arg;} | {++arg;} | ||||
// Region 03 | // Region 03 | ||||
// CK1-DAG: call void @__tgt_target_data_begin(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}) | // CK1-DAG: call void @__tgt_target_data_begin_mapper(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}, i8** null) | ||||
// CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK1-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK1-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float** | // CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float** | ||||
// CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** | // CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** | ||||
// CK1-DAG: store float* [[VAR0:%.+]], float** [[CBP0]] | // CK1-DAG: store float* [[VAR0:%.+]], float** [[CBP0]] | ||||
// CK1-DAG: store float* [[VAR0]], float** [[CP0]] | // CK1-DAG: store float* [[VAR0]], float** [[CP0]] | ||||
// CK1-DAG: store i[[sz]] [[CSVAL0:%[^,]+]], i[[sz]]* [[S0]] | // CK1-DAG: store i[[sz]] [[CSVAL0:%[^,]+]], i[[sz]]* [[S0]] | ||||
// CK1-64-DAG: [[CSVAL0]] = mul nuw i64 %{{[^,]+}}, 4 | // CK1-64-DAG: [[CSVAL0]] = mul nuw i64 %{{[^,]+}}, 4 | ||||
// CK1-32-DAG: [[CSVAL0]] = sext i32 [[CSVAL032:%.+]] to i64 | // CK1-32-DAG: [[CSVAL0]] = sext i32 [[CSVAL032:%.+]] to i64 | ||||
// CK1-32-DAG: [[CSVAL032]] = mul nuw i32 %{{[^,]+}}, 4 | // CK1-32-DAG: [[CSVAL032]] = mul nuw i32 %{{[^,]+}}, 4 | ||||
// CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | ||||
// CK1-DAG: call void @__tgt_target_data_end(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}) | // CK1-DAG: call void @__tgt_target_data_end_mapper(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}, i8** null) | ||||
// CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] | // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] | ||||
// CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] | // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] | ||||
// CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S]] | // CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S]] | ||||
#pragma omp target data map(always, to: lb) | #pragma omp target data map(always, to: lb) | ||||
{++arg;} | {++arg;} | ||||
// CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | ||||
{++arg;} | {++arg;} | ||||
// Region 04 | // Region 04 | ||||
// CK1-DAG: call void @__tgt_target_data_begin(i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE04]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE04]]{{.+}}) | // CK1-DAG: call void @__tgt_target_data_begin_mapper(i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE04]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE04]]{{.+}}, i8** null) | ||||
// CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | // CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** | ||||
// CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double*** | // CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double*** | ||||
// CK1-DAG: store [[ST]]* @gb, [[ST]]** [[CBP0]] | // CK1-DAG: store [[ST]]* @gb, [[ST]]** [[CBP0]] | ||||
// CK1-DAG: store double** getelementptr inbounds ([[ST]], [[ST]]* @gb, i32 0, i32 1), double*** [[CP0]] | // CK1-DAG: store double** getelementptr inbounds ([[ST]], [[ST]]* @gb, i32 0, i32 1), double*** [[CP0]] | ||||
// CK1-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1 | // CK1-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1 | ||||
// CK1-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1 | // CK1-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1 | ||||
// CK1-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to double*** | // CK1-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to double*** | ||||
// CK1-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to double** | // CK1-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to double** | ||||
// CK1-DAG: store double** getelementptr inbounds ([[ST]], [[ST]]* @gb, i32 0, i32 1), double*** [[CBP1]] | // CK1-DAG: store double** getelementptr inbounds ([[ST]], [[ST]]* @gb, i32 0, i32 1), double*** [[CBP1]] | ||||
// CK1-DAG: store double* [[SEC1:%.+]], double** [[CP1]] | // CK1-DAG: store double* [[SEC1:%.+]], double** [[CP1]] | ||||
// CK1-DAG: [[SEC1]] = getelementptr inbounds {{.+}}double* [[SEC11:%[^,]+]], i{{.+}} 0 | // CK1-DAG: [[SEC1]] = getelementptr inbounds {{.+}}double* [[SEC11:%[^,]+]], i{{.+}} 0 | ||||
// CK1-DAG: [[SEC11]] = load double*, double** getelementptr inbounds ([[ST]], [[ST]]* @gb, i32 0, i32 1), | // CK1-DAG: [[SEC11]] = load double*, double** getelementptr inbounds ([[ST]], [[ST]]* @gb, i32 0, i32 1), | ||||
// CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | ||||
// CK1-DAG: call void @__tgt_target_data_end(i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE04]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE04]]{{.+}}) | // CK1-DAG: call void @__tgt_target_data_end_mapper(i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE04]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE04]]{{.+}}, i8** null) | ||||
// CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] | // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] | ||||
// CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] | // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] | ||||
#pragma omp target data map(to: gb.b[:3]) | #pragma omp target data map(to: gb.b[:3]) | ||||
{++arg;} | {++arg;} | ||||
// CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | ||||
{++arg;} | {++arg;} | ||||
// Region 05 | // Region 05 | ||||
// CK1-DAG: call void @__tgt_target_data_begin(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE05]]{{.+}}) | // CK1-DAG: call void @__tgt_target_data_begin_mapper(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE05]]{{.+}}, i8** null) | ||||
// CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK1-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK1-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float** | // CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float** | ||||
// CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** | // CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** | ||||
// CK1-DAG: store float* [[VAR0:%.+]], float** [[CBP0]] | // CK1-DAG: store float* [[VAR0:%.+]], float** [[CBP0]] | ||||
// CK1-DAG: store float* [[VAR0]], float** [[CP0]] | // CK1-DAG: store float* [[VAR0]], float** [[CP0]] | ||||
// CK1-DAG: store i[[sz]] [[CSVAL0:%[^,]+]], i[[sz]]* [[S0]] | // CK1-DAG: store i[[sz]] [[CSVAL0:%[^,]+]], i[[sz]]* [[S0]] | ||||
// CK1-64-DAG: [[CSVAL0]] = mul nuw i64 %{{[^,]+}}, 4 | // CK1-64-DAG: [[CSVAL0]] = mul nuw i64 %{{[^,]+}}, 4 | ||||
// CK1-32-DAG: [[CSVAL0]] = sext i32 [[CSVAL032:%.+]] to i64 | // CK1-32-DAG: [[CSVAL0]] = sext i32 [[CSVAL032:%.+]] to i64 | ||||
// CK1-32-DAG: [[CSVAL032]] = mul nuw i32 %{{[^,]+}}, 4 | // CK1-32-DAG: [[CSVAL032]] = mul nuw i32 %{{[^,]+}}, 4 | ||||
// CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | ||||
// CK1-DAG: call void @__tgt_target_data_end(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE05]]{{.+}}) | // CK1-DAG: call void @__tgt_target_data_end_mapper(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE05]]{{.+}}, i8** null) | ||||
// CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] | // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] | ||||
// CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] | // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] | ||||
// CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S]] | // CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S]] | ||||
#pragma omp target data map(close, to: lb) | #pragma omp target data map(close, to: lb) | ||||
{++arg;} | {++arg;} | ||||
// CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | ||||
{++arg;} | {++arg;} | ||||
// Region 06 | // Region 06 | ||||
// CK1-DAG: call void @__tgt_target_data_begin(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE06]]{{.+}}) | // CK1-DAG: call void @__tgt_target_data_begin_mapper(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE06]]{{.+}}, i8** null) | ||||
// CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] | ||||
// CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] | ||||
// CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | // CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] | ||||
// CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK1-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | // CK1-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float** | // CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float** | ||||
// CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** | // CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** | ||||
// CK1-DAG: store float* [[VAR0:%.+]], float** [[CBP0]] | // CK1-DAG: store float* [[VAR0:%.+]], float** [[CBP0]] | ||||
// CK1-DAG: store float* [[VAR0]], float** [[CP0]] | // CK1-DAG: store float* [[VAR0]], float** [[CP0]] | ||||
// CK1-DAG: store i[[sz]] [[CSVAL0:%[^,]+]], i[[sz]]* [[S0]] | // CK1-DAG: store i[[sz]] [[CSVAL0:%[^,]+]], i[[sz]]* [[S0]] | ||||
// CK1-64-DAG: [[CSVAL0]] = mul nuw i64 %{{[^,]+}}, 4 | // CK1-64-DAG: [[CSVAL0]] = mul nuw i64 %{{[^,]+}}, 4 | ||||
// CK1-32-DAG: [[CSVAL0]] = sext i32 [[CSVAL032:%.+]] to i64 | // CK1-32-DAG: [[CSVAL0]] = sext i32 [[CSVAL032:%.+]] to i64 | ||||
// CK1-32-DAG: [[CSVAL032]] = mul nuw i32 %{{[^,]+}}, 4 | // CK1-32-DAG: [[CSVAL032]] = mul nuw i32 %{{[^,]+}}, 4 | ||||
// CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | ||||
// CK1-DAG: call void @__tgt_target_data_end(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE06]]{{.+}}) | // CK1-DAG: call void @__tgt_target_data_end_mapper(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE06]]{{.+}}, i8** null) | ||||
// CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] | // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] | ||||
// CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] | // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] | ||||
// CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S]] | // CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S]] | ||||
#pragma omp target data map(always close, to: lb) | #pragma omp target data map(always close, to: lb) | ||||
{++arg;} | {++arg;} | ||||
} | } | ||||
#endif | #endif | ||||
///==========================================================================/// | ///==========================================================================/// | ||||
Show All 33 Lines | |||||
int bar(int arg){ | int bar(int arg){ | ||||
ST<int> A; | ST<int> A; | ||||
return A.foo(arg); | return A.foo(arg); | ||||
} | } | ||||
// Region 00 | // Region 00 | ||||
// CK2: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] | // CK2: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] | ||||
// CK2: [[IFTHEN]] | // CK2: [[IFTHEN]] | ||||
// CK2-DAG: call void @__tgt_target_data_begin(i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz:64|32]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}) | // CK2-DAG: call void @__tgt_target_data_begin_mapper(i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz:64|32]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null) | ||||
// CK2-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 | // CK2-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 | ||||
// CK2-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, | // CK2-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, | ||||
// CK2-DAG: [[GEPBP]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BP:%[^,]+]] | // CK2-DAG: [[GEPBP]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BP:%[^,]+]] | ||||
// CK2-DAG: [[GEPP]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[P:%[^,]+]] | // CK2-DAG: [[GEPP]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[P:%[^,]+]] | ||||
// CK2-DAG: [[GEPS]] = getelementptr inbounds [2 x i[[sz]]], [2 x i[[sz]]]* [[S:%[^,]+]] | // CK2-DAG: [[GEPS]] = getelementptr inbounds [2 x i[[sz]]], [2 x i[[sz]]]* [[S:%[^,]+]] | ||||
// CK2-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK2-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK2-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK2-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
Show All 21 Lines | |||||
// CK2: [[IFELSE]] | // CK2: [[IFELSE]] | ||||
// CK2: br label %[[IFEND]] | // CK2: br label %[[IFEND]] | ||||
// CK2: [[IFEND]] | // CK2: [[IFEND]] | ||||
// CK2: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | // CK2: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | ||||
// CK2: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] | // CK2: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] | ||||
// CK2: [[IFTHEN]] | // CK2: [[IFTHEN]] | ||||
// CK2-DAG: call void @__tgt_target_data_end(i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}) | // CK2-DAG: call void @__tgt_target_data_end_mapper(i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null) | ||||
// CK2-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 | // CK2-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 | ||||
// CK2-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, | // CK2-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, | ||||
// CK2-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] | // CK2-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] | ||||
// CK2-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] | // CK2-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] | ||||
// CK2-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S]] | // CK2-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S]] | ||||
// CK2: br label %[[IFEND:[^,]+]] | // CK2: br label %[[IFEND:[^,]+]] | ||||
// CK2: [[IFELSE]] | // CK2: [[IFELSE]] | ||||
// CK2: br label %[[IFEND]] | // CK2: br label %[[IFEND]] | ||||
▲ Show 20 Lines • Show All 63 Lines • ▼ Show 20 Lines | |||||
int bar(int arg){ | int bar(int arg){ | ||||
STT<int> A; | STT<int> A; | ||||
return A.foo(arg); | return A.foo(arg); | ||||
} | } | ||||
// Region 00 | // Region 00 | ||||
// CK4: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] | // CK4: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] | ||||
// CK4: [[IFTHEN]] | // CK4: [[IFTHEN]] | ||||
// CK4-DAG: call void @__tgt_target_data_begin(i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz:64|32]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}) | // CK4-DAG: call void @__tgt_target_data_begin_mapper(i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz:64|32]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null) | ||||
// CK4-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 | // CK4-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 | ||||
// CK4-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, | // CK4-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, | ||||
// CK4-DAG: [[GEPBP]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BP:%[^,]+]] | // CK4-DAG: [[GEPBP]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BP:%[^,]+]] | ||||
// CK4-DAG: [[GEPP]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[P:%[^,]+]] | // CK4-DAG: [[GEPP]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[P:%[^,]+]] | ||||
// CK4-DAG: [[GEPS]] = getelementptr inbounds [2 x i[[sz]]], [2 x i[[sz]]]* [[S:%[^,]+]] | // CK4-DAG: [[GEPS]] = getelementptr inbounds [2 x i[[sz]]], [2 x i[[sz]]]* [[S:%[^,]+]] | ||||
// CK4-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | // CK4-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 | ||||
// CK4-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | // CK4-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 | ||||
Show All 21 Lines | |||||
// CK4: [[IFELSE]] | // CK4: [[IFELSE]] | ||||
// CK4: br label %[[IFEND]] | // CK4: br label %[[IFEND]] | ||||
// CK4: [[IFEND]] | // CK4: [[IFEND]] | ||||
// CK4: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | // CK4: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 | ||||
// CK4: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] | // CK4: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] | ||||
// CK4: [[IFTHEN]] | // CK4: [[IFTHEN]] | ||||
// CK4-DAG: call void @__tgt_target_data_end(i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}) | // CK4-DAG: call void @__tgt_target_data_end_mapper(i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null) | ||||
// CK4-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 | // CK4-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 | ||||
// CK4-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, | // CK4-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, | ||||
// CK4-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] | // CK4-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] | ||||
// CK4-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] | // CK4-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] | ||||
// CK4-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S]] | // CK4-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S]] | ||||
// CK4: br label %[[IFEND:[^,]+]] | // CK4: br label %[[IFEND:[^,]+]] | ||||
// CK4: [[IFELSE]] | // CK4: [[IFELSE]] | ||||
// CK4: br label %[[IFEND]] | // CK4: br label %[[IFEND]] | ||||
▲ Show 20 Lines • Show All 77 Lines • Show Last 20 Lines |