1// RUN: %clang_cc1 -emit-pch -o %t.a %s 2// RUN: %clang_cc1 -include-pch %t.a %s -ast-print -o - | FileCheck %s 3 4// FIXME: A bug in ParsedAttributes causes the order of the attributes to be 5// reversed. The checks are consequently in the reverse order below. 6 7// CHECK: #pragma clang loop unroll_count(16) 8// CHECK: #pragma clang loop interleave_count(8) 9// CHECK: #pragma clang loop vectorize_width(4) 10// CHECK: #pragma clang loop unroll(disable) 11// CHECK: #pragma clang loop interleave(disable) 12// CHECK: #pragma clang loop vectorize(enable) 13// CHECK: #pragma clang loop unroll(full) 14// CHECK: #pragma clang loop interleave(enable) 15// CHECK: #pragma clang loop vectorize(disable) 16// CHECK: #pragma unroll 17// CHECK: #pragma unroll (32) 18// CHECK: #pragma nounroll 19// CHECK: #pragma clang loop interleave_count(I) 20// CHECK: #pragma clang loop vectorize_width(V) 21 22#ifndef HEADER 23#define HEADER 24 25class pragma_test { 26public: 27 inline void run1(int *List, int Length) { 28 int i = 0; 29#pragma clang loop vectorize_width(4) 30#pragma clang loop interleave_count(8) 31#pragma clang loop unroll_count(16) 32 while (i < Length) { 33 List[i] = i; 34 i++; 35 } 36 } 37 38 inline void run2(int *List, int Length) { 39 int i = 0; 40#pragma clang loop vectorize(enable) 41#pragma clang loop interleave(disable) 42#pragma clang loop unroll(disable) 43 while (i - 1 < Length) { 44 List[i] = i; 45 i++; 46 } 47 } 48 49 inline void run3(int *List, int Length) { 50 int i = 0; 51#pragma clang loop vectorize(disable) 52#pragma clang loop interleave(enable) 53#pragma clang loop unroll(full) 54 while (i - 3 < Length) { 55 List[i] = i; 56 i++; 57 } 58 } 59 60 inline void run4(int *List, int Length) { 61 int i = 0; 62#pragma unroll 63 while (i - 3 < Length) { 64 List[i] = i; 65 i++; 66 } 67 } 68 69 inline void run5(int *List, int Length) { 70 int i = 0; 71#pragma unroll 32 72 while (i - 3 < Length) { 73 List[i] = i; 74 i++; 75 } 76 } 77 78 inline void run6(int *List, int Length) { 79 int i = 0; 80#pragma nounroll 81 while (i - 3 < Length) { 82 List[i] = i; 83 i++; 84 } 85 } 86 87 template <int V, int I> 88 inline void run7(int *List, int Length) { 89#pragma clang loop vectorize_width(V) 90#pragma clang loop interleave_count(I) 91 for (int i = 0; i < Length; i++) { 92 List[i] = i; 93 } 94 } 95}; 96#else 97 98void test() { 99 int List[100]; 100 101 pragma_test pt; 102 103 pt.run1(List, 100); 104 pt.run2(List, 100); 105 pt.run3(List, 100); 106 pt.run4(List, 100); 107 pt.run5(List, 100); 108 pt.run6(List, 100); 109 pt.run7<2, 4>(List, 100); 110} 111 112#endif 113