brintos

brintos / llvm-project-archived public Read only

0
0
Text · 34.9 KiB · 13839a7 Raw
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