Ulrich Weigand | 76976a7 | 2017-07-17 17:46:47 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -triple s390x-linux-gnu -fzvector -target-cpu z14 \ |
| 2 | // RUN: -fno-lax-vector-conversions -W -Wall -Wconversion \ |
| 3 | // RUN: -Werror -fsyntax-only -verify %s |
| 4 | |
| 5 | vector signed char sc, sc2; |
| 6 | vector unsigned char uc, uc2; |
| 7 | vector bool char bc, bc2; |
| 8 | |
| 9 | vector signed short ss, ss2; |
| 10 | vector unsigned short us, us2; |
| 11 | vector bool short bs, bs2; |
| 12 | |
| 13 | vector signed int si, si2; |
| 14 | vector unsigned int ui, ui2; |
| 15 | vector bool int bi, bi2; |
| 16 | |
| 17 | vector signed long long sl, sl2; |
| 18 | vector unsigned long long ul, ul2; |
| 19 | vector bool long long bl, bl2; |
| 20 | |
| 21 | vector double fd, fd2; |
| 22 | |
| 23 | vector float ff, ff2; |
| 24 | |
Ulrich Weigand | 2927071 | 2018-10-16 14:57:20 +0000 | [diff] [blame] | 25 | // Verify that __vector is also recognized |
| 26 | __vector float ff3; |
| 27 | |
| 28 | // Verify operation of vec_step |
| 29 | int res_ff[vec_step(ff) == 4 ? 1 : -1]; |
| 30 | |
| 31 | |
Ulrich Weigand | 76976a7 | 2017-07-17 17:46:47 +0000 | [diff] [blame] | 32 | void foo(void) |
| 33 | { |
| 34 | // ------------------------------------------------------------------------- |
| 35 | // Test assignment. |
| 36 | // ------------------------------------------------------------------------- |
| 37 | |
| 38 | ff = ff2; |
| 39 | |
| 40 | sc = ff2; // expected-error {{incompatible type}} |
| 41 | ff = sc2; // expected-error {{incompatible type}} |
| 42 | |
| 43 | uc = ff2; // expected-error {{incompatible type}} |
| 44 | ff = uc2; // expected-error {{incompatible type}} |
| 45 | |
| 46 | bc = ff2; // expected-error {{incompatible type}} |
| 47 | ff = bc2; // expected-error {{incompatible type}} |
| 48 | |
| 49 | fd = ff2; // expected-error {{incompatible type}} |
| 50 | ff = fd2; // expected-error {{incompatible type}} |
| 51 | |
| 52 | // ------------------------------------------------------------------------- |
| 53 | // Test casts to same element width. |
| 54 | // ------------------------------------------------------------------------- |
| 55 | |
| 56 | ui = (vector unsigned int)ff2; |
| 57 | ff = (vector float)si2; |
| 58 | |
| 59 | // ------------------------------------------------------------------------- |
| 60 | // Test casts to different element width. |
| 61 | // ------------------------------------------------------------------------- |
| 62 | |
| 63 | uc = (vector unsigned char)ff2; |
| 64 | us = (vector unsigned short)ff2; |
| 65 | ul = (vector unsigned long long)ff2; |
| 66 | |
| 67 | ff = (vector float)sc2; |
| 68 | ff = (vector float)ss2; |
| 69 | ff = (vector float)sl2; |
| 70 | |
| 71 | // ------------------------------------------------------------------------- |
| 72 | // Test unary operators. |
| 73 | // ------------------------------------------------------------------------- |
| 74 | |
| 75 | ++ff2; |
| 76 | ff++; |
| 77 | |
| 78 | --ff2; |
| 79 | ff--; |
| 80 | |
| 81 | ff = +ff2; |
| 82 | |
| 83 | ff = -ff2; |
| 84 | |
| 85 | ff = ~ff2; // expected-error {{invalid argument}} |
| 86 | |
| 87 | // ------------------------------------------------------------------------- |
| 88 | // Test binary arithmetic operators. |
| 89 | // ------------------------------------------------------------------------- |
| 90 | |
| 91 | ff = ff + ff2; |
| 92 | ff = ff + ui2; // expected-error {{cannot convert}} |
| 93 | ff = si + ff2; // expected-error {{cannot convert}} |
| 94 | ff = fd + ff2; // expected-error {{cannot convert}} |
| 95 | ff += ff2; |
| 96 | ff += fd2; // expected-error {{cannot convert}} |
| 97 | sc += ff2; // expected-error {{cannot convert}} |
| 98 | |
| 99 | ff = ff - ff2; |
| 100 | ff = ff - ui2; // expected-error {{cannot convert}} |
| 101 | ff = si - ff2; // expected-error {{cannot convert}} |
| 102 | ff = fd - ff2; // expected-error {{cannot convert}} |
| 103 | ff -= ff2; |
| 104 | ff -= fd2; // expected-error {{cannot convert}} |
| 105 | sc -= ff2; // expected-error {{cannot convert}} |
| 106 | |
| 107 | ff = ff * ff2; |
| 108 | ff = ff * ui2; // expected-error {{cannot convert}} |
| 109 | ff = si * ff2; // expected-error {{cannot convert}} |
| 110 | ff = fd * ff2; // expected-error {{cannot convert}} |
| 111 | ff *= ff2; |
| 112 | ff *= fd2; // expected-error {{cannot convert}} |
| 113 | sc *= ff2; // expected-error {{cannot convert}} |
| 114 | |
| 115 | ff = ff / ff2; |
| 116 | ff = ff / ui2; // expected-error {{cannot convert}} |
| 117 | ff = si / ff2; // expected-error {{cannot convert}} |
| 118 | ff = fd / ff2; // expected-error {{cannot convert}} |
| 119 | ff /= ff2; |
| 120 | ff /= fd2; // expected-error {{cannot convert}} |
| 121 | sc /= ff2; // expected-error {{cannot convert}} |
| 122 | |
| 123 | ff = ff % ff2; // expected-error {{invalid operands}} |
| 124 | ff = ff % ui2; // expected-error {{invalid operands}} |
| 125 | ff = si % ff2; // expected-error {{invalid operands}} |
| 126 | ff = fd % ff2; // expected-error {{invalid operands}} |
| 127 | ff %= ff2; // expected-error {{invalid operands}} |
| 128 | ff %= fd2; // expected-error {{invalid operands}} |
| 129 | sc %= ff2; // expected-error {{invalid operands}} |
| 130 | |
| 131 | // ------------------------------------------------------------------------- |
| 132 | // Test bitwise binary operators. |
| 133 | // ------------------------------------------------------------------------- |
| 134 | |
| 135 | ff = ff & ff2; // expected-error {{invalid operands}} |
| 136 | ff = bi & ff2; // expected-error {{invalid operands}} |
| 137 | ff = fd & ff2; // expected-error {{invalid operands}} |
| 138 | ff = ff & bi2; // expected-error {{invalid operands}} |
| 139 | ff = ff & si2; // expected-error {{invalid operands}} |
| 140 | ff = ff & ui2; // expected-error {{invalid operands}} |
| 141 | sc &= ff2; // expected-error {{invalid operands}} |
| 142 | ff &= bc2; // expected-error {{invalid operands}} |
| 143 | ff &= fd2; // expected-error {{invalid operands}} |
| 144 | |
| 145 | ff = ff | ff2; // expected-error {{invalid operands}} |
| 146 | ff = bi | ff2; // expected-error {{invalid operands}} |
| 147 | ff = fd | ff2; // expected-error {{invalid operands}} |
| 148 | ff = ff | bi2; // expected-error {{invalid operands}} |
| 149 | ff = ff | si2; // expected-error {{invalid operands}} |
| 150 | ff = ff | ui2; // expected-error {{invalid operands}} |
| 151 | sc |= ff2; // expected-error {{invalid operands}} |
| 152 | ff |= bc2; // expected-error {{invalid operands}} |
| 153 | ff |= fd2; // expected-error {{invalid operands}} |
| 154 | |
| 155 | ff = ff ^ ff2; // expected-error {{invalid operands}} |
| 156 | ff = bi ^ ff2; // expected-error {{invalid operands}} |
| 157 | ff = fd ^ ff2; // expected-error {{invalid operands}} |
| 158 | ff = ff ^ bi2; // expected-error {{invalid operands}} |
| 159 | ff = ff ^ si2; // expected-error {{invalid operands}} |
| 160 | ff = ff ^ ui2; // expected-error {{invalid operands}} |
| 161 | sc ^= ff2; // expected-error {{invalid operands}} |
| 162 | ff ^= bc2; // expected-error {{invalid operands}} |
| 163 | ff ^= fd2; // expected-error {{invalid operands}} |
| 164 | |
| 165 | // ------------------------------------------------------------------------- |
| 166 | // Test shift operators. |
| 167 | // ------------------------------------------------------------------------- |
| 168 | |
| 169 | ff = ff << ff2; // expected-error {{integer is required}} |
| 170 | ff = ff << fd2; // expected-error {{integer is required}} |
| 171 | ff = ff << ui2; // expected-error {{integer is required}} |
| 172 | ff = sl << ff2; // expected-error {{integer is required}} |
| 173 | sc <<= ff2; // expected-error {{integer is required}} |
| 174 | ff <<= ff2; // expected-error {{integer is required}} |
| 175 | fd <<= ff2; // expected-error {{integer is required}} |
| 176 | |
| 177 | ff = ff >> ff2; // expected-error {{integer is required}} |
| 178 | ff = ff >> fd2; // expected-error {{integer is required}} |
| 179 | ff = ff >> ui2; // expected-error {{integer is required}} |
| 180 | ff = sl >> ff2; // expected-error {{integer is required}} |
| 181 | sc >>= ff2; // expected-error {{integer is required}} |
| 182 | ff >>= ff2; // expected-error {{integer is required}} |
| 183 | fd >>= ff2; // expected-error {{integer is required}} |
| 184 | |
| 185 | // ------------------------------------------------------------------------- |
| 186 | // Test comparison operators. |
| 187 | // ------------------------------------------------------------------------- |
| 188 | |
| 189 | (void)(ff == ff2); |
| 190 | (void)(ff == fd2); // expected-error {{cannot convert}} |
| 191 | (void)(ff == ui2); // expected-error {{cannot convert}} |
| 192 | (void)(ui == ff2); // expected-error {{cannot convert}} |
| 193 | |
| 194 | (void)(ff != ff2); |
| 195 | (void)(ff != fd2); // expected-error {{cannot convert}} |
| 196 | (void)(ff != ui2); // expected-error {{cannot convert}} |
| 197 | (void)(ui != ff2); // expected-error {{cannot convert}} |
| 198 | |
| 199 | (void)(ff <= ff2); |
| 200 | (void)(ff <= fd2); // expected-error {{cannot convert}} |
| 201 | (void)(ff <= ui2); // expected-error {{cannot convert}} |
| 202 | (void)(ui <= ff2); // expected-error {{cannot convert}} |
| 203 | |
| 204 | (void)(ff >= ff2); |
| 205 | (void)(ff >= fd2); // expected-error {{cannot convert}} |
| 206 | (void)(ff >= ui2); // expected-error {{cannot convert}} |
| 207 | (void)(ui >= ff2); // expected-error {{cannot convert}} |
| 208 | |
| 209 | (void)(ff < ff2); |
| 210 | (void)(ff < fd2); // expected-error {{cannot convert}} |
| 211 | (void)(ff < ui2); // expected-error {{cannot convert}} |
| 212 | (void)(ui < ff2); // expected-error {{cannot convert}} |
| 213 | |
| 214 | (void)(ff > ff2); |
| 215 | (void)(ff > fd2); // expected-error {{cannot convert}} |
| 216 | (void)(ff > ui2); // expected-error {{cannot convert}} |
| 217 | (void)(ui > ff2); // expected-error {{cannot convert}} |
| 218 | } |