1 ; Test the basic functionality of integer element promotions of different types. 2 ; This tests checks passing of arguments, loading and storing to memory and 3 ; basic arithmetic. 4 ; RUN: llc -march=x86 -promote-elements < %s 5 ; RUN: llc -march=x86-64 -promote-elements < %s 6 7 define <1 x i8> @test_1xi8(<1 x i8> %x, <1 x i8>* %b) { 8 %bb = load <1 x i8>* %b 9 %tt = xor <1 x i8> %x, %bb 10 store <1 x i8> %tt, <1 x i8>* %b 11 br label %next 12 13 next: 14 ret <1 x i8> %tt 15 } 16 17 18 define <1 x i16> @test_1xi16(<1 x i16> %x, <1 x i16>* %b) { 19 %bb = load <1 x i16>* %b 20 %tt = xor <1 x i16> %x, %bb 21 store <1 x i16> %tt, <1 x i16>* %b 22 br label %next 23 24 next: 25 ret <1 x i16> %tt 26 } 27 28 29 define <1 x i32> @test_1xi32(<1 x i32> %x, <1 x i32>* %b) { 30 %bb = load <1 x i32>* %b 31 %tt = xor <1 x i32> %x, %bb 32 store <1 x i32> %tt, <1 x i32>* %b 33 br label %next 34 35 next: 36 ret <1 x i32> %tt 37 } 38 39 40 define <1 x i64> @test_1xi64(<1 x i64> %x, <1 x i64>* %b) { 41 %bb = load <1 x i64>* %b 42 %tt = xor <1 x i64> %x, %bb 43 store <1 x i64> %tt, <1 x i64>* %b 44 br label %next 45 46 next: 47 ret <1 x i64> %tt 48 } 49 50 51 define <1 x i128> @test_1xi128(<1 x i128> %x, <1 x i128>* %b) { 52 %bb = load <1 x i128>* %b 53 %tt = xor <1 x i128> %x, %bb 54 store <1 x i128> %tt, <1 x i128>* %b 55 br label %next 56 57 next: 58 ret <1 x i128> %tt 59 } 60 61 62 define <1 x i256> @test_1xi256(<1 x i256> %x, <1 x i256>* %b) { 63 %bb = load <1 x i256>* %b 64 %tt = xor <1 x i256> %x, %bb 65 store <1 x i256> %tt, <1 x i256>* %b 66 br label %next 67 68 next: 69 ret <1 x i256> %tt 70 } 71 72 73 define <1 x i512> @test_1xi512(<1 x i512> %x, <1 x i512>* %b) { 74 %bb = load <1 x i512>* %b 75 %tt = xor <1 x i512> %x, %bb 76 store <1 x i512> %tt, <1 x i512>* %b 77 br label %next 78 79 next: 80 ret <1 x i512> %tt 81 } 82 83 84 define <2 x i8> @test_2xi8(<2 x i8> %x, <2 x i8>* %b) { 85 %bb = load <2 x i8>* %b 86 %tt = xor <2 x i8> %x, %bb 87 store <2 x i8> %tt, <2 x i8>* %b 88 br label %next 89 90 next: 91 ret <2 x i8> %tt 92 } 93 94 95 define <2 x i16> @test_2xi16(<2 x i16> %x, <2 x i16>* %b) { 96 %bb = load <2 x i16>* %b 97 %tt = xor <2 x i16> %x, %bb 98 store <2 x i16> %tt, <2 x i16>* %b 99 br label %next 100 101 next: 102 ret <2 x i16> %tt 103 } 104 105 106 define <2 x i32> @test_2xi32(<2 x i32> %x, <2 x i32>* %b) { 107 %bb = load <2 x i32>* %b 108 %tt = xor <2 x i32> %x, %bb 109 store <2 x i32> %tt, <2 x i32>* %b 110 br label %next 111 112 next: 113 ret <2 x i32> %tt 114 } 115 116 117 define <2 x i64> @test_2xi64(<2 x i64> %x, <2 x i64>* %b) { 118 %bb = load <2 x i64>* %b 119 %tt = xor <2 x i64> %x, %bb 120 store <2 x i64> %tt, <2 x i64>* %b 121 br label %next 122 123 next: 124 ret <2 x i64> %tt 125 } 126 127 128 define <2 x i128> @test_2xi128(<2 x i128> %x, <2 x i128>* %b) { 129 %bb = load <2 x i128>* %b 130 %tt = xor <2 x i128> %x, %bb 131 store <2 x i128> %tt, <2 x i128>* %b 132 br label %next 133 134 next: 135 ret <2 x i128> %tt 136 } 137 138 139 define <2 x i256> @test_2xi256(<2 x i256> %x, <2 x i256>* %b) { 140 %bb = load <2 x i256>* %b 141 %tt = xor <2 x i256> %x, %bb 142 store <2 x i256> %tt, <2 x i256>* %b 143 br label %next 144 145 next: 146 ret <2 x i256> %tt 147 } 148 149 150 define <2 x i512> @test_2xi512(<2 x i512> %x, <2 x i512>* %b) { 151 %bb = load <2 x i512>* %b 152 %tt = xor <2 x i512> %x, %bb 153 store <2 x i512> %tt, <2 x i512>* %b 154 br label %next 155 156 next: 157 ret <2 x i512> %tt 158 } 159 160 161 define <3 x i8> @test_3xi8(<3 x i8> %x, <3 x i8>* %b) { 162 %bb = load <3 x i8>* %b 163 %tt = xor <3 x i8> %x, %bb 164 store <3 x i8> %tt, <3 x i8>* %b 165 br label %next 166 167 next: 168 ret <3 x i8> %tt 169 } 170 171 172 define <3 x i16> @test_3xi16(<3 x i16> %x, <3 x i16>* %b) { 173 %bb = load <3 x i16>* %b 174 %tt = xor <3 x i16> %x, %bb 175 store <3 x i16> %tt, <3 x i16>* %b 176 br label %next 177 178 next: 179 ret <3 x i16> %tt 180 } 181 182 183 define <3 x i32> @test_3xi32(<3 x i32> %x, <3 x i32>* %b) { 184 %bb = load <3 x i32>* %b 185 %tt = xor <3 x i32> %x, %bb 186 store <3 x i32> %tt, <3 x i32>* %b 187 br label %next 188 189 next: 190 ret <3 x i32> %tt 191 } 192 193 194 define <3 x i64> @test_3xi64(<3 x i64> %x, <3 x i64>* %b) { 195 %bb = load <3 x i64>* %b 196 %tt = xor <3 x i64> %x, %bb 197 store <3 x i64> %tt, <3 x i64>* %b 198 br label %next 199 200 next: 201 ret <3 x i64> %tt 202 } 203 204 205 define <3 x i128> @test_3xi128(<3 x i128> %x, <3 x i128>* %b) { 206 %bb = load <3 x i128>* %b 207 %tt = xor <3 x i128> %x, %bb 208 store <3 x i128> %tt, <3 x i128>* %b 209 br label %next 210 211 next: 212 ret <3 x i128> %tt 213 } 214 215 216 define <3 x i256> @test_3xi256(<3 x i256> %x, <3 x i256>* %b) { 217 %bb = load <3 x i256>* %b 218 %tt = xor <3 x i256> %x, %bb 219 store <3 x i256> %tt, <3 x i256>* %b 220 br label %next 221 222 next: 223 ret <3 x i256> %tt 224 } 225 226 227 define <3 x i512> @test_3xi512(<3 x i512> %x, <3 x i512>* %b) { 228 %bb = load <3 x i512>* %b 229 %tt = xor <3 x i512> %x, %bb 230 store <3 x i512> %tt, <3 x i512>* %b 231 br label %next 232 233 next: 234 ret <3 x i512> %tt 235 } 236 237 238 define <4 x i8> @test_4xi8(<4 x i8> %x, <4 x i8>* %b) { 239 %bb = load <4 x i8>* %b 240 %tt = xor <4 x i8> %x, %bb 241 store <4 x i8> %tt, <4 x i8>* %b 242 br label %next 243 244 next: 245 ret <4 x i8> %tt 246 } 247 248 249 define <4 x i16> @test_4xi16(<4 x i16> %x, <4 x i16>* %b) { 250 %bb = load <4 x i16>* %b 251 %tt = xor <4 x i16> %x, %bb 252 store <4 x i16> %tt, <4 x i16>* %b 253 br label %next 254 255 next: 256 ret <4 x i16> %tt 257 } 258 259 260 define <4 x i32> @test_4xi32(<4 x i32> %x, <4 x i32>* %b) { 261 %bb = load <4 x i32>* %b 262 %tt = xor <4 x i32> %x, %bb 263 store <4 x i32> %tt, <4 x i32>* %b 264 br label %next 265 266 next: 267 ret <4 x i32> %tt 268 } 269 270 271 define <4 x i64> @test_4xi64(<4 x i64> %x, <4 x i64>* %b) { 272 %bb = load <4 x i64>* %b 273 %tt = xor <4 x i64> %x, %bb 274 store <4 x i64> %tt, <4 x i64>* %b 275 br label %next 276 277 next: 278 ret <4 x i64> %tt 279 } 280 281 282 define <4 x i128> @test_4xi128(<4 x i128> %x, <4 x i128>* %b) { 283 %bb = load <4 x i128>* %b 284 %tt = xor <4 x i128> %x, %bb 285 store <4 x i128> %tt, <4 x i128>* %b 286 br label %next 287 288 next: 289 ret <4 x i128> %tt 290 } 291 292 293 define <4 x i256> @test_4xi256(<4 x i256> %x, <4 x i256>* %b) { 294 %bb = load <4 x i256>* %b 295 %tt = xor <4 x i256> %x, %bb 296 store <4 x i256> %tt, <4 x i256>* %b 297 br label %next 298 299 next: 300 ret <4 x i256> %tt 301 } 302 303 304 define <4 x i512> @test_4xi512(<4 x i512> %x, <4 x i512>* %b) { 305 %bb = load <4 x i512>* %b 306 %tt = xor <4 x i512> %x, %bb 307 store <4 x i512> %tt, <4 x i512>* %b 308 br label %next 309 310 next: 311 ret <4 x i512> %tt 312 } 313 314 315 define <5 x i8> @test_5xi8(<5 x i8> %x, <5 x i8>* %b) { 316 %bb = load <5 x i8>* %b 317 %tt = xor <5 x i8> %x, %bb 318 store <5 x i8> %tt, <5 x i8>* %b 319 br label %next 320 321 next: 322 ret <5 x i8> %tt 323 } 324 325 326 define <5 x i16> @test_5xi16(<5 x i16> %x, <5 x i16>* %b) { 327 %bb = load <5 x i16>* %b 328 %tt = xor <5 x i16> %x, %bb 329 store <5 x i16> %tt, <5 x i16>* %b 330 br label %next 331 332 next: 333 ret <5 x i16> %tt 334 } 335 336 337 define <5 x i32> @test_5xi32(<5 x i32> %x, <5 x i32>* %b) { 338 %bb = load <5 x i32>* %b 339 %tt = xor <5 x i32> %x, %bb 340 store <5 x i32> %tt, <5 x i32>* %b 341 br label %next 342 343 next: 344 ret <5 x i32> %tt 345 } 346 347 348 define <5 x i64> @test_5xi64(<5 x i64> %x, <5 x i64>* %b) { 349 %bb = load <5 x i64>* %b 350 %tt = xor <5 x i64> %x, %bb 351 store <5 x i64> %tt, <5 x i64>* %b 352 br label %next 353 354 next: 355 ret <5 x i64> %tt 356 } 357 358 359 define <5 x i128> @test_5xi128(<5 x i128> %x, <5 x i128>* %b) { 360 %bb = load <5 x i128>* %b 361 %tt = xor <5 x i128> %x, %bb 362 store <5 x i128> %tt, <5 x i128>* %b 363 br label %next 364 365 next: 366 ret <5 x i128> %tt 367 } 368 369 370 define <5 x i256> @test_5xi256(<5 x i256> %x, <5 x i256>* %b) { 371 %bb = load <5 x i256>* %b 372 %tt = xor <5 x i256> %x, %bb 373 store <5 x i256> %tt, <5 x i256>* %b 374 br label %next 375 376 next: 377 ret <5 x i256> %tt 378 } 379 380 381 define <5 x i512> @test_5xi512(<5 x i512> %x, <5 x i512>* %b) { 382 %bb = load <5 x i512>* %b 383 %tt = xor <5 x i512> %x, %bb 384 store <5 x i512> %tt, <5 x i512>* %b 385 br label %next 386 387 next: 388 ret <5 x i512> %tt 389 } 390 391 392