brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.6 KiB · db4acbb Raw
150 lines · cpp
1// Check no warnings/errors2// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp -fsyntax-only -verify %s3// expected-no-diagnostics4 5// Check AST and unparsing6// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp -ast-dump  %s | FileCheck %s --check-prefix=DUMP7// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp -ast-print %s | FileCheck %s --check-prefix=PRINT --match-full-lines8 9// Check same results after serialization round-trip10// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp -emit-pch -o %t %s11// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp -include-pch %t -ast-dump-all %s | FileCheck %s --check-prefix=DUMP12// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp -include-pch %t -ast-print    %s | FileCheck %s --check-prefix=PRINT --match-full-lines13 14#ifndef HEADER15#define HEADER16 17// placeholder for loop body code.18void body(...);19 20 21// PRINT-LABEL: void func_unroll() {22// DUMP-LABEL:  FunctionDecl {{.*}} func_unroll23void func_unroll() {24  // PRINT:  #pragma omp unroll25  // DUMP:   OMPUnrollDirective26  #pragma omp unroll27  // PRINT-NEXT: for (int i = 7; i < 17; i += 3)28  // DUMP-NEXT: ForStmt29  for (int i = 7; i < 17; i += 3)30    // PRINT-NEXT: body(i);31    // DUMP: CallExpr32    body(i);33}34 35 36// PRINT-LABEL: void func_unroll_full() {37// DUMP-LABEL:  FunctionDecl {{.*}} func_unroll_full 38void func_unroll_full() {39  // PRINT:     #pragma omp unroll full40  // DUMP:      OMPUnrollDirective41  // DUMP-NEXT:   OMPFullClause42  #pragma omp unroll full43  // PRINT-NEXT: for (int i = 7; i < 17; i += 3)44  // DUMP-NEXT: ForStmt45  for (int i = 7; i < 17; i += 3)46    // PRINT-NEXT: body(i);47    // DUMP: CallExpr48    body(i);49}50 51 52// PRINT-LABEL: void func_unroll_partial() {53// DUMP-LABEL:  FunctionDecl {{.*}} func_unroll_partial 54void func_unroll_partial() {55  // PRINT:     #pragma omp unroll partial56  // DUMP:      OMPUnrollDirective57  // DUMP-NEXT:   OMPPartialClause58  // DUMP-NEXT:     <<<NULL>>>59  #pragma omp unroll partial60  // PRINT-NEXT: for (int i = 7; i < 17; i += 3)61  // DUMP-NEXT: ForStmt62  for (int i = 7; i < 17; i += 3)63    // PRINT: body(i);64    // DUMP: CallExpr65    body(i);66}67 68 69// PRINT-LABEL: void func_unroll_partial_factor() {70// DUMP-LABEL:  FunctionDecl {{.*}} func_unroll_partial_factor 71void func_unroll_partial_factor() {72  // PRINT:     #pragma omp unroll partial(4)73  // DUMP:      OMPUnrollDirective74  // DUMP-NEXT:   OMPPartialClause75  // DUMP-NEXT:     ConstantExpr76  // DUMP-NEXT:       value: Int 477  // DUMP-NEXT:       IntegerLiteral {{.*}} 478  #pragma omp unroll partial(4)79  // PRINT-NEXT: for (int i = 7; i < 17; i += 3)80  // DUMP-NEXT: ForStmt81  for (int i = 7; i < 17; i += 3)82    // PRINT-NEXT: body(i);83    // DUMP: CallExpr84    body(i);85}86 87 88// PRINT-LABEL: void func_unroll_partial_factor_for() {89// DUMP-LABEL:  FunctionDecl {{.*}} func_unroll_partial_factor_for 90void func_unroll_partial_factor_for() {91  // PRINT:     #pragma omp for92  // DUMP:      OMPForDirective93  #pragma omp for94  // PRINT:       #pragma omp unroll partial(2)95  // DUMP:        OMPUnrollDirective96  // DUMP-NEXT:     OMPPartialClause97  #pragma omp unroll partial(2)98  // PRINT-NEXT: for (int i = 7; i < 17; i += 3)99  // DUMP: ForStmt100  for (int i = 7; i < 17; i += 3)101    // PRINT-NEXT: body(i);102    // DUMP: CallExpr103    body(i);104}105 106 107// PRINT-LABEL: template <typename T, T Start, T End, T Step, int Factor> void unroll_templated() {108// DUMP-LABEL:  FunctionTemplateDecl {{.*}} unroll_templated109template<typename T, T Start, T End, T Step, int Factor>110void unroll_templated() {111  // PRINT: #pragma omp unroll partial(Factor)112  // DUMP:      OMPUnrollDirective113  // DUMP-NEXT: OMPPartialClause114  // DUMP-NEXT:   DeclRefExpr {{.*}} 'Factor' 'int'115  #pragma omp unroll partial(Factor)116    // PRINT-NEXT: for (T i = Start; i < End; i += Step)117    // DUMP-NEXT:  ForStmt118    for (T i = Start; i < End; i += Step)119      // PRINT-NEXT: body(i);120      // DUMP:  CallExpr121      body(i);122}123void unroll_template() {124  unroll_templated<int,0,1024,1,4>();125}126 127 128// PRINT-LABEL: template <int Factor> void unroll_templated_factor(int start, int stop, int step) {129// DUMP-LABEL:  FunctionTemplateDecl {{.*}} unroll_templated_factor130template <int Factor>131void unroll_templated_factor(int start, int stop, int step) {132  // PRINT: #pragma omp unroll partial(Factor)133  // DUMP:      OMPUnrollDirective134  // DUMP-NEXT: OMPPartialClause135  // DUMP-NEXT:   DeclRefExpr {{.*}} 'Factor' 'int'136  #pragma omp unroll partial(Factor)137    // PRINT-NEXT: for (int i = start; i < stop; i += step)138    // DUMP-NEXT:  ForStmt139    for (int i = start; i < stop; i += step)140      // PRINT-NEXT: body(i);141      // DUMP:  CallExpr142      body(i);143}144void unroll_template_factor() {145  unroll_templated_factor<4>(0, 42, 2);146}147 148 149#endif150