Aaron Ballman | b06b15a | 2014-06-06 12:40:24 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -std=c++11 -verify %s
|
| 2 |
|
| 3 | // Note that this puts the expected lines before the directives to work around
|
| 4 | // limitations in the -verify mode.
|
| 5 |
|
| 6 | void test(int *List, int Length) {
|
| 7 | int i = 0;
|
| 8 |
|
| 9 | #pragma clang loop vectorize(enable)
|
| 10 | #pragma clang loop interleave(enable)
|
| 11 | while (i + 1 < Length) {
|
| 12 | List[i] = i;
|
| 13 | }
|
| 14 |
|
| 15 | #pragma clang loop vectorize_width(4)
|
| 16 | #pragma clang loop interleave_count(8)
|
| 17 | while (i < Length) {
|
| 18 | List[i] = i;
|
| 19 | }
|
| 20 |
|
| 21 | #pragma clang loop vectorize(disable)
|
| 22 | #pragma clang loop interleave(disable)
|
| 23 | while (i - 1 < Length) {
|
| 24 | List[i] = i;
|
| 25 | }
|
| 26 |
|
| 27 | #pragma clang loop vectorize_width(4) interleave_count(8)
|
| 28 | while (i - 2 < Length) {
|
| 29 | List[i] = i;
|
| 30 | }
|
| 31 |
|
| 32 | #pragma clang loop interleave_count(16)
|
| 33 | while (i - 3 < Length) {
|
| 34 | List[i] = i;
|
| 35 | }
|
| 36 |
|
| 37 | int VList[Length];
|
| 38 | #pragma clang loop vectorize(disable) interleave(disable)
|
| 39 | for (int j : VList) {
|
| 40 | VList[j] = List[j];
|
| 41 | }
|
| 42 |
|
| 43 | /* expected-error {{expected '('}} */ #pragma clang loop vectorize
|
| 44 | /* expected-error {{expected '('}} */ #pragma clang loop interleave
|
| 45 |
|
| 46 | /* expected-error {{expected ')'}} */ #pragma clang loop vectorize(enable
|
| 47 | /* expected-error {{expected ')'}} */ #pragma clang loop interleave(enable
|
| 48 |
|
| 49 | /* expected-error {{expected ')'}} */ #pragma clang loop vectorize_width(4
|
| 50 | /* expected-error {{expected ')'}} */ #pragma clang loop interleave_count(4
|
| 51 |
|
| 52 | /* expected-error {{missing option}} */ #pragma clang loop
|
| 53 | /* expected-error {{invalid option 'badkeyword'}} */ #pragma clang loop badkeyword
|
| 54 | /* expected-error {{invalid option 'badkeyword'}} */ #pragma clang loop badkeyword(enable)
|
| 55 | /* expected-error {{invalid option 'badkeyword'}} */ #pragma clang loop vectorize(enable) badkeyword(4)
|
| 56 | /* expected-warning {{extra tokens at end of '#pragma clang loop'}} */ #pragma clang loop vectorize(enable) ,
|
| 57 |
|
| 58 | while (i-4 < Length) {
|
| 59 | List[i] = i;
|
| 60 | }
|
| 61 |
|
| 62 | /* expected-error {{invalid value 0; expected a positive integer value}} */ #pragma clang loop vectorize_width(0)
|
| 63 | /* expected-error {{invalid value 0; expected a positive integer value}} */ #pragma clang loop interleave_count(0)
|
| 64 | while (i-5 < Length) {
|
| 65 | List[i] = i;
|
| 66 | }
|
| 67 |
|
| 68 | /* expected-error {{invalid value -1294967296; expected a positive integer value}} */ #pragma clang loop vectorize_width(3000000000)
|
| 69 | /* expected-error {{invalid value -1294967296; expected a positive integer value}} */ #pragma clang loop interleave_count(3000000000)
|
| 70 | while (i-6 < Length) {
|
| 71 | List[i] = i;
|
| 72 | }
|
| 73 |
|
| 74 | /* expected-error {{missing value; expected a positive integer value}} */ #pragma clang loop vectorize_width(badvalue)
|
| 75 | /* expected-error {{missing value; expected a positive integer value}} */ #pragma clang loop interleave_count(badvalue)
|
| 76 | while (i-6 < Length) {
|
| 77 | List[i] = i;
|
| 78 | }
|
| 79 |
|
| 80 | /* expected-error {{invalid keyword 'badidentifier'; expected 'enable' or 'disable'}} */ #pragma clang loop vectorize(badidentifier)
|
| 81 | /* expected-error {{invalid keyword 'badidentifier'; expected 'enable' or 'disable'}} */ #pragma clang loop interleave(badidentifier)
|
| 82 | while (i-7 < Length) {
|
| 83 | List[i] = i;
|
| 84 | }
|
| 85 |
|
| 86 | #pragma clang loop vectorize(enable)
|
| 87 | /* expected-error {{expected a for, while, or do-while loop to follow the '#pragma clang loop' directive}} */ int j = Length;
|
| 88 | List[0] = List[1];
|
| 89 |
|
| 90 | while (j-1 < Length) {
|
| 91 | List[j] = j;
|
| 92 | }
|
| 93 |
|
| 94 | // FIXME: A bug in ParsedAttributes causes the order of the attributes to be
|
| 95 | // processed in reverse. Consequently, the errors occur on the first of pragma
|
| 96 | // of the next three tests rather than the last, and the order of the kinds
|
| 97 | // is also reversed.
|
| 98 |
|
| 99 | /* expected-error {{incompatible directives 'vectorize(disable)' and 'vectorize_width(4)'}} */ #pragma clang loop vectorize_width(4)
|
| 100 | #pragma clang loop vectorize(disable)
|
| 101 | /* expected-error {{incompatible directives 'interleave(disable)' and 'interleave_count(4)'}} */ #pragma clang loop interleave_count(4)
|
| 102 | #pragma clang loop interleave(disable)
|
| 103 | while (i-8 < Length) {
|
| 104 | List[i] = i;
|
| 105 | }
|
| 106 |
|
| 107 | /* expected-error {{duplicate directives 'vectorize(disable)' and 'vectorize(enable)'}} */ #pragma clang loop vectorize(enable)
|
| 108 | #pragma clang loop vectorize(disable)
|
| 109 | /* expected-error {{duplicate directives 'interleave(disable)' and 'interleave(enable)'}} */ #pragma clang loop interleave(enable)
|
| 110 | #pragma clang loop interleave(disable)
|
| 111 | while (i-9 < Length) {
|
| 112 | List[i] = i;
|
| 113 | }
|
| 114 |
|
| 115 | /* expected-error {{incompatible directives 'vectorize_width(4)' and 'vectorize(disable)'}} */ #pragma clang loop vectorize(disable)
|
| 116 | #pragma clang loop vectorize_width(4)
|
| 117 | /* expected-error {{incompatible directives 'interleave_count(4)' and 'interleave(disable)'}} */ #pragma clang loop interleave(disable)
|
| 118 | #pragma clang loop interleave_count(4)
|
| 119 | while (i-10 < Length) {
|
| 120 | List[i] = i;
|
| 121 | }
|
| 122 |
|
| 123 | /* expected-error {{duplicate directives 'vectorize_width(4)' and 'vectorize_width(8)'}} */ #pragma clang loop vectorize_width(8)
|
| 124 | #pragma clang loop vectorize_width(4)
|
| 125 | /* expected-error {{duplicate directives 'interleave_count(4)' and 'interleave_count(8)'}} */ #pragma clang loop interleave_count(8)
|
| 126 | #pragma clang loop interleave_count(4)
|
| 127 | while (i-11 < Length) {
|
| 128 | List[i] = i;
|
| 129 | }
|
| 130 |
|
| 131 | #pragma clang loop interleave(enable)
|
| 132 | /* expected-error {{expected statement}} */ }
|