brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.6 KiB · 67cedb2 Raw
168 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple x86_64-unknown-unknown -emit-llvm %s -o - | FileCheck %s2// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple x86_64-unknown-unknown -emit-pch -o %t %s3// RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s4 5// RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -triple x86_64-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s6// RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -triple x86_64-unknown-unknown -emit-pch -o %t %s7// RUN: %clang_cc1 -fopenmp-simd -x c++ -triple x86_64-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY0 %s8// SIMD-ONLY0-NOT: {{__kmpc|__tgt}}9// expected-no-diagnostics10 11 12#ifndef HEADER13#define HEADER14 15#define N 1016int foo();17int bar();18int k;19// CHECK-LABEL: @main20int main(int argc, char **argv) {21  foo();22// CHECK: @{{.+}}foo23// CHECK: call void @__kmpc_for_static_init_4(24// CHECK-NOT: @k25// CHECK: call void @__kmpc_for_static_fini(26// CHECK-NOT: @k27#pragma omp for private(k)28  for (k = 0; k < argc; k++)29    ;30  foo();31// CHECK: @{{.+}}foo32// CHECK: call void @__kmpc_for_static_init_8(33// CHECK-NOT: @k34// CHECK: call void @__kmpc_for_static_fini(35// CHECK: store i32 %{{.+}}, ptr @k36#pragma omp for lastprivate(k) collapse(2)37  for (int i = 0; i < 2; ++i)38    for (k = 0; k < argc; k++)39      ;40  foo();41// CHECK: @{{.+}}foo42// CHECK-NOT: @k{{.+}}!llvm.access.group43// CHECK: i32 @{{.+}}bar{{.+}}!llvm.access.group44// CHECK-NOT: @k{{.+}}!llvm.access.group45// CHECK: sdiv i3246// CHECK: store i32 %{{.+}}, ptr @k,47#pragma omp simd linear(k : 2)48  for (k = 0; k < argc; k++)49    bar();50// CHECK: @{{.+}}foo51// CHECK-NOT: @k{{.+}}!llvm.access.group52// CHECK: i32 @{{.+}}bar{{.+}}!llvm.access.group53// CHECK-NOT: @k{{.+}}!llvm.access.group54// CHECK: sdiv i3255// CHECK: store i32 %{{.+}}, ptr @k,56  foo();57#pragma omp simd lastprivate(k) collapse(2)58  for (int i = 0; i < 2; ++i)59    for (k = 0; k < argc; k++)60     bar() ;61  foo();62// CHECK: @{{.+}}foo63// CHECK-NOT: @k{{.+}}!llvm.access.group64// CHECK: i32 @{{.+}}bar{{.+}}!llvm.access.group65// CHECK-NOT: @k{{.+}}!llvm.access.group66// CHECK: sdiv i3267// CHECK: store i32 %{{.+}}, ptr @k,68#pragma omp simd69  for (k = 0; k < argc; k++)70    bar();71  foo();72// CHECK: @{{.+}}foo73// CHECK-NOT: @k{{.+}}!llvm.access.group74// CHECK: i32 @{{.+}}bar{{.+}}!llvm.access.group75// CHECK-NOT: @k{{.+}}!llvm.access.group76// CHECK: sdiv i3277// CHECK: store i32 %{{.+}}, ptr @k,78#pragma omp simd collapse(2)79  for (int i = 0; i < 2; ++i)80    for (k = 0; k < argc; k++)81      bar();82// CHECK: @{{.+}}foo83  foo();84  return 0;85}86 87struct S {88  int k;89  S(int argc) {90  foo();91// CHECK: @{{.+}}foo92// CHECK: call void @__kmpc_for_static_init_4(93// CHECK-NOT: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 094// CHECK: call void @__kmpc_for_static_fini(95// CHECK-NOT: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 096#pragma omp for private(k)97    for (k = 0; k < argc; k++)98      ;99  foo();100// CHECK: @{{.+}}foo101// CHECK: call void @__kmpc_for_static_init_8(102// CHECK-NOT: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 0103// CHECK: call void @__kmpc_for_static_fini(104#pragma omp for lastprivate(k) collapse(2)105    for (int i = 0; i < 2; ++i)106      for (k = 0; k < argc; k++)107        ;108  foo();109// CHECK: @{{.+}}foo110// CHECK: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 0111// CHECK: br i1112// CHECK-NOT: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 0113// CHECK: i32 @{{.+}}bar{{.+}}!llvm.access.group114// CHECK-NOT: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 0115// CHECK: add nsw i32 %{{.+}}, 1116// CHECK: br label {{.+}}, !llvm.loop117// CHECK: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 0118#pragma omp simd linear(k : 2)119    for (k = 0; k < argc; k++)120      bar();121  foo();122// CHECK: @{{.+}}foo123// CHECK: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 0124// CHECK: br i1125// CHECK-NOT: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 0126// CHECK: i32 @{{.+}}bar{{.+}}!llvm.access.group127// CHECK-NOT: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 0128// CHECK: add nsw i64 %{{.+}}, 1129// CHECK: br label {{.+}}, !llvm.loop130// CHECK: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 0131#pragma omp simd lastprivate(k) collapse(2)132    for (int i = 0; i < 2; ++i)133      for (k = 0; k < argc; k++)134        bar();135  foo();136// CHECK: @{{.+}}foo137// CHECK-NOT: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 0138// CHECK: br i1139// CHECK-NOT: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 0140// CHECK: i32 @{{.+}}bar{{.+}}!llvm.access.group141// CHECK-NOT: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 0142// CHECK: add nsw i32 %{{.+}}, 1143// CHECK: br label {{.+}}, !llvm.loop144// CHECK: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 0145#pragma omp simd146    for (k = 0; k < argc; k++)147      bar();148  foo();149// CHECK: @{{.+}}foo150// CHECK-NOT: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 0151// CHECK: br i1152// CHECK-NOT: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 0153// CHECK: i32 @{{.+}}bar{{.+}}!llvm.access.group154// CHECK-NOT: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 0155// CHECK: add nsw i64 %{{.+}}, 1156// CHECK: br label {{.+}}, !llvm.loop157// CHECK: getelementptr inbounds nuw %struct.S, ptr %{{.+}}, i32 0, i32 0158#pragma omp simd collapse(2)159    for (int i = 0; i < 2; ++i)160      for (k = 0; k < argc; k++)161        bar();162// CHECK: @{{.+}}foo163  foo();164  }165} s(N);166 167#endif // HEADER168