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