1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ 3; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 4; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P10 5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ 6; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 7; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P10 8; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ 9; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 10; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P9 11; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ 12; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 13; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P9 14; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ 15; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 16; RUN: < %s | FileCheck %s --check-prefixes=CHECK-P8-LE 17; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ 18; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 19; RUN: < %s | FileCheck %s --check-prefixes=CHECK-P8-BE 20 21; Function Attrs: norecurse nounwind readonly uwtable willreturn 22define dso_local <16 x i8> @ld_0_vector(i64 %ptr) { 23; CHECK-LABEL: ld_0_vector: 24; CHECK: # %bb.0: # %entry 25; CHECK-NEXT: lxv v2, 0(r3) 26; CHECK-NEXT: blr 27; 28; CHECK-P8-LE-LABEL: ld_0_vector: 29; CHECK-P8-LE: # %bb.0: # %entry 30; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3 31; CHECK-P8-LE-NEXT: xxswapd v2, vs0 32; CHECK-P8-LE-NEXT: blr 33; 34; CHECK-P8-BE-LABEL: ld_0_vector: 35; CHECK-P8-BE: # %bb.0: # %entry 36; CHECK-P8-BE-NEXT: lxvw4x v2, 0, r3 37; CHECK-P8-BE-NEXT: blr 38entry: 39 %0 = inttoptr i64 %ptr to <16 x i8>* 40 %1 = load <16 x i8>, <16 x i8>* %0, align 16 41 ret <16 x i8> %1 42} 43 44; Function Attrs: norecurse nounwind readonly uwtable willreturn 45define dso_local <16 x i8> @ld_unalign16_vector(i8* nocapture readonly %ptr) { 46; CHECK-P10-LABEL: ld_unalign16_vector: 47; CHECK-P10: # %bb.0: # %entry 48; CHECK-P10-NEXT: plxv v2, 1(r3), 0 49; CHECK-P10-NEXT: blr 50; 51; CHECK-P9-LABEL: ld_unalign16_vector: 52; CHECK-P9: # %bb.0: # %entry 53; CHECK-P9-NEXT: li r4, 1 54; CHECK-P9-NEXT: lxvx v2, r3, r4 55; CHECK-P9-NEXT: blr 56; 57; CHECK-P8-LE-LABEL: ld_unalign16_vector: 58; CHECK-P8-LE: # %bb.0: # %entry 59; CHECK-P8-LE-NEXT: addi r3, r3, 1 60; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3 61; CHECK-P8-LE-NEXT: xxswapd v2, vs0 62; CHECK-P8-LE-NEXT: blr 63; 64; CHECK-P8-BE-LABEL: ld_unalign16_vector: 65; CHECK-P8-BE: # %bb.0: # %entry 66; CHECK-P8-BE-NEXT: addi r3, r3, 1 67; CHECK-P8-BE-NEXT: lxvw4x v2, 0, r3 68; CHECK-P8-BE-NEXT: blr 69entry: 70 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1 71 %0 = bitcast i8* %add.ptr to <16 x i8>* 72 %1 = load <16 x i8>, <16 x i8>* %0, align 16 73 ret <16 x i8> %1 74} 75 76; Function Attrs: norecurse nounwind readonly uwtable willreturn 77define dso_local <16 x i8> @ld_align16_vector(i8* nocapture readonly %ptr) { 78; CHECK-P10-LABEL: ld_align16_vector: 79; CHECK-P10: # %bb.0: # %entry 80; CHECK-P10-NEXT: plxv v2, 8(r3), 0 81; CHECK-P10-NEXT: blr 82; 83; CHECK-P9-LABEL: ld_align16_vector: 84; CHECK-P9: # %bb.0: # %entry 85; CHECK-P9-NEXT: li r4, 8 86; CHECK-P9-NEXT: lxvx v2, r3, r4 87; CHECK-P9-NEXT: blr 88; 89; CHECK-P8-LE-LABEL: ld_align16_vector: 90; CHECK-P8-LE: # %bb.0: # %entry 91; CHECK-P8-LE-NEXT: addi r3, r3, 8 92; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3 93; CHECK-P8-LE-NEXT: xxswapd v2, vs0 94; CHECK-P8-LE-NEXT: blr 95; 96; CHECK-P8-BE-LABEL: ld_align16_vector: 97; CHECK-P8-BE: # %bb.0: # %entry 98; CHECK-P8-BE-NEXT: addi r3, r3, 8 99; CHECK-P8-BE-NEXT: lxvw4x v2, 0, r3 100; CHECK-P8-BE-NEXT: blr 101entry: 102 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 103 %0 = bitcast i8* %add.ptr to <16 x i8>* 104 %1 = load <16 x i8>, <16 x i8>* %0, align 16 105 ret <16 x i8> %1 106} 107 108; Function Attrs: norecurse nounwind readonly uwtable willreturn 109define dso_local <16 x i8> @ld_unalign32_vector(i8* nocapture readonly %ptr) { 110; CHECK-P10-LABEL: ld_unalign32_vector: 111; CHECK-P10: # %bb.0: # %entry 112; CHECK-P10-NEXT: plxv v2, 99999(r3), 0 113; CHECK-P10-NEXT: blr 114; 115; CHECK-P9-LABEL: ld_unalign32_vector: 116; CHECK-P9: # %bb.0: # %entry 117; CHECK-P9-NEXT: lis r4, 1 118; CHECK-P9-NEXT: ori r4, r4, 34463 119; CHECK-P9-NEXT: lxvx v2, r3, r4 120; CHECK-P9-NEXT: blr 121; 122; CHECK-P8-LE-LABEL: ld_unalign32_vector: 123; CHECK-P8-LE: # %bb.0: # %entry 124; CHECK-P8-LE-NEXT: lis r4, 1 125; CHECK-P8-LE-NEXT: ori r4, r4, 34463 126; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4 127; CHECK-P8-LE-NEXT: xxswapd v2, vs0 128; CHECK-P8-LE-NEXT: blr 129; 130; CHECK-P8-BE-LABEL: ld_unalign32_vector: 131; CHECK-P8-BE: # %bb.0: # %entry 132; CHECK-P8-BE-NEXT: lis r4, 1 133; CHECK-P8-BE-NEXT: ori r4, r4, 34463 134; CHECK-P8-BE-NEXT: lxvw4x v2, r3, r4 135; CHECK-P8-BE-NEXT: blr 136entry: 137 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999 138 %0 = bitcast i8* %add.ptr to <16 x i8>* 139 %1 = load <16 x i8>, <16 x i8>* %0, align 16 140 ret <16 x i8> %1 141} 142 143; Function Attrs: norecurse nounwind readonly uwtable willreturn 144define dso_local <16 x i8> @ld_align32_vector(i8* nocapture readonly %ptr) { 145; CHECK-P10-LABEL: ld_align32_vector: 146; CHECK-P10: # %bb.0: # %entry 147; CHECK-P10-NEXT: plxv v2, 99999000(r3), 0 148; CHECK-P10-NEXT: blr 149; 150; CHECK-P9-LABEL: ld_align32_vector: 151; CHECK-P9: # %bb.0: # %entry 152; CHECK-P9-NEXT: lis r4, 1525 153; CHECK-P9-NEXT: ori r4, r4, 56600 154; CHECK-P9-NEXT: lxvx v2, r3, r4 155; CHECK-P9-NEXT: blr 156; 157; CHECK-P8-LE-LABEL: ld_align32_vector: 158; CHECK-P8-LE: # %bb.0: # %entry 159; CHECK-P8-LE-NEXT: lis r4, 1525 160; CHECK-P8-LE-NEXT: ori r4, r4, 56600 161; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4 162; CHECK-P8-LE-NEXT: xxswapd v2, vs0 163; CHECK-P8-LE-NEXT: blr 164; 165; CHECK-P8-BE-LABEL: ld_align32_vector: 166; CHECK-P8-BE: # %bb.0: # %entry 167; CHECK-P8-BE-NEXT: lis r4, 1525 168; CHECK-P8-BE-NEXT: ori r4, r4, 56600 169; CHECK-P8-BE-NEXT: lxvw4x v2, r3, r4 170; CHECK-P8-BE-NEXT: blr 171entry: 172 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 173 %0 = bitcast i8* %add.ptr to <16 x i8>* 174 %1 = load <16 x i8>, <16 x i8>* %0, align 16 175 ret <16 x i8> %1 176} 177 178; Function Attrs: norecurse nounwind readonly uwtable willreturn 179define dso_local <16 x i8> @ld_unalign64_vector(i8* nocapture readonly %ptr) { 180; CHECK-P10-LABEL: ld_unalign64_vector: 181; CHECK-P10: # %bb.0: # %entry 182; CHECK-P10-NEXT: pli r4, 232 183; CHECK-P10-NEXT: pli r5, 3567587329 184; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 185; CHECK-P10-NEXT: lxvx v2, r3, r5 186; CHECK-P10-NEXT: blr 187; 188; CHECK-P9-LABEL: ld_unalign64_vector: 189; CHECK-P9: # %bb.0: # %entry 190; CHECK-P9-NEXT: li r4, 29 191; CHECK-P9-NEXT: rldic r4, r4, 35, 24 192; CHECK-P9-NEXT: oris r4, r4, 54437 193; CHECK-P9-NEXT: ori r4, r4, 4097 194; CHECK-P9-NEXT: lxvx v2, r3, r4 195; CHECK-P9-NEXT: blr 196; 197; CHECK-P8-LE-LABEL: ld_unalign64_vector: 198; CHECK-P8-LE: # %bb.0: # %entry 199; CHECK-P8-LE-NEXT: li r4, 29 200; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 201; CHECK-P8-LE-NEXT: oris r4, r4, 54437 202; CHECK-P8-LE-NEXT: ori r4, r4, 4097 203; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4 204; CHECK-P8-LE-NEXT: xxswapd v2, vs0 205; CHECK-P8-LE-NEXT: blr 206; 207; CHECK-P8-BE-LABEL: ld_unalign64_vector: 208; CHECK-P8-BE: # %bb.0: # %entry 209; CHECK-P8-BE-NEXT: li r4, 29 210; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 211; CHECK-P8-BE-NEXT: oris r4, r4, 54437 212; CHECK-P8-BE-NEXT: ori r4, r4, 4097 213; CHECK-P8-BE-NEXT: lxvw4x v2, r3, r4 214; CHECK-P8-BE-NEXT: blr 215entry: 216 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000001 217 %0 = bitcast i8* %add.ptr to <16 x i8>* 218 %1 = load <16 x i8>, <16 x i8>* %0, align 16 219 ret <16 x i8> %1 220} 221 222; Function Attrs: norecurse nounwind readonly uwtable willreturn 223define dso_local <16 x i8> @ld_align64_vector(i8* nocapture readonly %ptr) { 224; CHECK-P10-LABEL: ld_align64_vector: 225; CHECK-P10: # %bb.0: # %entry 226; CHECK-P10-NEXT: pli r4, 244140625 227; CHECK-P10-NEXT: rldic r4, r4, 12, 24 228; CHECK-P10-NEXT: lxvx v2, r3, r4 229; CHECK-P10-NEXT: blr 230; 231; CHECK-P9-LABEL: ld_align64_vector: 232; CHECK-P9: # %bb.0: # %entry 233; CHECK-P9-NEXT: lis r4, 3725 234; CHECK-P9-NEXT: ori r4, r4, 19025 235; CHECK-P9-NEXT: rldic r4, r4, 12, 24 236; CHECK-P9-NEXT: lxvx v2, r3, r4 237; CHECK-P9-NEXT: blr 238; 239; CHECK-P8-LE-LABEL: ld_align64_vector: 240; CHECK-P8-LE: # %bb.0: # %entry 241; CHECK-P8-LE-NEXT: lis r4, 3725 242; CHECK-P8-LE-NEXT: ori r4, r4, 19025 243; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 244; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4 245; CHECK-P8-LE-NEXT: xxswapd v2, vs0 246; CHECK-P8-LE-NEXT: blr 247; 248; CHECK-P8-BE-LABEL: ld_align64_vector: 249; CHECK-P8-BE: # %bb.0: # %entry 250; CHECK-P8-BE-NEXT: lis r4, 3725 251; CHECK-P8-BE-NEXT: ori r4, r4, 19025 252; CHECK-P8-BE-NEXT: rldic r4, r4, 12, 24 253; CHECK-P8-BE-NEXT: lxvw4x v2, r3, r4 254; CHECK-P8-BE-NEXT: blr 255entry: 256 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 257 %0 = bitcast i8* %add.ptr to <16 x i8>* 258 %1 = load <16 x i8>, <16 x i8>* %0, align 16 259 ret <16 x i8> %1 260} 261 262; Function Attrs: norecurse nounwind readonly uwtable willreturn 263define dso_local <16 x i8> @ld_reg_vector(i8* nocapture readonly %ptr, i64 %off) { 264; CHECK-LABEL: ld_reg_vector: 265; CHECK: # %bb.0: # %entry 266; CHECK-NEXT: lxvx v2, r3, r4 267; CHECK-NEXT: blr 268; 269; CHECK-P8-LE-LABEL: ld_reg_vector: 270; CHECK-P8-LE: # %bb.0: # %entry 271; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4 272; CHECK-P8-LE-NEXT: xxswapd v2, vs0 273; CHECK-P8-LE-NEXT: blr 274; 275; CHECK-P8-BE-LABEL: ld_reg_vector: 276; CHECK-P8-BE: # %bb.0: # %entry 277; CHECK-P8-BE-NEXT: lxvw4x v2, r3, r4 278; CHECK-P8-BE-NEXT: blr 279entry: 280 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 281 %0 = bitcast i8* %add.ptr to <16 x i8>* 282 %1 = load <16 x i8>, <16 x i8>* %0, align 16 283 ret <16 x i8> %1 284} 285 286; Function Attrs: norecurse nounwind readonly uwtable willreturn 287define dso_local <16 x i8> @ld_or_vector(i64 %ptr, i8 zeroext %off) { 288; CHECK-LABEL: ld_or_vector: 289; CHECK: # %bb.0: # %entry 290; CHECK-NEXT: or r3, r4, r3 291; CHECK-NEXT: lxv v2, 0(r3) 292; CHECK-NEXT: blr 293; 294; CHECK-P8-LE-LABEL: ld_or_vector: 295; CHECK-P8-LE: # %bb.0: # %entry 296; CHECK-P8-LE-NEXT: or r3, r4, r3 297; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3 298; CHECK-P8-LE-NEXT: xxswapd v2, vs0 299; CHECK-P8-LE-NEXT: blr 300; 301; CHECK-P8-BE-LABEL: ld_or_vector: 302; CHECK-P8-BE: # %bb.0: # %entry 303; CHECK-P8-BE-NEXT: or r3, r4, r3 304; CHECK-P8-BE-NEXT: lxvw4x v2, 0, r3 305; CHECK-P8-BE-NEXT: blr 306entry: 307 %conv = zext i8 %off to i64 308 %or = or i64 %conv, %ptr 309 %0 = inttoptr i64 %or to <16 x i8>* 310 %1 = load <16 x i8>, <16 x i8>* %0, align 16 311 ret <16 x i8> %1 312} 313 314; Function Attrs: norecurse nounwind readonly uwtable willreturn 315define dso_local <16 x i8> @ld_or2_vector(i64 %ptr, i8 zeroext %off) { 316; CHECK-LABEL: ld_or2_vector: 317; CHECK: # %bb.0: # %entry 318; CHECK-NEXT: rldicr r3, r3, 0, 51 319; CHECK-NEXT: lxvx v2, r3, r4 320; CHECK-NEXT: blr 321; 322; CHECK-P8-LE-LABEL: ld_or2_vector: 323; CHECK-P8-LE: # %bb.0: # %entry 324; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 51 325; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4 326; CHECK-P8-LE-NEXT: xxswapd v2, vs0 327; CHECK-P8-LE-NEXT: blr 328; 329; CHECK-P8-BE-LABEL: ld_or2_vector: 330; CHECK-P8-BE: # %bb.0: # %entry 331; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 51 332; CHECK-P8-BE-NEXT: lxvw4x v2, r3, r4 333; CHECK-P8-BE-NEXT: blr 334entry: 335 %and = and i64 %ptr, -4096 336 %conv = zext i8 %off to i64 337 %or = or i64 %and, %conv 338 %0 = inttoptr i64 %or to <16 x i8>* 339 %1 = load <16 x i8>, <16 x i8>* %0, align 16 340 ret <16 x i8> %1 341} 342 343; Function Attrs: norecurse nounwind readonly uwtable willreturn 344define dso_local <16 x i8> @ld_not_disjoint16_vector(i64 %ptr) { 345; CHECK-LABEL: ld_not_disjoint16_vector: 346; CHECK: # %bb.0: # %entry 347; CHECK-NEXT: ori r3, r3, 6 348; CHECK-NEXT: lxv v2, 0(r3) 349; CHECK-NEXT: blr 350; 351; CHECK-P8-LE-LABEL: ld_not_disjoint16_vector: 352; CHECK-P8-LE: # %bb.0: # %entry 353; CHECK-P8-LE-NEXT: ori r3, r3, 6 354; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3 355; CHECK-P8-LE-NEXT: xxswapd v2, vs0 356; CHECK-P8-LE-NEXT: blr 357; 358; CHECK-P8-BE-LABEL: ld_not_disjoint16_vector: 359; CHECK-P8-BE: # %bb.0: # %entry 360; CHECK-P8-BE-NEXT: ori r3, r3, 6 361; CHECK-P8-BE-NEXT: lxvw4x v2, 0, r3 362; CHECK-P8-BE-NEXT: blr 363entry: 364 %or = or i64 %ptr, 6 365 %0 = inttoptr i64 %or to <16 x i8>* 366 %1 = load <16 x i8>, <16 x i8>* %0, align 16 367 ret <16 x i8> %1 368} 369 370; Function Attrs: norecurse nounwind readonly uwtable willreturn 371define dso_local <16 x i8> @ld_disjoint_unalign16_vector(i64 %ptr) { 372; CHECK-P10-LABEL: ld_disjoint_unalign16_vector: 373; CHECK-P10: # %bb.0: # %entry 374; CHECK-P10-NEXT: rldicr r3, r3, 0, 51 375; CHECK-P10-NEXT: plxv v2, 6(r3), 0 376; CHECK-P10-NEXT: blr 377; 378; CHECK-P9-LABEL: ld_disjoint_unalign16_vector: 379; CHECK-P9: # %bb.0: # %entry 380; CHECK-P9-NEXT: rldicr r3, r3, 0, 51 381; CHECK-P9-NEXT: li r4, 6 382; CHECK-P9-NEXT: lxvx v2, r3, r4 383; CHECK-P9-NEXT: blr 384; 385; CHECK-P8-LE-LABEL: ld_disjoint_unalign16_vector: 386; CHECK-P8-LE: # %bb.0: # %entry 387; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 51 388; CHECK-P8-LE-NEXT: ori r3, r3, 6 389; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3 390; CHECK-P8-LE-NEXT: xxswapd v2, vs0 391; CHECK-P8-LE-NEXT: blr 392; 393; CHECK-P8-BE-LABEL: ld_disjoint_unalign16_vector: 394; CHECK-P8-BE: # %bb.0: # %entry 395; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 51 396; CHECK-P8-BE-NEXT: ori r3, r3, 6 397; CHECK-P8-BE-NEXT: lxvw4x v2, 0, r3 398; CHECK-P8-BE-NEXT: blr 399entry: 400 %and = and i64 %ptr, -4096 401 %or = or i64 %and, 6 402 %0 = inttoptr i64 %or to <16 x i8>* 403 %1 = load <16 x i8>, <16 x i8>* %0, align 16 404 ret <16 x i8> %1 405} 406 407; Function Attrs: norecurse nounwind readonly uwtable willreturn 408define dso_local <16 x i8> @ld_disjoint_align16_vector(i64 %ptr) { 409; CHECK-P10-LABEL: ld_disjoint_align16_vector: 410; CHECK-P10: # %bb.0: # %entry 411; CHECK-P10-NEXT: rldicr r3, r3, 0, 51 412; CHECK-P10-NEXT: plxv v2, 24(r3), 0 413; CHECK-P10-NEXT: blr 414; 415; CHECK-P9-LABEL: ld_disjoint_align16_vector: 416; CHECK-P9: # %bb.0: # %entry 417; CHECK-P9-NEXT: rldicr r3, r3, 0, 51 418; CHECK-P9-NEXT: li r4, 24 419; CHECK-P9-NEXT: lxvx v2, r3, r4 420; CHECK-P9-NEXT: blr 421; 422; CHECK-P8-LE-LABEL: ld_disjoint_align16_vector: 423; CHECK-P8-LE: # %bb.0: # %entry 424; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 51 425; CHECK-P8-LE-NEXT: ori r3, r3, 24 426; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3 427; CHECK-P8-LE-NEXT: xxswapd v2, vs0 428; CHECK-P8-LE-NEXT: blr 429; 430; CHECK-P8-BE-LABEL: ld_disjoint_align16_vector: 431; CHECK-P8-BE: # %bb.0: # %entry 432; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 51 433; CHECK-P8-BE-NEXT: ori r3, r3, 24 434; CHECK-P8-BE-NEXT: lxvw4x v2, 0, r3 435; CHECK-P8-BE-NEXT: blr 436entry: 437 %and = and i64 %ptr, -4096 438 %or = or i64 %and, 24 439 %0 = inttoptr i64 %or to <16 x i8>* 440 %1 = load <16 x i8>, <16 x i8>* %0, align 16 441 ret <16 x i8> %1 442} 443 444; Function Attrs: norecurse nounwind readonly uwtable willreturn 445define dso_local <16 x i8> @ld_not_disjoint32_vector(i64 %ptr) { 446; CHECK-LABEL: ld_not_disjoint32_vector: 447; CHECK: # %bb.0: # %entry 448; CHECK-NEXT: ori r3, r3, 34463 449; CHECK-NEXT: oris r3, r3, 1 450; CHECK-NEXT: lxv v2, 0(r3) 451; CHECK-NEXT: blr 452; 453; CHECK-P8-LE-LABEL: ld_not_disjoint32_vector: 454; CHECK-P8-LE: # %bb.0: # %entry 455; CHECK-P8-LE-NEXT: ori r3, r3, 34463 456; CHECK-P8-LE-NEXT: oris r3, r3, 1 457; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3 458; CHECK-P8-LE-NEXT: xxswapd v2, vs0 459; CHECK-P8-LE-NEXT: blr 460; 461; CHECK-P8-BE-LABEL: ld_not_disjoint32_vector: 462; CHECK-P8-BE: # %bb.0: # %entry 463; CHECK-P8-BE-NEXT: ori r3, r3, 34463 464; CHECK-P8-BE-NEXT: oris r3, r3, 1 465; CHECK-P8-BE-NEXT: lxvw4x v2, 0, r3 466; CHECK-P8-BE-NEXT: blr 467entry: 468 %or = or i64 %ptr, 99999 469 %0 = inttoptr i64 %or to <16 x i8>* 470 %1 = load <16 x i8>, <16 x i8>* %0, align 16 471 ret <16 x i8> %1 472} 473 474; Function Attrs: norecurse nounwind readonly uwtable willreturn 475define dso_local <16 x i8> @ld_disjoint_unalign32_vector(i64 %ptr) { 476; CHECK-P10-LABEL: ld_disjoint_unalign32_vector: 477; CHECK-P10: # %bb.0: # %entry 478; CHECK-P10-NEXT: rldicr r3, r3, 0, 43 479; CHECK-P10-NEXT: plxv v2, 99999(r3), 0 480; CHECK-P10-NEXT: blr 481; 482; CHECK-P9-LABEL: ld_disjoint_unalign32_vector: 483; CHECK-P9: # %bb.0: # %entry 484; CHECK-P9-NEXT: lis r4, 1 485; CHECK-P9-NEXT: rldicr r3, r3, 0, 43 486; CHECK-P9-NEXT: ori r4, r4, 34463 487; CHECK-P9-NEXT: lxvx v2, r3, r4 488; CHECK-P9-NEXT: blr 489; 490; CHECK-P8-LE-LABEL: ld_disjoint_unalign32_vector: 491; CHECK-P8-LE: # %bb.0: # %entry 492; CHECK-P8-LE-NEXT: lis r4, 1 493; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 43 494; CHECK-P8-LE-NEXT: ori r4, r4, 34463 495; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4 496; CHECK-P8-LE-NEXT: xxswapd v2, vs0 497; CHECK-P8-LE-NEXT: blr 498; 499; CHECK-P8-BE-LABEL: ld_disjoint_unalign32_vector: 500; CHECK-P8-BE: # %bb.0: # %entry 501; CHECK-P8-BE-NEXT: lis r4, 1 502; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 43 503; CHECK-P8-BE-NEXT: ori r4, r4, 34463 504; CHECK-P8-BE-NEXT: lxvw4x v2, r3, r4 505; CHECK-P8-BE-NEXT: blr 506entry: 507 %and = and i64 %ptr, -1048576 508 %or = or i64 %and, 99999 509 %0 = inttoptr i64 %or to <16 x i8>* 510 %1 = load <16 x i8>, <16 x i8>* %0, align 16 511 ret <16 x i8> %1 512} 513 514; Function Attrs: norecurse nounwind readonly uwtable willreturn 515define dso_local <16 x i8> @ld_disjoint_align32_vector(i64 %ptr) { 516; CHECK-P10-LABEL: ld_disjoint_align32_vector: 517; CHECK-P10: # %bb.0: # %entry 518; CHECK-P10-NEXT: lis r4, -15264 519; CHECK-P10-NEXT: and r3, r3, r4 520; CHECK-P10-NEXT: plxv v2, 999990000(r3), 0 521; CHECK-P10-NEXT: blr 522; 523; CHECK-P9-LABEL: ld_disjoint_align32_vector: 524; CHECK-P9: # %bb.0: # %entry 525; CHECK-P9-NEXT: lis r4, -15264 526; CHECK-P9-NEXT: and r3, r3, r4 527; CHECK-P9-NEXT: lis r4, 15258 528; CHECK-P9-NEXT: ori r4, r4, 41712 529; CHECK-P9-NEXT: lxvx v2, r3, r4 530; CHECK-P9-NEXT: blr 531; 532; CHECK-P8-LE-LABEL: ld_disjoint_align32_vector: 533; CHECK-P8-LE: # %bb.0: # %entry 534; CHECK-P8-LE-NEXT: lis r4, -15264 535; CHECK-P8-LE-NEXT: lis r5, 15258 536; CHECK-P8-LE-NEXT: and r3, r3, r4 537; CHECK-P8-LE-NEXT: ori r4, r5, 41712 538; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4 539; CHECK-P8-LE-NEXT: xxswapd v2, vs0 540; CHECK-P8-LE-NEXT: blr 541; 542; CHECK-P8-BE-LABEL: ld_disjoint_align32_vector: 543; CHECK-P8-BE: # %bb.0: # %entry 544; CHECK-P8-BE-NEXT: lis r4, -15264 545; CHECK-P8-BE-NEXT: lis r5, 15258 546; CHECK-P8-BE-NEXT: and r3, r3, r4 547; CHECK-P8-BE-NEXT: ori r4, r5, 41712 548; CHECK-P8-BE-NEXT: lxvw4x v2, r3, r4 549; CHECK-P8-BE-NEXT: blr 550entry: 551 %and = and i64 %ptr, -1000341504 552 %or = or i64 %and, 999990000 553 %0 = inttoptr i64 %or to <16 x i8>* 554 %1 = load <16 x i8>, <16 x i8>* %0, align 16 555 ret <16 x i8> %1 556} 557 558; Function Attrs: norecurse nounwind readonly uwtable willreturn 559define dso_local <16 x i8> @ld_not_disjoint64_vector(i64 %ptr) { 560; CHECK-P10-LABEL: ld_not_disjoint64_vector: 561; CHECK-P10: # %bb.0: # %entry 562; CHECK-P10-NEXT: pli r4, 232 563; CHECK-P10-NEXT: pli r5, 3567587329 564; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 565; CHECK-P10-NEXT: or r3, r3, r5 566; CHECK-P10-NEXT: lxv v2, 0(r3) 567; CHECK-P10-NEXT: blr 568; 569; CHECK-P9-LABEL: ld_not_disjoint64_vector: 570; CHECK-P9: # %bb.0: # %entry 571; CHECK-P9-NEXT: li r4, 29 572; CHECK-P9-NEXT: rldic r4, r4, 35, 24 573; CHECK-P9-NEXT: oris r4, r4, 54437 574; CHECK-P9-NEXT: ori r4, r4, 4097 575; CHECK-P9-NEXT: or r3, r3, r4 576; CHECK-P9-NEXT: lxv v2, 0(r3) 577; CHECK-P9-NEXT: blr 578; 579; CHECK-P8-LE-LABEL: ld_not_disjoint64_vector: 580; CHECK-P8-LE: # %bb.0: # %entry 581; CHECK-P8-LE-NEXT: li r4, 29 582; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 583; CHECK-P8-LE-NEXT: oris r4, r4, 54437 584; CHECK-P8-LE-NEXT: ori r4, r4, 4097 585; CHECK-P8-LE-NEXT: or r3, r3, r4 586; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3 587; CHECK-P8-LE-NEXT: xxswapd v2, vs0 588; CHECK-P8-LE-NEXT: blr 589; 590; CHECK-P8-BE-LABEL: ld_not_disjoint64_vector: 591; CHECK-P8-BE: # %bb.0: # %entry 592; CHECK-P8-BE-NEXT: li r4, 29 593; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 594; CHECK-P8-BE-NEXT: oris r4, r4, 54437 595; CHECK-P8-BE-NEXT: ori r4, r4, 4097 596; CHECK-P8-BE-NEXT: or r3, r3, r4 597; CHECK-P8-BE-NEXT: lxvw4x v2, 0, r3 598; CHECK-P8-BE-NEXT: blr 599entry: 600 %or = or i64 %ptr, 1000000000001 601 %0 = inttoptr i64 %or to <16 x i8>* 602 %1 = load <16 x i8>, <16 x i8>* %0, align 16 603 ret <16 x i8> %1 604} 605 606; Function Attrs: norecurse nounwind readonly uwtable willreturn 607define dso_local <16 x i8> @ld_disjoint_unalign64_vector(i64 %ptr) { 608; CHECK-P10-LABEL: ld_disjoint_unalign64_vector: 609; CHECK-P10: # %bb.0: # %entry 610; CHECK-P10-NEXT: pli r4, 232 611; CHECK-P10-NEXT: pli r5, 3567587329 612; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 613; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 614; CHECK-P10-NEXT: lxvx v2, r3, r5 615; CHECK-P10-NEXT: blr 616; 617; CHECK-P9-LABEL: ld_disjoint_unalign64_vector: 618; CHECK-P9: # %bb.0: # %entry 619; CHECK-P9-NEXT: li r4, 29 620; CHECK-P9-NEXT: rldicr r3, r3, 0, 23 621; CHECK-P9-NEXT: rldic r4, r4, 35, 24 622; CHECK-P9-NEXT: oris r4, r4, 54437 623; CHECK-P9-NEXT: ori r4, r4, 4097 624; CHECK-P9-NEXT: lxvx v2, r3, r4 625; CHECK-P9-NEXT: blr 626; 627; CHECK-P8-LE-LABEL: ld_disjoint_unalign64_vector: 628; CHECK-P8-LE: # %bb.0: # %entry 629; CHECK-P8-LE-NEXT: li r4, 29 630; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23 631; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 632; CHECK-P8-LE-NEXT: oris r4, r4, 54437 633; CHECK-P8-LE-NEXT: ori r4, r4, 4097 634; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4 635; CHECK-P8-LE-NEXT: xxswapd v2, vs0 636; CHECK-P8-LE-NEXT: blr 637; 638; CHECK-P8-BE-LABEL: ld_disjoint_unalign64_vector: 639; CHECK-P8-BE: # %bb.0: # %entry 640; CHECK-P8-BE-NEXT: li r4, 29 641; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23 642; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 643; CHECK-P8-BE-NEXT: oris r4, r4, 54437 644; CHECK-P8-BE-NEXT: ori r4, r4, 4097 645; CHECK-P8-BE-NEXT: lxvw4x v2, r3, r4 646; CHECK-P8-BE-NEXT: blr 647entry: 648 %and = and i64 %ptr, -1099511627776 649 %or = or i64 %and, 1000000000001 650 %0 = inttoptr i64 %or to <16 x i8>* 651 %1 = load <16 x i8>, <16 x i8>* %0, align 16 652 ret <16 x i8> %1 653} 654 655; Function Attrs: norecurse nounwind readonly uwtable willreturn 656define dso_local <16 x i8> @ld_disjoint_align64_vector(i64 %ptr) { 657; CHECK-P10-LABEL: ld_disjoint_align64_vector: 658; CHECK-P10: # %bb.0: # %entry 659; CHECK-P10-NEXT: pli r4, 244140625 660; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 661; CHECK-P10-NEXT: rldic r4, r4, 12, 24 662; CHECK-P10-NEXT: lxvx v2, r3, r4 663; CHECK-P10-NEXT: blr 664; 665; CHECK-P9-LABEL: ld_disjoint_align64_vector: 666; CHECK-P9: # %bb.0: # %entry 667; CHECK-P9-NEXT: lis r4, 3725 668; CHECK-P9-NEXT: rldicr r3, r3, 0, 23 669; CHECK-P9-NEXT: ori r4, r4, 19025 670; CHECK-P9-NEXT: rldic r4, r4, 12, 24 671; CHECK-P9-NEXT: lxvx v2, r3, r4 672; CHECK-P9-NEXT: blr 673; 674; CHECK-P8-LE-LABEL: ld_disjoint_align64_vector: 675; CHECK-P8-LE: # %bb.0: # %entry 676; CHECK-P8-LE-NEXT: lis r4, 3725 677; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23 678; CHECK-P8-LE-NEXT: ori r4, r4, 19025 679; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 680; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4 681; CHECK-P8-LE-NEXT: xxswapd v2, vs0 682; CHECK-P8-LE-NEXT: blr 683; 684; CHECK-P8-BE-LABEL: ld_disjoint_align64_vector: 685; CHECK-P8-BE: # %bb.0: # %entry 686; CHECK-P8-BE-NEXT: lis r4, 3725 687; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23 688; CHECK-P8-BE-NEXT: ori r4, r4, 19025 689; CHECK-P8-BE-NEXT: rldic r4, r4, 12, 24 690; CHECK-P8-BE-NEXT: lxvw4x v2, r3, r4 691; CHECK-P8-BE-NEXT: blr 692entry: 693 %and = and i64 %ptr, -1099511627776 694 %or = or i64 %and, 1000000000000 695 %0 = inttoptr i64 %or to <16 x i8>* 696 %1 = load <16 x i8>, <16 x i8>* %0, align 4096 697 ret <16 x i8> %1 698} 699 700; Function Attrs: norecurse nounwind readonly uwtable willreturn 701define dso_local <16 x i8> @ld_cst_unalign16_vector() { 702; CHECK-LABEL: ld_cst_unalign16_vector: 703; CHECK: # %bb.0: # %entry 704; CHECK-NEXT: li r3, 255 705; CHECK-NEXT: lxv v2, 0(r3) 706; CHECK-NEXT: blr 707; 708; CHECK-P8-LE-LABEL: ld_cst_unalign16_vector: 709; CHECK-P8-LE: # %bb.0: # %entry 710; CHECK-P8-LE-NEXT: li r3, 255 711; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3 712; CHECK-P8-LE-NEXT: xxswapd v2, vs0 713; CHECK-P8-LE-NEXT: blr 714; 715; CHECK-P8-BE-LABEL: ld_cst_unalign16_vector: 716; CHECK-P8-BE: # %bb.0: # %entry 717; CHECK-P8-BE-NEXT: li r3, 255 718; CHECK-P8-BE-NEXT: lxvw4x v2, 0, r3 719; CHECK-P8-BE-NEXT: blr 720entry: 721 %0 = load <16 x i8>, <16 x i8>* inttoptr (i64 255 to <16 x i8>*), align 16 722 ret <16 x i8> %0 723} 724 725; Function Attrs: norecurse nounwind readonly uwtable willreturn 726define dso_local <16 x i8> @ld_cst_align16_vector() { 727; CHECK-LABEL: ld_cst_align16_vector: 728; CHECK: # %bb.0: # %entry 729; CHECK-NEXT: lxv v2, 4080(0) 730; CHECK-NEXT: blr 731; 732; CHECK-P8-LE-LABEL: ld_cst_align16_vector: 733; CHECK-P8-LE: # %bb.0: # %entry 734; CHECK-P8-LE-NEXT: li r3, 4080 735; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3 736; CHECK-P8-LE-NEXT: xxswapd v2, vs0 737; CHECK-P8-LE-NEXT: blr 738; 739; CHECK-P8-BE-LABEL: ld_cst_align16_vector: 740; CHECK-P8-BE: # %bb.0: # %entry 741; CHECK-P8-BE-NEXT: li r3, 4080 742; CHECK-P8-BE-NEXT: lxvw4x v2, 0, r3 743; CHECK-P8-BE-NEXT: blr 744entry: 745 %0 = load <16 x i8>, <16 x i8>* inttoptr (i64 4080 to <16 x i8>*), align 16 746 ret <16 x i8> %0 747} 748 749; Function Attrs: norecurse nounwind readonly uwtable willreturn 750define dso_local <16 x i8> @ld_cst_unalign32_vector() { 751; CHECK-P10-LABEL: ld_cst_unalign32_vector: 752; CHECK-P10: # %bb.0: # %entry 753; CHECK-P10-NEXT: pli r3, 99999 754; CHECK-P10-NEXT: lxv v2, 0(r3) 755; CHECK-P10-NEXT: blr 756; 757; CHECK-P9-LABEL: ld_cst_unalign32_vector: 758; CHECK-P9: # %bb.0: # %entry 759; CHECK-P9-NEXT: lis r3, 1 760; CHECK-P9-NEXT: ori r3, r3, 34463 761; CHECK-P9-NEXT: lxv v2, 0(r3) 762; CHECK-P9-NEXT: blr 763; 764; CHECK-P8-LE-LABEL: ld_cst_unalign32_vector: 765; CHECK-P8-LE: # %bb.0: # %entry 766; CHECK-P8-LE-NEXT: lis r3, 1 767; CHECK-P8-LE-NEXT: ori r3, r3, 34463 768; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3 769; CHECK-P8-LE-NEXT: xxswapd v2, vs0 770; CHECK-P8-LE-NEXT: blr 771; 772; CHECK-P8-BE-LABEL: ld_cst_unalign32_vector: 773; CHECK-P8-BE: # %bb.0: # %entry 774; CHECK-P8-BE-NEXT: lis r3, 1 775; CHECK-P8-BE-NEXT: ori r3, r3, 34463 776; CHECK-P8-BE-NEXT: lxvw4x v2, 0, r3 777; CHECK-P8-BE-NEXT: blr 778entry: 779 %0 = load <16 x i8>, <16 x i8>* inttoptr (i64 99999 to <16 x i8>*), align 16 780 ret <16 x i8> %0 781} 782 783; Function Attrs: norecurse nounwind readonly uwtable willreturn 784define dso_local <16 x i8> @ld_cst_align32_vector() { 785; CHECK-P10-LABEL: ld_cst_align32_vector: 786; CHECK-P10: # %bb.0: # %entry 787; CHECK-P10-NEXT: pli r3, 9999900 788; CHECK-P10-NEXT: lxv v2, 0(r3) 789; CHECK-P10-NEXT: blr 790; 791; CHECK-P9-LABEL: ld_cst_align32_vector: 792; CHECK-P9: # %bb.0: # %entry 793; CHECK-P9-NEXT: lis r3, 152 794; CHECK-P9-NEXT: ori r3, r3, 38428 795; CHECK-P9-NEXT: lxv v2, 0(r3) 796; CHECK-P9-NEXT: blr 797; 798; CHECK-P8-LE-LABEL: ld_cst_align32_vector: 799; CHECK-P8-LE: # %bb.0: # %entry 800; CHECK-P8-LE-NEXT: lis r3, 152 801; CHECK-P8-LE-NEXT: ori r3, r3, 38428 802; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3 803; CHECK-P8-LE-NEXT: xxswapd v2, vs0 804; CHECK-P8-LE-NEXT: blr 805; 806; CHECK-P8-BE-LABEL: ld_cst_align32_vector: 807; CHECK-P8-BE: # %bb.0: # %entry 808; CHECK-P8-BE-NEXT: lis r3, 152 809; CHECK-P8-BE-NEXT: ori r3, r3, 38428 810; CHECK-P8-BE-NEXT: lxvw4x v2, 0, r3 811; CHECK-P8-BE-NEXT: blr 812entry: 813 %0 = load <16 x i8>, <16 x i8>* inttoptr (i64 9999900 to <16 x i8>*), align 16 814 ret <16 x i8> %0 815} 816 817; Function Attrs: norecurse nounwind readonly uwtable willreturn 818define dso_local <16 x i8> @ld_cst_unalign64_vector() { 819; CHECK-P10-LABEL: ld_cst_unalign64_vector: 820; CHECK-P10: # %bb.0: # %entry 821; CHECK-P10-NEXT: pli r3, 232 822; CHECK-P10-NEXT: pli r4, 3567587329 823; CHECK-P10-NEXT: rldimi r4, r3, 32, 0 824; CHECK-P10-NEXT: lxv v2, 0(r4) 825; CHECK-P10-NEXT: blr 826; 827; CHECK-P9-LABEL: ld_cst_unalign64_vector: 828; CHECK-P9: # %bb.0: # %entry 829; CHECK-P9-NEXT: li r3, 29 830; CHECK-P9-NEXT: rldic r3, r3, 35, 24 831; CHECK-P9-NEXT: oris r3, r3, 54437 832; CHECK-P9-NEXT: ori r3, r3, 4097 833; CHECK-P9-NEXT: lxv v2, 0(r3) 834; CHECK-P9-NEXT: blr 835; 836; CHECK-P8-LE-LABEL: ld_cst_unalign64_vector: 837; CHECK-P8-LE: # %bb.0: # %entry 838; CHECK-P8-LE-NEXT: li r3, 29 839; CHECK-P8-LE-NEXT: rldic r3, r3, 35, 24 840; CHECK-P8-LE-NEXT: oris r3, r3, 54437 841; CHECK-P8-LE-NEXT: ori r3, r3, 4097 842; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3 843; CHECK-P8-LE-NEXT: xxswapd v2, vs0 844; CHECK-P8-LE-NEXT: blr 845; 846; CHECK-P8-BE-LABEL: ld_cst_unalign64_vector: 847; CHECK-P8-BE: # %bb.0: # %entry 848; CHECK-P8-BE-NEXT: li r3, 29 849; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 24 850; CHECK-P8-BE-NEXT: oris r3, r3, 54437 851; CHECK-P8-BE-NEXT: ori r3, r3, 4097 852; CHECK-P8-BE-NEXT: lxvw4x v2, 0, r3 853; CHECK-P8-BE-NEXT: blr 854entry: 855 %0 = load <16 x i8>, <16 x i8>* inttoptr (i64 1000000000001 to <16 x i8>*), align 16 856 ret <16 x i8> %0 857} 858 859; Function Attrs: norecurse nounwind readonly uwtable willreturn 860define dso_local <16 x i8> @ld_cst_align64_vector() { 861; CHECK-P10-LABEL: ld_cst_align64_vector: 862; CHECK-P10: # %bb.0: # %entry 863; CHECK-P10-NEXT: pli r3, 244140625 864; CHECK-P10-NEXT: rldic r3, r3, 12, 24 865; CHECK-P10-NEXT: lxv v2, 0(r3) 866; CHECK-P10-NEXT: blr 867; 868; CHECK-P9-LABEL: ld_cst_align64_vector: 869; CHECK-P9: # %bb.0: # %entry 870; CHECK-P9-NEXT: lis r3, 3725 871; CHECK-P9-NEXT: ori r3, r3, 19025 872; CHECK-P9-NEXT: rldic r3, r3, 12, 24 873; CHECK-P9-NEXT: lxv v2, 0(r3) 874; CHECK-P9-NEXT: blr 875; 876; CHECK-P8-LE-LABEL: ld_cst_align64_vector: 877; CHECK-P8-LE: # %bb.0: # %entry 878; CHECK-P8-LE-NEXT: lis r3, 3725 879; CHECK-P8-LE-NEXT: ori r3, r3, 19025 880; CHECK-P8-LE-NEXT: rldic r3, r3, 12, 24 881; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3 882; CHECK-P8-LE-NEXT: xxswapd v2, vs0 883; CHECK-P8-LE-NEXT: blr 884; 885; CHECK-P8-BE-LABEL: ld_cst_align64_vector: 886; CHECK-P8-BE: # %bb.0: # %entry 887; CHECK-P8-BE-NEXT: lis r3, 3725 888; CHECK-P8-BE-NEXT: ori r3, r3, 19025 889; CHECK-P8-BE-NEXT: rldic r3, r3, 12, 24 890; CHECK-P8-BE-NEXT: lxvw4x v2, 0, r3 891; CHECK-P8-BE-NEXT: blr 892entry: 893 %0 = load <16 x i8>, <16 x i8>* inttoptr (i64 1000000000000 to <16 x i8>*), align 4096 894 ret <16 x i8> %0 895} 896 897; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 898define dso_local void @st_0_vector(i64 %ptr, <16 x i8> %str) { 899; CHECK-LABEL: st_0_vector: 900; CHECK: # %bb.0: # %entry 901; CHECK-NEXT: stxv v2, 0(r3) 902; CHECK-NEXT: blr 903; 904; CHECK-P8-LE-LABEL: st_0_vector: 905; CHECK-P8-LE: # %bb.0: # %entry 906; CHECK-P8-LE-NEXT: xxswapd vs0, v2 907; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3 908; CHECK-P8-LE-NEXT: blr 909; 910; CHECK-P8-BE-LABEL: st_0_vector: 911; CHECK-P8-BE: # %bb.0: # %entry 912; CHECK-P8-BE-NEXT: stxvw4x v2, 0, r3 913; CHECK-P8-BE-NEXT: blr 914entry: 915 %0 = inttoptr i64 %ptr to <16 x i8>* 916 store <16 x i8> %str, <16 x i8>* %0, align 16 917 ret void 918} 919 920; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 921define dso_local void @st_unalign16_vector(i8* nocapture %ptr, <16 x i8> %str) { 922; CHECK-P10-LABEL: st_unalign16_vector: 923; CHECK-P10: # %bb.0: # %entry 924; CHECK-P10-NEXT: pstxv v2, 1(r3), 0 925; CHECK-P10-NEXT: blr 926; 927; CHECK-P9-LABEL: st_unalign16_vector: 928; CHECK-P9: # %bb.0: # %entry 929; CHECK-P9-NEXT: li r4, 1 930; CHECK-P9-NEXT: stxvx v2, r3, r4 931; CHECK-P9-NEXT: blr 932; 933; CHECK-P8-LE-LABEL: st_unalign16_vector: 934; CHECK-P8-LE: # %bb.0: # %entry 935; CHECK-P8-LE-NEXT: xxswapd vs0, v2 936; CHECK-P8-LE-NEXT: addi r3, r3, 1 937; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3 938; CHECK-P8-LE-NEXT: blr 939; 940; CHECK-P8-BE-LABEL: st_unalign16_vector: 941; CHECK-P8-BE: # %bb.0: # %entry 942; CHECK-P8-BE-NEXT: addi r3, r3, 1 943; CHECK-P8-BE-NEXT: stxvw4x v2, 0, r3 944; CHECK-P8-BE-NEXT: blr 945entry: 946 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1 947 %0 = bitcast i8* %add.ptr to <16 x i8>* 948 store <16 x i8> %str, <16 x i8>* %0, align 16 949 ret void 950} 951 952; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 953define dso_local void @st_align16_vector(i8* nocapture %ptr, <16 x i8> %str) { 954; CHECK-P10-LABEL: st_align16_vector: 955; CHECK-P10: # %bb.0: # %entry 956; CHECK-P10-NEXT: pstxv v2, 8(r3), 0 957; CHECK-P10-NEXT: blr 958; 959; CHECK-P9-LABEL: st_align16_vector: 960; CHECK-P9: # %bb.0: # %entry 961; CHECK-P9-NEXT: li r4, 8 962; CHECK-P9-NEXT: stxvx v2, r3, r4 963; CHECK-P9-NEXT: blr 964; 965; CHECK-P8-LE-LABEL: st_align16_vector: 966; CHECK-P8-LE: # %bb.0: # %entry 967; CHECK-P8-LE-NEXT: xxswapd vs0, v2 968; CHECK-P8-LE-NEXT: addi r3, r3, 8 969; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3 970; CHECK-P8-LE-NEXT: blr 971; 972; CHECK-P8-BE-LABEL: st_align16_vector: 973; CHECK-P8-BE: # %bb.0: # %entry 974; CHECK-P8-BE-NEXT: addi r3, r3, 8 975; CHECK-P8-BE-NEXT: stxvw4x v2, 0, r3 976; CHECK-P8-BE-NEXT: blr 977entry: 978 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 979 %0 = bitcast i8* %add.ptr to <16 x i8>* 980 store <16 x i8> %str, <16 x i8>* %0, align 16 981 ret void 982} 983 984; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 985define dso_local void @st_unalign32_vector(i8* nocapture %ptr, <16 x i8> %str) { 986; CHECK-P10-LABEL: st_unalign32_vector: 987; CHECK-P10: # %bb.0: # %entry 988; CHECK-P10-NEXT: pstxv v2, 99999(r3), 0 989; CHECK-P10-NEXT: blr 990; 991; CHECK-P9-LABEL: st_unalign32_vector: 992; CHECK-P9: # %bb.0: # %entry 993; CHECK-P9-NEXT: lis r4, 1 994; CHECK-P9-NEXT: ori r4, r4, 34463 995; CHECK-P9-NEXT: stxvx v2, r3, r4 996; CHECK-P9-NEXT: blr 997; 998; CHECK-P8-LE-LABEL: st_unalign32_vector: 999; CHECK-P8-LE: # %bb.0: # %entry 1000; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1001; CHECK-P8-LE-NEXT: lis r4, 1 1002; CHECK-P8-LE-NEXT: ori r4, r4, 34463 1003; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4 1004; CHECK-P8-LE-NEXT: blr 1005; 1006; CHECK-P8-BE-LABEL: st_unalign32_vector: 1007; CHECK-P8-BE: # %bb.0: # %entry 1008; CHECK-P8-BE-NEXT: lis r4, 1 1009; CHECK-P8-BE-NEXT: ori r4, r4, 34463 1010; CHECK-P8-BE-NEXT: stxvw4x v2, r3, r4 1011; CHECK-P8-BE-NEXT: blr 1012entry: 1013 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999 1014 %0 = bitcast i8* %add.ptr to <16 x i8>* 1015 store <16 x i8> %str, <16 x i8>* %0, align 16 1016 ret void 1017} 1018 1019; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1020define dso_local void @st_align32_vector(i8* nocapture %ptr, <16 x i8> %str) { 1021; CHECK-P10-LABEL: st_align32_vector: 1022; CHECK-P10: # %bb.0: # %entry 1023; CHECK-P10-NEXT: pstxv v2, 99999000(r3), 0 1024; CHECK-P10-NEXT: blr 1025; 1026; CHECK-P9-LABEL: st_align32_vector: 1027; CHECK-P9: # %bb.0: # %entry 1028; CHECK-P9-NEXT: lis r4, 1525 1029; CHECK-P9-NEXT: ori r4, r4, 56600 1030; CHECK-P9-NEXT: stxvx v2, r3, r4 1031; CHECK-P9-NEXT: blr 1032; 1033; CHECK-P8-LE-LABEL: st_align32_vector: 1034; CHECK-P8-LE: # %bb.0: # %entry 1035; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1036; CHECK-P8-LE-NEXT: lis r4, 1525 1037; CHECK-P8-LE-NEXT: ori r4, r4, 56600 1038; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4 1039; CHECK-P8-LE-NEXT: blr 1040; 1041; CHECK-P8-BE-LABEL: st_align32_vector: 1042; CHECK-P8-BE: # %bb.0: # %entry 1043; CHECK-P8-BE-NEXT: lis r4, 1525 1044; CHECK-P8-BE-NEXT: ori r4, r4, 56600 1045; CHECK-P8-BE-NEXT: stxvw4x v2, r3, r4 1046; CHECK-P8-BE-NEXT: blr 1047entry: 1048 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 1049 %0 = bitcast i8* %add.ptr to <16 x i8>* 1050 store <16 x i8> %str, <16 x i8>* %0, align 16 1051 ret void 1052} 1053 1054; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1055define dso_local void @st_unalign64_vector(i8* nocapture %ptr, <16 x i8> %str) { 1056; CHECK-P10-LABEL: st_unalign64_vector: 1057; CHECK-P10: # %bb.0: # %entry 1058; CHECK-P10-NEXT: pli r4, 232 1059; CHECK-P10-NEXT: pli r5, 3567587329 1060; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 1061; CHECK-P10-NEXT: stxvx v2, r3, r5 1062; CHECK-P10-NEXT: blr 1063; 1064; CHECK-P9-LABEL: st_unalign64_vector: 1065; CHECK-P9: # %bb.0: # %entry 1066; CHECK-P9-NEXT: li r4, 29 1067; CHECK-P9-NEXT: rldic r4, r4, 35, 24 1068; CHECK-P9-NEXT: oris r4, r4, 54437 1069; CHECK-P9-NEXT: ori r4, r4, 4097 1070; CHECK-P9-NEXT: stxvx v2, r3, r4 1071; CHECK-P9-NEXT: blr 1072; 1073; CHECK-P8-LE-LABEL: st_unalign64_vector: 1074; CHECK-P8-LE: # %bb.0: # %entry 1075; CHECK-P8-LE-NEXT: li r4, 29 1076; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1077; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 1078; CHECK-P8-LE-NEXT: oris r4, r4, 54437 1079; CHECK-P8-LE-NEXT: ori r4, r4, 4097 1080; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4 1081; CHECK-P8-LE-NEXT: blr 1082; 1083; CHECK-P8-BE-LABEL: st_unalign64_vector: 1084; CHECK-P8-BE: # %bb.0: # %entry 1085; CHECK-P8-BE-NEXT: li r4, 29 1086; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 1087; CHECK-P8-BE-NEXT: oris r4, r4, 54437 1088; CHECK-P8-BE-NEXT: ori r4, r4, 4097 1089; CHECK-P8-BE-NEXT: stxvw4x v2, r3, r4 1090; CHECK-P8-BE-NEXT: blr 1091entry: 1092 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000001 1093 %0 = bitcast i8* %add.ptr to <16 x i8>* 1094 store <16 x i8> %str, <16 x i8>* %0, align 16 1095 ret void 1096} 1097 1098; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1099define dso_local void @st_align64_vector(i8* nocapture %ptr, <16 x i8> %str) { 1100; CHECK-P10-LABEL: st_align64_vector: 1101; CHECK-P10: # %bb.0: # %entry 1102; CHECK-P10-NEXT: pli r4, 244140625 1103; CHECK-P10-NEXT: rldic r4, r4, 12, 24 1104; CHECK-P10-NEXT: stxvx v2, r3, r4 1105; CHECK-P10-NEXT: blr 1106; 1107; CHECK-P9-LABEL: st_align64_vector: 1108; CHECK-P9: # %bb.0: # %entry 1109; CHECK-P9-NEXT: lis r4, 3725 1110; CHECK-P9-NEXT: ori r4, r4, 19025 1111; CHECK-P9-NEXT: rldic r4, r4, 12, 24 1112; CHECK-P9-NEXT: stxvx v2, r3, r4 1113; CHECK-P9-NEXT: blr 1114; 1115; CHECK-P8-LE-LABEL: st_align64_vector: 1116; CHECK-P8-LE: # %bb.0: # %entry 1117; CHECK-P8-LE-NEXT: lis r4, 3725 1118; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1119; CHECK-P8-LE-NEXT: ori r4, r4, 19025 1120; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 1121; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4 1122; CHECK-P8-LE-NEXT: blr 1123; 1124; CHECK-P8-BE-LABEL: st_align64_vector: 1125; CHECK-P8-BE: # %bb.0: # %entry 1126; CHECK-P8-BE-NEXT: lis r4, 3725 1127; CHECK-P8-BE-NEXT: ori r4, r4, 19025 1128; CHECK-P8-BE-NEXT: rldic r4, r4, 12, 24 1129; CHECK-P8-BE-NEXT: stxvw4x v2, r3, r4 1130; CHECK-P8-BE-NEXT: blr 1131entry: 1132 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 1133 %0 = bitcast i8* %add.ptr to <16 x i8>* 1134 store <16 x i8> %str, <16 x i8>* %0, align 16 1135 ret void 1136} 1137 1138; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1139define dso_local void @st_reg_vector(i8* nocapture %ptr, i64 %off, <16 x i8> %str) { 1140; CHECK-LABEL: st_reg_vector: 1141; CHECK: # %bb.0: # %entry 1142; CHECK-NEXT: stxvx v2, r3, r4 1143; CHECK-NEXT: blr 1144; 1145; CHECK-P8-LE-LABEL: st_reg_vector: 1146; CHECK-P8-LE: # %bb.0: # %entry 1147; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1148; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4 1149; CHECK-P8-LE-NEXT: blr 1150; 1151; CHECK-P8-BE-LABEL: st_reg_vector: 1152; CHECK-P8-BE: # %bb.0: # %entry 1153; CHECK-P8-BE-NEXT: stxvw4x v2, r3, r4 1154; CHECK-P8-BE-NEXT: blr 1155entry: 1156 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 1157 %0 = bitcast i8* %add.ptr to <16 x i8>* 1158 store <16 x i8> %str, <16 x i8>* %0, align 16 1159 ret void 1160} 1161 1162; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1163define dso_local void @st_or1_vector(i64 %ptr, i8 zeroext %off, <16 x i8> %str) { 1164; CHECK-LABEL: st_or1_vector: 1165; CHECK: # %bb.0: # %entry 1166; CHECK-NEXT: or r3, r4, r3 1167; CHECK-NEXT: stxv v2, 0(r3) 1168; CHECK-NEXT: blr 1169; 1170; CHECK-P8-LE-LABEL: st_or1_vector: 1171; CHECK-P8-LE: # %bb.0: # %entry 1172; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1173; CHECK-P8-LE-NEXT: or r3, r4, r3 1174; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3 1175; CHECK-P8-LE-NEXT: blr 1176; 1177; CHECK-P8-BE-LABEL: st_or1_vector: 1178; CHECK-P8-BE: # %bb.0: # %entry 1179; CHECK-P8-BE-NEXT: or r3, r4, r3 1180; CHECK-P8-BE-NEXT: stxvw4x v2, 0, r3 1181; CHECK-P8-BE-NEXT: blr 1182entry: 1183 %conv = zext i8 %off to i64 1184 %or = or i64 %conv, %ptr 1185 %0 = inttoptr i64 %or to <16 x i8>* 1186 store <16 x i8> %str, <16 x i8>* %0, align 16 1187 ret void 1188} 1189 1190; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1191define dso_local void @st_or2_vector(i64 %ptr, i8 zeroext %off, <16 x i8> %str) { 1192; CHECK-LABEL: st_or2_vector: 1193; CHECK: # %bb.0: # %entry 1194; CHECK-NEXT: rldicr r3, r3, 0, 51 1195; CHECK-NEXT: stxvx v2, r3, r4 1196; CHECK-NEXT: blr 1197; 1198; CHECK-P8-LE-LABEL: st_or2_vector: 1199; CHECK-P8-LE: # %bb.0: # %entry 1200; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1201; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 51 1202; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4 1203; CHECK-P8-LE-NEXT: blr 1204; 1205; CHECK-P8-BE-LABEL: st_or2_vector: 1206; CHECK-P8-BE: # %bb.0: # %entry 1207; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 51 1208; CHECK-P8-BE-NEXT: stxvw4x v2, r3, r4 1209; CHECK-P8-BE-NEXT: blr 1210entry: 1211 %and = and i64 %ptr, -4096 1212 %conv = zext i8 %off to i64 1213 %or = or i64 %and, %conv 1214 %0 = inttoptr i64 %or to <16 x i8>* 1215 store <16 x i8> %str, <16 x i8>* %0, align 16 1216 ret void 1217} 1218 1219; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1220define dso_local void @st_not_disjoint16_vector(i64 %ptr, <16 x i8> %str) { 1221; CHECK-LABEL: st_not_disjoint16_vector: 1222; CHECK: # %bb.0: # %entry 1223; CHECK-NEXT: ori r3, r3, 6 1224; CHECK-NEXT: stxv v2, 0(r3) 1225; CHECK-NEXT: blr 1226; 1227; CHECK-P8-LE-LABEL: st_not_disjoint16_vector: 1228; CHECK-P8-LE: # %bb.0: # %entry 1229; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1230; CHECK-P8-LE-NEXT: ori r3, r3, 6 1231; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3 1232; CHECK-P8-LE-NEXT: blr 1233; 1234; CHECK-P8-BE-LABEL: st_not_disjoint16_vector: 1235; CHECK-P8-BE: # %bb.0: # %entry 1236; CHECK-P8-BE-NEXT: ori r3, r3, 6 1237; CHECK-P8-BE-NEXT: stxvw4x v2, 0, r3 1238; CHECK-P8-BE-NEXT: blr 1239entry: 1240 %or = or i64 %ptr, 6 1241 %0 = inttoptr i64 %or to <16 x i8>* 1242 store <16 x i8> %str, <16 x i8>* %0, align 16 1243 ret void 1244} 1245 1246; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1247define dso_local void @st_disjoint_unalign16_vector(i64 %ptr, <16 x i8> %str) { 1248; CHECK-P10-LABEL: st_disjoint_unalign16_vector: 1249; CHECK-P10: # %bb.0: # %entry 1250; CHECK-P10-NEXT: rldicr r3, r3, 0, 51 1251; CHECK-P10-NEXT: pstxv v2, 6(r3), 0 1252; CHECK-P10-NEXT: blr 1253; 1254; CHECK-P9-LABEL: st_disjoint_unalign16_vector: 1255; CHECK-P9: # %bb.0: # %entry 1256; CHECK-P9-NEXT: rldicr r3, r3, 0, 51 1257; CHECK-P9-NEXT: li r4, 6 1258; CHECK-P9-NEXT: stxvx v2, r3, r4 1259; CHECK-P9-NEXT: blr 1260; 1261; CHECK-P8-LE-LABEL: st_disjoint_unalign16_vector: 1262; CHECK-P8-LE: # %bb.0: # %entry 1263; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1264; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 51 1265; CHECK-P8-LE-NEXT: ori r3, r3, 6 1266; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3 1267; CHECK-P8-LE-NEXT: blr 1268; 1269; CHECK-P8-BE-LABEL: st_disjoint_unalign16_vector: 1270; CHECK-P8-BE: # %bb.0: # %entry 1271; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 51 1272; CHECK-P8-BE-NEXT: ori r3, r3, 6 1273; CHECK-P8-BE-NEXT: stxvw4x v2, 0, r3 1274; CHECK-P8-BE-NEXT: blr 1275entry: 1276 %and = and i64 %ptr, -4096 1277 %or = or i64 %and, 6 1278 %0 = inttoptr i64 %or to <16 x i8>* 1279 store <16 x i8> %str, <16 x i8>* %0, align 16 1280 ret void 1281} 1282 1283; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1284define dso_local void @st_disjoint_align16_vector(i64 %ptr, <16 x i8> %str) { 1285; CHECK-P10-LABEL: st_disjoint_align16_vector: 1286; CHECK-P10: # %bb.0: # %entry 1287; CHECK-P10-NEXT: rldicr r3, r3, 0, 51 1288; CHECK-P10-NEXT: pstxv v2, 24(r3), 0 1289; CHECK-P10-NEXT: blr 1290; 1291; CHECK-P9-LABEL: st_disjoint_align16_vector: 1292; CHECK-P9: # %bb.0: # %entry 1293; CHECK-P9-NEXT: rldicr r3, r3, 0, 51 1294; CHECK-P9-NEXT: li r4, 24 1295; CHECK-P9-NEXT: stxvx v2, r3, r4 1296; CHECK-P9-NEXT: blr 1297; 1298; CHECK-P8-LE-LABEL: st_disjoint_align16_vector: 1299; CHECK-P8-LE: # %bb.0: # %entry 1300; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1301; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 51 1302; CHECK-P8-LE-NEXT: ori r3, r3, 24 1303; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3 1304; CHECK-P8-LE-NEXT: blr 1305; 1306; CHECK-P8-BE-LABEL: st_disjoint_align16_vector: 1307; CHECK-P8-BE: # %bb.0: # %entry 1308; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 51 1309; CHECK-P8-BE-NEXT: ori r3, r3, 24 1310; CHECK-P8-BE-NEXT: stxvw4x v2, 0, r3 1311; CHECK-P8-BE-NEXT: blr 1312entry: 1313 %and = and i64 %ptr, -4096 1314 %or = or i64 %and, 24 1315 %0 = inttoptr i64 %or to <16 x i8>* 1316 store <16 x i8> %str, <16 x i8>* %0, align 16 1317 ret void 1318} 1319 1320; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1321define dso_local void @st_not_disjoint32_vector(i64 %ptr, <16 x i8> %str) { 1322; CHECK-LABEL: st_not_disjoint32_vector: 1323; CHECK: # %bb.0: # %entry 1324; CHECK-NEXT: ori r3, r3, 34463 1325; CHECK-NEXT: oris r3, r3, 1 1326; CHECK-NEXT: stxv v2, 0(r3) 1327; CHECK-NEXT: blr 1328; 1329; CHECK-P8-LE-LABEL: st_not_disjoint32_vector: 1330; CHECK-P8-LE: # %bb.0: # %entry 1331; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1332; CHECK-P8-LE-NEXT: ori r3, r3, 34463 1333; CHECK-P8-LE-NEXT: oris r3, r3, 1 1334; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3 1335; CHECK-P8-LE-NEXT: blr 1336; 1337; CHECK-P8-BE-LABEL: st_not_disjoint32_vector: 1338; CHECK-P8-BE: # %bb.0: # %entry 1339; CHECK-P8-BE-NEXT: ori r3, r3, 34463 1340; CHECK-P8-BE-NEXT: oris r3, r3, 1 1341; CHECK-P8-BE-NEXT: stxvw4x v2, 0, r3 1342; CHECK-P8-BE-NEXT: blr 1343entry: 1344 %or = or i64 %ptr, 99999 1345 %0 = inttoptr i64 %or to <16 x i8>* 1346 store <16 x i8> %str, <16 x i8>* %0, align 16 1347 ret void 1348} 1349 1350; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1351define dso_local void @st_disjoint_unalign32_vector(i64 %ptr, <16 x i8> %str) { 1352; CHECK-P10-LABEL: st_disjoint_unalign32_vector: 1353; CHECK-P10: # %bb.0: # %entry 1354; CHECK-P10-NEXT: rldicr r3, r3, 0, 43 1355; CHECK-P10-NEXT: pstxv v2, 99999(r3), 0 1356; CHECK-P10-NEXT: blr 1357; 1358; CHECK-P9-LABEL: st_disjoint_unalign32_vector: 1359; CHECK-P9: # %bb.0: # %entry 1360; CHECK-P9-NEXT: lis r4, 1 1361; CHECK-P9-NEXT: rldicr r3, r3, 0, 43 1362; CHECK-P9-NEXT: ori r4, r4, 34463 1363; CHECK-P9-NEXT: stxvx v2, r3, r4 1364; CHECK-P9-NEXT: blr 1365; 1366; CHECK-P8-LE-LABEL: st_disjoint_unalign32_vector: 1367; CHECK-P8-LE: # %bb.0: # %entry 1368; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1369; CHECK-P8-LE-NEXT: lis r4, 1 1370; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 43 1371; CHECK-P8-LE-NEXT: ori r4, r4, 34463 1372; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4 1373; CHECK-P8-LE-NEXT: blr 1374; 1375; CHECK-P8-BE-LABEL: st_disjoint_unalign32_vector: 1376; CHECK-P8-BE: # %bb.0: # %entry 1377; CHECK-P8-BE-NEXT: lis r4, 1 1378; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 43 1379; CHECK-P8-BE-NEXT: ori r4, r4, 34463 1380; CHECK-P8-BE-NEXT: stxvw4x v2, r3, r4 1381; CHECK-P8-BE-NEXT: blr 1382entry: 1383 %and = and i64 %ptr, -1048576 1384 %or = or i64 %and, 99999 1385 %0 = inttoptr i64 %or to <16 x i8>* 1386 store <16 x i8> %str, <16 x i8>* %0, align 16 1387 ret void 1388} 1389 1390; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1391define dso_local void @st_disjoint_align32_vector(i64 %ptr, <16 x i8> %str) { 1392; CHECK-P10-LABEL: st_disjoint_align32_vector: 1393; CHECK-P10: # %bb.0: # %entry 1394; CHECK-P10-NEXT: lis r4, -15264 1395; CHECK-P10-NEXT: and r3, r3, r4 1396; CHECK-P10-NEXT: pstxv v2, 999990000(r3), 0 1397; CHECK-P10-NEXT: blr 1398; 1399; CHECK-P9-LABEL: st_disjoint_align32_vector: 1400; CHECK-P9: # %bb.0: # %entry 1401; CHECK-P9-NEXT: lis r4, -15264 1402; CHECK-P9-NEXT: and r3, r3, r4 1403; CHECK-P9-NEXT: lis r4, 15258 1404; CHECK-P9-NEXT: ori r4, r4, 41712 1405; CHECK-P9-NEXT: stxvx v2, r3, r4 1406; CHECK-P9-NEXT: blr 1407; 1408; CHECK-P8-LE-LABEL: st_disjoint_align32_vector: 1409; CHECK-P8-LE: # %bb.0: # %entry 1410; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1411; CHECK-P8-LE-NEXT: lis r4, -15264 1412; CHECK-P8-LE-NEXT: lis r5, 15258 1413; CHECK-P8-LE-NEXT: and r3, r3, r4 1414; CHECK-P8-LE-NEXT: ori r4, r5, 41712 1415; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4 1416; CHECK-P8-LE-NEXT: blr 1417; 1418; CHECK-P8-BE-LABEL: st_disjoint_align32_vector: 1419; CHECK-P8-BE: # %bb.0: # %entry 1420; CHECK-P8-BE-NEXT: lis r4, -15264 1421; CHECK-P8-BE-NEXT: lis r5, 15258 1422; CHECK-P8-BE-NEXT: and r3, r3, r4 1423; CHECK-P8-BE-NEXT: ori r4, r5, 41712 1424; CHECK-P8-BE-NEXT: stxvw4x v2, r3, r4 1425; CHECK-P8-BE-NEXT: blr 1426entry: 1427 %and = and i64 %ptr, -1000341504 1428 %or = or i64 %and, 999990000 1429 %0 = inttoptr i64 %or to <16 x i8>* 1430 store <16 x i8> %str, <16 x i8>* %0, align 16 1431 ret void 1432} 1433 1434; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1435define dso_local void @st_not_disjoint64_vector(i64 %ptr, <16 x i8> %str) { 1436; CHECK-P10-LABEL: st_not_disjoint64_vector: 1437; CHECK-P10: # %bb.0: # %entry 1438; CHECK-P10-NEXT: pli r4, 232 1439; CHECK-P10-NEXT: pli r5, 3567587329 1440; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 1441; CHECK-P10-NEXT: or r3, r3, r5 1442; CHECK-P10-NEXT: stxv v2, 0(r3) 1443; CHECK-P10-NEXT: blr 1444; 1445; CHECK-P9-LABEL: st_not_disjoint64_vector: 1446; CHECK-P9: # %bb.0: # %entry 1447; CHECK-P9-NEXT: li r4, 29 1448; CHECK-P9-NEXT: rldic r4, r4, 35, 24 1449; CHECK-P9-NEXT: oris r4, r4, 54437 1450; CHECK-P9-NEXT: ori r4, r4, 4097 1451; CHECK-P9-NEXT: or r3, r3, r4 1452; CHECK-P9-NEXT: stxv v2, 0(r3) 1453; CHECK-P9-NEXT: blr 1454; 1455; CHECK-P8-LE-LABEL: st_not_disjoint64_vector: 1456; CHECK-P8-LE: # %bb.0: # %entry 1457; CHECK-P8-LE-NEXT: li r4, 29 1458; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1459; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 1460; CHECK-P8-LE-NEXT: oris r4, r4, 54437 1461; CHECK-P8-LE-NEXT: ori r4, r4, 4097 1462; CHECK-P8-LE-NEXT: or r3, r3, r4 1463; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3 1464; CHECK-P8-LE-NEXT: blr 1465; 1466; CHECK-P8-BE-LABEL: st_not_disjoint64_vector: 1467; CHECK-P8-BE: # %bb.0: # %entry 1468; CHECK-P8-BE-NEXT: li r4, 29 1469; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 1470; CHECK-P8-BE-NEXT: oris r4, r4, 54437 1471; CHECK-P8-BE-NEXT: ori r4, r4, 4097 1472; CHECK-P8-BE-NEXT: or r3, r3, r4 1473; CHECK-P8-BE-NEXT: stxvw4x v2, 0, r3 1474; CHECK-P8-BE-NEXT: blr 1475entry: 1476 %or = or i64 %ptr, 1000000000001 1477 %0 = inttoptr i64 %or to <16 x i8>* 1478 store <16 x i8> %str, <16 x i8>* %0, align 16 1479 ret void 1480} 1481 1482; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1483define dso_local void @st_disjoint_unalign64_vector(i64 %ptr, <16 x i8> %str) { 1484; CHECK-P10-LABEL: st_disjoint_unalign64_vector: 1485; CHECK-P10: # %bb.0: # %entry 1486; CHECK-P10-NEXT: pli r4, 232 1487; CHECK-P10-NEXT: pli r5, 3567587329 1488; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 1489; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 1490; CHECK-P10-NEXT: stxvx v2, r3, r5 1491; CHECK-P10-NEXT: blr 1492; 1493; CHECK-P9-LABEL: st_disjoint_unalign64_vector: 1494; CHECK-P9: # %bb.0: # %entry 1495; CHECK-P9-NEXT: li r4, 29 1496; CHECK-P9-NEXT: rldicr r3, r3, 0, 23 1497; CHECK-P9-NEXT: rldic r4, r4, 35, 24 1498; CHECK-P9-NEXT: oris r4, r4, 54437 1499; CHECK-P9-NEXT: ori r4, r4, 4097 1500; CHECK-P9-NEXT: stxvx v2, r3, r4 1501; CHECK-P9-NEXT: blr 1502; 1503; CHECK-P8-LE-LABEL: st_disjoint_unalign64_vector: 1504; CHECK-P8-LE: # %bb.0: # %entry 1505; CHECK-P8-LE-NEXT: li r4, 29 1506; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1507; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23 1508; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 1509; CHECK-P8-LE-NEXT: oris r4, r4, 54437 1510; CHECK-P8-LE-NEXT: ori r4, r4, 4097 1511; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4 1512; CHECK-P8-LE-NEXT: blr 1513; 1514; CHECK-P8-BE-LABEL: st_disjoint_unalign64_vector: 1515; CHECK-P8-BE: # %bb.0: # %entry 1516; CHECK-P8-BE-NEXT: li r4, 29 1517; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23 1518; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 1519; CHECK-P8-BE-NEXT: oris r4, r4, 54437 1520; CHECK-P8-BE-NEXT: ori r4, r4, 4097 1521; CHECK-P8-BE-NEXT: stxvw4x v2, r3, r4 1522; CHECK-P8-BE-NEXT: blr 1523entry: 1524 %and = and i64 %ptr, -1099511627776 1525 %or = or i64 %and, 1000000000001 1526 %0 = inttoptr i64 %or to <16 x i8>* 1527 store <16 x i8> %str, <16 x i8>* %0, align 16 1528 ret void 1529} 1530 1531; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1532define dso_local void @st_disjoint_align64_vector(i64 %ptr, <16 x i8> %str) { 1533; CHECK-P10-LABEL: st_disjoint_align64_vector: 1534; CHECK-P10: # %bb.0: # %entry 1535; CHECK-P10-NEXT: pli r4, 244140625 1536; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 1537; CHECK-P10-NEXT: rldic r4, r4, 12, 24 1538; CHECK-P10-NEXT: stxvx v2, r3, r4 1539; CHECK-P10-NEXT: blr 1540; 1541; CHECK-P9-LABEL: st_disjoint_align64_vector: 1542; CHECK-P9: # %bb.0: # %entry 1543; CHECK-P9-NEXT: lis r4, 3725 1544; CHECK-P9-NEXT: rldicr r3, r3, 0, 23 1545; CHECK-P9-NEXT: ori r4, r4, 19025 1546; CHECK-P9-NEXT: rldic r4, r4, 12, 24 1547; CHECK-P9-NEXT: stxvx v2, r3, r4 1548; CHECK-P9-NEXT: blr 1549; 1550; CHECK-P8-LE-LABEL: st_disjoint_align64_vector: 1551; CHECK-P8-LE: # %bb.0: # %entry 1552; CHECK-P8-LE-NEXT: lis r4, 3725 1553; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1554; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23 1555; CHECK-P8-LE-NEXT: ori r4, r4, 19025 1556; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 1557; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4 1558; CHECK-P8-LE-NEXT: blr 1559; 1560; CHECK-P8-BE-LABEL: st_disjoint_align64_vector: 1561; CHECK-P8-BE: # %bb.0: # %entry 1562; CHECK-P8-BE-NEXT: lis r4, 3725 1563; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23 1564; CHECK-P8-BE-NEXT: ori r4, r4, 19025 1565; CHECK-P8-BE-NEXT: rldic r4, r4, 12, 24 1566; CHECK-P8-BE-NEXT: stxvw4x v2, r3, r4 1567; CHECK-P8-BE-NEXT: blr 1568entry: 1569 %and = and i64 %ptr, -1099511627776 1570 %or = or i64 %and, 1000000000000 1571 %0 = inttoptr i64 %or to <16 x i8>* 1572 store <16 x i8> %str, <16 x i8>* %0, align 4096 1573 ret void 1574} 1575 1576; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1577define dso_local void @st_cst_unalign16_vector(<16 x i8> %str) { 1578; CHECK-LABEL: st_cst_unalign16_vector: 1579; CHECK: # %bb.0: # %entry 1580; CHECK-NEXT: li r3, 255 1581; CHECK-NEXT: stxv v2, 0(r3) 1582; CHECK-NEXT: blr 1583; 1584; CHECK-P8-LE-LABEL: st_cst_unalign16_vector: 1585; CHECK-P8-LE: # %bb.0: # %entry 1586; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1587; CHECK-P8-LE-NEXT: li r3, 255 1588; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3 1589; CHECK-P8-LE-NEXT: blr 1590; 1591; CHECK-P8-BE-LABEL: st_cst_unalign16_vector: 1592; CHECK-P8-BE: # %bb.0: # %entry 1593; CHECK-P8-BE-NEXT: li r3, 255 1594; CHECK-P8-BE-NEXT: stxvw4x v2, 0, r3 1595; CHECK-P8-BE-NEXT: blr 1596entry: 1597 store <16 x i8> %str, <16 x i8>* inttoptr (i64 255 to <16 x i8>*), align 16 1598 ret void 1599} 1600 1601; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1602define dso_local void @st_cst_align16_vector(<16 x i8> %str) { 1603; CHECK-LABEL: st_cst_align16_vector: 1604; CHECK: # %bb.0: # %entry 1605; CHECK-NEXT: stxv v2, 4080(0) 1606; CHECK-NEXT: blr 1607; 1608; CHECK-P8-LE-LABEL: st_cst_align16_vector: 1609; CHECK-P8-LE: # %bb.0: # %entry 1610; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1611; CHECK-P8-LE-NEXT: li r3, 4080 1612; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3 1613; CHECK-P8-LE-NEXT: blr 1614; 1615; CHECK-P8-BE-LABEL: st_cst_align16_vector: 1616; CHECK-P8-BE: # %bb.0: # %entry 1617; CHECK-P8-BE-NEXT: li r3, 4080 1618; CHECK-P8-BE-NEXT: stxvw4x v2, 0, r3 1619; CHECK-P8-BE-NEXT: blr 1620entry: 1621 store <16 x i8> %str, <16 x i8>* inttoptr (i64 4080 to <16 x i8>*), align 16 1622 ret void 1623} 1624 1625; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1626define dso_local void @st_cst_unalign32_vector(<16 x i8> %str) { 1627; CHECK-P10-LABEL: st_cst_unalign32_vector: 1628; CHECK-P10: # %bb.0: # %entry 1629; CHECK-P10-NEXT: pli r3, 99999 1630; CHECK-P10-NEXT: stxv v2, 0(r3) 1631; CHECK-P10-NEXT: blr 1632; 1633; CHECK-P9-LABEL: st_cst_unalign32_vector: 1634; CHECK-P9: # %bb.0: # %entry 1635; CHECK-P9-NEXT: lis r3, 1 1636; CHECK-P9-NEXT: ori r3, r3, 34463 1637; CHECK-P9-NEXT: stxv v2, 0(r3) 1638; CHECK-P9-NEXT: blr 1639; 1640; CHECK-P8-LE-LABEL: st_cst_unalign32_vector: 1641; CHECK-P8-LE: # %bb.0: # %entry 1642; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1643; CHECK-P8-LE-NEXT: lis r3, 1 1644; CHECK-P8-LE-NEXT: ori r3, r3, 34463 1645; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3 1646; CHECK-P8-LE-NEXT: blr 1647; 1648; CHECK-P8-BE-LABEL: st_cst_unalign32_vector: 1649; CHECK-P8-BE: # %bb.0: # %entry 1650; CHECK-P8-BE-NEXT: lis r3, 1 1651; CHECK-P8-BE-NEXT: ori r3, r3, 34463 1652; CHECK-P8-BE-NEXT: stxvw4x v2, 0, r3 1653; CHECK-P8-BE-NEXT: blr 1654entry: 1655 store <16 x i8> %str, <16 x i8>* inttoptr (i64 99999 to <16 x i8>*), align 16 1656 ret void 1657} 1658 1659; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1660define dso_local void @st_cst_align32_vector(<16 x i8> %str) { 1661; CHECK-P10-LABEL: st_cst_align32_vector: 1662; CHECK-P10: # %bb.0: # %entry 1663; CHECK-P10-NEXT: pli r3, 9999900 1664; CHECK-P10-NEXT: stxv v2, 0(r3) 1665; CHECK-P10-NEXT: blr 1666; 1667; CHECK-P9-LABEL: st_cst_align32_vector: 1668; CHECK-P9: # %bb.0: # %entry 1669; CHECK-P9-NEXT: lis r3, 152 1670; CHECK-P9-NEXT: ori r3, r3, 38428 1671; CHECK-P9-NEXT: stxv v2, 0(r3) 1672; CHECK-P9-NEXT: blr 1673; 1674; CHECK-P8-LE-LABEL: st_cst_align32_vector: 1675; CHECK-P8-LE: # %bb.0: # %entry 1676; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1677; CHECK-P8-LE-NEXT: lis r3, 152 1678; CHECK-P8-LE-NEXT: ori r3, r3, 38428 1679; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3 1680; CHECK-P8-LE-NEXT: blr 1681; 1682; CHECK-P8-BE-LABEL: st_cst_align32_vector: 1683; CHECK-P8-BE: # %bb.0: # %entry 1684; CHECK-P8-BE-NEXT: lis r3, 152 1685; CHECK-P8-BE-NEXT: ori r3, r3, 38428 1686; CHECK-P8-BE-NEXT: stxvw4x v2, 0, r3 1687; CHECK-P8-BE-NEXT: blr 1688entry: 1689 store <16 x i8> %str, <16 x i8>* inttoptr (i64 9999900 to <16 x i8>*), align 16 1690 ret void 1691} 1692 1693; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1694define dso_local void @st_cst_unalign64_vector(<16 x i8> %str) { 1695; CHECK-P10-LABEL: st_cst_unalign64_vector: 1696; CHECK-P10: # %bb.0: # %entry 1697; CHECK-P10-NEXT: pli r3, 232 1698; CHECK-P10-NEXT: pli r4, 3567587329 1699; CHECK-P10-NEXT: rldimi r4, r3, 32, 0 1700; CHECK-P10-NEXT: stxv v2, 0(r4) 1701; CHECK-P10-NEXT: blr 1702; 1703; CHECK-P9-LABEL: st_cst_unalign64_vector: 1704; CHECK-P9: # %bb.0: # %entry 1705; CHECK-P9-NEXT: li r3, 29 1706; CHECK-P9-NEXT: rldic r3, r3, 35, 24 1707; CHECK-P9-NEXT: oris r3, r3, 54437 1708; CHECK-P9-NEXT: ori r3, r3, 4097 1709; CHECK-P9-NEXT: stxv v2, 0(r3) 1710; CHECK-P9-NEXT: blr 1711; 1712; CHECK-P8-LE-LABEL: st_cst_unalign64_vector: 1713; CHECK-P8-LE: # %bb.0: # %entry 1714; CHECK-P8-LE-NEXT: li r3, 29 1715; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1716; CHECK-P8-LE-NEXT: rldic r3, r3, 35, 24 1717; CHECK-P8-LE-NEXT: oris r3, r3, 54437 1718; CHECK-P8-LE-NEXT: ori r3, r3, 4097 1719; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3 1720; CHECK-P8-LE-NEXT: blr 1721; 1722; CHECK-P8-BE-LABEL: st_cst_unalign64_vector: 1723; CHECK-P8-BE: # %bb.0: # %entry 1724; CHECK-P8-BE-NEXT: li r3, 29 1725; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 24 1726; CHECK-P8-BE-NEXT: oris r3, r3, 54437 1727; CHECK-P8-BE-NEXT: ori r3, r3, 4097 1728; CHECK-P8-BE-NEXT: stxvw4x v2, 0, r3 1729; CHECK-P8-BE-NEXT: blr 1730entry: 1731 store <16 x i8> %str, <16 x i8>* inttoptr (i64 1000000000001 to <16 x i8>*), align 16 1732 ret void 1733} 1734 1735; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 1736define dso_local void @st_cst_align64_vector(<16 x i8> %str) { 1737; CHECK-P10-LABEL: st_cst_align64_vector: 1738; CHECK-P10: # %bb.0: # %entry 1739; CHECK-P10-NEXT: pli r3, 244140625 1740; CHECK-P10-NEXT: rldic r3, r3, 12, 24 1741; CHECK-P10-NEXT: stxv v2, 0(r3) 1742; CHECK-P10-NEXT: blr 1743; 1744; CHECK-P9-LABEL: st_cst_align64_vector: 1745; CHECK-P9: # %bb.0: # %entry 1746; CHECK-P9-NEXT: lis r3, 3725 1747; CHECK-P9-NEXT: ori r3, r3, 19025 1748; CHECK-P9-NEXT: rldic r3, r3, 12, 24 1749; CHECK-P9-NEXT: stxv v2, 0(r3) 1750; CHECK-P9-NEXT: blr 1751; 1752; CHECK-P8-LE-LABEL: st_cst_align64_vector: 1753; CHECK-P8-LE: # %bb.0: # %entry 1754; CHECK-P8-LE-NEXT: lis r3, 3725 1755; CHECK-P8-LE-NEXT: xxswapd vs0, v2 1756; CHECK-P8-LE-NEXT: ori r3, r3, 19025 1757; CHECK-P8-LE-NEXT: rldic r3, r3, 12, 24 1758; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3 1759; CHECK-P8-LE-NEXT: blr 1760; 1761; CHECK-P8-BE-LABEL: st_cst_align64_vector: 1762; CHECK-P8-BE: # %bb.0: # %entry 1763; CHECK-P8-BE-NEXT: lis r3, 3725 1764; CHECK-P8-BE-NEXT: ori r3, r3, 19025 1765; CHECK-P8-BE-NEXT: rldic r3, r3, 12, 24 1766; CHECK-P8-BE-NEXT: stxvw4x v2, 0, r3 1767; CHECK-P8-BE-NEXT: blr 1768entry: 1769 store <16 x i8> %str, <16 x i8>* inttoptr (i64 1000000000000 to <16 x i8>*), align 4096 1770 ret void 1771} 1772