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