blob: 7bd0b48d6e7732319f224591ec6b2aa640dfac6a [file] [log] [blame]
Tyler Nowickie8b07ed2014-06-13 17:57:25 +00001// RUN: %clang_cc1 -ast-print %s -o - | FileCheck %s
Alexey Bataev6d455322015-10-12 06:59:48 +00002// RUN: %clang_cc1 -DMS_EXT -fsyntax-only -fms-extensions %s -triple x86_64-pc-win32 -ast-print | FileCheck %s --check-prefix=MS-EXT
Tyler Nowickie8b07ed2014-06-13 17:57:25 +00003
Michael Krusedc5ce722018-08-03 01:21:16 +00004// CHECK: #pragma clang loop vectorize_width(4)
5// CHECK-NEXT: #pragma clang loop interleave_count(8){{$}}
Tyler Nowickie8b07ed2014-06-13 17:57:25 +00006
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
Michael Krusedc5ce722018-08-03 01:21:16 +000017// CHECK: #pragma clang loop distribute(disable)
Tyler Nowickie8b07ed2014-06-13 17:57:25 +000018// CHECK-NEXT: #pragma clang loop vectorize(enable)
Michael Krusedc5ce722018-08-03 01:21:16 +000019// CHECK-NEXT: #pragma clang loop interleave(disable)
Sjoerd Meijera48f58c2019-07-25 07:33:13 +000020// CHECK-NEXT: #pragma clang loop vectorize_predicate(disable)
Tyler Nowickie8b07ed2014-06-13 17:57:25 +000021
Adam Nemet2de463e2016-06-14 12:04:26 +000022#pragma clang loop distribute(disable)
Tyler Nowickie8b07ed2014-06-13 17:57:25 +000023#pragma clang loop vectorize(enable)
24#pragma clang loop interleave(disable)
Sjoerd Meijera48f58c2019-07-25 07:33:13 +000025#pragma clang loop vectorize_predicate(disable)
Tyler Nowickie8b07ed2014-06-13 17:57:25 +000026// CHECK-NEXT: while (i - 1 < Length)
27 while (i - 1 < Length) {
28 List[i] = i * 2;
29 i++;
30 }
31
Michael Krusedc5ce722018-08-03 01:21:16 +000032// CHECK: #pragma clang loop distribute(enable)
Tyler Nowickie8b07ed2014-06-13 17:57:25 +000033// CHECK-NEXT: #pragma clang loop vectorize(disable)
Michael Krusedc5ce722018-08-03 01:21:16 +000034// CHECK-NEXT: #pragma clang loop interleave(enable)
Sjoerd Meijera48f58c2019-07-25 07:33:13 +000035// CHECK-NEXT: #pragma clang loop vectorize_predicate(enable)
Tyler Nowickie8b07ed2014-06-13 17:57:25 +000036
Adam Nemet2de463e2016-06-14 12:04:26 +000037#pragma clang loop distribute(enable)
Tyler Nowickie8b07ed2014-06-13 17:57:25 +000038#pragma clang loop vectorize(disable)
39#pragma clang loop interleave(enable)
Sjoerd Meijera48f58c2019-07-25 07:33:13 +000040#pragma clang loop vectorize_predicate(enable)
Tyler Nowickie8b07ed2014-06-13 17:57:25 +000041// CHECK-NEXT: while (i - 2 < Length)
42 while (i - 2 < Length) {
43 List[i] = i * 2;
44 i++;
45 }
46}
Tyler Nowickic724a83e2014-10-12 20:46:07 +000047
48template <int V, int I>
49void test_nontype_template_param(int *List, int Length) {
50#pragma clang loop vectorize_width(V) interleave_count(I)
51 for (int i = 0; i < Length; i++) {
52 List[i] = i;
53 }
54}
55
Michael Kruse41dd6ce2018-06-25 20:06:13 +000056// CHECK: #pragma clang loop vectorize_width(V)
Michael Krusedc5ce722018-08-03 01:21:16 +000057// CHECK: #pragma clang loop interleave_count(I)
Tyler Nowickic724a83e2014-10-12 20:46:07 +000058
59void test_templates(int *List, int Length) {
60 test_nontype_template_param<2, 4>(List, Length);
61}
Alexey Bataev6d455322015-10-12 06:59:48 +000062
63#ifdef MS_EXT
64#pragma init_seg(compiler)
Alexey Bataevcbecfdf2018-02-14 17:38:47 +000065// MS-EXT: #pragma init_seg (.CRT$XCC){{$}}
Alexey Bataev6d455322015-10-12 06:59:48 +000066// MS-EXT-NEXT: int x = 3 __declspec(thread);
67int __declspec(thread) x = 3;
68#endif //MS_EXT
69