Clang Project

clang_source_code/test/AST/ast-print-pragmas.cpp
1// RUN: %clang_cc1 -ast-print %s -o - | FileCheck %s
2// RUN: %clang_cc1 -DMS_EXT -fsyntax-only -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
7void 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
17// CHECK: #pragma clang loop distribute(disable)
18// CHECK-NEXT: #pragma clang loop vectorize(enable)
19// CHECK-NEXT: #pragma clang loop interleave(disable)
20
21#pragma clang loop distribute(disable)
22#pragma clang loop vectorize(enable)
23#pragma clang loop interleave(disable)
24// CHECK-NEXT: while (i - 1 < Length)
25  while (i - 1 < Length) {
26    List[i] = i * 2;
27    i++;
28  }
29
30// CHECK: #pragma clang loop distribute(enable)
31// CHECK-NEXT: #pragma clang loop vectorize(disable)
32// CHECK-NEXT: #pragma clang loop interleave(enable)
33
34#pragma clang loop distribute(enable)
35#pragma clang loop vectorize(disable)
36#pragma clang loop interleave(enable)
37// CHECK-NEXT: while (i - 2 < Length)
38  while (i - 2 < Length) {
39    List[i] = i * 2;
40    i++;
41  }
42}
43
44template <int V, int I>
45void test_nontype_template_param(int *List, int Length) {
46#pragma clang loop vectorize_width(V) interleave_count(I)
47  for (int i = 0; i < Length; i++) {
48    List[i] = i;
49  }
50}
51
52// CHECK: #pragma clang loop vectorize_width(V)
53// CHECK: #pragma clang loop interleave_count(I)
54
55void test_templates(int *List, int Length) {
56  test_nontype_template_param<2, 4>(List, Length);
57}
58
59#ifdef MS_EXT
60#pragma init_seg(compiler)
61// MS-EXT: #pragma init_seg (.CRT$XCC){{$}}
62// MS-EXT-NEXT: int x = 3 __declspec(thread);
63int __declspec(thread) x = 3;
64#endif //MS_EXT
65
66