xref: /aosp_15_r20/external/clang/test/Misc/ast-print-pragmas.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -ast-print %s -o - | FileCheck %s
2*67e74705SXin Li // RUN: %clang_cc1 -DMS_EXT -fsyntax-only -fms-extensions %s -triple x86_64-pc-win32 -ast-print | FileCheck %s --check-prefix=MS-EXT
3*67e74705SXin Li 
4*67e74705SXin Li // FIXME: A bug in ParsedAttributes causes the order of the attributes to be
5*67e74705SXin Li // reversed. The checks are consequently in the reverse order below.
6*67e74705SXin Li 
7*67e74705SXin Li // CHECK: #pragma clang loop interleave_count(8)
8*67e74705SXin Li // CHECK-NEXT: #pragma clang loop vectorize_width(4)
9*67e74705SXin Li 
test(int * List,int Length)10*67e74705SXin Li void test(int *List, int Length) {
11*67e74705SXin Li   int i = 0;
12*67e74705SXin Li #pragma clang loop vectorize_width(4)
13*67e74705SXin Li #pragma clang loop interleave_count(8)
14*67e74705SXin Li // CHECK-NEXT: while (i < Length)
15*67e74705SXin Li   while (i < Length) {
16*67e74705SXin Li     List[i] = i * 2;
17*67e74705SXin Li     i++;
18*67e74705SXin Li   }
19*67e74705SXin Li 
20*67e74705SXin Li // CHECK: #pragma clang loop interleave(disable)
21*67e74705SXin Li // CHECK-NEXT: #pragma clang loop vectorize(enable)
22*67e74705SXin Li // CHECK-NEXT: #pragma clang loop distribute(disable)
23*67e74705SXin Li 
24*67e74705SXin Li #pragma clang loop distribute(disable)
25*67e74705SXin Li #pragma clang loop vectorize(enable)
26*67e74705SXin Li #pragma clang loop interleave(disable)
27*67e74705SXin Li // CHECK-NEXT: while (i - 1 < Length)
28*67e74705SXin Li   while (i - 1 < Length) {
29*67e74705SXin Li     List[i] = i * 2;
30*67e74705SXin Li     i++;
31*67e74705SXin Li   }
32*67e74705SXin Li 
33*67e74705SXin Li // CHECK: #pragma clang loop interleave(enable)
34*67e74705SXin Li // CHECK-NEXT: #pragma clang loop vectorize(disable)
35*67e74705SXin Li // CHECK-NEXT: #pragma clang loop distribute(enable)
36*67e74705SXin Li 
37*67e74705SXin Li #pragma clang loop distribute(enable)
38*67e74705SXin Li #pragma clang loop vectorize(disable)
39*67e74705SXin Li #pragma clang loop interleave(enable)
40*67e74705SXin Li // CHECK-NEXT: while (i - 2 < Length)
41*67e74705SXin Li   while (i - 2 < Length) {
42*67e74705SXin Li     List[i] = i * 2;
43*67e74705SXin Li     i++;
44*67e74705SXin Li   }
45*67e74705SXin Li }
46*67e74705SXin Li 
47*67e74705SXin Li template <int V, int I>
test_nontype_template_param(int * List,int Length)48*67e74705SXin Li void test_nontype_template_param(int *List, int Length) {
49*67e74705SXin Li #pragma clang loop vectorize_width(V) interleave_count(I)
50*67e74705SXin Li   for (int i = 0; i < Length; i++) {
51*67e74705SXin Li     List[i] = i;
52*67e74705SXin Li   }
53*67e74705SXin Li }
54*67e74705SXin Li 
55*67e74705SXin Li // CHECK: #pragma clang loop interleave_count(I)
56*67e74705SXin Li // CHECK: #pragma clang loop vectorize_width(V)
57*67e74705SXin Li 
test_templates(int * List,int Length)58*67e74705SXin Li void test_templates(int *List, int Length) {
59*67e74705SXin Li   test_nontype_template_param<2, 4>(List, Length);
60*67e74705SXin Li }
61*67e74705SXin Li 
62*67e74705SXin Li #ifdef MS_EXT
63*67e74705SXin Li #pragma init_seg(compiler)
64*67e74705SXin Li // MS-EXT: #pragma init_seg (.CRT$XCC)
65*67e74705SXin Li // MS-EXT-NEXT: int x = 3 __declspec(thread);
66*67e74705SXin Li int __declspec(thread) x = 3;
67*67e74705SXin Li #endif //MS_EXT
68*67e74705SXin Li 
69