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: -disable-auto-paired-vec-st=false < %s | FileCheck %s \ 5; RUN: --check-prefix=LE-PAIRED 6; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ 7; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names \ 8; RUN: -ppc-vsr-nums-as-vr -disable-auto-paired-vec-st=false < %s | \ 9; RUN: FileCheck %s --check-prefix=BE-PAIRED 10; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-vsr-nums-as-vr \ 11; RUN: -ppc-asm-full-reg-names -mtriple=powerpc64le-unknown-linux-gnu < %s \ 12; RUN: | FileCheck %s --check-prefix=LE-PWR9 13; RUN: llc -verify-machineinstrs -mcpu=pwr8 -ppc-vsr-nums-as-vr \ 14; RUN: -ppc-asm-full-reg-names -mtriple=powerpc64le-unknown-linux-gnu < %s \ 15; RUN: | FileCheck %s --check-prefix=LE-PWR8 16; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-vsr-nums-as-vr \ 17; RUN: -ppc-asm-full-reg-names -mtriple=powerpc64-unknown-linux-gnu < %s \ 18; RUN: | FileCheck %s --check-prefix=BE-PWR9 19; RUN: llc -verify-machineinstrs -mcpu=pwr8 -ppc-vsr-nums-as-vr \ 20; RUN: -ppc-asm-full-reg-names -mtriple=powerpc64-unknown-linux-gnu < %s \ 21; RUN: | FileCheck %s --check-prefix=BE-PWR8 22 23@f = common dso_local local_unnamed_addr global <512 x i1> zeroinitializer, align 16 24@g = common dso_local local_unnamed_addr global <256 x i1> zeroinitializer, align 16 25 26define dso_local void @testLdSt(i64 %SrcIdx, i64 %DstIdx) { 27; LE-PAIRED-LABEL: testLdSt: 28; LE-PAIRED: # %bb.0: # %entry 29; LE-PAIRED-NEXT: plxv vs1, f@PCREL+96(0), 1 30; LE-PAIRED-NEXT: plxv vs0, f@PCREL+112(0), 1 31; LE-PAIRED-NEXT: plxv vs3, f@PCREL+64(0), 1 32; LE-PAIRED-NEXT: plxv vs2, f@PCREL+80(0), 1 33; LE-PAIRED-NEXT: pstxv vs0, f@PCREL+176(0), 1 34; LE-PAIRED-NEXT: pstxv vs1, f@PCREL+160(0), 1 35; LE-PAIRED-NEXT: pstxv vs2, f@PCREL+144(0), 1 36; LE-PAIRED-NEXT: pstxv vs3, f@PCREL+128(0), 1 37; LE-PAIRED-NEXT: blr 38; 39; BE-PAIRED-LABEL: testLdSt: 40; BE-PAIRED: # %bb.0: # %entry 41; BE-PAIRED-NEXT: addis r3, r2, f@toc@ha 42; BE-PAIRED-NEXT: addi r3, r3, f@toc@l 43; BE-PAIRED-NEXT: lxv vs1, 80(r3) 44; BE-PAIRED-NEXT: lxv vs0, 64(r3) 45; BE-PAIRED-NEXT: lxv vs3, 112(r3) 46; BE-PAIRED-NEXT: lxv vs2, 96(r3) 47; BE-PAIRED-NEXT: stxv vs1, 144(r3) 48; BE-PAIRED-NEXT: stxv vs0, 128(r3) 49; BE-PAIRED-NEXT: stxv vs3, 176(r3) 50; BE-PAIRED-NEXT: stxv vs2, 160(r3) 51; BE-PAIRED-NEXT: blr 52; 53; LE-PWR9-LABEL: testLdSt: 54; LE-PWR9: # %bb.0: # %entry 55; LE-PWR9-NEXT: addis r3, r2, f@toc@ha 56; LE-PWR9-NEXT: addi r3, r3, f@toc@l 57; LE-PWR9-NEXT: lxv vs1, 96(r3) 58; LE-PWR9-NEXT: lxv vs0, 64(r3) 59; LE-PWR9-NEXT: lxv vs2, 112(r3) 60; LE-PWR9-NEXT: stxv vs1, 160(r3) 61; LE-PWR9-NEXT: lxv vs1, 80(r3) 62; LE-PWR9-NEXT: stxv vs2, 176(r3) 63; LE-PWR9-NEXT: stxv vs0, 128(r3) 64; LE-PWR9-NEXT: stxv vs1, 144(r3) 65; LE-PWR9-NEXT: blr 66; 67; LE-PWR8-LABEL: testLdSt: 68; LE-PWR8: # %bb.0: # %entry 69; LE-PWR8-NEXT: addis r3, r2, f@toc@ha 70; LE-PWR8-NEXT: li r4, 64 71; LE-PWR8-NEXT: addi r3, r3, f@toc@l 72; LE-PWR8-NEXT: lxvd2x vs0, r3, r4 73; LE-PWR8-NEXT: li r4, 80 74; LE-PWR8-NEXT: lxvd2x vs1, r3, r4 75; LE-PWR8-NEXT: li r4, 96 76; LE-PWR8-NEXT: lxvd2x vs2, r3, r4 77; LE-PWR8-NEXT: li r4, 112 78; LE-PWR8-NEXT: lxvd2x vs3, r3, r4 79; LE-PWR8-NEXT: li r4, 176 80; LE-PWR8-NEXT: stxvd2x vs3, r3, r4 81; LE-PWR8-NEXT: li r4, 160 82; LE-PWR8-NEXT: stxvd2x vs2, r3, r4 83; LE-PWR8-NEXT: li r4, 144 84; LE-PWR8-NEXT: stxvd2x vs1, r3, r4 85; LE-PWR8-NEXT: li r4, 128 86; LE-PWR8-NEXT: stxvd2x vs0, r3, r4 87; LE-PWR8-NEXT: blr 88; 89; BE-PWR9-LABEL: testLdSt: 90; BE-PWR9: # %bb.0: # %entry 91; BE-PWR9-NEXT: addis r3, r2, f@toc@ha 92; BE-PWR9-NEXT: addi r3, r3, f@toc@l 93; BE-PWR9-NEXT: lxv vs1, 96(r3) 94; BE-PWR9-NEXT: lxv vs0, 64(r3) 95; BE-PWR9-NEXT: lxv vs2, 112(r3) 96; BE-PWR9-NEXT: stxv vs1, 160(r3) 97; BE-PWR9-NEXT: lxv vs1, 80(r3) 98; BE-PWR9-NEXT: stxv vs2, 176(r3) 99; BE-PWR9-NEXT: stxv vs0, 128(r3) 100; BE-PWR9-NEXT: stxv vs1, 144(r3) 101; BE-PWR9-NEXT: blr 102; 103; BE-PWR8-LABEL: testLdSt: 104; BE-PWR8: # %bb.0: # %entry 105; BE-PWR8-NEXT: addis r3, r2, f@toc@ha 106; BE-PWR8-NEXT: li r4, 64 107; BE-PWR8-NEXT: addi r3, r3, f@toc@l 108; BE-PWR8-NEXT: lxvd2x vs0, r3, r4 109; BE-PWR8-NEXT: li r4, 80 110; BE-PWR8-NEXT: lxvd2x vs1, r3, r4 111; BE-PWR8-NEXT: li r4, 96 112; BE-PWR8-NEXT: lxvd2x vs2, r3, r4 113; BE-PWR8-NEXT: li r4, 112 114; BE-PWR8-NEXT: lxvd2x vs3, r3, r4 115; BE-PWR8-NEXT: li r4, 176 116; BE-PWR8-NEXT: stxvd2x vs3, r3, r4 117; BE-PWR8-NEXT: li r4, 160 118; BE-PWR8-NEXT: stxvd2x vs2, r3, r4 119; BE-PWR8-NEXT: li r4, 144 120; BE-PWR8-NEXT: stxvd2x vs1, r3, r4 121; BE-PWR8-NEXT: li r4, 128 122; BE-PWR8-NEXT: stxvd2x vs0, r3, r4 123; BE-PWR8-NEXT: blr 124entry: 125 %arrayidx = getelementptr inbounds <512 x i1>, ptr @f, i64 1 126 %0 = load <512 x i1>, ptr %arrayidx, align 64 127 %arrayidx1 = getelementptr inbounds <512 x i1>, ptr @f, i64 2 128 store <512 x i1> %0, ptr %arrayidx1, align 64 129 ret void 130} 131 132define dso_local void @testXLdSt(i64 %SrcIdx, i64 %DstIdx) { 133; LE-PAIRED-LABEL: testXLdSt: 134; LE-PAIRED: # %bb.0: # %entry 135; LE-PAIRED-NEXT: paddi r5, 0, f@PCREL, 1 136; LE-PAIRED-NEXT: sldi r3, r3, 6 137; LE-PAIRED-NEXT: add r6, r5, r3 138; LE-PAIRED-NEXT: lxv vs1, 32(r6) 139; LE-PAIRED-NEXT: lxv vs0, 48(r6) 140; LE-PAIRED-NEXT: lxvx vs3, r5, r3 141; LE-PAIRED-NEXT: lxv vs2, 16(r6) 142; LE-PAIRED-NEXT: sldi r3, r4, 6 143; LE-PAIRED-NEXT: add r4, r5, r3 144; LE-PAIRED-NEXT: stxvx vs3, r5, r3 145; LE-PAIRED-NEXT: stxv vs0, 48(r4) 146; LE-PAIRED-NEXT: stxv vs1, 32(r4) 147; LE-PAIRED-NEXT: stxv vs2, 16(r4) 148; LE-PAIRED-NEXT: blr 149; 150; BE-PAIRED-LABEL: testXLdSt: 151; BE-PAIRED: # %bb.0: # %entry 152; BE-PAIRED-NEXT: addis r5, r2, f@toc@ha 153; BE-PAIRED-NEXT: addi r5, r5, f@toc@l 154; BE-PAIRED-NEXT: sldi r3, r3, 6 155; BE-PAIRED-NEXT: add r6, r5, r3 156; BE-PAIRED-NEXT: lxvx vs0, r5, r3 157; BE-PAIRED-NEXT: sldi r3, r4, 6 158; BE-PAIRED-NEXT: add r4, r5, r3 159; BE-PAIRED-NEXT: lxv vs1, 16(r6) 160; BE-PAIRED-NEXT: lxv vs3, 48(r6) 161; BE-PAIRED-NEXT: lxv vs2, 32(r6) 162; BE-PAIRED-NEXT: stxvx vs0, r5, r3 163; BE-PAIRED-NEXT: stxv vs1, 16(r4) 164; BE-PAIRED-NEXT: stxv vs3, 48(r4) 165; BE-PAIRED-NEXT: stxv vs2, 32(r4) 166; BE-PAIRED-NEXT: blr 167; 168; LE-PWR9-LABEL: testXLdSt: 169; LE-PWR9: # %bb.0: # %entry 170; LE-PWR9-NEXT: addis r5, r2, f@toc@ha 171; LE-PWR9-NEXT: sldi r3, r3, 6 172; LE-PWR9-NEXT: addi r5, r5, f@toc@l 173; LE-PWR9-NEXT: add r6, r5, r3 174; LE-PWR9-NEXT: lxvx vs3, r5, r3 175; LE-PWR9-NEXT: sldi r3, r4, 6 176; LE-PWR9-NEXT: lxv vs0, 16(r6) 177; LE-PWR9-NEXT: lxv vs1, 32(r6) 178; LE-PWR9-NEXT: lxv vs2, 48(r6) 179; LE-PWR9-NEXT: stxvx vs3, r5, r3 180; LE-PWR9-NEXT: add r3, r5, r3 181; LE-PWR9-NEXT: stxv vs2, 48(r3) 182; LE-PWR9-NEXT: stxv vs1, 32(r3) 183; LE-PWR9-NEXT: stxv vs0, 16(r3) 184; LE-PWR9-NEXT: blr 185; 186; LE-PWR8-LABEL: testXLdSt: 187; LE-PWR8: # %bb.0: # %entry 188; LE-PWR8-NEXT: addis r5, r2, f@toc@ha 189; LE-PWR8-NEXT: sldi r3, r3, 6 190; LE-PWR8-NEXT: li r7, 16 191; LE-PWR8-NEXT: li r8, 32 192; LE-PWR8-NEXT: li r9, 48 193; LE-PWR8-NEXT: addi r5, r5, f@toc@l 194; LE-PWR8-NEXT: add r6, r5, r3 195; LE-PWR8-NEXT: lxvd2x vs3, r5, r3 196; LE-PWR8-NEXT: sldi r3, r4, 6 197; LE-PWR8-NEXT: lxvd2x vs0, r6, r7 198; LE-PWR8-NEXT: lxvd2x vs1, r6, r8 199; LE-PWR8-NEXT: lxvd2x vs2, r6, r9 200; LE-PWR8-NEXT: stxvd2x vs3, r5, r3 201; LE-PWR8-NEXT: add r3, r5, r3 202; LE-PWR8-NEXT: stxvd2x vs2, r3, r9 203; LE-PWR8-NEXT: stxvd2x vs1, r3, r8 204; LE-PWR8-NEXT: stxvd2x vs0, r3, r7 205; LE-PWR8-NEXT: blr 206; 207; BE-PWR9-LABEL: testXLdSt: 208; BE-PWR9: # %bb.0: # %entry 209; BE-PWR9-NEXT: addis r5, r2, f@toc@ha 210; BE-PWR9-NEXT: sldi r3, r3, 6 211; BE-PWR9-NEXT: addi r5, r5, f@toc@l 212; BE-PWR9-NEXT: add r6, r5, r3 213; BE-PWR9-NEXT: lxvx vs3, r5, r3 214; BE-PWR9-NEXT: sldi r3, r4, 6 215; BE-PWR9-NEXT: lxv vs0, 16(r6) 216; BE-PWR9-NEXT: lxv vs1, 32(r6) 217; BE-PWR9-NEXT: lxv vs2, 48(r6) 218; BE-PWR9-NEXT: stxvx vs3, r5, r3 219; BE-PWR9-NEXT: add r3, r5, r3 220; BE-PWR9-NEXT: stxv vs2, 48(r3) 221; BE-PWR9-NEXT: stxv vs1, 32(r3) 222; BE-PWR9-NEXT: stxv vs0, 16(r3) 223; BE-PWR9-NEXT: blr 224; 225; BE-PWR8-LABEL: testXLdSt: 226; BE-PWR8: # %bb.0: # %entry 227; BE-PWR8-NEXT: addis r5, r2, f@toc@ha 228; BE-PWR8-NEXT: sldi r3, r3, 6 229; BE-PWR8-NEXT: li r7, 32 230; BE-PWR8-NEXT: li r8, 48 231; BE-PWR8-NEXT: sldi r4, r4, 6 232; BE-PWR8-NEXT: addi r5, r5, f@toc@l 233; BE-PWR8-NEXT: add r6, r5, r3 234; BE-PWR8-NEXT: lxvd2x vs0, r5, r3 235; BE-PWR8-NEXT: li r3, 16 236; BE-PWR8-NEXT: lxvd2x vs1, r6, r3 237; BE-PWR8-NEXT: lxvd2x vs2, r6, r7 238; BE-PWR8-NEXT: lxvd2x vs3, r6, r8 239; BE-PWR8-NEXT: add r6, r5, r4 240; BE-PWR8-NEXT: stxvd2x vs0, r5, r4 241; BE-PWR8-NEXT: stxvd2x vs3, r6, r8 242; BE-PWR8-NEXT: stxvd2x vs2, r6, r7 243; BE-PWR8-NEXT: stxvd2x vs1, r6, r3 244; BE-PWR8-NEXT: blr 245entry: 246 %arrayidx = getelementptr inbounds <512 x i1>, ptr @f, i64 %SrcIdx 247 %0 = load <512 x i1>, ptr %arrayidx, align 64 248 %arrayidx1 = getelementptr inbounds <512 x i1>, ptr @f, i64 %DstIdx 249 store <512 x i1> %0, ptr %arrayidx1, align 64 250 ret void 251} 252 253define dso_local void @testUnalignedLdSt() { 254; LE-PAIRED-LABEL: testUnalignedLdSt: 255; LE-PAIRED: # %bb.0: # %entry 256; LE-PAIRED-NEXT: plxv vs1, f@PCREL+43(0), 1 257; LE-PAIRED-NEXT: plxv vs0, f@PCREL+59(0), 1 258; LE-PAIRED-NEXT: plxv vs3, f@PCREL+11(0), 1 259; LE-PAIRED-NEXT: plxv vs2, f@PCREL+27(0), 1 260; LE-PAIRED-NEXT: pstxv vs0, f@PCREL+67(0), 1 261; LE-PAIRED-NEXT: pstxv vs1, f@PCREL+51(0), 1 262; LE-PAIRED-NEXT: pstxv vs2, f@PCREL+35(0), 1 263; LE-PAIRED-NEXT: pstxv vs3, f@PCREL+19(0), 1 264; LE-PAIRED-NEXT: blr 265; 266; BE-PAIRED-LABEL: testUnalignedLdSt: 267; BE-PAIRED: # %bb.0: # %entry 268; BE-PAIRED-NEXT: addis r3, r2, f@toc@ha 269; BE-PAIRED-NEXT: addi r3, r3, f@toc@l 270; BE-PAIRED-NEXT: plxv vs1, 27(r3), 0 271; BE-PAIRED-NEXT: plxv vs0, 11(r3), 0 272; BE-PAIRED-NEXT: plxv vs3, 59(r3), 0 273; BE-PAIRED-NEXT: plxv vs2, 43(r3), 0 274; BE-PAIRED-NEXT: pstxv vs1, 35(r3), 0 275; BE-PAIRED-NEXT: pstxv vs0, 19(r3), 0 276; BE-PAIRED-NEXT: pstxv vs3, 67(r3), 0 277; BE-PAIRED-NEXT: pstxv vs2, 51(r3), 0 278; BE-PAIRED-NEXT: blr 279; 280; LE-PWR9-LABEL: testUnalignedLdSt: 281; LE-PWR9: # %bb.0: # %entry 282; LE-PWR9-NEXT: addis r3, r2, f@toc@ha 283; LE-PWR9-NEXT: li r4, 11 284; LE-PWR9-NEXT: addi r3, r3, f@toc@l 285; LE-PWR9-NEXT: lxvx vs0, r3, r4 286; LE-PWR9-NEXT: li r4, 27 287; LE-PWR9-NEXT: lxvx vs1, r3, r4 288; LE-PWR9-NEXT: li r4, 43 289; LE-PWR9-NEXT: lxvx vs2, r3, r4 290; LE-PWR9-NEXT: li r4, 59 291; LE-PWR9-NEXT: lxvx vs3, r3, r4 292; LE-PWR9-NEXT: li r4, 67 293; LE-PWR9-NEXT: stxvx vs3, r3, r4 294; LE-PWR9-NEXT: li r4, 51 295; LE-PWR9-NEXT: stxvx vs2, r3, r4 296; LE-PWR9-NEXT: li r4, 35 297; LE-PWR9-NEXT: stxvx vs1, r3, r4 298; LE-PWR9-NEXT: li r4, 19 299; LE-PWR9-NEXT: stxvx vs0, r3, r4 300; LE-PWR9-NEXT: blr 301; 302; LE-PWR8-LABEL: testUnalignedLdSt: 303; LE-PWR8: # %bb.0: # %entry 304; LE-PWR8-NEXT: addis r3, r2, f@toc@ha 305; LE-PWR8-NEXT: li r4, 11 306; LE-PWR8-NEXT: addi r3, r3, f@toc@l 307; LE-PWR8-NEXT: lxvd2x vs0, r3, r4 308; LE-PWR8-NEXT: li r4, 27 309; LE-PWR8-NEXT: lxvd2x vs1, r3, r4 310; LE-PWR8-NEXT: li r4, 43 311; LE-PWR8-NEXT: lxvd2x vs2, r3, r4 312; LE-PWR8-NEXT: li r4, 59 313; LE-PWR8-NEXT: lxvd2x vs3, r3, r4 314; LE-PWR8-NEXT: li r4, 67 315; LE-PWR8-NEXT: stxvd2x vs3, r3, r4 316; LE-PWR8-NEXT: li r4, 51 317; LE-PWR8-NEXT: stxvd2x vs2, r3, r4 318; LE-PWR8-NEXT: li r4, 35 319; LE-PWR8-NEXT: stxvd2x vs1, r3, r4 320; LE-PWR8-NEXT: li r4, 19 321; LE-PWR8-NEXT: stxvd2x vs0, r3, r4 322; LE-PWR8-NEXT: blr 323; 324; BE-PWR9-LABEL: testUnalignedLdSt: 325; BE-PWR9: # %bb.0: # %entry 326; BE-PWR9-NEXT: addis r3, r2, f@toc@ha 327; BE-PWR9-NEXT: li r4, 11 328; BE-PWR9-NEXT: addi r3, r3, f@toc@l 329; BE-PWR9-NEXT: lxvx vs0, r3, r4 330; BE-PWR9-NEXT: li r4, 27 331; BE-PWR9-NEXT: lxvx vs1, r3, r4 332; BE-PWR9-NEXT: li r4, 43 333; BE-PWR9-NEXT: lxvx vs2, r3, r4 334; BE-PWR9-NEXT: li r4, 59 335; BE-PWR9-NEXT: lxvx vs3, r3, r4 336; BE-PWR9-NEXT: li r4, 67 337; BE-PWR9-NEXT: stxvx vs3, r3, r4 338; BE-PWR9-NEXT: li r4, 51 339; BE-PWR9-NEXT: stxvx vs2, r3, r4 340; BE-PWR9-NEXT: li r4, 35 341; BE-PWR9-NEXT: stxvx vs1, r3, r4 342; BE-PWR9-NEXT: li r4, 19 343; BE-PWR9-NEXT: stxvx vs0, r3, r4 344; BE-PWR9-NEXT: blr 345; 346; BE-PWR8-LABEL: testUnalignedLdSt: 347; BE-PWR8: # %bb.0: # %entry 348; BE-PWR8-NEXT: addis r3, r2, f@toc@ha 349; BE-PWR8-NEXT: li r4, 11 350; BE-PWR8-NEXT: addi r3, r3, f@toc@l 351; BE-PWR8-NEXT: lxvd2x vs0, r3, r4 352; BE-PWR8-NEXT: li r4, 27 353; BE-PWR8-NEXT: lxvd2x vs1, r3, r4 354; BE-PWR8-NEXT: li r4, 43 355; BE-PWR8-NEXT: lxvd2x vs2, r3, r4 356; BE-PWR8-NEXT: li r4, 59 357; BE-PWR8-NEXT: lxvd2x vs3, r3, r4 358; BE-PWR8-NEXT: li r4, 67 359; BE-PWR8-NEXT: stxvd2x vs3, r3, r4 360; BE-PWR8-NEXT: li r4, 51 361; BE-PWR8-NEXT: stxvd2x vs2, r3, r4 362; BE-PWR8-NEXT: li r4, 35 363; BE-PWR8-NEXT: stxvd2x vs1, r3, r4 364; BE-PWR8-NEXT: li r4, 19 365; BE-PWR8-NEXT: stxvd2x vs0, r3, r4 366; BE-PWR8-NEXT: blr 367entry: 368 %add.ptr = getelementptr inbounds i8, ptr @f, i64 11 369 %add.ptr1 = getelementptr inbounds i8, ptr @f, i64 19 370 %0 = load <512 x i1>, ptr %add.ptr, align 64 371 store <512 x i1> %0, ptr %add.ptr1, align 64 372 ret void 373} 374 375define dso_local void @testLdStPair(i64 %SrcIdx, i64 %DstIdx) { 376; LE-PAIRED-LABEL: testLdStPair: 377; LE-PAIRED: # %bb.0: # %entry 378; LE-PAIRED-NEXT: plxv v3, g@PCREL+32(0), 1 379; LE-PAIRED-NEXT: plxv v2, g@PCREL+48(0), 1 380; LE-PAIRED-NEXT: pstxv v2, g@PCREL+80(0), 1 381; LE-PAIRED-NEXT: pstxv v3, g@PCREL+64(0), 1 382; LE-PAIRED-NEXT: blr 383; 384; BE-PAIRED-LABEL: testLdStPair: 385; BE-PAIRED: # %bb.0: # %entry 386; BE-PAIRED-NEXT: addis r3, r2, g@toc@ha 387; BE-PAIRED-NEXT: addi r3, r3, g@toc@l 388; BE-PAIRED-NEXT: lxv v3, 48(r3) 389; BE-PAIRED-NEXT: lxv v2, 32(r3) 390; BE-PAIRED-NEXT: stxv v3, 80(r3) 391; BE-PAIRED-NEXT: stxv v2, 64(r3) 392; BE-PAIRED-NEXT: blr 393; 394; LE-PWR9-LABEL: testLdStPair: 395; LE-PWR9: # %bb.0: # %entry 396; LE-PWR9-NEXT: addis r3, r2, g@toc@ha 397; LE-PWR9-NEXT: addi r3, r3, g@toc@l 398; LE-PWR9-NEXT: lxv vs0, 32(r3) 399; LE-PWR9-NEXT: lxv vs1, 48(r3) 400; LE-PWR9-NEXT: stxv vs1, 80(r3) 401; LE-PWR9-NEXT: stxv vs0, 64(r3) 402; LE-PWR9-NEXT: blr 403; 404; LE-PWR8-LABEL: testLdStPair: 405; LE-PWR8: # %bb.0: # %entry 406; LE-PWR8-NEXT: addis r3, r2, g@toc@ha 407; LE-PWR8-NEXT: li r4, 32 408; LE-PWR8-NEXT: addi r3, r3, g@toc@l 409; LE-PWR8-NEXT: lxvd2x vs0, r3, r4 410; LE-PWR8-NEXT: li r4, 48 411; LE-PWR8-NEXT: lxvd2x vs1, r3, r4 412; LE-PWR8-NEXT: li r4, 80 413; LE-PWR8-NEXT: stxvd2x vs1, r3, r4 414; LE-PWR8-NEXT: li r4, 64 415; LE-PWR8-NEXT: stxvd2x vs0, r3, r4 416; LE-PWR8-NEXT: blr 417; 418; BE-PWR9-LABEL: testLdStPair: 419; BE-PWR9: # %bb.0: # %entry 420; BE-PWR9-NEXT: addis r3, r2, g@toc@ha 421; BE-PWR9-NEXT: addi r3, r3, g@toc@l 422; BE-PWR9-NEXT: lxv vs0, 32(r3) 423; BE-PWR9-NEXT: lxv vs1, 48(r3) 424; BE-PWR9-NEXT: stxv vs1, 80(r3) 425; BE-PWR9-NEXT: stxv vs0, 64(r3) 426; BE-PWR9-NEXT: blr 427; 428; BE-PWR8-LABEL: testLdStPair: 429; BE-PWR8: # %bb.0: # %entry 430; BE-PWR8-NEXT: addis r3, r2, g@toc@ha 431; BE-PWR8-NEXT: li r4, 32 432; BE-PWR8-NEXT: addi r3, r3, g@toc@l 433; BE-PWR8-NEXT: lxvd2x vs0, r3, r4 434; BE-PWR8-NEXT: li r4, 48 435; BE-PWR8-NEXT: lxvd2x vs1, r3, r4 436; BE-PWR8-NEXT: li r4, 80 437; BE-PWR8-NEXT: stxvd2x vs1, r3, r4 438; BE-PWR8-NEXT: li r4, 64 439; BE-PWR8-NEXT: stxvd2x vs0, r3, r4 440; BE-PWR8-NEXT: blr 441entry: 442 %arrayidx = getelementptr inbounds <256 x i1>, ptr @g, i64 1 443 %0 = load <256 x i1>, ptr %arrayidx, align 64 444 %arrayidx1 = getelementptr inbounds <256 x i1>, ptr @g, i64 2 445 store <256 x i1> %0, ptr %arrayidx1, align 64 446 ret void 447} 448 449define dso_local void @testXLdStPair(i64 %SrcIdx, i64 %DstIdx) { 450; LE-PAIRED-LABEL: testXLdStPair: 451; LE-PAIRED: # %bb.0: # %entry 452; LE-PAIRED-NEXT: sldi r3, r3, 5 453; LE-PAIRED-NEXT: paddi r5, 0, g@PCREL, 1 454; LE-PAIRED-NEXT: add r6, r5, r3 455; LE-PAIRED-NEXT: lxvx v3, r5, r3 456; LE-PAIRED-NEXT: sldi r3, r4, 5 457; LE-PAIRED-NEXT: add r4, r5, r3 458; LE-PAIRED-NEXT: lxv v2, 16(r6) 459; LE-PAIRED-NEXT: stxvx v3, r5, r3 460; LE-PAIRED-NEXT: stxv v2, 16(r4) 461; LE-PAIRED-NEXT: blr 462; 463; BE-PAIRED-LABEL: testXLdStPair: 464; BE-PAIRED: # %bb.0: # %entry 465; BE-PAIRED-NEXT: addis r5, r2, g@toc@ha 466; BE-PAIRED-NEXT: sldi r3, r3, 5 467; BE-PAIRED-NEXT: addi r5, r5, g@toc@l 468; BE-PAIRED-NEXT: add r6, r5, r3 469; BE-PAIRED-NEXT: lxvx v2, r5, r3 470; BE-PAIRED-NEXT: sldi r3, r4, 5 471; BE-PAIRED-NEXT: add r4, r5, r3 472; BE-PAIRED-NEXT: lxv v3, 16(r6) 473; BE-PAIRED-NEXT: stxvx v2, r5, r3 474; BE-PAIRED-NEXT: stxv v3, 16(r4) 475; BE-PAIRED-NEXT: blr 476; 477; LE-PWR9-LABEL: testXLdStPair: 478; LE-PWR9: # %bb.0: # %entry 479; LE-PWR9-NEXT: addis r5, r2, g@toc@ha 480; LE-PWR9-NEXT: sldi r3, r3, 5 481; LE-PWR9-NEXT: sldi r4, r4, 5 482; LE-PWR9-NEXT: addi r5, r5, g@toc@l 483; LE-PWR9-NEXT: add r6, r5, r3 484; LE-PWR9-NEXT: lxvx vs1, r5, r3 485; LE-PWR9-NEXT: lxv vs0, 16(r6) 486; LE-PWR9-NEXT: add r6, r5, r4 487; LE-PWR9-NEXT: stxvx vs1, r5, r4 488; LE-PWR9-NEXT: stxv vs0, 16(r6) 489; LE-PWR9-NEXT: blr 490; 491; LE-PWR8-LABEL: testXLdStPair: 492; LE-PWR8: # %bb.0: # %entry 493; LE-PWR8-NEXT: addis r5, r2, g@toc@ha 494; LE-PWR8-NEXT: sldi r3, r3, 5 495; LE-PWR8-NEXT: li r7, 16 496; LE-PWR8-NEXT: addi r5, r5, g@toc@l 497; LE-PWR8-NEXT: add r6, r5, r3 498; LE-PWR8-NEXT: lxvd2x vs1, r5, r3 499; LE-PWR8-NEXT: sldi r3, r4, 5 500; LE-PWR8-NEXT: lxvd2x vs0, r6, r7 501; LE-PWR8-NEXT: add r4, r5, r3 502; LE-PWR8-NEXT: stxvd2x vs1, r5, r3 503; LE-PWR8-NEXT: stxvd2x vs0, r4, r7 504; LE-PWR8-NEXT: blr 505; 506; BE-PWR9-LABEL: testXLdStPair: 507; BE-PWR9: # %bb.0: # %entry 508; BE-PWR9-NEXT: addis r5, r2, g@toc@ha 509; BE-PWR9-NEXT: sldi r3, r3, 5 510; BE-PWR9-NEXT: sldi r4, r4, 5 511; BE-PWR9-NEXT: addi r5, r5, g@toc@l 512; BE-PWR9-NEXT: add r6, r5, r3 513; BE-PWR9-NEXT: lxvx vs1, r5, r3 514; BE-PWR9-NEXT: lxv vs0, 16(r6) 515; BE-PWR9-NEXT: add r6, r5, r4 516; BE-PWR9-NEXT: stxvx vs1, r5, r4 517; BE-PWR9-NEXT: stxv vs0, 16(r6) 518; BE-PWR9-NEXT: blr 519; 520; BE-PWR8-LABEL: testXLdStPair: 521; BE-PWR8: # %bb.0: # %entry 522; BE-PWR8-NEXT: addis r5, r2, g@toc@ha 523; BE-PWR8-NEXT: sldi r3, r3, 5 524; BE-PWR8-NEXT: sldi r4, r4, 5 525; BE-PWR8-NEXT: addi r5, r5, g@toc@l 526; BE-PWR8-NEXT: add r6, r5, r3 527; BE-PWR8-NEXT: lxvd2x vs0, r5, r3 528; BE-PWR8-NEXT: li r3, 16 529; BE-PWR8-NEXT: lxvd2x vs1, r6, r3 530; BE-PWR8-NEXT: add r6, r5, r4 531; BE-PWR8-NEXT: stxvd2x vs0, r5, r4 532; BE-PWR8-NEXT: stxvd2x vs1, r6, r3 533; BE-PWR8-NEXT: blr 534entry: 535 %arrayidx = getelementptr inbounds <256 x i1>, ptr @g, i64 %SrcIdx 536 %0 = load <256 x i1>, ptr %arrayidx, align 64 537 %arrayidx1 = getelementptr inbounds <256 x i1>, ptr @g, i64 %DstIdx 538 store <256 x i1> %0, ptr %arrayidx1, align 64 539 ret void 540} 541 542define dso_local void @testUnalignedLdStPair() { 543; LE-PAIRED-LABEL: testUnalignedLdStPair: 544; LE-PAIRED: # %bb.0: # %entry 545; LE-PAIRED-NEXT: plxv v3, g@PCREL+11(0), 1 546; LE-PAIRED-NEXT: plxv v2, g@PCREL+27(0), 1 547; LE-PAIRED-NEXT: pstxv v2, g@PCREL+35(0), 1 548; LE-PAIRED-NEXT: pstxv v3, g@PCREL+19(0), 1 549; LE-PAIRED-NEXT: blr 550; 551; BE-PAIRED-LABEL: testUnalignedLdStPair: 552; BE-PAIRED: # %bb.0: # %entry 553; BE-PAIRED-NEXT: addis r3, r2, g@toc@ha 554; BE-PAIRED-NEXT: addi r3, r3, g@toc@l 555; BE-PAIRED-NEXT: plxv v3, 27(r3), 0 556; BE-PAIRED-NEXT: plxv v2, 11(r3), 0 557; BE-PAIRED-NEXT: pstxv v3, 35(r3), 0 558; BE-PAIRED-NEXT: pstxv v2, 19(r3), 0 559; BE-PAIRED-NEXT: blr 560; 561; LE-PWR9-LABEL: testUnalignedLdStPair: 562; LE-PWR9: # %bb.0: # %entry 563; LE-PWR9-NEXT: addis r3, r2, g@toc@ha 564; LE-PWR9-NEXT: li r4, 11 565; LE-PWR9-NEXT: addi r3, r3, g@toc@l 566; LE-PWR9-NEXT: lxvx vs0, r3, r4 567; LE-PWR9-NEXT: li r4, 27 568; LE-PWR9-NEXT: lxvx vs1, r3, r4 569; LE-PWR9-NEXT: li r4, 35 570; LE-PWR9-NEXT: stxvx vs1, r3, r4 571; LE-PWR9-NEXT: li r4, 19 572; LE-PWR9-NEXT: stxvx vs0, r3, r4 573; LE-PWR9-NEXT: blr 574; 575; LE-PWR8-LABEL: testUnalignedLdStPair: 576; LE-PWR8: # %bb.0: # %entry 577; LE-PWR8-NEXT: addis r3, r2, g@toc@ha 578; LE-PWR8-NEXT: li r4, 11 579; LE-PWR8-NEXT: addi r3, r3, g@toc@l 580; LE-PWR8-NEXT: lxvd2x vs0, r3, r4 581; LE-PWR8-NEXT: li r4, 27 582; LE-PWR8-NEXT: lxvd2x vs1, r3, r4 583; LE-PWR8-NEXT: li r4, 35 584; LE-PWR8-NEXT: stxvd2x vs1, r3, r4 585; LE-PWR8-NEXT: li r4, 19 586; LE-PWR8-NEXT: stxvd2x vs0, r3, r4 587; LE-PWR8-NEXT: blr 588; 589; BE-PWR9-LABEL: testUnalignedLdStPair: 590; BE-PWR9: # %bb.0: # %entry 591; BE-PWR9-NEXT: addis r3, r2, g@toc@ha 592; BE-PWR9-NEXT: li r4, 11 593; BE-PWR9-NEXT: addi r3, r3, g@toc@l 594; BE-PWR9-NEXT: lxvx vs0, r3, r4 595; BE-PWR9-NEXT: li r4, 27 596; BE-PWR9-NEXT: lxvx vs1, r3, r4 597; BE-PWR9-NEXT: li r4, 35 598; BE-PWR9-NEXT: stxvx vs1, r3, r4 599; BE-PWR9-NEXT: li r4, 19 600; BE-PWR9-NEXT: stxvx vs0, r3, r4 601; BE-PWR9-NEXT: blr 602; 603; BE-PWR8-LABEL: testUnalignedLdStPair: 604; BE-PWR8: # %bb.0: # %entry 605; BE-PWR8-NEXT: addis r3, r2, g@toc@ha 606; BE-PWR8-NEXT: li r4, 11 607; BE-PWR8-NEXT: addi r3, r3, g@toc@l 608; BE-PWR8-NEXT: lxvd2x vs0, r3, r4 609; BE-PWR8-NEXT: li r4, 27 610; BE-PWR8-NEXT: lxvd2x vs1, r3, r4 611; BE-PWR8-NEXT: li r4, 35 612; BE-PWR8-NEXT: stxvd2x vs1, r3, r4 613; BE-PWR8-NEXT: li r4, 19 614; BE-PWR8-NEXT: stxvd2x vs0, r3, r4 615; BE-PWR8-NEXT: blr 616entry: 617 %add.ptr = getelementptr inbounds i8, ptr @g, i64 11 618 %add.ptr1 = getelementptr inbounds i8, ptr @g, i64 19 619 %0 = load <256 x i1>, ptr %add.ptr, align 64 620 store <256 x i1> %0, ptr %add.ptr1, align 64 621 ret void 622} 623