1c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// RUN: %clang_cc1 -std=c++11 -verify %s 2c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 3c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// Note that this puts the expected lines before the directives to work around 4c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// limitations in the -verify mode. 5c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 6176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <int V, int I> 7176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid test_nontype_template_param(int *List, int Length) { 8176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma clang loop vectorize_width(V) interleave_count(I) 9176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines for (int i = 0; i < Length; i++) { 10176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 11176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 12176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 13176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma clang loop vectorize_width(V + 4) interleave_count(I + 4) 14176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines for (int i = 0; i < Length; i++) { 15176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 16176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 17176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 18176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 19176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <int V> 20176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid test_nontype_template_vectorize(int *List, int Length) { 21176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines /* expected-error {{invalid value '-1'; must be positive}} */ #pragma clang loop vectorize_width(V) 22176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines for (int i = 0; i < Length; i++) { 23176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 24176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 25176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 26176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines /* expected-error {{invalid value '0'; must be positive}} */ #pragma clang loop vectorize_width(V / 2) 27176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines for (int i = 0; i < Length; i++) { 28176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] += i; 29176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 30176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 31176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 32176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <int I> 33176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid test_nontype_template_interleave(int *List, int Length) { 34176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines /* expected-error {{invalid value '-1'; must be positive}} */ #pragma clang loop interleave_count(I) 35176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines for (int i = 0; i < Length; i++) { 36176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 37176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 38176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 39176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines /* expected-error {{invalid value '0'; must be positive}} */ #pragma clang loop interleave_count(2 % I) 40176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines for (int i = 0; i < Length; i++) { 41176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 42176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 43176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 44176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 45176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <char V> 46176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid test_nontype_template_char(int *List, int Length) { 47176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines /* expected-error {{invalid argument of type 'char'; expected an integer type}} */ #pragma clang loop vectorize_width(V) 48176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines for (int i = 0; i < Length; i++) { 49176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 50176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 51176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 52176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 53176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <bool V> 54176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid test_nontype_template_bool(int *List, int Length) { 55176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines /* expected-error {{invalid argument of type 'bool'; expected an integer type}} */ #pragma clang loop vectorize_width(V) 56176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines for (int i = 0; i < Length; i++) { 57176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 58176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 59176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 60176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 61176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <int V, int I> 62176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid test_nontype_template_badarg(int *List, int Length) { 63176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines /* expected-error {{use of undeclared identifier 'Vec'}} */ #pragma clang loop vectorize_width(Vec) interleave_count(I) 64176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines /* expected-error {{use of undeclared identifier 'Int'}} */ #pragma clang loop vectorize_width(V) interleave_count(Int) 65176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines for (int i = 0; i < Length; i++) { 66176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 67176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 68176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 69176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 70176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <typename T> 71176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid test_type_template_vectorize(int *List, int Length) { 72176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines const T Value = -1; 73176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines /* expected-error {{invalid value '-1'; must be positive}} */ #pragma clang loop vectorize_width(Value) 74176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines for (int i = 0; i < Length; i++) { 75176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 76176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 77176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 78176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 79c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesvoid test(int *List, int Length) { 80c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int i = 0; 81c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 82c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop vectorize(enable) 83c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop interleave(enable) 84176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma clang loop unroll(full) 85c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines while (i + 1 < Length) { 86c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines List[i] = i; 87c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 88c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 89c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop vectorize_width(4) 90c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop interleave_count(8) 91c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop unroll_count(16) 92c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines while (i < Length) { 93c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines List[i] = i; 94c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 95c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 96c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop vectorize(disable) 97c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop interleave(disable) 98c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop unroll(disable) 99c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines while (i - 1 < Length) { 100c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines List[i] = i; 101c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 102c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 103c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop vectorize_width(4) interleave_count(8) unroll_count(16) 104c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines while (i - 2 < Length) { 105c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines List[i] = i; 106c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 107c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 108c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop interleave_count(16) 109c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines while (i - 3 < Length) { 110c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines List[i] = i; 111c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 112c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 113c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int VList[Length]; 114c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop vectorize(disable) interleave(disable) unroll(disable) 115c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int j : VList) { 116c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines VList[j] = List[j]; 117c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 118c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 119176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines test_nontype_template_param<4, 8>(List, Length); 120176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 121c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{expected '('}} */ #pragma clang loop vectorize 122c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{expected '('}} */ #pragma clang loop interleave 123c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{expected '('}} */ #pragma clang loop unroll 124c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 125c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{expected ')'}} */ #pragma clang loop vectorize(enable 126c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{expected ')'}} */ #pragma clang loop interleave(enable 127176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{expected ')'}} */ #pragma clang loop unroll(full 128c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 129c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{expected ')'}} */ #pragma clang loop vectorize_width(4 130c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{expected ')'}} */ #pragma clang loop interleave_count(4 131c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{expected ')'}} */ #pragma clang loop unroll_count(4 132c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 133176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{missing argument; expected 'enable' or 'disable'}} */ #pragma clang loop vectorize() 134176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{missing argument; expected an integer value}} */ #pragma clang loop interleave_count() 135176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{missing argument; expected 'enable' or 'disable'}} */ #pragma clang loop unroll() 136c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 137176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{missing option; expected vectorize, vectorize_width, interleave, interleave_count, unroll, or unroll_count}} */ #pragma clang loop 138c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{invalid option 'badkeyword'}} */ #pragma clang loop badkeyword 139c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{invalid option 'badkeyword'}} */ #pragma clang loop badkeyword(enable) 140c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{invalid option 'badkeyword'}} */ #pragma clang loop vectorize(enable) badkeyword(4) 141c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-warning {{extra tokens at end of '#pragma clang loop'}} */ #pragma clang loop vectorize(enable) , 142c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines while (i-4 < Length) { 143c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines List[i] = i; 144c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 145c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 146176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{invalid value '0'; must be positive}} */ #pragma clang loop vectorize_width(0) 147176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{invalid value '0'; must be positive}} */ #pragma clang loop interleave_count(0) 148176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{invalid value '0'; must be positive}} */ #pragma clang loop unroll_count(0) 149176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 150176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{expression is not an integral constant expression}} expected-note {{division by zero}} */ #pragma clang loop vectorize_width(10 / 0) 151176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{invalid value '0'; must be positive}} */ #pragma clang loop interleave_count(10 / 5 - 2) 152c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines while (i-5 < Length) { 153c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines List[i] = i; 154c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 155c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 156176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestest_nontype_template_vectorize<4>(List, Length); 157176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-note {{in instantiation of function template specialization}} */ test_nontype_template_vectorize<-1>(List, Length); 158176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestest_nontype_template_interleave<8>(List, Length); 159176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-note {{in instantiation of function template specialization}} */ test_nontype_template_interleave<-1>(List, Length); 160176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 161176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-note {{in instantiation of function template specialization}} */ test_nontype_template_char<'A'>(List, Length); // Loop hint arg cannot be a char. 162176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-note {{in instantiation of function template specialization}} */ test_nontype_template_bool<true>(List, Length); // Or a bool. 163176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-note {{in instantiation of function template specialization}} */ test_type_template_vectorize<int>(List, Length); // Or a template type. 164176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 165176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{value '3000000000' is too large}} */ #pragma clang loop vectorize_width(3000000000) 166176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{value '3000000000' is too large}} */ #pragma clang loop interleave_count(3000000000) 167176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{value '3000000000' is too large}} */ #pragma clang loop unroll_count(3000000000) 168c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines while (i-6 < Length) { 169c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines List[i] = i; 170c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 171c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 172176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-warning {{extra tokens at end of '#pragma clang loop'}} */ #pragma clang loop vectorize_width(1 +) 1 173176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-warning {{extra tokens at end of '#pragma clang loop'}} */ #pragma clang loop vectorize_width(1) +1 174176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesconst int VV = 4; 175176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{expected expression}} */ #pragma clang loop vectorize_width(VV +/ 2) 176176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{use of undeclared identifier 'undefined'}} */ #pragma clang loop vectorize_width(VV+undefined) 177176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{expected ')'}} */ #pragma clang loop vectorize_width(1+(^*/2 * () 178176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-warning {{extra tokens at end of '#pragma clang loop' - ignored}} */ #pragma clang loop vectorize_width(1+(-0[0])))))) 179176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 180176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{use of undeclared identifier 'badvalue'}} */ #pragma clang loop vectorize_width(badvalue) 181176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{use of undeclared identifier 'badvalue'}} */ #pragma clang loop interleave_count(badvalue) 182176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{use of undeclared identifier 'badvalue'}} */ #pragma clang loop unroll_count(badvalue) 183c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines while (i-6 < Length) { 184c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines List[i] = i; 185c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 186c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 187c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{invalid argument; expected 'enable' or 'disable'}} */ #pragma clang loop vectorize(badidentifier) 188c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{invalid argument; expected 'enable' or 'disable'}} */ #pragma clang loop interleave(badidentifier) 189176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{invalid argument; expected 'full' or 'disable'}} */ #pragma clang loop unroll(badidentifier) 190c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines while (i-7 < Length) { 191c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines List[i] = i; 192c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 193c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 194c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// PR20069 - Loop pragma arguments that are not identifiers or numeric 195c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// constants crash FE. 196176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{expected ')'}} */ #pragma clang loop vectorize(() 197c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{invalid argument; expected 'enable' or 'disable'}} */ #pragma clang loop interleave(*) 198176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{invalid argument; expected 'full' or 'disable'}} */ #pragma clang loop unroll(=) 199176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{type name requires a specifier or qualifier}} expected-error {{expected expression}} */ #pragma clang loop vectorize_width(^) 200176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{expected expression}} expected-error {{expected expression}} */ #pragma clang loop interleave_count(/) 201176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{expected expression}} expected-error {{expected expression}} */ #pragma clang loop unroll_count(==) 202c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines while (i-8 < Length) { 203c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines List[i] = i; 204c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 205c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 206c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop vectorize(enable) 207176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{expected a for, while, or do-while loop to follow '#pragma clang loop'}} */ int j = Length; 208c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines List[0] = List[1]; 209c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 210c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines while (j-1 < Length) { 211c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines List[j] = j; 212c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 213c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 214c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// FIXME: A bug in ParsedAttributes causes the order of the attributes to be 215c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// processed in reverse. Consequently, the errors occur on the first of pragma 216c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// of the next three tests rather than the last, and the order of the kinds 217c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// is also reversed. 218c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 219c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{incompatible directives 'vectorize(disable)' and 'vectorize_width(4)'}} */ #pragma clang loop vectorize_width(4) 220c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop vectorize(disable) 221c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{incompatible directives 'interleave(disable)' and 'interleave_count(4)'}} */ #pragma clang loop interleave_count(4) 222c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop interleave(disable) 223c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{incompatible directives 'unroll(disable)' and 'unroll_count(4)'}} */ #pragma clang loop unroll_count(4) 224c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop unroll(disable) 225c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines while (i-8 < Length) { 226c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines List[i] = i; 227c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 228c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 229c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{duplicate directives 'vectorize(disable)' and 'vectorize(enable)'}} */ #pragma clang loop vectorize(enable) 230c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop vectorize(disable) 231c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{duplicate directives 'interleave(disable)' and 'interleave(enable)'}} */ #pragma clang loop interleave(enable) 232c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop interleave(disable) 233176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{duplicate directives 'unroll(disable)' and 'unroll(full)'}} */ #pragma clang loop unroll(full) 234c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop unroll(disable) 235c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines while (i-9 < Length) { 236c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines List[i] = i; 237c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 238c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 239c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{incompatible directives 'vectorize(disable)' and 'vectorize_width(4)'}} */ #pragma clang loop vectorize(disable) 240c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop vectorize_width(4) 241c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{incompatible directives 'interleave(disable)' and 'interleave_count(4)'}} */ #pragma clang loop interleave(disable) 242c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop interleave_count(4) 243c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{incompatible directives 'unroll(disable)' and 'unroll_count(4)'}} */ #pragma clang loop unroll(disable) 244c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop unroll_count(4) 245c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines while (i-10 < Length) { 246c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines List[i] = i; 247c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 248c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 249c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{duplicate directives 'vectorize_width(4)' and 'vectorize_width(8)'}} */ #pragma clang loop vectorize_width(8) 250c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop vectorize_width(4) 251c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{duplicate directives 'interleave_count(4)' and 'interleave_count(8)'}} */ #pragma clang loop interleave_count(8) 252c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop interleave_count(4) 253c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{duplicate directives 'unroll_count(4)' and 'unroll_count(8)'}} */ #pragma clang loop unroll_count(8) 254c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop unroll_count(4) 255c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines while (i-11 < Length) { 256c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines List[i] = i; 257c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 258c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 259176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 260176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines/* expected-error {{incompatible directives 'unroll(full)' and 'unroll_count(4)'}} */ #pragma clang loop unroll(full) 261176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma clang loop unroll_count(4) 262176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines while (i-11 < Length) { 263176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines List[i] = i; 264176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines } 265176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 266c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma clang loop interleave(enable) 267c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines/* expected-error {{expected statement}} */ } 268