1 ; RUN: llc -verify-machineinstrs < %s | FileCheck %s 2 target datalayout = "E-m:e-i64:64-n32:64" 3 target triple = "powerpc64-unknown-linux-gnu" 4 5 define <16 x i8> @test_l_v16i8(<16 x i8>* %p) #0 { 6 entry: 7 %r = load <16 x i8>, <16 x i8>* %p, align 1 8 ret <16 x i8> %r 9 10 ; CHECK-LABEL: @test_l_v16i8 11 ; CHECK-DAG: li [[REG1:[0-9]+]], 15 12 ; CHECK-DAG: lvsl [[REG2:[0-9]+]], 0, 3 13 ; CHECK-DAG: lvx [[REG3:[0-9]+]], 3, [[REG1]] 14 ; CHECK-DAG: lvx [[REG4:[0-9]+]], 0, 3 15 ; CHECK: vperm 2, [[REG4]], [[REG3]], [[REG2]] 16 ; CHECK: blr 17 } 18 19 define <32 x i8> @test_l_v32i8(<32 x i8>* %p) #0 { 20 entry: 21 %r = load <32 x i8>, <32 x i8>* %p, align 1 22 ret <32 x i8> %r 23 24 ; CHECK-LABEL: @test_l_v32i8 25 ; CHECK-DAG: li [[REG1:[0-9]+]], 31 26 ; CHECK-DAG: li [[REG2:[0-9]+]], 16 27 ; CHECK-DAG: lvsl [[REG3:[0-9]+]], 0, 3 28 ; CHECK-DAG: lvx [[REG4:[0-9]+]], 3, [[REG1]] 29 ; CHECK-DAG: lvx [[REG5:[0-9]+]], 3, [[REG2]] 30 ; CHECK-DAG: lvx [[REG6:[0-9]+]], 0, 3 31 ; CHECK-DAG: vperm 3, {{[0-9]+}}, {{[0-9]+}}, [[REG3]] 32 ; CHECK-DAG: vperm 2, {{[0-9]+}}, {{[0-9]+}}, [[REG3]] 33 ; CHECK: blr 34 } 35 36 define <8 x i16> @test_l_v8i16(<8 x i16>* %p) #0 { 37 entry: 38 %r = load <8 x i16>, <8 x i16>* %p, align 2 39 ret <8 x i16> %r 40 41 ; CHECK-LABEL: @test_l_v8i16 42 ; CHECK-DAG: li [[REG1:[0-9]+]], 15 43 ; CHECK-DAG: lvsl [[REG2:[0-9]+]], 0, 3 44 ; CHECK-DAG: lvx [[REG3:[0-9]+]], 3, [[REG1]] 45 ; CHECK-DAG: lvx [[REG4:[0-9]+]], 0, 3 46 ; CHECK: vperm 2, [[REG4]], [[REG3]], [[REG2]] 47 ; CHECK: blr 48 } 49 50 define <16 x i16> @test_l_v16i16(<16 x i16>* %p) #0 { 51 entry: 52 %r = load <16 x i16>, <16 x i16>* %p, align 2 53 ret <16 x i16> %r 54 55 ; CHECK-LABEL: @test_l_v16i16 56 ; CHECK-DAG: li [[REG1:[0-9]+]], 31 57 ; CHECK-DAG: li [[REG2:[0-9]+]], 16 58 ; CHECK-DAG: lvsl [[REG3:[0-9]+]], 0, 3 59 ; CHECK-DAG: lvx [[REG4:[0-9]+]], 3, [[REG1]] 60 ; CHECK-DAG: lvx [[REG5:[0-9]+]], 3, [[REG2]] 61 ; CHECK-DAG: lvx [[REG6:[0-9]+]], 0, 3 62 ; CHECK-DAG: vperm 3, {{[0-9]+}}, {{[0-9]+}}, [[REG3]] 63 ; CHECK-DAG: vperm 2, {{[0-9]+}}, {{[0-9]+}}, [[REG3]] 64 ; CHECK: blr 65 } 66 67 define <4 x i32> @test_l_v4i32(<4 x i32>* %p) #0 { 68 entry: 69 %r = load <4 x i32>, <4 x i32>* %p, align 4 70 ret <4 x i32> %r 71 72 ; CHECK-LABEL: @test_l_v4i32 73 ; CHECK-DAG: li [[REG1:[0-9]+]], 15 74 ; CHECK-DAG: lvsl [[REG2:[0-9]+]], 0, 3 75 ; CHECK-DAG: lvx [[REG3:[0-9]+]], 3, [[REG1]] 76 ; CHECK-DAG: lvx [[REG4:[0-9]+]], 0, 3 77 ; CHECK: vperm 2, [[REG4]], [[REG3]], [[REG2]] 78 ; CHECK: blr 79 } 80 81 define <8 x i32> @test_l_v8i32(<8 x i32>* %p) #0 { 82 entry: 83 %r = load <8 x i32>, <8 x i32>* %p, align 4 84 ret <8 x i32> %r 85 86 ; CHECK-LABEL: @test_l_v8i32 87 ; CHECK-DAG: li [[REG1:[0-9]+]], 31 88 ; CHECK-DAG: li [[REG2:[0-9]+]], 16 89 ; CHECK-DAG: lvsl [[REG3:[0-9]+]], 0, 3 90 ; CHECK-DAG: lvx [[REG4:[0-9]+]], 3, [[REG1]] 91 ; CHECK-DAG: lvx [[REG5:[0-9]+]], 3, [[REG2]] 92 ; CHECK-DAG: lvx [[REG6:[0-9]+]], 0, 3 93 ; CHECK-DAG: vperm 3, {{[0-9]+}}, {{[0-9]+}}, [[REG3]] 94 ; CHECK-DAG: vperm 2, {{[0-9]+}}, {{[0-9]+}}, [[REG3]] 95 ; CHECK: blr 96 } 97 98 define <2 x i64> @test_l_v2i64(<2 x i64>* %p) #0 { 99 entry: 100 %r = load <2 x i64>, <2 x i64>* %p, align 8 101 ret <2 x i64> %r 102 103 ; CHECK-LABEL: @test_l_v2i64 104 ; CHECK: lxvd2x 34, 0, 3 105 ; CHECK: blr 106 } 107 108 define <4 x i64> @test_l_v4i64(<4 x i64>* %p) #0 { 109 entry: 110 %r = load <4 x i64>, <4 x i64>* %p, align 8 111 ret <4 x i64> %r 112 113 ; CHECK-LABEL: @test_l_v4i64 114 ; CHECK-DAG: li [[REG1:[0-9]+]], 16 115 ; CHECK-DAG: lxvd2x 34, 0, 3 116 ; CHECK-DAG: lxvd2x 35, 3, [[REG1]] 117 ; CHECK: blr 118 } 119 120 define <4 x float> @test_l_v4float(<4 x float>* %p) #0 { 121 entry: 122 %r = load <4 x float>, <4 x float>* %p, align 4 123 ret <4 x float> %r 124 125 ; CHECK-LABEL: @test_l_v4float 126 ; CHECK-DAG: li [[REG1:[0-9]+]], 15 127 ; CHECK-DAG: lvsl [[REG2:[0-9]+]], 0, 3 128 ; CHECK-DAG: lvx [[REG3:[0-9]+]], 3, [[REG1]] 129 ; CHECK-DAG: lvx [[REG4:[0-9]+]], 0, 3 130 ; CHECK: vperm 2, [[REG4]], [[REG3]], [[REG2]] 131 ; CHECK: blr 132 } 133 134 define <8 x float> @test_l_v8float(<8 x float>* %p) #0 { 135 entry: 136 %r = load <8 x float>, <8 x float>* %p, align 4 137 ret <8 x float> %r 138 139 ; CHECK-LABEL: @test_l_v8float 140 ; CHECK-DAG: li [[REG1:[0-9]+]], 31 141 ; CHECK-DAG: li [[REG2:[0-9]+]], 16 142 ; CHECK-DAG: lvsl [[REG3:[0-9]+]], 0, 3 143 ; CHECK-DAG: lvx [[REG4:[0-9]+]], 3, [[REG1]] 144 ; CHECK-DAG: lvx [[REG5:[0-9]+]], 3, [[REG2]] 145 ; CHECK-DAG: lvx [[REG6:[0-9]+]], 0, 3 146 ; CHECK-DAG: vperm 3, {{[0-9]+}}, {{[0-9]+}}, [[REG3]] 147 ; CHECK-DAG: vperm 2, {{[0-9]+}}, {{[0-9]+}}, [[REG3]] 148 ; CHECK: blr 149 } 150 151 define <2 x double> @test_l_v2double(<2 x double>* %p) #0 { 152 entry: 153 %r = load <2 x double>, <2 x double>* %p, align 8 154 ret <2 x double> %r 155 156 ; CHECK-LABEL: @test_l_v2double 157 ; CHECK: lxvd2x 34, 0, 3 158 ; CHECK: blr 159 } 160 161 define <4 x double> @test_l_v4double(<4 x double>* %p) #0 { 162 entry: 163 %r = load <4 x double>, <4 x double>* %p, align 8 164 ret <4 x double> %r 165 166 ; CHECK-LABEL: @test_l_v4double 167 ; CHECK-DAG: li [[REG1:[0-9]+]], 16 168 ; CHECK-DAG: lxvd2x 34, 0, 3 169 ; CHECK-DAG: lxvd2x 35, 3, [[REG1]] 170 ; CHECK: blr 171 } 172 173 define <16 x i8> @test_l_p8v16i8(<16 x i8>* %p) #2 { 174 entry: 175 %r = load <16 x i8>, <16 x i8>* %p, align 1 176 ret <16 x i8> %r 177 178 ; CHECK-LABEL: @test_l_p8v16i8 179 ; CHECK: lxvw4x 34, 0, 3 180 ; CHECK: blr 181 } 182 183 define <32 x i8> @test_l_p8v32i8(<32 x i8>* %p) #2 { 184 entry: 185 %r = load <32 x i8>, <32 x i8>* %p, align 1 186 ret <32 x i8> %r 187 188 ; CHECK-LABEL: @test_l_p8v32i8 189 ; CHECK-DAG: li [[REG1:[0-9]+]], 16 190 ; CHECK-DAG: lxvw4x 34, 0, 3 191 ; CHECK-DAG: lxvw4x 35, 3, [[REG1]] 192 ; CHECK: blr 193 } 194 195 define <8 x i16> @test_l_p8v8i16(<8 x i16>* %p) #2 { 196 entry: 197 %r = load <8 x i16>, <8 x i16>* %p, align 2 198 ret <8 x i16> %r 199 200 ; CHECK-LABEL: @test_l_p8v8i16 201 ; CHECK: lxvw4x 34, 0, 3 202 ; CHECK: blr 203 } 204 205 define <16 x i16> @test_l_p8v16i16(<16 x i16>* %p) #2 { 206 entry: 207 %r = load <16 x i16>, <16 x i16>* %p, align 2 208 ret <16 x i16> %r 209 210 ; CHECK-LABEL: @test_l_p8v16i16 211 ; CHECK-DAG: li [[REG1:[0-9]+]], 16 212 ; CHECK-DAG: lxvw4x 34, 0, 3 213 ; CHECK-DAG: lxvw4x 35, 3, [[REG1]] 214 ; CHECK: blr 215 } 216 217 define <4 x i32> @test_l_p8v4i32(<4 x i32>* %p) #2 { 218 entry: 219 %r = load <4 x i32>, <4 x i32>* %p, align 4 220 ret <4 x i32> %r 221 222 ; CHECK-LABEL: @test_l_p8v4i32 223 ; CHECK: lxvw4x 34, 0, 3 224 ; CHECK: blr 225 } 226 227 define <8 x i32> @test_l_p8v8i32(<8 x i32>* %p) #2 { 228 entry: 229 %r = load <8 x i32>, <8 x i32>* %p, align 4 230 ret <8 x i32> %r 231 232 ; CHECK-LABEL: @test_l_p8v8i32 233 ; CHECK-DAG: li [[REG1:[0-9]+]], 16 234 ; CHECK-DAG: lxvw4x 34, 0, 3 235 ; CHECK-DAG: lxvw4x 35, 3, [[REG1]] 236 ; CHECK: blr 237 } 238 239 define <2 x i64> @test_l_p8v2i64(<2 x i64>* %p) #2 { 240 entry: 241 %r = load <2 x i64>, <2 x i64>* %p, align 8 242 ret <2 x i64> %r 243 244 ; CHECK-LABEL: @test_l_p8v2i64 245 ; CHECK: lxvd2x 34, 0, 3 246 ; CHECK: blr 247 } 248 249 define <4 x i64> @test_l_p8v4i64(<4 x i64>* %p) #2 { 250 entry: 251 %r = load <4 x i64>, <4 x i64>* %p, align 8 252 ret <4 x i64> %r 253 254 ; CHECK-LABEL: @test_l_p8v4i64 255 ; CHECK-DAG: li [[REG1:[0-9]+]], 16 256 ; CHECK-DAG: lxvd2x 34, 0, 3 257 ; CHECK-DAG: lxvd2x 35, 3, [[REG1]] 258 ; CHECK: blr 259 } 260 261 define <4 x float> @test_l_p8v4float(<4 x float>* %p) #2 { 262 entry: 263 %r = load <4 x float>, <4 x float>* %p, align 4 264 ret <4 x float> %r 265 266 ; CHECK-LABEL: @test_l_p8v4float 267 ; CHECK: lxvw4x 34, 0, 3 268 ; CHECK: blr 269 } 270 271 define <8 x float> @test_l_p8v8float(<8 x float>* %p) #2 { 272 entry: 273 %r = load <8 x float>, <8 x float>* %p, align 4 274 ret <8 x float> %r 275 276 ; CHECK-LABEL: @test_l_p8v8float 277 ; CHECK-DAG: li [[REG1:[0-9]+]], 16 278 ; CHECK-DAG: lxvw4x 34, 0, 3 279 ; CHECK-DAG: lxvw4x 35, 3, [[REG1]] 280 ; CHECK: blr 281 } 282 283 define <2 x double> @test_l_p8v2double(<2 x double>* %p) #2 { 284 entry: 285 %r = load <2 x double>, <2 x double>* %p, align 8 286 ret <2 x double> %r 287 288 ; CHECK-LABEL: @test_l_p8v2double 289 ; CHECK: lxvd2x 34, 0, 3 290 ; CHECK: blr 291 } 292 293 define <4 x double> @test_l_p8v4double(<4 x double>* %p) #2 { 294 entry: 295 %r = load <4 x double>, <4 x double>* %p, align 8 296 ret <4 x double> %r 297 298 ; CHECK-LABEL: @test_l_p8v4double 299 ; CHECK-DAG: li [[REG1:[0-9]+]], 16 300 ; CHECK-DAG: lxvd2x 34, 0, 3 301 ; CHECK-DAG: lxvd2x 35, 3, [[REG1]] 302 ; CHECK: blr 303 } 304 305 define <4 x float> @test_l_qv4float(<4 x float>* %p) #1 { 306 entry: 307 %r = load <4 x float>, <4 x float>* %p, align 4 308 ret <4 x float> %r 309 310 ; CHECK-LABEL: @test_l_qv4float 311 ; CHECK-DAG: li [[REG1:[0-9]+]], 15 312 ; CHECK-DAG: qvlpclsx 0, 0, 3 313 ; CHECK-DAG: qvlfsx [[REG2:[0-9]+]], 3, [[REG1]] 314 ; CHECK-DAG: qvlfsx [[REG3:[0-9]+]], 0, 3 315 ; CHECK: qvfperm 1, [[REG3]], [[REG2]], 0 316 ; CHECK: blr 317 } 318 319 define <8 x float> @test_l_qv8float(<8 x float>* %p) #1 { 320 entry: 321 %r = load <8 x float>, <8 x float>* %p, align 4 322 ret <8 x float> %r 323 324 ; CHECK-LABEL: @test_l_qv8float 325 ; CHECK-DAG: li [[REG1:[0-9]+]], 31 326 ; CHECK-DAG: li [[REG2:[0-9]+]], 16 327 ; CHECK-DAG: qvlfsx [[REG3:[0-9]+]], 3, [[REG1]] 328 ; CHECK-DAG: qvlfsx [[REG4:[0-9]+]], 3, [[REG2]] 329 ; CHECK-DAG: qvlpclsx [[REG5:[0-5]+]], 0, 3 330 ; CHECK-DAG: qvlfsx [[REG6:[0-9]+]], 0, 3 331 ; CHECK-DAG: qvfperm 2, {{[0-9]+}}, {{[0-9]+}}, [[REG5]] 332 ; CHECK-DAG: qvfperm 1, {{[0-9]+}}, {{[0-9]+}}, [[REG5]] 333 ; CHECK: blr 334 } 335 336 define <4 x double> @test_l_qv4double(<4 x double>* %p) #1 { 337 entry: 338 %r = load <4 x double>, <4 x double>* %p, align 8 339 ret <4 x double> %r 340 341 ; CHECK-LABEL: @test_l_qv4double 342 ; CHECK-DAG: li [[REG1:[0-9]+]], 31 343 ; CHECK-DAG: qvlpcldx 0, 0, 3 344 ; CHECK-DAG: qvlfdx [[REG2:[0-9]+]], 3, [[REG1]] 345 ; CHECK-DAG: qvlfdx [[REG3:[0-9]+]], 0, 3 346 ; CHECK: qvfperm 1, [[REG3]], [[REG2]], 0 347 ; CHECK: blr 348 } 349 350 define <8 x double> @test_l_qv8double(<8 x double>* %p) #1 { 351 entry: 352 %r = load <8 x double>, <8 x double>* %p, align 8 353 ret <8 x double> %r 354 355 ; CHECK-LABEL: @test_l_qv8double 356 ; CHECK-DAG: li [[REG1:[0-9]+]], 63 357 ; CHECK-DAG: li [[REG2:[0-9]+]], 32 358 ; CHECK-DAG: qvlfdx [[REG3:[0-9]+]], 3, [[REG1]] 359 ; CHECK-DAG: qvlfdx [[REG4:[0-9]+]], 3, [[REG2]] 360 ; CHECK-DAG: qvlpcldx [[REG5:[0-5]+]], 0, 3 361 ; CHECK-DAG: qvlfdx [[REG6:[0-9]+]], 0, 3 362 ; CHECK-DAG: qvfperm 2, {{[0-9]+}}, {{[0-9]+}}, [[REG5]] 363 ; CHECK-DAG: qvfperm 1, {{[0-9]+}}, {{[0-9]+}}, [[REG5]] 364 ; CHECK: blr 365 } 366 367 define void @test_s_v16i8(<16 x i8>* %p, <16 x i8> %v) #0 { 368 entry: 369 store <16 x i8> %v, <16 x i8>* %p, align 1 370 ret void 371 372 ; CHECK-LABEL: @test_s_v16i8 373 ; CHECK: stxvw4x 34, 0, 3 374 ; CHECK: blr 375 } 376 377 define void @test_s_v32i8(<32 x i8>* %p, <32 x i8> %v) #0 { 378 entry: 379 store <32 x i8> %v, <32 x i8>* %p, align 1 380 ret void 381 382 ; CHECK-LABEL: @test_s_v32i8 383 ; CHECK-DAG: li [[REG1:[0-9]+]], 16 384 ; CHECK-DAG: stxvw4x 35, 3, [[REG1]] 385 ; CHECK-DAG: stxvw4x 34, 0, 3 386 ; CHECK: blr 387 } 388 389 define void @test_s_v8i16(<8 x i16>* %p, <8 x i16> %v) #0 { 390 entry: 391 store <8 x i16> %v, <8 x i16>* %p, align 2 392 ret void 393 394 ; CHECK-LABEL: @test_s_v8i16 395 ; CHECK: stxvw4x 34, 0, 3 396 ; CHECK: blr 397 } 398 399 define void @test_s_v16i16(<16 x i16>* %p, <16 x i16> %v) #0 { 400 entry: 401 store <16 x i16> %v, <16 x i16>* %p, align 2 402 ret void 403 404 ; CHECK-LABEL: @test_s_v16i16 405 ; CHECK-DAG: li [[REG1:[0-9]+]], 16 406 ; CHECK-DAG: stxvw4x 35, 3, [[REG1]] 407 ; CHECK-DAG: stxvw4x 34, 0, 3 408 ; CHECK: blr 409 } 410 411 define void @test_s_v4i32(<4 x i32>* %p, <4 x i32> %v) #0 { 412 entry: 413 store <4 x i32> %v, <4 x i32>* %p, align 4 414 ret void 415 416 ; CHECK-LABEL: @test_s_v4i32 417 ; CHECK: stxvw4x 34, 0, 3 418 ; CHECK: blr 419 } 420 421 define void @test_s_v8i32(<8 x i32>* %p, <8 x i32> %v) #0 { 422 entry: 423 store <8 x i32> %v, <8 x i32>* %p, align 4 424 ret void 425 426 ; CHECK-LABEL: @test_s_v8i32 427 ; CHECK-DAG: li [[REG1:[0-9]+]], 16 428 ; CHECK-DAG: stxvw4x 35, 3, [[REG1]] 429 ; CHECK-DAG: stxvw4x 34, 0, 3 430 ; CHECK: blr 431 } 432 433 define void @test_s_v2i64(<2 x i64>* %p, <2 x i64> %v) #0 { 434 entry: 435 store <2 x i64> %v, <2 x i64>* %p, align 8 436 ret void 437 438 ; CHECK-LABEL: @test_s_v2i64 439 ; CHECK: stxvd2x 34, 0, 3 440 ; CHECK: blr 441 } 442 443 define void @test_s_v4i64(<4 x i64>* %p, <4 x i64> %v) #0 { 444 entry: 445 store <4 x i64> %v, <4 x i64>* %p, align 8 446 ret void 447 448 ; CHECK-LABEL: @test_s_v4i64 449 ; CHECK-DAG: li [[REG1:[0-9]+]], 16 450 ; CHECK-DAG: stxvd2x 35, 3, [[REG1]] 451 ; CHECK-DAG: stxvd2x 34, 0, 3 452 ; CHECK: blr 453 } 454 455 define void @test_s_v4float(<4 x float>* %p, <4 x float> %v) #0 { 456 entry: 457 store <4 x float> %v, <4 x float>* %p, align 4 458 ret void 459 460 ; CHECK-LABEL: @test_s_v4float 461 ; CHECK: stxvw4x 34, 0, 3 462 ; CHECK: blr 463 } 464 465 define void @test_s_v8float(<8 x float>* %p, <8 x float> %v) #0 { 466 entry: 467 store <8 x float> %v, <8 x float>* %p, align 4 468 ret void 469 470 ; CHECK-LABEL: @test_s_v8float 471 ; CHECK-DAG: li [[REG1:[0-9]+]], 16 472 ; CHECK-DAG: stxvw4x 35, 3, [[REG1]] 473 ; CHECK-DAG: stxvw4x 34, 0, 3 474 ; CHECK: blr 475 } 476 477 define void @test_s_v2double(<2 x double>* %p, <2 x double> %v) #0 { 478 entry: 479 store <2 x double> %v, <2 x double>* %p, align 8 480 ret void 481 482 ; CHECK-LABEL: @test_s_v2double 483 ; CHECK: stxvd2x 34, 0, 3 484 ; CHECK: blr 485 } 486 487 define void @test_s_v4double(<4 x double>* %p, <4 x double> %v) #0 { 488 entry: 489 store <4 x double> %v, <4 x double>* %p, align 8 490 ret void 491 492 ; CHECK-LABEL: @test_s_v4double 493 ; CHECK-DAG: li [[REG1:[0-9]+]], 16 494 ; CHECK-DAG: stxvd2x 35, 3, [[REG1]] 495 ; CHECK-DAG: stxvd2x 34, 0, 3 496 ; CHECK: blr 497 } 498 499 define void @test_s_qv4float(<4 x float>* %p, <4 x float> %v) #1 { 500 entry: 501 store <4 x float> %v, <4 x float>* %p, align 4 502 ret void 503 504 ; CHECK-LABEL: @test_s_qv4float 505 ; CHECK-DAG: qvesplati [[REG1:[0-9]+]], 1, 3 506 ; CHECK-DAG: qvesplati [[REG2:[0-9]+]], 1, 2 507 ; CHECK-DAG: qvesplati [[REG3:[0-9]+]], 1, 1 508 ; CHECK-DAG: stfs 1, 0(3) 509 ; CHECK-DAG: stfs [[REG1]], 12(3) 510 ; CHECK-DAG: stfs [[REG2]], 8(3) 511 ; CHECK-DAG: stfs [[REG3]], 4(3) 512 ; CHECK: blr 513 } 514 515 define void @test_s_qv8float(<8 x float>* %p, <8 x float> %v) #1 { 516 entry: 517 store <8 x float> %v, <8 x float>* %p, align 4 518 ret void 519 520 ; CHECK-LABEL: @test_s_qv8float 521 ; CHECK-DAG: qvesplati [[REG1:[0-9]+]], 2, 3 522 ; CHECK-DAG: qvesplati [[REG2:[0-9]+]], 2, 2 523 ; CHECK-DAG: qvesplati [[REG3:[0-9]+]], 2, 1 524 ; CHECK-DAG: qvesplati [[REG4:[0-9]+]], 1, 3 525 ; CHECK-DAG: qvesplati [[REG5:[0-9]+]], 1, 2 526 ; CHECK-DAG: qvesplati [[REG6:[0-9]+]], 1, 1 527 ; CHECK-DAG: stfs 2, 16(3) 528 ; CHECK-DAG: stfs 1, 0(3) 529 ; CHECK-DAG: stfs [[REG1]], 28(3) 530 ; CHECK-DAG: stfs [[REG2]], 24(3) 531 ; CHECK-DAG: stfs [[REG3]], 20(3) 532 ; CHECK-DAG: stfs [[REG4]], 12(3) 533 ; CHECK-DAG: stfs [[REG5]], 8(3) 534 ; CHECK-DAG: stfs [[REG6]], 4(3) 535 ; CHECK: blr 536 } 537 538 define void @test_s_qv4double(<4 x double>* %p, <4 x double> %v) #1 { 539 entry: 540 store <4 x double> %v, <4 x double>* %p, align 8 541 ret void 542 543 ; CHECK-LABEL: @test_s_qv4double 544 ; CHECK-DAG: qvesplati [[REG1:[0-9]+]], 1, 3 545 ; CHECK-DAG: qvesplati [[REG2:[0-9]+]], 1, 2 546 ; CHECK-DAG: qvesplati [[REG3:[0-9]+]], 1, 1 547 ; CHECK-DAG: stfd 1, 0(3) 548 ; CHECK-DAG: stfd [[REG1]], 24(3) 549 ; CHECK-DAG: stfd [[REG2]], 16(3) 550 ; CHECK-DAG: stfd [[REG3]], 8(3) 551 ; CHECK: blr 552 } 553 554 define void @test_s_qv8double(<8 x double>* %p, <8 x double> %v) #1 { 555 entry: 556 store <8 x double> %v, <8 x double>* %p, align 8 557 ret void 558 559 ; CHECK-LABEL: @test_s_qv8double 560 ; CHECK-DAG: qvesplati [[REG1:[0-9]+]], 2, 3 561 ; CHECK-DAG: qvesplati [[REG2:[0-9]+]], 2, 2 562 ; CHECK-DAG: qvesplati [[REG3:[0-9]+]], 2, 1 563 ; CHECK-DAG: qvesplati [[REG4:[0-9]+]], 1, 3 564 ; CHECK-DAG: qvesplati [[REG5:[0-9]+]], 1, 2 565 ; CHECK-DAG: qvesplati [[REG6:[0-9]+]], 1, 1 566 ; CHECK-DAG: stfd 2, 32(3) 567 ; CHECK-DAG: stfd 1, 0(3) 568 ; CHECK-DAG: stfd [[REG1]], 56(3) 569 ; CHECK-DAG: stfd [[REG2]], 48(3) 570 ; CHECK-DAG: stfd [[REG3]], 40(3) 571 ; CHECK-DAG: stfd [[REG4]], 24(3) 572 ; CHECK-DAG: stfd [[REG5]], 16(3) 573 ; CHECK-DAG: stfd [[REG6]], 8(3) 574 ; CHECK: blr 575 } 576 577 attributes #0 = { nounwind "target-cpu"="pwr7" } 578 attributes #1 = { nounwind "target-cpu"="a2q" } 579 attributes #2 = { nounwind "target-cpu"="pwr8" } 580 581