149 lines · cpp
1// RUN: %clang_cc1 -fopenmp -emit-pch -o %t.a %s2// RUN: %clang_cc1 -fopenmp -include-pch %t.a %s -ast-print -o - | FileCheck %s3 4// CHECK: #pragma clang loop vectorize_width(4)5// CHECK: #pragma clang loop interleave_count(8)6// CHECK: #pragma clang loop unroll_count(16){{$}}7// CHECK: #pragma clang loop vectorize(enable)8// CHECK: #pragma clang loop interleave(disable)9// CHECK: #pragma clang loop unroll(disable)10// CHECK: #pragma clang loop distribute(enable)11// CHECK: #pragma clang loop vectorize(disable)12// CHECK: #pragma clang loop interleave(enable)13// CHECK: #pragma clang loop unroll(full)14// CHECK: #pragma clang loop distribute(disable)15// FIXME: "#pragma unroll (enable)" is invalid and is not the input source.16// CHECK: #pragma unroll (enable){{$}}17// CHECK: #pragma unroll (32){{$}}18// CHECK: #pragma nounroll{{$}}19// CHECK: #pragma clang loop vectorize_width(V)20// CHECK: #pragma clang loop interleave_count(I)21// CHECK: #pragma omp loop bind(thread)22// CHECK: #pragma omp loop bind(parallel)23// CHECK: #pragma omp loop bind(teams)24 25#ifndef HEADER26#define HEADER27 28class pragma_test {29public:30 inline void run1(int *List, int Length) {31 int i = 0;32#pragma clang loop vectorize_width(4)33#pragma clang loop interleave_count(8)34#pragma clang loop unroll_count(16)35 while (i < Length) {36 List[i] = i;37 i++;38 }39 }40 41 inline void run2(int *List, int Length) {42 int i = 0;43#pragma clang loop vectorize(enable)44#pragma clang loop interleave(disable)45#pragma clang loop unroll(disable)46#pragma clang loop distribute(enable)47 while (i - 1 < Length) {48 List[i] = i;49 i++;50 }51 }52 53 inline void run3(int *List, int Length) {54 int i = 0;55#pragma clang loop vectorize(disable)56#pragma clang loop interleave(enable)57#pragma clang loop unroll(full)58#pragma clang loop distribute(disable)59 while (i - 3 < Length) {60 List[i] = i;61 i++;62 }63 }64 65 inline void run4(int *List, int Length) {66 int i = 0;67#pragma unroll68 while (i - 3 < Length) {69 List[i] = i;70 i++;71 }72 }73 74 inline void run5(int *List, int Length) {75 int i = 0;76#pragma unroll 3277 while (i - 3 < Length) {78 List[i] = i;79 i++;80 }81 }82 83 inline void run6(int *List, int Length) {84 int i = 0;85#pragma nounroll86 while (i - 3 < Length) {87 List[i] = i;88 i++;89 }90 }91 92 template <int V, int I>93 inline void run7(int *List, int Length) {94#pragma clang loop vectorize_width(V)95#pragma clang loop interleave_count(I)96 for (int i = 0; i < Length; i++) {97 List[i] = i;98 }99 }100 101 inline void run8(int *List, int Length) {102 int i = 0;103#pragma omp loop bind(thread)104 for (int i = 0; i < Length; i++) {105 List[i] = i;106 }107 }108 109 inline void run9(int *List, int Length) {110 int i = 0;111#pragma omp loop bind(parallel)112 for (int i = 0; i < Length; i++) {113 List[i] = i;114 }115 }116 117 inline void run10(int *List, int Length) {118 int i = 0;119 int j = 0;120 #pragma omp teams121 for (int i = 0; i < Length; i++) {122 #pragma omp loop bind(teams)123 for (int j = 0; j < Length; j++) {124 List[i] = i+j;125 }126 }127 }128 129};130#else131void test() {132 int List[100];133 134 pragma_test pt;135 136 pt.run1(List, 100);137 pt.run2(List, 100);138 pt.run3(List, 100);139 pt.run4(List, 100);140 pt.run5(List, 100);141 pt.run6(List, 100);142 pt.run7<2, 4>(List, 100);143 pt.run8(List, 100);144 pt.run9(List, 100);145 pt.run10(List, 100);146}147 148#endif149