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 Livoid 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 Livoid 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 Livoid 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