1022 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown \3; RUN: -ppc-asm-full-reg-names -verify-machineinstrs -O2 < %s | FileCheck %s4; RUN: llc -mcpu=pwr8 -mtriple=powerpc64-unknown-unknown \5; RUN: -ppc-asm-full-reg-names -verify-machineinstrs -O2 < %s | FileCheck %s \6; RUN: --check-prefix=CHECK-BE7; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown \8; RUN: -ppc-asm-full-reg-names -verify-machineinstrs -O2 < %s | FileCheck %s \9; RUN: --check-prefix=CHECK-P910; RUN: llc -mcpu=pwr9 -mtriple=powerpc64-unknown-unknown \11; RUN: -ppc-asm-full-reg-names -verify-machineinstrs -O2 < %s | FileCheck %s \12; RUN: --check-prefix=CHECK-P9-BE13 14define <2 x i64> @testllv(<2 x i64> returned %a, <2 x i64> %b, ptr nocapture %ap, i64 %Idx) local_unnamed_addr #0 {15; CHECK-LABEL: testllv:16; CHECK: # %bb.0: # %entry17; CHECK-NEXT: xxswapd vs0, vs3418; CHECK-NEXT: sldi r3, r8, 319; CHECK-NEXT: stfdx f0, r7, r320; CHECK-NEXT: blr21;22; CHECK-BE-LABEL: testllv:23; CHECK-BE: # %bb.0: # %entry24; CHECK-BE-NEXT: sldi r3, r8, 325; CHECK-BE-NEXT: stxsdx vs34, r7, r326; CHECK-BE-NEXT: blr27;28; CHECK-P9-LABEL: testllv:29; CHECK-P9: # %bb.0: # %entry30; CHECK-P9-NEXT: xxswapd vs0, vs3431; CHECK-P9-NEXT: sldi r3, r8, 332; CHECK-P9-NEXT: stfdx f0, r7, r333; CHECK-P9-NEXT: blr34;35; CHECK-P9-BE-LABEL: testllv:36; CHECK-P9-BE: # %bb.0: # %entry37; CHECK-P9-BE-NEXT: sldi r3, r8, 338; CHECK-P9-BE-NEXT: stxsdx vs34, r7, r339; CHECK-P9-BE-NEXT: blr40entry:41 %vecext = extractelement <2 x i64> %a, i32 042 %arrayidx = getelementptr inbounds i64, ptr %ap, i64 %Idx43 store i64 %vecext, ptr %arrayidx, align 844 ret <2 x i64> %a45}46 47define <2 x i64> @testll0(<2 x i64> returned %a, <2 x i64> %b, ptr nocapture %ap) local_unnamed_addr #0 {48; CHECK-LABEL: testll0:49; CHECK: # %bb.0: # %entry50; CHECK-NEXT: xxswapd vs0, vs3451; CHECK-NEXT: stfd f0, 24(r7)52; CHECK-NEXT: blr53;54; CHECK-BE-LABEL: testll0:55; CHECK-BE: # %bb.0: # %entry56; CHECK-BE-NEXT: addi r3, r7, 2457; CHECK-BE-NEXT: stxsdx vs34, 0, r358; CHECK-BE-NEXT: blr59;60; CHECK-P9-LABEL: testll0:61; CHECK-P9: # %bb.0: # %entry62; CHECK-P9-NEXT: xxswapd vs0, vs3463; CHECK-P9-NEXT: stfd f0, 24(r7)64; CHECK-P9-NEXT: blr65;66; CHECK-P9-BE-LABEL: testll0:67; CHECK-P9-BE: # %bb.0: # %entry68; CHECK-P9-BE-NEXT: stxsd v2, 24(r7)69; CHECK-P9-BE-NEXT: blr70entry:71 %vecext = extractelement <2 x i64> %a, i32 072 %arrayidx = getelementptr inbounds i64, ptr %ap, i64 373 store i64 %vecext, ptr %arrayidx, align 874 ret <2 x i64> %a75}76 77; Function Attrs: norecurse nounwind writeonly78define <2 x i64> @testll1(<2 x i64> returned %a, i64 %b, ptr nocapture %ap) local_unnamed_addr #0 {79; CHECK-LABEL: testll1:80; CHECK: # %bb.0: # %entry81; CHECK-NEXT: addi r3, r6, 2482; CHECK-NEXT: stxsdx vs34, 0, r383; CHECK-NEXT: blr84;85; CHECK-BE-LABEL: testll1:86; CHECK-BE: # %bb.0: # %entry87; CHECK-BE-NEXT: xxswapd vs0, vs3488; CHECK-BE-NEXT: stfd f0, 24(r6)89; CHECK-BE-NEXT: blr90;91; CHECK-P9-LABEL: testll1:92; CHECK-P9: # %bb.0: # %entry93; CHECK-P9-NEXT: stxsd v2, 24(r6)94; CHECK-P9-NEXT: blr95;96; CHECK-P9-BE-LABEL: testll1:97; CHECK-P9-BE: # %bb.0: # %entry98; CHECK-P9-BE-NEXT: xxswapd vs0, vs3499; CHECK-P9-BE-NEXT: stfd f0, 24(r6)100; CHECK-P9-BE-NEXT: blr101entry:102 %vecext = extractelement <2 x i64> %a, i32 1103 %arrayidx = getelementptr inbounds i64, ptr %ap, i64 3104 store i64 %vecext, ptr %arrayidx, align 8105 ret <2 x i64> %a106}107 108define <2 x double> @testdv(<2 x double> returned %a, <2 x double> %b, ptr nocapture %ap, i64 %Idx) local_unnamed_addr #0 {109; CHECK-LABEL: testdv:110; CHECK: # %bb.0: # %entry111; CHECK-NEXT: xxswapd vs0, vs34112; CHECK-NEXT: sldi r3, r8, 3113; CHECK-NEXT: stfdx f0, r7, r3114; CHECK-NEXT: blr115;116; CHECK-BE-LABEL: testdv:117; CHECK-BE: # %bb.0: # %entry118; CHECK-BE-NEXT: sldi r3, r8, 3119; CHECK-BE-NEXT: stxsdx vs34, r7, r3120; CHECK-BE-NEXT: blr121;122; CHECK-P9-LABEL: testdv:123; CHECK-P9: # %bb.0: # %entry124; CHECK-P9-NEXT: xxswapd vs0, vs34125; CHECK-P9-NEXT: sldi r3, r8, 3126; CHECK-P9-NEXT: stfdx f0, r7, r3127; CHECK-P9-NEXT: blr128;129; CHECK-P9-BE-LABEL: testdv:130; CHECK-P9-BE: # %bb.0: # %entry131; CHECK-P9-BE-NEXT: sldi r3, r8, 3132; CHECK-P9-BE-NEXT: stxsdx vs34, r7, r3133; CHECK-P9-BE-NEXT: blr134entry:135 %vecext = extractelement <2 x double> %a, i32 0136 %arrayidx = getelementptr inbounds double, ptr %ap, i64 %Idx137 store double %vecext, ptr %arrayidx, align 8138 ret <2 x double> %a139}140 141define <2 x double> @testd0(<2 x double> returned %a, <2 x double> %b, ptr nocapture %ap) local_unnamed_addr #0 {142; CHECK-LABEL: testd0:143; CHECK: # %bb.0: # %entry144; CHECK-NEXT: xxswapd vs0, vs34145; CHECK-NEXT: stfd f0, 24(r7)146; CHECK-NEXT: blr147;148; CHECK-BE-LABEL: testd0:149; CHECK-BE: # %bb.0: # %entry150; CHECK-BE-NEXT: addi r3, r7, 24151; CHECK-BE-NEXT: stxsdx vs34, 0, r3152; CHECK-BE-NEXT: blr153;154; CHECK-P9-LABEL: testd0:155; CHECK-P9: # %bb.0: # %entry156; CHECK-P9-NEXT: xxswapd vs0, vs34157; CHECK-P9-NEXT: stfd f0, 24(r7)158; CHECK-P9-NEXT: blr159;160; CHECK-P9-BE-LABEL: testd0:161; CHECK-P9-BE: # %bb.0: # %entry162; CHECK-P9-BE-NEXT: stxsd v2, 24(r7)163; CHECK-P9-BE-NEXT: blr164entry:165 %vecext = extractelement <2 x double> %a, i32 0166 %arrayidx = getelementptr inbounds double, ptr %ap, i64 3167 store double %vecext, ptr %arrayidx, align 8168 ret <2 x double> %a169}170 171; Function Attrs: norecurse nounwind writeonly172define <2 x double> @testd1(<2 x double> returned %a, <2 x double> %b, ptr nocapture %ap) local_unnamed_addr #0 {173; CHECK-LABEL: testd1:174; CHECK: # %bb.0: # %entry175; CHECK-NEXT: addi r3, r7, 24176; CHECK-NEXT: stxsdx vs34, 0, r3177; CHECK-NEXT: blr178;179; CHECK-BE-LABEL: testd1:180; CHECK-BE: # %bb.0: # %entry181; CHECK-BE-NEXT: xxswapd vs0, vs34182; CHECK-BE-NEXT: stfd f0, 24(r7)183; CHECK-BE-NEXT: blr184;185; CHECK-P9-LABEL: testd1:186; CHECK-P9: # %bb.0: # %entry187; CHECK-P9-NEXT: stxsd v2, 24(r7)188; CHECK-P9-NEXT: blr189;190; CHECK-P9-BE-LABEL: testd1:191; CHECK-P9-BE: # %bb.0: # %entry192; CHECK-P9-BE-NEXT: xxswapd vs0, vs34193; CHECK-P9-BE-NEXT: stfd f0, 24(r7)194; CHECK-P9-BE-NEXT: blr195entry:196 %vecext = extractelement <2 x double> %a, i32 1197 %arrayidx = getelementptr inbounds double, ptr %ap, i64 3198 store double %vecext, ptr %arrayidx, align 8199 ret <2 x double> %a200}201 202; Function Attrs: norecurse nounwind writeonly203define <4 x float> @testf0(<4 x float> returned %a, <4 x float> %b, ptr nocapture %ap) local_unnamed_addr #0 {204; CHECK-LABEL: testf0:205; CHECK: # %bb.0: # %entry206; CHECK-NEXT: xxsldwi vs0, vs34, vs34, 2207; CHECK-NEXT: addi r3, r7, 12208; CHECK-NEXT: stfiwx f0, 0, r3209; CHECK-NEXT: blr210;211; CHECK-BE-LABEL: testf0:212; CHECK-BE: # %bb.0: # %entry213; CHECK-BE-NEXT: xxsldwi vs0, vs34, vs34, 3214; CHECK-BE-NEXT: addi r3, r7, 12215; CHECK-BE-NEXT: stfiwx f0, 0, r3216; CHECK-BE-NEXT: blr217;218; CHECK-P9-LABEL: testf0:219; CHECK-P9: # %bb.0: # %entry220; CHECK-P9-NEXT: xxsldwi vs0, vs34, vs34, 2221; CHECK-P9-NEXT: addi r3, r7, 12222; CHECK-P9-NEXT: stfiwx f0, 0, r3223; CHECK-P9-NEXT: blr224;225; CHECK-P9-BE-LABEL: testf0:226; CHECK-P9-BE: # %bb.0: # %entry227; CHECK-P9-BE-NEXT: xxsldwi vs0, vs34, vs34, 3228; CHECK-P9-BE-NEXT: addi r3, r7, 12229; CHECK-P9-BE-NEXT: stfiwx f0, 0, r3230; CHECK-P9-BE-NEXT: blr231entry:232 %vecext = extractelement <4 x float> %a, i32 0233 %arrayidx = getelementptr inbounds float, ptr %ap, i64 3234 store float %vecext, ptr %arrayidx, align 4235 ret <4 x float> %a236}237 238; Function Attrs: norecurse nounwind writeonly239define <4 x float> @testf1(<4 x float> returned %a, <4 x float> %b, ptr nocapture %ap) local_unnamed_addr #0 {240; CHECK-LABEL: testf1:241; CHECK: # %bb.0: # %entry242; CHECK-NEXT: xxsldwi vs0, vs34, vs34, 1243; CHECK-NEXT: addi r3, r7, 12244; CHECK-NEXT: stfiwx f0, 0, r3245; CHECK-NEXT: blr246;247; CHECK-BE-LABEL: testf1:248; CHECK-BE: # %bb.0: # %entry249; CHECK-BE-NEXT: addi r3, r7, 12250; CHECK-BE-NEXT: stxsiwx vs34, 0, r3251; CHECK-BE-NEXT: blr252;253; CHECK-P9-LABEL: testf1:254; CHECK-P9: # %bb.0: # %entry255; CHECK-P9-NEXT: xxsldwi vs0, vs34, vs34, 1256; CHECK-P9-NEXT: addi r3, r7, 12257; CHECK-P9-NEXT: stfiwx f0, 0, r3258; CHECK-P9-NEXT: blr259;260; CHECK-P9-BE-LABEL: testf1:261; CHECK-P9-BE: # %bb.0: # %entry262; CHECK-P9-BE-NEXT: addi r3, r7, 12263; CHECK-P9-BE-NEXT: stxsiwx vs34, 0, r3264; CHECK-P9-BE-NEXT: blr265entry:266 %vecext = extractelement <4 x float> %a, i32 1267 %arrayidx = getelementptr inbounds float, ptr %ap, i64 3268 store float %vecext, ptr %arrayidx, align 4269 ret <4 x float> %a270}271 272; Function Attrs: norecurse nounwind writeonly273define <4 x float> @testf2(<4 x float> returned %a, <4 x float> %b, ptr nocapture %ap) local_unnamed_addr #0 {274; CHECK-LABEL: testf2:275; CHECK: # %bb.0: # %entry276; CHECK-NEXT: addi r3, r7, 12277; CHECK-NEXT: stxsiwx vs34, 0, r3278; CHECK-NEXT: blr279;280; CHECK-BE-LABEL: testf2:281; CHECK-BE: # %bb.0: # %entry282; CHECK-BE-NEXT: xxsldwi vs0, vs34, vs34, 1283; CHECK-BE-NEXT: addi r3, r7, 12284; CHECK-BE-NEXT: stfiwx f0, 0, r3285; CHECK-BE-NEXT: blr286;287; CHECK-P9-LABEL: testf2:288; CHECK-P9: # %bb.0: # %entry289; CHECK-P9-NEXT: addi r3, r7, 12290; CHECK-P9-NEXT: stxsiwx vs34, 0, r3291; CHECK-P9-NEXT: blr292;293; CHECK-P9-BE-LABEL: testf2:294; CHECK-P9-BE: # %bb.0: # %entry295; CHECK-P9-BE-NEXT: xxsldwi vs0, vs34, vs34, 1296; CHECK-P9-BE-NEXT: addi r3, r7, 12297; CHECK-P9-BE-NEXT: stfiwx f0, 0, r3298; CHECK-P9-BE-NEXT: blr299entry:300 %vecext = extractelement <4 x float> %a, i32 2301 %arrayidx = getelementptr inbounds float, ptr %ap, i64 3302 store float %vecext, ptr %arrayidx, align 4303 ret <4 x float> %a304}305 306; Function Attrs: norecurse nounwind writeonly307define <4 x float> @testf3(<4 x float> returned %a, <4 x float> %b, ptr nocapture %ap) local_unnamed_addr #0 {308; CHECK-LABEL: testf3:309; CHECK: # %bb.0: # %entry310; CHECK-NEXT: xxsldwi vs0, vs34, vs34, 3311; CHECK-NEXT: addi r3, r7, 12312; CHECK-NEXT: stfiwx f0, 0, r3313; CHECK-NEXT: blr314;315; CHECK-BE-LABEL: testf3:316; CHECK-BE: # %bb.0: # %entry317; CHECK-BE-NEXT: xxsldwi vs0, vs34, vs34, 2318; CHECK-BE-NEXT: addi r3, r7, 12319; CHECK-BE-NEXT: stfiwx f0, 0, r3320; CHECK-BE-NEXT: blr321;322; CHECK-P9-LABEL: testf3:323; CHECK-P9: # %bb.0: # %entry324; CHECK-P9-NEXT: xxsldwi vs0, vs34, vs34, 3325; CHECK-P9-NEXT: addi r3, r7, 12326; CHECK-P9-NEXT: stfiwx f0, 0, r3327; CHECK-P9-NEXT: blr328;329; CHECK-P9-BE-LABEL: testf3:330; CHECK-P9-BE: # %bb.0: # %entry331; CHECK-P9-BE-NEXT: xxsldwi vs0, vs34, vs34, 2332; CHECK-P9-BE-NEXT: addi r3, r7, 12333; CHECK-P9-BE-NEXT: stfiwx f0, 0, r3334; CHECK-P9-BE-NEXT: blr335entry:336 %vecext = extractelement <4 x float> %a, i32 3337 %arrayidx = getelementptr inbounds float, ptr %ap, i64 3338 store float %vecext, ptr %arrayidx, align 4339 ret <4 x float> %a340}341 342; Function Attrs: norecurse nounwind writeonly343define <4 x i32> @testi0(<4 x i32> returned %a, <4 x i32> %b, ptr nocapture %ap) local_unnamed_addr #0 {344; CHECK-LABEL: testi0:345; CHECK: # %bb.0: # %entry346; CHECK-NEXT: xxsldwi vs0, vs34, vs34, 2347; CHECK-NEXT: addi r3, r7, 12348; CHECK-NEXT: stfiwx f0, 0, r3349; CHECK-NEXT: blr350;351; CHECK-BE-LABEL: testi0:352; CHECK-BE: # %bb.0: # %entry353; CHECK-BE-NEXT: xxsldwi vs0, vs34, vs34, 3354; CHECK-BE-NEXT: addi r3, r7, 12355; CHECK-BE-NEXT: stfiwx f0, 0, r3356; CHECK-BE-NEXT: blr357;358; CHECK-P9-LABEL: testi0:359; CHECK-P9: # %bb.0: # %entry360; CHECK-P9-NEXT: xxsldwi vs0, vs34, vs34, 2361; CHECK-P9-NEXT: addi r3, r7, 12362; CHECK-P9-NEXT: stfiwx f0, 0, r3363; CHECK-P9-NEXT: blr364;365; CHECK-P9-BE-LABEL: testi0:366; CHECK-P9-BE: # %bb.0: # %entry367; CHECK-P9-BE-NEXT: xxsldwi vs0, vs34, vs34, 3368; CHECK-P9-BE-NEXT: addi r3, r7, 12369; CHECK-P9-BE-NEXT: stfiwx f0, 0, r3370; CHECK-P9-BE-NEXT: blr371entry:372 %vecext = extractelement <4 x i32> %a, i32 0373 %arrayidx = getelementptr inbounds i32, ptr %ap, i64 3374 store i32 %vecext, ptr %arrayidx, align 4375 ret <4 x i32> %a376}377 378; Function Attrs: norecurse nounwind writeonly379define <4 x i32> @testi1(<4 x i32> returned %a, <4 x i32> %b, ptr nocapture %ap) local_unnamed_addr #0 {380; CHECK-LABEL: testi1:381; CHECK: # %bb.0: # %entry382; CHECK-NEXT: xxsldwi vs0, vs34, vs34, 1383; CHECK-NEXT: addi r3, r7, 12384; CHECK-NEXT: stfiwx f0, 0, r3385; CHECK-NEXT: blr386;387; CHECK-BE-LABEL: testi1:388; CHECK-BE: # %bb.0: # %entry389; CHECK-BE-NEXT: addi r3, r7, 12390; CHECK-BE-NEXT: stxsiwx vs34, 0, r3391; CHECK-BE-NEXT: blr392;393; CHECK-P9-LABEL: testi1:394; CHECK-P9: # %bb.0: # %entry395; CHECK-P9-NEXT: xxsldwi vs0, vs34, vs34, 1396; CHECK-P9-NEXT: addi r3, r7, 12397; CHECK-P9-NEXT: stfiwx f0, 0, r3398; CHECK-P9-NEXT: blr399;400; CHECK-P9-BE-LABEL: testi1:401; CHECK-P9-BE: # %bb.0: # %entry402; CHECK-P9-BE-NEXT: addi r3, r7, 12403; CHECK-P9-BE-NEXT: stxsiwx vs34, 0, r3404; CHECK-P9-BE-NEXT: blr405entry:406 %vecext = extractelement <4 x i32> %a, i32 1407 %arrayidx = getelementptr inbounds i32, ptr %ap, i64 3408 store i32 %vecext, ptr %arrayidx, align 4409 ret <4 x i32> %a410}411 412; Function Attrs: norecurse nounwind writeonly413define <4 x i32> @testi2(<4 x i32> returned %a, <4 x i32> %b, ptr nocapture %ap) local_unnamed_addr #0 {414; CHECK-LABEL: testi2:415; CHECK: # %bb.0: # %entry416; CHECK-NEXT: addi r3, r7, 12417; CHECK-NEXT: stxsiwx vs34, 0, r3418; CHECK-NEXT: blr419;420; CHECK-BE-LABEL: testi2:421; CHECK-BE: # %bb.0: # %entry422; CHECK-BE-NEXT: xxsldwi vs0, vs34, vs34, 1423; CHECK-BE-NEXT: addi r3, r7, 12424; CHECK-BE-NEXT: stfiwx f0, 0, r3425; CHECK-BE-NEXT: blr426;427; CHECK-P9-LABEL: testi2:428; CHECK-P9: # %bb.0: # %entry429; CHECK-P9-NEXT: addi r3, r7, 12430; CHECK-P9-NEXT: stxsiwx vs34, 0, r3431; CHECK-P9-NEXT: blr432;433; CHECK-P9-BE-LABEL: testi2:434; CHECK-P9-BE: # %bb.0: # %entry435; CHECK-P9-BE-NEXT: xxsldwi vs0, vs34, vs34, 1436; CHECK-P9-BE-NEXT: addi r3, r7, 12437; CHECK-P9-BE-NEXT: stfiwx f0, 0, r3438; CHECK-P9-BE-NEXT: blr439entry:440 %vecext = extractelement <4 x i32> %a, i32 2441 %arrayidx = getelementptr inbounds i32, ptr %ap, i64 3442 store i32 %vecext, ptr %arrayidx, align 4443 ret <4 x i32> %a444}445 446; Function Attrs: norecurse nounwind writeonly447define <4 x i32> @testi3(<4 x i32> returned %a, <4 x i32> %b, ptr nocapture %ap) local_unnamed_addr #0 {448; CHECK-LABEL: testi3:449; CHECK: # %bb.0: # %entry450; CHECK-NEXT: xxsldwi vs0, vs34, vs34, 3451; CHECK-NEXT: addi r3, r7, 12452; CHECK-NEXT: stfiwx f0, 0, r3453; CHECK-NEXT: blr454;455; CHECK-BE-LABEL: testi3:456; CHECK-BE: # %bb.0: # %entry457; CHECK-BE-NEXT: xxsldwi vs0, vs34, vs34, 2458; CHECK-BE-NEXT: addi r3, r7, 12459; CHECK-BE-NEXT: stfiwx f0, 0, r3460; CHECK-BE-NEXT: blr461;462; CHECK-P9-LABEL: testi3:463; CHECK-P9: # %bb.0: # %entry464; CHECK-P9-NEXT: xxsldwi vs0, vs34, vs34, 3465; CHECK-P9-NEXT: addi r3, r7, 12466; CHECK-P9-NEXT: stfiwx f0, 0, r3467; CHECK-P9-NEXT: blr468;469; CHECK-P9-BE-LABEL: testi3:470; CHECK-P9-BE: # %bb.0: # %entry471; CHECK-P9-BE-NEXT: xxsldwi vs0, vs34, vs34, 2472; CHECK-P9-BE-NEXT: addi r3, r7, 12473; CHECK-P9-BE-NEXT: stfiwx f0, 0, r3474; CHECK-P9-BE-NEXT: blr475entry:476 %vecext = extractelement <4 x i32> %a, i32 3477 %arrayidx = getelementptr inbounds i32, ptr %ap, i64 3478 store i32 %vecext, ptr %arrayidx, align 4479 ret <4 x i32> %a480}481 482define dso_local void @test_consecutive_i32(<4 x i32> %a, ptr nocapture %b) local_unnamed_addr #0 {483; CHECK-LABEL: test_consecutive_i32:484; CHECK: # %bb.0: # %entry485; CHECK-NEXT: xxsldwi vs0, vs34, vs34, 2486; CHECK-NEXT: li r3, 4487; CHECK-NEXT: stfiwx f0, 0, r5488; CHECK-NEXT: stxsiwx vs34, r5, r3489; CHECK-NEXT: blr490;491; CHECK-BE-LABEL: test_consecutive_i32:492; CHECK-BE: # %bb.0: # %entry493; CHECK-BE-NEXT: xxsldwi vs0, vs34, vs34, 3494; CHECK-BE-NEXT: xxsldwi vs1, vs34, vs34, 1495; CHECK-BE-NEXT: li r3, 4496; CHECK-BE-NEXT: stfiwx f0, 0, r5497; CHECK-BE-NEXT: stfiwx f1, r5, r3498; CHECK-BE-NEXT: blr499;500; CHECK-P9-LABEL: test_consecutive_i32:501; CHECK-P9: # %bb.0: # %entry502; CHECK-P9-NEXT: xxsldwi vs0, vs34, vs34, 2503; CHECK-P9-NEXT: li r3, 4504; CHECK-P9-NEXT: stxsiwx vs34, r5, r3505; CHECK-P9-NEXT: stfiwx f0, 0, r5506; CHECK-P9-NEXT: blr507;508; CHECK-P9-BE-LABEL: test_consecutive_i32:509; CHECK-P9-BE: # %bb.0: # %entry510; CHECK-P9-BE-NEXT: xxsldwi vs0, vs34, vs34, 3511; CHECK-P9-BE-NEXT: li r3, 4512; CHECK-P9-BE-NEXT: stfiwx f0, 0, r5513; CHECK-P9-BE-NEXT: xxsldwi vs0, vs34, vs34, 1514; CHECK-P9-BE-NEXT: stfiwx f0, r5, r3515; CHECK-P9-BE-NEXT: blr516entry:517 518 %vecext = extractelement <4 x i32> %a, i32 0519 store i32 %vecext, ptr %b, align 4520 %vecext1 = extractelement <4 x i32> %a, i32 2521 %arrayidx2 = getelementptr inbounds i32, ptr %b, i64 1522 store i32 %vecext1, ptr %arrayidx2, align 4523 ret void524}525 526define dso_local void @test_consecutive_float(<4 x float> %a, ptr nocapture %b) local_unnamed_addr #0 {527; CHECK-LABEL: test_consecutive_float:528; CHECK: # %bb.0: # %entry529; CHECK-NEXT: xxsldwi vs0, vs34, vs34, 1530; CHECK-NEXT: xxsldwi vs1, vs34, vs34, 3531; CHECK-NEXT: li r3, 4532; CHECK-NEXT: stfiwx f0, 0, r5533; CHECK-NEXT: stfiwx f1, r5, r3534; CHECK-NEXT: blr535;536; CHECK-BE-LABEL: test_consecutive_float:537; CHECK-BE: # %bb.0: # %entry538; CHECK-BE-NEXT: xxsldwi vs0, vs34, vs34, 2539; CHECK-BE-NEXT: li r3, 4540; CHECK-BE-NEXT: stxsiwx vs34, 0, r5541; CHECK-BE-NEXT: stfiwx f0, r5, r3542; CHECK-BE-NEXT: blr543;544; CHECK-P9-LABEL: test_consecutive_float:545; CHECK-P9: # %bb.0: # %entry546; CHECK-P9-NEXT: xxsldwi vs0, vs34, vs34, 1547; CHECK-P9-NEXT: li r3, 4548; CHECK-P9-NEXT: stfiwx f0, 0, r5549; CHECK-P9-NEXT: xxsldwi vs0, vs34, vs34, 3550; CHECK-P9-NEXT: stfiwx f0, r5, r3551; CHECK-P9-NEXT: blr552;553; CHECK-P9-BE-LABEL: test_consecutive_float:554; CHECK-P9-BE: # %bb.0: # %entry555; CHECK-P9-BE-NEXT: xxsldwi vs0, vs34, vs34, 2556; CHECK-P9-BE-NEXT: li r3, 4557; CHECK-P9-BE-NEXT: stxsiwx vs34, 0, r5558; CHECK-P9-BE-NEXT: stfiwx f0, r5, r3559; CHECK-P9-BE-NEXT: blr560entry:561 %vecext = extractelement <4 x float> %a, i32 1562 store float %vecext, ptr %b, align 4563 %vecext1 = extractelement <4 x float> %a, i32 3564 %arrayidx2 = getelementptr inbounds float, ptr %b, i64 1565 store float %vecext1, ptr %arrayidx2, align 4566 ret void567}568 569define dso_local void @test_stores_exceed_vec_size(<4 x i32> %a, ptr nocapture %b) local_unnamed_addr #0 {570; CHECK-LABEL: test_stores_exceed_vec_size:571; CHECK: # %bb.0: # %entry572; CHECK-NEXT: addis r3, r2, .LCPI16_0@toc@ha573; CHECK-NEXT: xxsldwi vs1, vs34, vs34, 1574; CHECK-NEXT: addi r3, r3, .LCPI16_0@toc@l575; CHECK-NEXT: lxvd2x vs0, 0, r3576; CHECK-NEXT: li r3, 16577; CHECK-NEXT: stfiwx f1, r5, r3578; CHECK-NEXT: li r3, 20579; CHECK-NEXT: stxsiwx vs34, r5, r3580; CHECK-NEXT: xxswapd vs35, vs0581; CHECK-NEXT: vperm v3, v2, v2, v3582; CHECK-NEXT: xxswapd vs0, vs35583; CHECK-NEXT: stxvd2x vs0, 0, r5584; CHECK-NEXT: blr585;586; CHECK-BE-LABEL: test_stores_exceed_vec_size:587; CHECK-BE: # %bb.0: # %entry588; CHECK-BE-NEXT: addis r3, r2, .LCPI16_0@toc@ha589; CHECK-BE-NEXT: xxsldwi vs0, vs34, vs34, 1590; CHECK-BE-NEXT: addi r3, r3, .LCPI16_0@toc@l591; CHECK-BE-NEXT: lxvw4x vs35, 0, r3592; CHECK-BE-NEXT: li r3, 16593; CHECK-BE-NEXT: stxsiwx vs34, r5, r3594; CHECK-BE-NEXT: li r3, 20595; CHECK-BE-NEXT: stfiwx f0, r5, r3596; CHECK-BE-NEXT: vperm v3, v2, v2, v3597; CHECK-BE-NEXT: stxvw4x vs35, 0, r5598; CHECK-BE-NEXT: blr599;600; CHECK-P9-LABEL: test_stores_exceed_vec_size:601; CHECK-P9: # %bb.0: # %entry602; CHECK-P9-NEXT: addis r3, r2, .LCPI16_0@toc@ha603; CHECK-P9-NEXT: xxsldwi vs1, vs34, vs34, 1604; CHECK-P9-NEXT: addi r3, r3, .LCPI16_0@toc@l605; CHECK-P9-NEXT: lxv vs0, 0(r3)606; CHECK-P9-NEXT: li r3, 20607; CHECK-P9-NEXT: stxsiwx vs34, r5, r3608; CHECK-P9-NEXT: li r3, 16609; CHECK-P9-NEXT: stfiwx f1, r5, r3610; CHECK-P9-NEXT: xxperm vs34, vs34, vs0611; CHECK-P9-NEXT: stxv vs34, 0(r5)612; CHECK-P9-NEXT: blr613;614; CHECK-P9-BE-LABEL: test_stores_exceed_vec_size:615; CHECK-P9-BE: # %bb.0: # %entry616; CHECK-P9-BE-NEXT: addis r3, r2, .LCPI16_0@toc@ha617; CHECK-P9-BE-NEXT: xxsldwi vs1, vs34, vs34, 1618; CHECK-P9-BE-NEXT: addi r3, r3, .LCPI16_0@toc@l619; CHECK-P9-BE-NEXT: lxv vs0, 0(r3)620; CHECK-P9-BE-NEXT: li r3, 16621; CHECK-P9-BE-NEXT: stxsiwx vs34, r5, r3622; CHECK-P9-BE-NEXT: li r3, 20623; CHECK-P9-BE-NEXT: stfiwx f1, r5, r3624; CHECK-P9-BE-NEXT: xxperm vs34, vs34, vs0625; CHECK-P9-BE-NEXT: stxv vs34, 0(r5)626; CHECK-P9-BE-NEXT: blr627entry:628 %vecext = extractelement <4 x i32> %a, i32 2629 store i32 %vecext, ptr %b, align 4630 %vecext1 = extractelement <4 x i32> %a, i32 3631 %arrayidx2 = getelementptr inbounds i32, ptr %b, i64 1632 store i32 %vecext1, ptr %arrayidx2, align 4633 %vecext3 = extractelement <4 x i32> %a, i32 0634 %arrayidx4 = getelementptr inbounds i32, ptr %b, i64 2635 store i32 %vecext3, ptr %arrayidx4, align 4636 %arrayidx6 = getelementptr inbounds i32, ptr %b, i64 3637 store i32 %vecext3, ptr %arrayidx6, align 4638 %vecext7 = extractelement <4 x i32> %a, i32 1639 %arrayidx8 = getelementptr inbounds i32, ptr %b, i64 4640 store i32 %vecext7, ptr %arrayidx8, align 4641 %arrayidx10 = getelementptr inbounds i32, ptr %b, i64 5642 store i32 %vecext, ptr %arrayidx10, align 4643 ret void644}645 646define void @test_5_consecutive_stores_of_bytes(<16 x i8> %a, ptr nocapture %b) local_unnamed_addr #0 {647; CHECK-LABEL: test_5_consecutive_stores_of_bytes:648; CHECK: # %bb.0: # %entry649; CHECK-NEXT: xxswapd vs0, vs34650; CHECK-NEXT: mfvsrd r3, vs34651; CHECK-NEXT: rldicl r6, r3, 32, 56652; CHECK-NEXT: mffprd r4, f0653; CHECK-NEXT: rldicl r3, r3, 56, 56654; CHECK-NEXT: stb r3, 2(r5)655; CHECK-NEXT: rldicl r3, r4, 8, 56656; CHECK-NEXT: stb r6, 1(r5)657; CHECK-NEXT: rldicl r6, r4, 32, 56658; CHECK-NEXT: stb r3, 3(r5)659; CHECK-NEXT: rldicl r3, r4, 16, 56660; CHECK-NEXT: stb r6, 0(r5)661; CHECK-NEXT: stb r3, 4(r5)662; CHECK-NEXT: blr663;664; CHECK-BE-LABEL: test_5_consecutive_stores_of_bytes:665; CHECK-BE: # %bb.0: # %entry666; CHECK-BE-NEXT: xxswapd vs0, vs34667; CHECK-BE-NEXT: mfvsrd r3, vs34668; CHECK-BE-NEXT: rldicl r6, r3, 40, 56669; CHECK-BE-NEXT: mffprd r4, f0670; CHECK-BE-NEXT: stb r6, 0(r5)671; CHECK-BE-NEXT: rldicl r6, r4, 40, 56672; CHECK-BE-NEXT: rldicl r4, r4, 16, 56673; CHECK-BE-NEXT: stb r4, 2(r5)674; CHECK-BE-NEXT: clrldi r4, r3, 56675; CHECK-BE-NEXT: rldicl r3, r3, 56, 56676; CHECK-BE-NEXT: stb r6, 1(r5)677; CHECK-BE-NEXT: stb r4, 3(r5)678; CHECK-BE-NEXT: stb r3, 4(r5)679; CHECK-BE-NEXT: blr680;681; CHECK-P9-LABEL: test_5_consecutive_stores_of_bytes:682; CHECK-P9: # %bb.0: # %entry683; CHECK-P9-NEXT: vsldoi v3, v2, v2, 4684; CHECK-P9-NEXT: li r3, 1685; CHECK-P9-NEXT: stxsibx vs35, 0, r5686; CHECK-P9-NEXT: vsldoi v3, v2, v2, 12687; CHECK-P9-NEXT: stxsibx vs35, r5, r3688; CHECK-P9-NEXT: vsldoi v3, v2, v2, 15689; CHECK-P9-NEXT: li r3, 2690; CHECK-P9-NEXT: stxsibx vs35, r5, r3691; CHECK-P9-NEXT: vsldoi v3, v2, v2, 1692; CHECK-P9-NEXT: li r3, 3693; CHECK-P9-NEXT: vsldoi v2, v2, v2, 2694; CHECK-P9-NEXT: stxsibx vs35, r5, r3695; CHECK-P9-NEXT: li r3, 4696; CHECK-P9-NEXT: stxsibx vs34, r5, r3697; CHECK-P9-NEXT: blr698;699; CHECK-P9-BE-LABEL: test_5_consecutive_stores_of_bytes:700; CHECK-P9-BE: # %bb.0: # %entry701; CHECK-P9-BE-NEXT: vsldoi v3, v2, v2, 13702; CHECK-P9-BE-NEXT: li r3, 1703; CHECK-P9-BE-NEXT: stxsibx vs35, 0, r5704; CHECK-P9-BE-NEXT: vsldoi v3, v2, v2, 5705; CHECK-P9-BE-NEXT: stxsibx vs35, r5, r3706; CHECK-P9-BE-NEXT: vsldoi v3, v2, v2, 2707; CHECK-P9-BE-NEXT: li r3, 2708; CHECK-P9-BE-NEXT: stxsibx vs35, r5, r3709; CHECK-P9-BE-NEXT: li r3, 3710; CHECK-P9-BE-NEXT: stxsibx vs34, r5, r3711; CHECK-P9-BE-NEXT: vsldoi v2, v2, v2, 15712; CHECK-P9-BE-NEXT: li r3, 4713; CHECK-P9-BE-NEXT: stxsibx vs34, r5, r3714; CHECK-P9-BE-NEXT: blr715entry:716 %vecext = extractelement <16 x i8> %a, i32 4717 store i8 %vecext, ptr %b, align 1718 %vecext1 = extractelement <16 x i8> %a, i32 12719 %arrayidx2 = getelementptr inbounds i8, ptr %b, i64 1720 store i8 %vecext1, ptr %arrayidx2, align 1721 %vecext3 = extractelement <16 x i8> %a, i32 9722 %arrayidx4 = getelementptr inbounds i8, ptr %b, i64 2723 store i8 %vecext3, ptr %arrayidx4, align 1724 %vecext5 = extractelement <16 x i8> %a, i32 7725 %arrayidx6 = getelementptr inbounds i8, ptr %b, i64 3726 store i8 %vecext5, ptr %arrayidx6, align 1727 %vecext7 = extractelement <16 x i8> %a, i32 6728 %arrayidx8 = getelementptr inbounds i8, ptr %b, i64 4729 store i8 %vecext7, ptr %arrayidx8, align 1730 ret void731}732 733define void @test_13_consecutive_stores_of_bytes(<16 x i8> %a, ptr nocapture %b) local_unnamed_addr #0 {734; CHECK-LABEL: test_13_consecutive_stores_of_bytes:735; CHECK: # %bb.0: # %entry736; CHECK-NEXT: mfvsrd r3, vs34737; CHECK-NEXT: xxswapd vs0, vs34738; CHECK-NEXT: rldicl r6, r3, 32, 56739; CHECK-NEXT: mffprd r4, f0740; CHECK-NEXT: stb r6, 1(r5)741; CHECK-NEXT: rldicl r6, r3, 56, 56742; CHECK-NEXT: stb r6, 2(r5)743; CHECK-NEXT: rldicl r6, r3, 40, 56744; CHECK-NEXT: stb r6, 6(r5)745; CHECK-NEXT: rldicl r6, r3, 24, 56746; CHECK-NEXT: stb r6, 7(r5)747; CHECK-NEXT: rldicl r6, r3, 8, 56748; CHECK-NEXT: rldicl r3, r3, 16, 56749; CHECK-NEXT: stb r6, 9(r5)750; CHECK-NEXT: rldicl r6, r4, 32, 56751; CHECK-NEXT: stb r3, 12(r5)752; CHECK-NEXT: stb r6, 0(r5)753; CHECK-NEXT: rldicl r6, r4, 8, 56754; CHECK-NEXT: stb r6, 3(r5)755; CHECK-NEXT: rldicl r6, r4, 16, 56756; CHECK-NEXT: stb r6, 4(r5)757; CHECK-NEXT: clrldi r6, r4, 56758; CHECK-NEXT: stb r6, 5(r5)759; CHECK-NEXT: rldicl r6, r4, 48, 56760; CHECK-NEXT: stb r6, 8(r5)761; CHECK-NEXT: rldicl r6, r4, 56, 56762; CHECK-NEXT: rldicl r4, r4, 24, 56763; CHECK-NEXT: stb r6, 10(r5)764; CHECK-NEXT: stb r4, 11(r5)765; CHECK-NEXT: blr766;767; CHECK-BE-LABEL: test_13_consecutive_stores_of_bytes:768; CHECK-BE: # %bb.0: # %entry769; CHECK-BE-NEXT: mfvsrd r3, vs34770; CHECK-BE-NEXT: xxswapd vs0, vs34771; CHECK-BE-NEXT: rldicl r6, r3, 40, 56772; CHECK-BE-NEXT: mffprd r4, f0773; CHECK-BE-NEXT: stb r6, 0(r5)774; CHECK-BE-NEXT: clrldi r6, r3, 56775; CHECK-BE-NEXT: stb r6, 3(r5)776; CHECK-BE-NEXT: rldicl r6, r3, 56, 56777; CHECK-BE-NEXT: stb r6, 4(r5)778; CHECK-BE-NEXT: rldicl r6, r3, 8, 56779; CHECK-BE-NEXT: stb r6, 5(r5)780; CHECK-BE-NEXT: rldicl r6, r3, 24, 56781; CHECK-BE-NEXT: stb r6, 8(r5)782; CHECK-BE-NEXT: rldicl r6, r3, 16, 56783; CHECK-BE-NEXT: rldicl r3, r3, 48, 56784; CHECK-BE-NEXT: stb r6, 10(r5)785; CHECK-BE-NEXT: rldicl r6, r4, 40, 56786; CHECK-BE-NEXT: stb r3, 11(r5)787; CHECK-BE-NEXT: rldicl r3, r4, 56, 56788; CHECK-BE-NEXT: stb r6, 1(r5)789; CHECK-BE-NEXT: rldicl r6, r4, 16, 56790; CHECK-BE-NEXT: stb r3, 12(r5)791; CHECK-BE-NEXT: stb r6, 2(r5)792; CHECK-BE-NEXT: rldicl r6, r4, 32, 56793; CHECK-BE-NEXT: stb r6, 6(r5)794; CHECK-BE-NEXT: rldicl r6, r4, 48, 56795; CHECK-BE-NEXT: stb r6, 7(r5)796; CHECK-BE-NEXT: clrldi r6, r4, 56797; CHECK-BE-NEXT: stb r6, 9(r5)798; CHECK-BE-NEXT: blr799;800; CHECK-P9-LABEL: test_13_consecutive_stores_of_bytes:801; CHECK-P9: # %bb.0: # %entry802; CHECK-P9-NEXT: vsldoi v3, v2, v2, 12803; CHECK-P9-NEXT: li r3, 1804; CHECK-P9-NEXT: stxsibx vs35, r5, r3805; CHECK-P9-NEXT: vsldoi v3, v2, v2, 15806; CHECK-P9-NEXT: li r3, 2807; CHECK-P9-NEXT: stxsibx vs35, r5, r3808; CHECK-P9-NEXT: vsldoi v3, v2, v2, 1809; CHECK-P9-NEXT: li r3, 3810; CHECK-P9-NEXT: stxsibx vs35, r5, r3811; CHECK-P9-NEXT: vsldoi v3, v2, v2, 2812; CHECK-P9-NEXT: li r3, 4813; CHECK-P9-NEXT: stxsibx vs35, r5, r3814; CHECK-P9-NEXT: vsldoi v3, v2, v2, 4815; CHECK-P9-NEXT: li r3, 5816; CHECK-P9-NEXT: stxsibx vs35, 0, r5817; CHECK-P9-NEXT: vsldoi v3, v2, v2, 8818; CHECK-P9-NEXT: stxsibx vs35, r5, r3819; CHECK-P9-NEXT: vsldoi v3, v2, v2, 13820; CHECK-P9-NEXT: li r3, 6821; CHECK-P9-NEXT: stxsibx vs35, r5, r3822; CHECK-P9-NEXT: vsldoi v3, v2, v2, 11823; CHECK-P9-NEXT: li r3, 7824; CHECK-P9-NEXT: stxsibx vs35, r5, r3825; CHECK-P9-NEXT: vsldoi v3, v2, v2, 6826; CHECK-P9-NEXT: li r3, 8827; CHECK-P9-NEXT: stxsibx vs35, r5, r3828; CHECK-P9-NEXT: vsldoi v3, v2, v2, 9829; CHECK-P9-NEXT: li r3, 9830; CHECK-P9-NEXT: stxsibx vs35, r5, r3831; CHECK-P9-NEXT: vsldoi v3, v2, v2, 7832; CHECK-P9-NEXT: li r3, 10833; CHECK-P9-NEXT: stxsibx vs35, r5, r3834; CHECK-P9-NEXT: vsldoi v3, v2, v2, 3835; CHECK-P9-NEXT: li r3, 11836; CHECK-P9-NEXT: vsldoi v2, v2, v2, 10837; CHECK-P9-NEXT: stxsibx vs35, r5, r3838; CHECK-P9-NEXT: li r3, 12839; CHECK-P9-NEXT: stxsibx vs34, r5, r3840; CHECK-P9-NEXT: blr841;842; CHECK-P9-BE-LABEL: test_13_consecutive_stores_of_bytes:843; CHECK-P9-BE: # %bb.0: # %entry844; CHECK-P9-BE-NEXT: li r3, 3845; CHECK-P9-BE-NEXT: vsldoi v3, v2, v2, 5846; CHECK-P9-BE-NEXT: stxsibx vs34, r5, r3847; CHECK-P9-BE-NEXT: li r3, 1848; CHECK-P9-BE-NEXT: stxsibx vs35, r5, r3849; CHECK-P9-BE-NEXT: vsldoi v3, v2, v2, 2850; CHECK-P9-BE-NEXT: li r3, 2851; CHECK-P9-BE-NEXT: stxsibx vs35, r5, r3852; CHECK-P9-BE-NEXT: vsldoi v3, v2, v2, 15853; CHECK-P9-BE-NEXT: li r3, 4854; CHECK-P9-BE-NEXT: stxsibx vs35, r5, r3855; CHECK-P9-BE-NEXT: vsldoi v3, v2, v2, 13856; CHECK-P9-BE-NEXT: li r3, 5857; CHECK-P9-BE-NEXT: stxsibx vs35, 0, r5858; CHECK-P9-BE-NEXT: vsldoi v3, v2, v2, 9859; CHECK-P9-BE-NEXT: stxsibx vs35, r5, r3860; CHECK-P9-BE-NEXT: vsldoi v3, v2, v2, 4861; CHECK-P9-BE-NEXT: li r3, 6862; CHECK-P9-BE-NEXT: stxsibx vs35, r5, r3863; CHECK-P9-BE-NEXT: vsldoi v3, v2, v2, 6864; CHECK-P9-BE-NEXT: li r3, 7865; CHECK-P9-BE-NEXT: stxsibx vs35, r5, r3866; CHECK-P9-BE-NEXT: vsldoi v3, v2, v2, 11867; CHECK-P9-BE-NEXT: li r3, 8868; CHECK-P9-BE-NEXT: stxsibx vs35, r5, r3869; CHECK-P9-BE-NEXT: vsldoi v3, v2, v2, 8870; CHECK-P9-BE-NEXT: li r3, 9871; CHECK-P9-BE-NEXT: stxsibx vs35, r5, r3872; CHECK-P9-BE-NEXT: vsldoi v3, v2, v2, 10873; CHECK-P9-BE-NEXT: li r3, 10874; CHECK-P9-BE-NEXT: stxsibx vs35, r5, r3875; CHECK-P9-BE-NEXT: vsldoi v3, v2, v2, 14876; CHECK-P9-BE-NEXT: li r3, 11877; CHECK-P9-BE-NEXT: vsldoi v2, v2, v2, 7878; CHECK-P9-BE-NEXT: stxsibx vs35, r5, r3879; CHECK-P9-BE-NEXT: li r3, 12880; CHECK-P9-BE-NEXT: stxsibx vs34, r5, r3881; CHECK-P9-BE-NEXT: blr882entry:883 %vecext = extractelement <16 x i8> %a, i32 4884 store i8 %vecext, ptr %b, align 1885 %vecext1 = extractelement <16 x i8> %a, i32 12886 %arrayidx2 = getelementptr inbounds i8, ptr %b, i64 1887 store i8 %vecext1, ptr %arrayidx2, align 1888 %vecext3 = extractelement <16 x i8> %a, i32 9889 %arrayidx4 = getelementptr inbounds i8, ptr %b, i64 2890 store i8 %vecext3, ptr %arrayidx4, align 1891 %vecext5 = extractelement <16 x i8> %a, i32 7892 %arrayidx6 = getelementptr inbounds i8, ptr %b, i64 3893 store i8 %vecext5, ptr %arrayidx6, align 1894 %vecext7 = extractelement <16 x i8> %a, i32 6895 %arrayidx8 = getelementptr inbounds i8, ptr %b, i64 4896 store i8 %vecext7, ptr %arrayidx8, align 1897 %vecext9 = extractelement <16 x i8> %a, i32 0898 %arrayidx10 = getelementptr inbounds i8, ptr %b, i64 5899 store i8 %vecext9, ptr %arrayidx10, align 1900 %vecext11 = extractelement <16 x i8> %a, i32 11901 %arrayidx12 = getelementptr inbounds i8, ptr %b, i64 6902 store i8 %vecext11, ptr %arrayidx12, align 1903 %vecext13 = extractelement <16 x i8> %a, i32 13904 %arrayidx14 = getelementptr inbounds i8, ptr %b, i64 7905 store i8 %vecext13, ptr %arrayidx14, align 1906 %vecext15 = extractelement <16 x i8> %a, i32 2907 %arrayidx16 = getelementptr inbounds i8, ptr %b, i64 8908 store i8 %vecext15, ptr %arrayidx16, align 1909 %vecext17 = extractelement <16 x i8> %a, i32 15910 %arrayidx18 = getelementptr inbounds i8, ptr %b, i64 9911 store i8 %vecext17, ptr %arrayidx18, align 1912 %vecext19 = extractelement <16 x i8> %a, i32 1913 %arrayidx20 = getelementptr inbounds i8, ptr %b, i64 10914 store i8 %vecext19, ptr %arrayidx20, align 1915 %vecext21 = extractelement <16 x i8> %a, i32 5916 %arrayidx22 = getelementptr inbounds i8, ptr %b, i64 11917 store i8 %vecext21, ptr %arrayidx22, align 1918 %vecext23 = extractelement <16 x i8> %a, i32 14919 %arrayidx24 = getelementptr inbounds i8, ptr %b, i64 12920 store i8 %vecext23, ptr %arrayidx24, align 1921 ret void922}923 924define void @test_elements_from_two_vec(<4 x i32> %a, <4 x i32> %b, ptr nocapture %c) local_unnamed_addr #0 {925; CHECK-LABEL: test_elements_from_two_vec:926; CHECK: # %bb.0: # %entry927; CHECK-NEXT: xxsldwi vs0, vs34, vs34, 2928; CHECK-NEXT: xxsldwi vs1, vs35, vs35, 1929; CHECK-NEXT: li r3, 4930; CHECK-NEXT: stfiwx f0, r7, r3931; CHECK-NEXT: stfiwx f1, 0, r7932; CHECK-NEXT: blr933;934; CHECK-BE-LABEL: test_elements_from_two_vec:935; CHECK-BE: # %bb.0: # %entry936; CHECK-BE-NEXT: xxsldwi vs0, vs34, vs34, 3937; CHECK-BE-NEXT: li r3, 4938; CHECK-BE-NEXT: stxsiwx vs35, 0, r7939; CHECK-BE-NEXT: stfiwx f0, r7, r3940; CHECK-BE-NEXT: blr941;942; CHECK-P9-LABEL: test_elements_from_two_vec:943; CHECK-P9: # %bb.0: # %entry944; CHECK-P9-NEXT: xxsldwi vs0, vs34, vs34, 2945; CHECK-P9-NEXT: li r3, 4946; CHECK-P9-NEXT: stfiwx f0, r7, r3947; CHECK-P9-NEXT: xxsldwi vs0, vs35, vs35, 1948; CHECK-P9-NEXT: stfiwx f0, 0, r7949; CHECK-P9-NEXT: blr950;951; CHECK-P9-BE-LABEL: test_elements_from_two_vec:952; CHECK-P9-BE: # %bb.0: # %entry953; CHECK-P9-BE-NEXT: xxsldwi vs0, vs34, vs34, 3954; CHECK-P9-BE-NEXT: li r3, 4955; CHECK-P9-BE-NEXT: stxsiwx vs35, 0, r7956; CHECK-P9-BE-NEXT: stfiwx f0, r7, r3957; CHECK-P9-BE-NEXT: blr958entry:959 %vecext = extractelement <4 x i32> %a, i32 0960 %arrayidx = getelementptr inbounds i32, ptr %c, i64 1961 store i32 %vecext, ptr %arrayidx, align 4962 %vecext1 = extractelement <4 x i32> %b, i32 1963 store i32 %vecext1, ptr %c, align 4964 ret void965}966 967define dso_local void @test_elements_from_three_vec(<4 x float> %a, <4 x float> %b, <4 x float> %c, ptr nocapture %d) local_unnamed_addr #0 {968; CHECK-LABEL: test_elements_from_three_vec:969; CHECK: # %bb.0: # %entry970; CHECK-NEXT: li r3, 4971; CHECK-NEXT: xxsldwi vs0, vs34, vs34, 3972; CHECK-NEXT: xxsldwi vs1, vs36, vs36, 1973; CHECK-NEXT: stxsiwx vs35, r9, r3974; CHECK-NEXT: li r3, 8975; CHECK-NEXT: stfiwx f0, 0, r9976; CHECK-NEXT: stfiwx f1, r9, r3977; CHECK-NEXT: blr978;979; CHECK-BE-LABEL: test_elements_from_three_vec:980; CHECK-BE: # %bb.0: # %entry981; CHECK-BE-NEXT: xxsldwi vs1, vs35, vs35, 1982; CHECK-BE-NEXT: li r3, 4983; CHECK-BE-NEXT: xxsldwi vs0, vs34, vs34, 2984; CHECK-BE-NEXT: stfiwx f1, r9, r3985; CHECK-BE-NEXT: li r3, 8986; CHECK-BE-NEXT: stfiwx f0, 0, r9987; CHECK-BE-NEXT: stxsiwx vs36, r9, r3988; CHECK-BE-NEXT: blr989;990; CHECK-P9-LABEL: test_elements_from_three_vec:991; CHECK-P9: # %bb.0: # %entry992; CHECK-P9-NEXT: xxsldwi vs0, vs34, vs34, 3993; CHECK-P9-NEXT: li r3, 4994; CHECK-P9-NEXT: stxsiwx vs35, r9, r3995; CHECK-P9-NEXT: li r3, 8996; CHECK-P9-NEXT: stfiwx f0, 0, r9997; CHECK-P9-NEXT: xxsldwi vs0, vs36, vs36, 1998; CHECK-P9-NEXT: stfiwx f0, r9, r3999; CHECK-P9-NEXT: blr1000;1001; CHECK-P9-BE-LABEL: test_elements_from_three_vec:1002; CHECK-P9-BE: # %bb.0: # %entry1003; CHECK-P9-BE-NEXT: xxsldwi vs0, vs34, vs34, 21004; CHECK-P9-BE-NEXT: li r3, 41005; CHECK-P9-BE-NEXT: stfiwx f0, 0, r91006; CHECK-P9-BE-NEXT: xxsldwi vs0, vs35, vs35, 11007; CHECK-P9-BE-NEXT: stfiwx f0, r9, r31008; CHECK-P9-BE-NEXT: li r3, 81009; CHECK-P9-BE-NEXT: stxsiwx vs36, r9, r31010; CHECK-P9-BE-NEXT: blr1011entry:1012 %vecext = extractelement <4 x float> %a, i32 31013 store float %vecext, ptr %d, align 41014 %vecext1 = extractelement <4 x float> %b, i32 21015 %arrayidx2 = getelementptr inbounds float, ptr %d, i64 11016 store float %vecext1, ptr %arrayidx2, align 41017 %vecext3 = extractelement <4 x float> %c, i32 11018 %arrayidx4 = getelementptr inbounds float, ptr %d, i64 21019 store float %vecext3, ptr %arrayidx4, align 41020 ret void1021}1022