blob: 670830d912a7a28c0c45561773da497ab813aa71 [file] [log] [blame]
Reid Kleckner4173f6a2014-06-10 21:35:24 +00001// 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
Eli Bendersky86483b32014-06-11 17:56:26 +00007// CHECK: #pragma clang loop unroll_count(16)
Reid Kleckner4173f6a2014-06-10 21:35:24 +00008// CHECK: #pragma clang loop interleave_count(8)
9// CHECK: #pragma clang loop vectorize_width(4)
Eli Bendersky86483b32014-06-11 17:56:26 +000010// CHECK: #pragma clang loop unroll(disable)
Reid Kleckner4173f6a2014-06-10 21:35:24 +000011// CHECK: #pragma clang loop interleave(disable)
12// CHECK: #pragma clang loop vectorize(enable)
Mark Heffernan450c2382014-07-23 17:31:31 +000013// CHECK: #pragma clang loop unroll(full)
Reid Kleckner4173f6a2014-06-10 21:35:24 +000014// CHECK: #pragma clang loop interleave(enable)
15// CHECK: #pragma clang loop vectorize(disable)
Mark Heffernanbd26f5e2014-07-21 18:08:34 +000016// CHECK: #pragma unroll
17// CHECK: #pragma unroll (32)
Reid Kleckner4173f6a2014-06-10 21:35:24 +000018
19#ifndef HEADER
20#define HEADER
21
22class pragma_test {
23public:
24 inline void run1(int *List, int Length) {
25 int i = 0;
26#pragma clang loop vectorize_width(4)
27#pragma clang loop interleave_count(8)
Eli Bendersky86483b32014-06-11 17:56:26 +000028#pragma clang loop unroll_count(16)
Reid Kleckner4173f6a2014-06-10 21:35:24 +000029 while (i < Length) {
30 List[i] = i;
31 i++;
32 }
33 }
34
35 inline void run2(int *List, int Length) {
36 int i = 0;
37#pragma clang loop vectorize(enable)
38#pragma clang loop interleave(disable)
Eli Bendersky86483b32014-06-11 17:56:26 +000039#pragma clang loop unroll(disable)
Reid Kleckner4173f6a2014-06-10 21:35:24 +000040 while (i - 1 < Length) {
41 List[i] = i;
42 i++;
43 }
44 }
45
46 inline void run3(int *List, int Length) {
47 int i = 0;
48#pragma clang loop vectorize(disable)
49#pragma clang loop interleave(enable)
Mark Heffernan450c2382014-07-23 17:31:31 +000050#pragma clang loop unroll(full)
Reid Kleckner4173f6a2014-06-10 21:35:24 +000051 while (i - 3 < Length) {
52 List[i] = i;
53 i++;
54 }
55 }
Mark Heffernanbd26f5e2014-07-21 18:08:34 +000056
57 inline void run4(int *List, int Length) {
58 int i = 0;
59#pragma unroll
60 while (i - 3 < Length) {
61 List[i] = i;
62 i++;
63 }
64 }
65
66 inline void run5(int *List, int Length) {
67 int i = 0;
68#pragma unroll 32
69 while (i - 3 < Length) {
70 List[i] = i;
71 i++;
72 }
73 }
Reid Kleckner4173f6a2014-06-10 21:35:24 +000074};
75
76#else
77
78void test() {
79 int List[100];
80
81 pragma_test pt;
82
83 pt.run1(List, 100);
84 pt.run2(List, 100);
85 pt.run3(List, 100);
Mark Heffernanbd26f5e2014-07-21 18:08:34 +000086 pt.run4(List, 100);
87 pt.run5(List, 100);
Reid Kleckner4173f6a2014-06-10 21:35:24 +000088}
89
90#endif