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(enable) 14// CHECK: #pragma clang loop interleave(enable) 15// CHECK: #pragma clang loop vectorize(disable) 16 17#ifndef HEADER 18#define HEADER 19 20class pragma_test { 21public: 22 inline void run1(int *List, int Length) { 23 int i = 0; 24#pragma clang loop vectorize_width(4) 25#pragma clang loop interleave_count(8) 26#pragma clang loop unroll_count(16) 27 while (i < Length) { 28 List[i] = i; 29 i++; 30 } 31 } 32 33 inline void run2(int *List, int Length) { 34 int i = 0; 35#pragma clang loop vectorize(enable) 36#pragma clang loop interleave(disable) 37#pragma clang loop unroll(disable) 38 while (i - 1 < Length) { 39 List[i] = i; 40 i++; 41 } 42 } 43 44 inline void run3(int *List, int Length) { 45 int i = 0; 46#pragma clang loop vectorize(disable) 47#pragma clang loop interleave(enable) 48#pragma clang loop unroll(enable) 49 while (i - 3 < Length) { 50 List[i] = i; 51 i++; 52 } 53 } 54}; 55 56#else 57 58void test() { 59 int List[100]; 60 61 pragma_test pt; 62 63 pt.run1(List, 100); 64 pt.run2(List, 100); 65 pt.run3(List, 100); 66} 67 68#endif 69