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