xref: /llvm-project/clang/test/AST/ast-print-pragmas.cpp (revision 7c1d9b15eee3a34678addab2bab66f3020ac0753)
1 // RUN: %clang_cc1 -ast-print %s -o - | FileCheck %s
2 // RUN: %clang_cc1 -DMS_EXT -fms-extensions %s -triple x86_64-pc-win32 -ast-print | FileCheck %s --check-prefix=MS-EXT
3 
4 // CHECK: #pragma clang loop vectorize_width(4)
5 // CHECK-NEXT: #pragma clang loop interleave_count(8){{$}}
6 
test(int * List,int Length)7 void test(int *List, int Length) {
8   int i = 0;
9 #pragma clang loop vectorize_width(4)
10 #pragma clang loop interleave_count(8)
11 // CHECK-NEXT: while (i < Length)
12   while (i < Length) {
13     List[i] = i * 2;
14     i++;
15   }
16   i = 0;
17 
18 // CHECK: #pragma clang loop vectorize_width(4, scalable)
19 
20 #pragma clang loop vectorize_width(4, scalable)
21 // CHECK-NEXT: while (i < Length)
22   while (i < Length) {
23     List[i] = i * 2;
24     i++;
25   }
26   i = 0;
27 
28 // CHECK: #pragma clang loop vectorize_width(fixed)
29 
30 #pragma clang loop vectorize_width(fixed)
31 // CHECK-NEXT: while (i < Length)
32   while (i < Length) {
33     List[i] = i * 2;
34     i++;
35   }
36   i = 0;
37 
38 // CHECK: #pragma clang loop vectorize_width(scalable)
39 
40 #pragma clang loop vectorize_width(scalable)
41 // CHECK-NEXT: while (i < Length)
42   while (i < Length) {
43     List[i] = i * 2;
44     i++;
45   }
46 
47 // CHECK: #pragma clang loop distribute(disable)
48 // CHECK-NEXT: #pragma clang loop vectorize(enable)
49 // CHECK-NEXT: #pragma clang loop interleave(disable)
50 // CHECK-NEXT: #pragma clang loop vectorize_predicate(disable)
51 
52 #pragma clang loop distribute(disable)
53 #pragma clang loop vectorize(enable)
54 #pragma clang loop interleave(disable)
55 #pragma clang loop vectorize_predicate(disable)
56 // CHECK-NEXT: while (i - 1 < Length)
57   while (i - 1 < Length) {
58     List[i] = i * 2;
59     i++;
60   }
61 
62 // CHECK: #pragma clang loop distribute(enable)
63 // CHECK-NEXT: #pragma clang loop vectorize(disable)
64 // CHECK-NEXT: #pragma clang loop interleave(enable)
65 // CHECK-NEXT: #pragma clang loop vectorize_predicate(enable)
66 
67 #pragma clang loop distribute(enable)
68 #pragma clang loop vectorize(disable)
69 #pragma clang loop interleave(enable)
70 #pragma clang loop vectorize_predicate(enable)
71 // CHECK-NEXT: while (i - 2 < Length)
72   while (i - 2 < Length) {
73     List[i] = i * 2;
74     i++;
75   }
76 }
77 
78 template <int V, int I>
test_nontype_template_param(int * List,int Length)79 void test_nontype_template_param(int *List, int Length) {
80 #pragma clang loop vectorize_width(V) interleave_count(I)
81   for (int i = 0; i < Length; i++) {
82     List[i] = i;
83   }
84 }
85 
86 // CHECK: #pragma clang loop vectorize_width(V)
87 // CHECK: #pragma clang loop interleave_count(I)
88 
test_templates(int * List,int Length)89 void test_templates(int *List, int Length) {
90   test_nontype_template_param<2, 4>(List, Length);
91 }
92 
93 #ifdef MS_EXT
94 #pragma init_seg(compiler)
95 // MS-EXT: #pragma init_seg (.CRT$XCC){{$}}
96 // MS-EXT-NEXT: __declspec(thread) int x = 3;
97 __declspec(thread) int x = 3;
98 #endif //MS_EXT
99 
100