brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.6 KiB · a7e868f Raw
224 lines · cpp
1// expected-no-diagnostics2#ifndef HEADER3#define HEADER4 5///==========================================================================///6// RUN: %clang_cc1 -DCK26 -std=c++11 -verify -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap  %s --check-prefix CK26 --check-prefix CK26-647// RUN: %clang_cc1 -DCK26 -std=c++11 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s8// RUN: %clang_cc1 -fopenmp -std=c++11 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap  %s  --check-prefix CK26 --check-prefix CK26-649// RUN: %clang_cc1 -DCK26 -std=c++11 -verify -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap  %s  --check-prefix CK26 --check-prefix CK26-3210// RUN: %clang_cc1 -DCK26 -std=c++11 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s11// RUN: %clang_cc1 -fopenmp -std=c++11 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap  %s  --check-prefix CK26 --check-prefix CK26-3212 13// RUN: %clang_cc1 -DCK26 -std=c++11 -verify -fopenmp -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap  %s --check-prefix CK26 --check-prefix CK26-6414// RUN: %clang_cc1 -DCK26 -std=c++11 -fopenmp -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s15// RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -std=c++11 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap  %s  --check-prefix CK26 --check-prefix CK26-6416// RUN: %clang_cc1 -DCK26 -std=c++11 -verify -fopenmp -fopenmp-version=45 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap  %s  --check-prefix CK26 --check-prefix CK26-3217// RUN: %clang_cc1 -DCK26 -std=c++11 -fopenmp -fopenmp-version=45 -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s18// RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -std=c++11 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap  %s  --check-prefix CK26 --check-prefix CK26-3219 20// RUN: %clang_cc1 -DCK26 -std=c++11 -verify -fopenmp -fopenmp-version=50 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap  %s --check-prefix CK26 --check-prefix CK26-6421// RUN: %clang_cc1 -DCK26 -std=c++11 -fopenmp -fopenmp-version=50 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s22// RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -std=c++11 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap  %s  --check-prefix CK26 --check-prefix CK26-6423// RUN: %clang_cc1 -DCK26 -std=c++11 -verify -fopenmp -fopenmp-version=50 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap  %s  --check-prefix CK26 --check-prefix CK26-3224// RUN: %clang_cc1 -DCK26 -std=c++11 -fopenmp -fopenmp-version=50 -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s25// RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -std=c++11 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap  %s  --check-prefix CK26 --check-prefix CK26-3226 27// RUN: %clang_cc1 -DCK26 -std=c++11 -verify -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap  --check-prefix SIMD-ONLY25 %s28// RUN: %clang_cc1 -DCK26 -std=c++11 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s29// RUN: %clang_cc1 -fopenmp-simd -std=c++11 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap  --check-prefix SIMD-ONLY25 %s30// RUN: %clang_cc1 -DCK26 -std=c++11 -verify -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap  --check-prefix SIMD-ONLY25 %s31// RUN: %clang_cc1 -DCK26 -std=c++11 -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s32// RUN: %clang_cc1 -fopenmp-simd -std=c++11 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap  --check-prefix SIMD-ONLY25 %s33// SIMD-ONLY25-NOT: {{__kmpc|__tgt}}34#ifdef CK2635// CK26: [[ST:%.+]] = type { i32, ptr, i32, ptr }36 37// CK26-LABEL: @.__omp_offloading_{{.*}}CC{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 038// CK26: [[SIZE00:@.+]] = private {{.*}}constant [2 x i64] [i64 {{32|16}}, i64 4]39// CK26: [[MTYPE00:@.+]] = private {{.*}}constant [2 x i64] [i64 547, i64 35]40 41// CK26-LABEL: @.__omp_offloading_{{.*}}CC{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 042// CK26: [[SIZE01:@.+]] = private {{.*}}constant [2 x i64] [i64 {{32|16}}, i64 4]43// CK26: [[MTYPE01:@.+]] = private {{.*}}constant [2 x i64] [i64 547, i64 35]44 45// CK26-LABEL: @.__omp_offloading_{{.*}}CC{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 046// CK26: [[SIZE02:@.+]] = private {{.*}}constant [2 x i64] [i64 {{32|16}}, i64 4]47// CK26: [[MTYPE02:@.+]] = private {{.*}}constant [2 x i64] [i64 547, i64 35]48 49// CK26-LABEL: @.__omp_offloading_{{.*}}CC{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 050// CK26: [[SIZE03:@.+]] = private {{.*}}constant [2 x i64] [i64 {{32|16}}, i64 4]51// CK26: [[MTYPE03:@.+]] = private {{.*}}constant [2 x i64] [i64 547, i64 35]52 53// CK26-LABEL: explicit_maps_with_private_class_members{{.*}}(54 55struct CC {56  int fA;57  float &fB;58  int pA;59  float &pB;60 61  CC(float &B) : fB(B), pB(B) {62 63    // CK26: call {{.*}}@__kmpc_fork_call{{.*}} [[OUTCALL:@.+]]64    // define {{.*}}void [[OUTCALL]]65    #pragma omp parallel firstprivate(fA,fB) private(pA,pB)66    {67// Region 0068// CK26-DAG: call i32 @__tgt_target_kernel(ptr @{{.+}}, i64 -1, i32 -1, i32 0, ptr @.{{.+}}.region_id, ptr [[ARGS:%.+]])69// CK26-DAG: [[BPARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 270// CK26-DAG: store ptr [[BPGEP:%.+]], ptr [[BPARG]]71// CK26-DAG: [[PARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 372// CK26-DAG: store ptr [[PGEP:%.+]], ptr [[PARG]]73// CK26-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]74// CK26-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]75 76// CK26-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 077// CK26-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 078// CK26-DAG: store ptr [[VAR0:%.+]], ptr [[BP0]]79// CK26-DAG: store ptr [[VAR0]], ptr [[P0]]80 81// CK26-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 182// CK26-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 183// CK26-DAG: store ptr [[VAR1:%.+]], ptr [[BP1]]84// CK26-DAG: store ptr [[SEC1:%.+]], ptr [[P1]]85// CK26-DAG: [[VAR1]] = load ptr, ptr [[PVT:%.+]],86// CK26-DAG: [[SEC1]] = load ptr, ptr [[PVT]],87 88// CK26: call void [[CALL00:@.+]](ptr {{[^,]+}}, ptr {{[^,]+}})89#pragma omp target map(fA)90      {91        ++fA;92      }93 94// Region 0195// CK26-DAG: call i32 @__tgt_target_kernel(ptr @{{.+}}, i64 -1, i32 -1, i32 0, ptr @.{{.+}}.region_id, ptr [[ARGS:%.+]])96// CK26-DAG: [[BPARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 297// CK26-DAG: store ptr [[BPGEP:%.+]], ptr [[BPARG]]98// CK26-DAG: [[PARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 399// CK26-DAG: store ptr [[PGEP:%.+]], ptr [[PARG]]100// CK26-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]101// CK26-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]102 103// CK26-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0104// CK26-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0105// CK26-DAG: store ptr [[VAR0:%.+]], ptr [[BP0]]106// CK26-DAG: store ptr [[VAR0]], ptr [[P0]]107 108// CK26-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1109// CK26-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1110// CK26-DAG: store ptr [[VAR1:%.+]], ptr [[BP1]]111// CK26-DAG: store ptr [[SEC1:%.+]], ptr [[P1]]112// CK26-DAG: [[VAR1]] = load ptr, ptr [[PVT:%.+]],113// CK26-DAG: [[SEC1]] = load ptr, ptr [[PVT]],114 115// CK26: call void [[CALL01:@.+]](ptr {{[^,]+}}, ptr {{[^,]+}})116#pragma omp target map(fB)117      {118        fB += 1.0;119      }120 121// Region 02122// CK26-DAG: call i32 @__tgt_target_kernel(ptr @{{.+}}, i64 -1, i32 -1, i32 0, ptr @.{{.+}}.region_id, ptr [[ARGS:%.+]])123// CK26-DAG: [[BPARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 2124// CK26-DAG: store ptr [[BPGEP:%.+]], ptr [[BPARG]]125// CK26-DAG: [[PARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 3126// CK26-DAG: store ptr [[PGEP:%.+]], ptr [[PARG]]127// CK26-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]128// CK26-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]129 130// CK26-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0131// CK26-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0132// CK26-DAG: store ptr [[VAR0:%.+]], ptr [[BP0]]133// CK26-DAG: store ptr [[VAR0]], ptr [[P0]]134 135// CK26-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1136// CK26-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1137// CK26-DAG: store ptr [[VAR1:%.+]], ptr [[BP1]]138// CK26-DAG: store ptr [[SEC1:%.+]], ptr [[P1]]139// CK26-DAG: [[VAR1]] = load ptr, ptr [[PVT:%.+]],140// CK26-DAG: [[SEC1]] = load ptr, ptr [[PVT]],141 142// CK26: call void [[CALL02:@.+]](ptr {{[^,]+}}, ptr {{[^,]+}})143#pragma omp target map(pA)144      {145        ++pA;146      }147 148// Region 01149// CK26-DAG: call i32 @__tgt_target_kernel(ptr @{{.+}}, i64 -1, i32 -1, i32 0, ptr @.{{.+}}.region_id, ptr [[ARGS:%.+]])150// CK26-DAG: [[BPARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 2151// CK26-DAG: store ptr [[BPGEP:%.+]], ptr [[BPARG]]152// CK26-DAG: [[PARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 3153// CK26-DAG: store ptr [[PGEP:%.+]], ptr [[PARG]]154// CK26-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]155// CK26-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]156 157// CK26-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0158// CK26-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0159// CK26-DAG: store ptr [[VAR0:%.+]], ptr [[BP0]]160// CK26-DAG: store ptr [[VAR0]], ptr [[P0]]161 162// CK26-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1163// CK26-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1164// CK26-DAG: store ptr [[VAR1:%.+]], ptr [[BP1]]165// CK26-DAG: store ptr [[SEC1:%.+]], ptr [[P1]]166// CK26-DAG: [[VAR1]] = load ptr, ptr [[PVT:%.+]],167// CK26-DAG: [[SEC1]] = load ptr, ptr [[PVT]],168 169// CK26: call void [[CALL03:@.+]](ptr {{[^,]+}}, ptr {{[^,]+}})170#pragma omp target map(pB)171      {172        pB += 1.0;173      }174    }175  }176 177  int foo() {178    return fA + pA;179  }180};181 182// Make sure the private instance is used in all target regions.183// CK26: define {{.+}}[[CALL00]]({{.*}}ptr{{.*}}[[PVTARG:%.+]])184// CK26: store ptr [[PVTARG]], ptr [[PVTADDR:%.+]],185// CK26: [[ADDR:%.+]] = load ptr, ptr [[PVTADDR]],186// CK26: store ptr [[ADDR]], ptr [[PVTADDR:%.+]],187// CK26: [[ADDR:%.+]] = load ptr, ptr [[PVTADDR]],188// CK26: [[VAL:%.+]] = load i32, ptr [[ADDR]],189// CK26: add nsw i32 [[VAL]], 1190 191// CK26: define {{.+}}[[CALL01]]({{.*}}ptr{{.*}}[[PVTARG:%.+]])192// CK26: store ptr [[PVTARG]], ptr [[PVTADDR:%.+]],193// CK26: [[ADDR:%.+]] = load ptr, ptr [[PVTADDR]],194// CK26: store ptr [[ADDR]], ptr [[PVTADDR:%.+]],195// CK26: [[ADDR:%.+]] = load ptr, ptr [[PVTADDR]],196// CK26: [[VAL:%.+]] = load float, ptr [[ADDR]],197// CK26: [[EXT:%.+]] = fpext float [[VAL]] to double198// CK26: fadd double [[EXT]], 1.000000e+00199 200// CK26: define {{.+}}[[CALL02]]({{.*}}ptr{{.*}}[[PVTARG:%.+]])201// CK26: store ptr [[PVTARG]], ptr [[PVTADDR:%.+]],202// CK26: [[ADDR:%.+]] = load ptr, ptr [[PVTADDR]],203// CK26: store ptr [[ADDR]], ptr [[PVTADDR:%.+]],204// CK26: [[ADDR:%.+]] = load ptr, ptr [[PVTADDR]],205// CK26: [[VAL:%.+]] = load i32, ptr [[ADDR]],206// CK26: add nsw i32 [[VAL]], 1207 208// CK26: define {{.+}}[[CALL03]]({{.*}}ptr{{.*}}[[PVTARG:%.+]])209// CK26: store ptr [[PVTARG]], ptr [[PVTADDR:%.+]],210// CK26: [[ADDR:%.+]] = load ptr, ptr [[PVTADDR]],211// CK26: store ptr [[ADDR]], ptr [[PVTADDR:%.+]],212// CK26: [[ADDR:%.+]] = load ptr, ptr [[PVTADDR]],213// CK26: [[VAL:%.+]] = load float, ptr [[ADDR]],214// CK26: [[EXT:%.+]] = fpext float [[VAL]] to double215// CK26: fadd double [[EXT]], 1.000000e+00216 217int explicit_maps_with_private_class_members(){218  float B;219  CC c(B);220  return c.foo();221}222#endif // CK26223#endif224