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, 96 71; LE-PWR8-NEXT: li r5, 112 72; LE-PWR8-NEXT: addi r3, r3, f@toc@l 73; LE-PWR8-NEXT: lxvd2x vs0, r3, r4 74; LE-PWR8-NEXT: li r4, 64 75; LE-PWR8-NEXT: lxvd2x vs1, r3, r5 76; LE-PWR8-NEXT: li r5, 80 77; LE-PWR8-NEXT: lxvd2x vs2, r3, r4 78; LE-PWR8-NEXT: lxvd2x vs3, r3, r5 79; LE-PWR8-NEXT: li r4, 176 80; LE-PWR8-NEXT: li r5, 160 81; LE-PWR8-NEXT: stxvd2x vs1, r3, r4 82; LE-PWR8-NEXT: li r4, 144 83; LE-PWR8-NEXT: stxvd2x vs0, r3, r5 84; LE-PWR8-NEXT: li r5, 128 85; LE-PWR8-NEXT: stxvd2x vs3, r3, r4 86; LE-PWR8-NEXT: stxvd2x vs2, r3, r5 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, 96 107; BE-PWR8-NEXT: li r5, 112 108; BE-PWR8-NEXT: addi r3, r3, f@toc@l 109; BE-PWR8-NEXT: lxvd2x vs0, r3, r4 110; BE-PWR8-NEXT: li r4, 64 111; BE-PWR8-NEXT: lxvd2x vs1, r3, r5 112; BE-PWR8-NEXT: li r5, 80 113; BE-PWR8-NEXT: lxvd2x vs2, r3, r4 114; BE-PWR8-NEXT: lxvd2x vs3, r3, r5 115; BE-PWR8-NEXT: li r4, 176 116; BE-PWR8-NEXT: li r5, 160 117; BE-PWR8-NEXT: stxvd2x vs1, r3, r4 118; BE-PWR8-NEXT: li r4, 144 119; BE-PWR8-NEXT: stxvd2x vs0, r3, r5 120; BE-PWR8-NEXT: li r5, 128 121; BE-PWR8-NEXT: stxvd2x vs3, r3, r4 122; BE-PWR8-NEXT: stxvd2x vs2, r3, r5 123; BE-PWR8-NEXT: blr 124entry: 125 %arrayidx = getelementptr inbounds <512 x i1>, <512 x i1>* @f, i64 1 126 %0 = load <512 x i1>, <512 x i1>* %arrayidx, align 64 127 %arrayidx1 = getelementptr inbounds <512 x i1>, <512 x i1>* @f, i64 2 128 store <512 x i1> %0, <512 x i1>* %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 r6, 48 191; LE-PWR8-NEXT: li r8, 16 192; LE-PWR8-NEXT: li r9, 32 193; LE-PWR8-NEXT: addi r5, r5, f@toc@l 194; LE-PWR8-NEXT: add r7, r5, r3 195; LE-PWR8-NEXT: lxvd2x vs0, r5, r3 196; LE-PWR8-NEXT: sldi r3, r4, 6 197; LE-PWR8-NEXT: lxvd2x vs1, r7, r6 198; LE-PWR8-NEXT: lxvd2x vs2, r7, r8 199; LE-PWR8-NEXT: add r4, r5, r3 200; LE-PWR8-NEXT: lxvd2x vs3, r7, r9 201; LE-PWR8-NEXT: stxvd2x vs0, r5, r3 202; LE-PWR8-NEXT: stxvd2x vs1, r4, r6 203; LE-PWR8-NEXT: stxvd2x vs3, r4, r9 204; LE-PWR8-NEXT: stxvd2x vs2, r4, r8 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 r6, 32 230; BE-PWR8-NEXT: li r7, 48 231; BE-PWR8-NEXT: li r9, 16 232; BE-PWR8-NEXT: addi r5, r5, f@toc@l 233; BE-PWR8-NEXT: add r8, r5, r3 234; BE-PWR8-NEXT: lxvd2x vs2, r5, r3 235; BE-PWR8-NEXT: sldi r3, r4, 6 236; BE-PWR8-NEXT: lxvd2x vs0, r8, r6 237; BE-PWR8-NEXT: lxvd2x vs1, r8, r7 238; BE-PWR8-NEXT: add r4, r5, r3 239; BE-PWR8-NEXT: lxvd2x vs3, r8, r9 240; BE-PWR8-NEXT: stxvd2x vs2, r5, r3 241; BE-PWR8-NEXT: stxvd2x vs1, r4, r7 242; BE-PWR8-NEXT: stxvd2x vs0, r4, r6 243; BE-PWR8-NEXT: stxvd2x vs3, r4, r9 244; BE-PWR8-NEXT: blr 245entry: 246 %arrayidx = getelementptr inbounds <512 x i1>, <512 x i1>* @f, i64 %SrcIdx 247 %0 = load <512 x i1>, <512 x i1>* %arrayidx, align 64 248 %arrayidx1 = getelementptr inbounds <512 x i1>, <512 x i1>* @f, i64 %DstIdx 249 store <512 x i1> %0, <512 x i1>* %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, 43 306; LE-PWR8-NEXT: li r5, 59 307; LE-PWR8-NEXT: addi r3, r3, f@toc@l 308; LE-PWR8-NEXT: lxvd2x vs0, r3, r4 309; LE-PWR8-NEXT: li r4, 11 310; LE-PWR8-NEXT: lxvd2x vs1, r3, r5 311; LE-PWR8-NEXT: li r5, 27 312; LE-PWR8-NEXT: lxvd2x vs2, r3, r4 313; LE-PWR8-NEXT: lxvd2x vs3, r3, r5 314; LE-PWR8-NEXT: li r4, 67 315; LE-PWR8-NEXT: li r5, 51 316; LE-PWR8-NEXT: stxvd2x vs1, r3, r4 317; LE-PWR8-NEXT: li r4, 35 318; LE-PWR8-NEXT: stxvd2x vs0, r3, r5 319; LE-PWR8-NEXT: li r5, 19 320; LE-PWR8-NEXT: stxvd2x vs3, r3, r4 321; LE-PWR8-NEXT: stxvd2x vs2, r3, r5 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, 43 350; BE-PWR8-NEXT: li r5, 59 351; BE-PWR8-NEXT: addi r3, r3, f@toc@l 352; BE-PWR8-NEXT: lxvd2x vs0, r3, r4 353; BE-PWR8-NEXT: li r4, 11 354; BE-PWR8-NEXT: lxvd2x vs1, r3, r5 355; BE-PWR8-NEXT: li r5, 27 356; BE-PWR8-NEXT: lxvd2x vs2, r3, r4 357; BE-PWR8-NEXT: lxvd2x vs3, r3, r5 358; BE-PWR8-NEXT: li r4, 67 359; BE-PWR8-NEXT: li r5, 51 360; BE-PWR8-NEXT: stxvd2x vs1, r3, r4 361; BE-PWR8-NEXT: li r4, 35 362; BE-PWR8-NEXT: stxvd2x vs0, r3, r5 363; BE-PWR8-NEXT: li r5, 19 364; BE-PWR8-NEXT: stxvd2x vs3, r3, r4 365; BE-PWR8-NEXT: stxvd2x vs2, r3, r5 366; BE-PWR8-NEXT: blr 367entry: 368 %0 = bitcast <512 x i1>* @f to i8* 369 %add.ptr = getelementptr inbounds i8, i8* %0, i64 11 370 %add.ptr1 = getelementptr inbounds i8, i8* %0, i64 19 371 %1 = bitcast i8* %add.ptr to <512 x i1>* 372 %2 = bitcast i8* %add.ptr1 to <512 x i1>* 373 %3 = load <512 x i1>, <512 x i1>* %1, align 64 374 store <512 x i1> %3, <512 x i1>* %2, align 64 375 ret void 376} 377 378define dso_local void @testLdStPair(i64 %SrcIdx, i64 %DstIdx) { 379; LE-PAIRED-LABEL: testLdStPair: 380; LE-PAIRED: # %bb.0: # %entry 381; LE-PAIRED-NEXT: plxv v3, g@PCREL+32(0), 1 382; LE-PAIRED-NEXT: plxv v2, g@PCREL+48(0), 1 383; LE-PAIRED-NEXT: pstxv v3, g@PCREL+64(0), 1 384; LE-PAIRED-NEXT: pstxv v2, g@PCREL+80(0), 1 385; LE-PAIRED-NEXT: blr 386; 387; BE-PAIRED-LABEL: testLdStPair: 388; BE-PAIRED: # %bb.0: # %entry 389; BE-PAIRED-NEXT: addis r3, r2, g@toc@ha 390; BE-PAIRED-NEXT: addi r3, r3, g@toc@l 391; BE-PAIRED-NEXT: lxv v3, 48(r3) 392; BE-PAIRED-NEXT: lxv v2, 32(r3) 393; BE-PAIRED-NEXT: stxv v3, 80(r3) 394; BE-PAIRED-NEXT: stxv v2, 64(r3) 395; BE-PAIRED-NEXT: blr 396; 397; LE-PWR9-LABEL: testLdStPair: 398; LE-PWR9: # %bb.0: # %entry 399; LE-PWR9-NEXT: addis r3, r2, g@toc@ha 400; LE-PWR9-NEXT: addi r3, r3, g@toc@l 401; LE-PWR9-NEXT: lxv vs0, 32(r3) 402; LE-PWR9-NEXT: lxv vs1, 48(r3) 403; LE-PWR9-NEXT: stxv vs1, 80(r3) 404; LE-PWR9-NEXT: stxv vs0, 64(r3) 405; LE-PWR9-NEXT: blr 406; 407; LE-PWR8-LABEL: testLdStPair: 408; LE-PWR8: # %bb.0: # %entry 409; LE-PWR8-NEXT: addis r3, r2, g@toc@ha 410; LE-PWR8-NEXT: li r4, 32 411; LE-PWR8-NEXT: li r5, 48 412; LE-PWR8-NEXT: addi r3, r3, g@toc@l 413; LE-PWR8-NEXT: lxvd2x vs0, r3, r4 414; LE-PWR8-NEXT: lxvd2x vs1, r3, r5 415; LE-PWR8-NEXT: li r4, 80 416; LE-PWR8-NEXT: li r5, 64 417; LE-PWR8-NEXT: stxvd2x vs1, r3, r4 418; LE-PWR8-NEXT: stxvd2x vs0, r3, r5 419; LE-PWR8-NEXT: blr 420; 421; BE-PWR9-LABEL: testLdStPair: 422; BE-PWR9: # %bb.0: # %entry 423; BE-PWR9-NEXT: addis r3, r2, g@toc@ha 424; BE-PWR9-NEXT: addi r3, r3, g@toc@l 425; BE-PWR9-NEXT: lxv vs0, 32(r3) 426; BE-PWR9-NEXT: lxv vs1, 48(r3) 427; BE-PWR9-NEXT: stxv vs1, 80(r3) 428; BE-PWR9-NEXT: stxv vs0, 64(r3) 429; BE-PWR9-NEXT: blr 430; 431; BE-PWR8-LABEL: testLdStPair: 432; BE-PWR8: # %bb.0: # %entry 433; BE-PWR8-NEXT: addis r3, r2, g@toc@ha 434; BE-PWR8-NEXT: li r4, 32 435; BE-PWR8-NEXT: li r5, 48 436; BE-PWR8-NEXT: addi r3, r3, g@toc@l 437; BE-PWR8-NEXT: lxvd2x vs0, r3, r4 438; BE-PWR8-NEXT: lxvd2x vs1, r3, r5 439; BE-PWR8-NEXT: li r4, 80 440; BE-PWR8-NEXT: li r5, 64 441; BE-PWR8-NEXT: stxvd2x vs1, r3, r4 442; BE-PWR8-NEXT: stxvd2x vs0, r3, r5 443; BE-PWR8-NEXT: blr 444entry: 445 %arrayidx = getelementptr inbounds <256 x i1>, <256 x i1>* @g, i64 1 446 %0 = load <256 x i1>, <256 x i1>* %arrayidx, align 64 447 %arrayidx1 = getelementptr inbounds <256 x i1>, <256 x i1>* @g, i64 2 448 store <256 x i1> %0, <256 x i1>* %arrayidx1, align 64 449 ret void 450} 451 452define dso_local void @testXLdStPair(i64 %SrcIdx, i64 %DstIdx) { 453; LE-PAIRED-LABEL: testXLdStPair: 454; LE-PAIRED: # %bb.0: # %entry 455; LE-PAIRED-NEXT: sldi r3, r3, 5 456; LE-PAIRED-NEXT: paddi r5, 0, g@PCREL, 1 457; LE-PAIRED-NEXT: add r6, r5, r3 458; LE-PAIRED-NEXT: lxvx v3, r5, r3 459; LE-PAIRED-NEXT: sldi r3, r4, 5 460; LE-PAIRED-NEXT: lxv v2, 16(r6) 461; LE-PAIRED-NEXT: add r4, r5, r3 462; LE-PAIRED-NEXT: stxvx v3, r5, r3 463; LE-PAIRED-NEXT: stxv v2, 16(r4) 464; LE-PAIRED-NEXT: blr 465; 466; BE-PAIRED-LABEL: testXLdStPair: 467; BE-PAIRED: # %bb.0: # %entry 468; BE-PAIRED-NEXT: addis r5, r2, g@toc@ha 469; BE-PAIRED-NEXT: sldi r3, r3, 5 470; BE-PAIRED-NEXT: addi r5, r5, g@toc@l 471; BE-PAIRED-NEXT: add r6, r5, r3 472; BE-PAIRED-NEXT: lxvx v2, r5, r3 473; BE-PAIRED-NEXT: sldi r3, r4, 5 474; BE-PAIRED-NEXT: lxv v3, 16(r6) 475; BE-PAIRED-NEXT: add r4, r5, r3 476; BE-PAIRED-NEXT: stxvx v2, r5, r3 477; BE-PAIRED-NEXT: stxv v3, 16(r4) 478; BE-PAIRED-NEXT: blr 479; 480; LE-PWR9-LABEL: testXLdStPair: 481; LE-PWR9: # %bb.0: # %entry 482; LE-PWR9-NEXT: addis r5, r2, g@toc@ha 483; LE-PWR9-NEXT: sldi r3, r3, 5 484; LE-PWR9-NEXT: sldi r4, r4, 5 485; LE-PWR9-NEXT: addi r5, r5, g@toc@l 486; LE-PWR9-NEXT: add r6, r5, r3 487; LE-PWR9-NEXT: lxvx vs1, r5, r3 488; LE-PWR9-NEXT: lxv vs0, 16(r6) 489; LE-PWR9-NEXT: add r6, r5, r4 490; LE-PWR9-NEXT: stxvx vs1, r5, r4 491; LE-PWR9-NEXT: stxv vs0, 16(r6) 492; LE-PWR9-NEXT: blr 493; 494; LE-PWR8-LABEL: testXLdStPair: 495; LE-PWR8: # %bb.0: # %entry 496; LE-PWR8-NEXT: addis r5, r2, g@toc@ha 497; LE-PWR8-NEXT: sldi r3, r3, 5 498; LE-PWR8-NEXT: li r7, 16 499; LE-PWR8-NEXT: addi r5, r5, g@toc@l 500; LE-PWR8-NEXT: add r6, r5, r3 501; LE-PWR8-NEXT: lxvd2x vs1, r5, r3 502; LE-PWR8-NEXT: sldi r3, r4, 5 503; LE-PWR8-NEXT: lxvd2x vs0, r6, r7 504; LE-PWR8-NEXT: add r4, r5, r3 505; LE-PWR8-NEXT: stxvd2x vs1, r5, r3 506; LE-PWR8-NEXT: stxvd2x vs0, r4, r7 507; LE-PWR8-NEXT: blr 508; 509; BE-PWR9-LABEL: testXLdStPair: 510; BE-PWR9: # %bb.0: # %entry 511; BE-PWR9-NEXT: addis r5, r2, g@toc@ha 512; BE-PWR9-NEXT: sldi r3, r3, 5 513; BE-PWR9-NEXT: sldi r4, r4, 5 514; BE-PWR9-NEXT: addi r5, r5, g@toc@l 515; BE-PWR9-NEXT: add r6, r5, r3 516; BE-PWR9-NEXT: lxvx vs1, r5, r3 517; BE-PWR9-NEXT: lxv vs0, 16(r6) 518; BE-PWR9-NEXT: add r6, r5, r4 519; BE-PWR9-NEXT: stxvx vs1, r5, r4 520; BE-PWR9-NEXT: stxv vs0, 16(r6) 521; BE-PWR9-NEXT: blr 522; 523; BE-PWR8-LABEL: testXLdStPair: 524; BE-PWR8: # %bb.0: # %entry 525; BE-PWR8-NEXT: addis r5, r2, g@toc@ha 526; BE-PWR8-NEXT: sldi r3, r3, 5 527; BE-PWR8-NEXT: li r7, 16 528; BE-PWR8-NEXT: addi r5, r5, g@toc@l 529; BE-PWR8-NEXT: add r6, r5, r3 530; BE-PWR8-NEXT: lxvd2x vs0, r5, r3 531; BE-PWR8-NEXT: sldi r3, r4, 5 532; BE-PWR8-NEXT: lxvd2x vs1, r6, r7 533; BE-PWR8-NEXT: add r4, r5, r3 534; BE-PWR8-NEXT: stxvd2x vs0, r5, r3 535; BE-PWR8-NEXT: stxvd2x vs1, r4, r7 536; BE-PWR8-NEXT: blr 537entry: 538 %arrayidx = getelementptr inbounds <256 x i1>, <256 x i1>* @g, i64 %SrcIdx 539 %0 = load <256 x i1>, <256 x i1>* %arrayidx, align 64 540 %arrayidx1 = getelementptr inbounds <256 x i1>, <256 x i1>* @g, i64 %DstIdx 541 store <256 x i1> %0, <256 x i1>* %arrayidx1, align 64 542 ret void 543} 544 545define dso_local void @testUnalignedLdStPair() { 546; LE-PAIRED-LABEL: testUnalignedLdStPair: 547; LE-PAIRED: # %bb.0: # %entry 548; LE-PAIRED-NEXT: plxv v3, g@PCREL+11(0), 1 549; LE-PAIRED-NEXT: plxv v2, g@PCREL+27(0), 1 550; LE-PAIRED-NEXT: pstxv v3, g@PCREL+19(0), 1 551; LE-PAIRED-NEXT: pstxv v2, g@PCREL+35(0), 1 552; LE-PAIRED-NEXT: blr 553; 554; BE-PAIRED-LABEL: testUnalignedLdStPair: 555; BE-PAIRED: # %bb.0: # %entry 556; BE-PAIRED-NEXT: addis r3, r2, g@toc@ha 557; BE-PAIRED-NEXT: addi r3, r3, g@toc@l 558; BE-PAIRED-NEXT: plxv v3, 27(r3), 0 559; BE-PAIRED-NEXT: plxv v2, 11(r3), 0 560; BE-PAIRED-NEXT: pstxv v3, 35(r3), 0 561; BE-PAIRED-NEXT: pstxv v2, 19(r3), 0 562; BE-PAIRED-NEXT: blr 563; 564; LE-PWR9-LABEL: testUnalignedLdStPair: 565; LE-PWR9: # %bb.0: # %entry 566; LE-PWR9-NEXT: addis r3, r2, g@toc@ha 567; LE-PWR9-NEXT: li r4, 11 568; LE-PWR9-NEXT: addi r3, r3, g@toc@l 569; LE-PWR9-NEXT: lxvx vs0, r3, r4 570; LE-PWR9-NEXT: li r4, 27 571; LE-PWR9-NEXT: lxvx vs1, r3, r4 572; LE-PWR9-NEXT: li r4, 35 573; LE-PWR9-NEXT: stxvx vs1, r3, r4 574; LE-PWR9-NEXT: li r4, 19 575; LE-PWR9-NEXT: stxvx vs0, r3, r4 576; LE-PWR9-NEXT: blr 577; 578; LE-PWR8-LABEL: testUnalignedLdStPair: 579; LE-PWR8: # %bb.0: # %entry 580; LE-PWR8-NEXT: addis r3, r2, g@toc@ha 581; LE-PWR8-NEXT: li r4, 11 582; LE-PWR8-NEXT: li r5, 27 583; LE-PWR8-NEXT: addi r3, r3, g@toc@l 584; LE-PWR8-NEXT: lxvd2x vs0, r3, r4 585; LE-PWR8-NEXT: lxvd2x vs1, r3, r5 586; LE-PWR8-NEXT: li r4, 35 587; LE-PWR8-NEXT: li r5, 19 588; LE-PWR8-NEXT: stxvd2x vs1, r3, r4 589; LE-PWR8-NEXT: stxvd2x vs0, r3, r5 590; LE-PWR8-NEXT: blr 591; 592; BE-PWR9-LABEL: testUnalignedLdStPair: 593; BE-PWR9: # %bb.0: # %entry 594; BE-PWR9-NEXT: addis r3, r2, g@toc@ha 595; BE-PWR9-NEXT: li r4, 11 596; BE-PWR9-NEXT: addi r3, r3, g@toc@l 597; BE-PWR9-NEXT: lxvx vs0, r3, r4 598; BE-PWR9-NEXT: li r4, 27 599; BE-PWR9-NEXT: lxvx vs1, r3, r4 600; BE-PWR9-NEXT: li r4, 35 601; BE-PWR9-NEXT: stxvx vs1, r3, r4 602; BE-PWR9-NEXT: li r4, 19 603; BE-PWR9-NEXT: stxvx vs0, r3, r4 604; BE-PWR9-NEXT: blr 605; 606; BE-PWR8-LABEL: testUnalignedLdStPair: 607; BE-PWR8: # %bb.0: # %entry 608; BE-PWR8-NEXT: addis r3, r2, g@toc@ha 609; BE-PWR8-NEXT: li r4, 11 610; BE-PWR8-NEXT: li r5, 27 611; BE-PWR8-NEXT: addi r3, r3, g@toc@l 612; BE-PWR8-NEXT: lxvd2x vs0, r3, r4 613; BE-PWR8-NEXT: lxvd2x vs1, r3, r5 614; BE-PWR8-NEXT: li r4, 35 615; BE-PWR8-NEXT: li r5, 19 616; BE-PWR8-NEXT: stxvd2x vs1, r3, r4 617; BE-PWR8-NEXT: stxvd2x vs0, r3, r5 618; BE-PWR8-NEXT: blr 619entry: 620 %0 = bitcast <256 x i1>* @g to i8* 621 %add.ptr = getelementptr inbounds i8, i8* %0, i64 11 622 %add.ptr1 = getelementptr inbounds i8, i8* %0, i64 19 623 %1 = bitcast i8* %add.ptr to <256 x i1>* 624 %2 = bitcast i8* %add.ptr1 to <256 x i1>* 625 %3 = load <256 x i1>, <256 x i1>* %1, align 64 626 store <256 x i1> %3, <256 x i1>* %2, align 64 627 ret void 628} 629