brintos

brintos / llvm-project-archived public Read only

0
0
Text · 66.0 KiB · 656bc36 Raw
2521 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -ppc-vsr-nums-as-vr -mtriple=powerpc64-unknown-linux-gnu \3; RUN:       -verify-machineinstrs -ppc-asm-full-reg-names -mcpu=pwr8 -relocation-model=pic \4; RUN:       | FileCheck %s5; RUN: llc < %s -ppc-vsr-nums-as-vr -mtriple=powerpc64le-unknown-linux-gnu \6; RUN:       -verify-machineinstrs -ppc-asm-full-reg-names -mcpu=pwr8 -relocation-model=pic \7; RUN:       | FileCheck %s -check-prefix=CHECK-LE8; RUN: llc < %s -vec-extabi -mtriple=powerpc64-ibm-aix-xcoff \9; RUN:       -verify-machineinstrs -mcpu=pwr8 \10; RUN:       | FileCheck %s -check-prefix=CHECK-AIX11 12; The build[csilf] functions simply test the scalar_to_vector handling with13; direct moves. This corresponds to the "insertelement" instruction. Subsequent14; to this, there will be a splat corresponding to the shufflevector.15 16@d = common global double 0.000000e+00, align 817 18; Function Attrs: norecurse nounwind readnone19define <16 x i8> @buildc(i8 zeroext %a) {20; CHECK-LABEL: buildc:21; CHECK:       # %bb.0: # %entry22; CHECK-NEXT:    mtvsrwz v2, r323; CHECK-NEXT:    vspltb v2, v2, 724; CHECK-NEXT:    blr25;26; CHECK-LE-LABEL: buildc:27; CHECK-LE:       # %bb.0: # %entry28; CHECK-LE-NEXT:    mtvsrd v2, r329; CHECK-LE-NEXT:    vspltb v2, v2, 730; CHECK-LE-NEXT:    blr31;32; CHECK-AIX-LABEL: buildc:33; CHECK-AIX:       # %bb.0: # %entry34; CHECK-AIX-NEXT:    mtvsrwz 34, 335; CHECK-AIX-NEXT:    vspltb 2, 2, 736; CHECK-AIX-NEXT:    blr37entry:38  %splat.splatinsert = insertelement <16 x i8> undef, i8 %a, i32 039  %splat.splat = shufflevector <16 x i8> %splat.splatinsert, <16 x i8> undef, <16 x i32> zeroinitializer40  ret <16 x i8> %splat.splat41 42 43}44 45; Function Attrs: norecurse nounwind readnone46define <8 x i16> @builds(i16 zeroext %a) {47; CHECK-LABEL: builds:48; CHECK:       # %bb.0: # %entry49; CHECK-NEXT:    mtvsrwz v2, r350; CHECK-NEXT:    vsplth v2, v2, 351; CHECK-NEXT:    blr52;53; CHECK-LE-LABEL: builds:54; CHECK-LE:       # %bb.0: # %entry55; CHECK-LE-NEXT:    mtvsrd v2, r356; CHECK-LE-NEXT:    vsplth v2, v2, 357; CHECK-LE-NEXT:    blr58;59; CHECK-AIX-LABEL: builds:60; CHECK-AIX:       # %bb.0: # %entry61; CHECK-AIX-NEXT:    mtvsrwz 34, 362; CHECK-AIX-NEXT:    vsplth 2, 2, 363; CHECK-AIX-NEXT:    blr64entry:65  %splat.splatinsert = insertelement <8 x i16> undef, i16 %a, i32 066  %splat.splat = shufflevector <8 x i16> %splat.splatinsert, <8 x i16> undef, <8 x i32> zeroinitializer67  ret <8 x i16> %splat.splat68 69 70}71 72; Function Attrs: norecurse nounwind readnone73define <4 x i32> @buildi(i32 zeroext %a) {74; CHECK-LABEL: buildi:75; CHECK:       # %bb.0: # %entry76; CHECK-NEXT:    mtfprwz f0, r377; CHECK-NEXT:    xxspltw v2, vs0, 178; CHECK-NEXT:    blr79;80; CHECK-LE-LABEL: buildi:81; CHECK-LE:       # %bb.0: # %entry82; CHECK-LE-NEXT:    mtfprwz f0, r383; CHECK-LE-NEXT:    xxspltw v2, vs0, 184; CHECK-LE-NEXT:    blr85;86; CHECK-AIX-LABEL: buildi:87; CHECK-AIX:       # %bb.0: # %entry88; CHECK-AIX-NEXT:    mtfprwz 0, 389; CHECK-AIX-NEXT:    xxspltw 34, 0, 190; CHECK-AIX-NEXT:    blr91entry:92  %splat.splatinsert = insertelement <4 x i32> undef, i32 %a, i32 093  %splat.splat = shufflevector <4 x i32> %splat.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer94  ret <4 x i32> %splat.splat95 96 97}98 99; Function Attrs: norecurse nounwind readnone100define <2 x i64> @buildl(i64 %a) {101; CHECK-LABEL: buildl:102; CHECK:       # %bb.0: # %entry103; CHECK-NEXT:    mtfprd f0, r3104; CHECK-NEXT:    xxspltd v2, vs0, 0105; CHECK-NEXT:    blr106;107; CHECK-LE-LABEL: buildl:108; CHECK-LE:       # %bb.0: # %entry109; CHECK-LE-NEXT:    mtfprd f0, r3110; CHECK-LE-NEXT:    xxspltd v2, vs0, 0111; CHECK-LE-NEXT:    blr112;113; CHECK-AIX-LABEL: buildl:114; CHECK-AIX:       # %bb.0: # %entry115; CHECK-AIX-NEXT:    mtfprd 0, 3116; CHECK-AIX-NEXT:    xxmrghd 34, 0, 0117; CHECK-AIX-NEXT:    blr118entry:119  %splat.splatinsert = insertelement <2 x i64> undef, i64 %a, i32 0120  %splat.splat = shufflevector <2 x i64> %splat.splatinsert, <2 x i64> undef, <2 x i32> zeroinitializer121  ret <2 x i64> %splat.splat122 123 124}125 126; Function Attrs: norecurse nounwind readnone127define <4 x float> @buildf(float %a) {128; CHECK-LABEL: buildf:129; CHECK:       # %bb.0: # %entry130; CHECK-NEXT:    xscvdpspn vs0, f1131; CHECK-NEXT:    xxspltw v2, vs0, 0132; CHECK-NEXT:    blr133;134; CHECK-LE-LABEL: buildf:135; CHECK-LE:       # %bb.0: # %entry136; CHECK-LE-NEXT:    xscvdpspn vs0, f1137; CHECK-LE-NEXT:    xxspltw v2, vs0, 0138; CHECK-LE-NEXT:    blr139;140; CHECK-AIX-LABEL: buildf:141; CHECK-AIX:       # %bb.0: # %entry142; CHECK-AIX-NEXT:    xscvdpspn 0, 1143; CHECK-AIX-NEXT:    xxspltw 34, 0, 0144; CHECK-AIX-NEXT:    blr145entry:146  %splat.splatinsert = insertelement <4 x float> undef, float %a, i32 0147  %splat.splat = shufflevector <4 x float> %splat.splatinsert, <4 x float> undef, <4 x i32> zeroinitializer148  ret <4 x float> %splat.splat149 150 151}152 153; The optimization to remove stack operations from PPCDAGToDAGISel::Select154; should still trigger for v2f64, producing an lxvdsx.155; Function Attrs: norecurse nounwind readonly156define <2 x double> @buildd() {157; CHECK-LABEL: buildd:158; CHECK:       # %bb.0: # %entry159; CHECK-NEXT:    addis r3, r2, .LC0@toc@ha160; CHECK-NEXT:    ld r3, .LC0@toc@l(r3)161; CHECK-NEXT:    lxvdsx v2, 0, r3162; CHECK-NEXT:    blr163;164; CHECK-LE-LABEL: buildd:165; CHECK-LE:       # %bb.0: # %entry166; CHECK-LE-NEXT:    addis r3, r2, .LC0@toc@ha167; CHECK-LE-NEXT:    ld r3, .LC0@toc@l(r3)168; CHECK-LE-NEXT:    lxvdsx v2, 0, r3169; CHECK-LE-NEXT:    blr170;171; CHECK-AIX-LABEL: buildd:172; CHECK-AIX:       # %bb.0: # %entry173; CHECK-AIX-NEXT:    ld 3, L..C0(2) # @d174; CHECK-AIX-NEXT:    lxvdsx 34, 0, 3175; CHECK-AIX-NEXT:    blr176entry:177  %0 = load double, ptr @d, align 8178  %splat.splatinsert = insertelement <2 x double> undef, double %0, i32 0179  %splat.splat = shufflevector <2 x double> %splat.splatinsert, <2 x double> undef, <2 x i32> zeroinitializer180  ret <2 x double> %splat.splat181 182 183}184 185; Function Attrs: norecurse nounwind readnone186define signext i8 @getsc0(<16 x i8> %vsc) {187; CHECK-LABEL: getsc0:188; CHECK:       # %bb.0: # %entry189; CHECK-NEXT:    mfvsrd r3, v2190; CHECK-NEXT:    rldicl r3, r3, 8, 56191; CHECK-NEXT:    extsb r3, r3192; CHECK-NEXT:    blr193;194; CHECK-LE-LABEL: getsc0:195; CHECK-LE:       # %bb.0: # %entry196; CHECK-LE-NEXT:    xxswapd vs0, v2197; CHECK-LE-NEXT:    mffprd r3, f0198; CHECK-LE-NEXT:    clrldi r3, r3, 56199; CHECK-LE-NEXT:    extsb r3, r3200; CHECK-LE-NEXT:    blr201;202; CHECK-AIX-LABEL: getsc0:203; CHECK-AIX:       # %bb.0: # %entry204; CHECK-AIX-NEXT:    mfvsrd 3, 34205; CHECK-AIX-NEXT:    rldicl 3, 3, 8, 56206; CHECK-AIX-NEXT:    extsb 3, 3207; CHECK-AIX-NEXT:    blr208entry:209  %vecext = extractelement <16 x i8> %vsc, i32 0210  ret i8 %vecext211 212 213}214 215; Function Attrs: norecurse nounwind readnone216define signext i8 @getsc1(<16 x i8> %vsc) {217; CHECK-LABEL: getsc1:218; CHECK:       # %bb.0: # %entry219; CHECK-NEXT:    mfvsrd r3, v2220; CHECK-NEXT:    rldicl r3, r3, 16, 56221; CHECK-NEXT:    extsb r3, r3222; CHECK-NEXT:    blr223;224; CHECK-LE-LABEL: getsc1:225; CHECK-LE:       # %bb.0: # %entry226; CHECK-LE-NEXT:    xxswapd vs0, v2227; CHECK-LE-NEXT:    mffprd r3, f0228; CHECK-LE-NEXT:    rldicl r3, r3, 56, 56229; CHECK-LE-NEXT:    extsb r3, r3230; CHECK-LE-NEXT:    blr231;232; CHECK-AIX-LABEL: getsc1:233; CHECK-AIX:       # %bb.0: # %entry234; CHECK-AIX-NEXT:    mfvsrd 3, 34235; CHECK-AIX-NEXT:    rldicl 3, 3, 16, 56236; CHECK-AIX-NEXT:    extsb 3, 3237; CHECK-AIX-NEXT:    blr238entry:239  %vecext = extractelement <16 x i8> %vsc, i32 1240  ret i8 %vecext241 242 243}244 245; Function Attrs: norecurse nounwind readnone246define signext i8 @getsc2(<16 x i8> %vsc) {247; CHECK-LABEL: getsc2:248; CHECK:       # %bb.0: # %entry249; CHECK-NEXT:    mfvsrd r3, v2250; CHECK-NEXT:    rldicl r3, r3, 24, 56251; CHECK-NEXT:    extsb r3, r3252; CHECK-NEXT:    blr253;254; CHECK-LE-LABEL: getsc2:255; CHECK-LE:       # %bb.0: # %entry256; CHECK-LE-NEXT:    xxswapd vs0, v2257; CHECK-LE-NEXT:    mffprd r3, f0258; CHECK-LE-NEXT:    rldicl r3, r3, 48, 56259; CHECK-LE-NEXT:    extsb r3, r3260; CHECK-LE-NEXT:    blr261;262; CHECK-AIX-LABEL: getsc2:263; CHECK-AIX:       # %bb.0: # %entry264; CHECK-AIX-NEXT:    mfvsrd 3, 34265; CHECK-AIX-NEXT:    rldicl 3, 3, 24, 56266; CHECK-AIX-NEXT:    extsb 3, 3267; CHECK-AIX-NEXT:    blr268entry:269  %vecext = extractelement <16 x i8> %vsc, i32 2270  ret i8 %vecext271 272 273}274 275; Function Attrs: norecurse nounwind readnone276define signext i8 @getsc3(<16 x i8> %vsc) {277; CHECK-LABEL: getsc3:278; CHECK:       # %bb.0: # %entry279; CHECK-NEXT:    mfvsrd r3, v2280; CHECK-NEXT:    rldicl r3, r3, 32, 56281; CHECK-NEXT:    extsb r3, r3282; CHECK-NEXT:    blr283;284; CHECK-LE-LABEL: getsc3:285; CHECK-LE:       # %bb.0: # %entry286; CHECK-LE-NEXT:    xxswapd vs0, v2287; CHECK-LE-NEXT:    mffprd r3, f0288; CHECK-LE-NEXT:    rldicl r3, r3, 40, 56289; CHECK-LE-NEXT:    extsb r3, r3290; CHECK-LE-NEXT:    blr291;292; CHECK-AIX-LABEL: getsc3:293; CHECK-AIX:       # %bb.0: # %entry294; CHECK-AIX-NEXT:    mfvsrd 3, 34295; CHECK-AIX-NEXT:    rldicl 3, 3, 32, 56296; CHECK-AIX-NEXT:    extsb 3, 3297; CHECK-AIX-NEXT:    blr298entry:299  %vecext = extractelement <16 x i8> %vsc, i32 3300  ret i8 %vecext301 302 303}304 305; Function Attrs: norecurse nounwind readnone306define signext i8 @getsc4(<16 x i8> %vsc) {307; CHECK-LABEL: getsc4:308; CHECK:       # %bb.0: # %entry309; CHECK-NEXT:    mfvsrd r3, v2310; CHECK-NEXT:    rldicl r3, r3, 40, 56311; CHECK-NEXT:    extsb r3, r3312; CHECK-NEXT:    blr313;314; CHECK-LE-LABEL: getsc4:315; CHECK-LE:       # %bb.0: # %entry316; CHECK-LE-NEXT:    xxswapd vs0, v2317; CHECK-LE-NEXT:    mffprd r3, f0318; CHECK-LE-NEXT:    rldicl r3, r3, 32, 56319; CHECK-LE-NEXT:    extsb r3, r3320; CHECK-LE-NEXT:    blr321;322; CHECK-AIX-LABEL: getsc4:323; CHECK-AIX:       # %bb.0: # %entry324; CHECK-AIX-NEXT:    mfvsrd 3, 34325; CHECK-AIX-NEXT:    rldicl 3, 3, 40, 56326; CHECK-AIX-NEXT:    extsb 3, 3327; CHECK-AIX-NEXT:    blr328entry:329  %vecext = extractelement <16 x i8> %vsc, i32 4330  ret i8 %vecext331 332 333}334 335; Function Attrs: norecurse nounwind readnone336define signext i8 @getsc5(<16 x i8> %vsc) {337; CHECK-LABEL: getsc5:338; CHECK:       # %bb.0: # %entry339; CHECK-NEXT:    mfvsrd r3, v2340; CHECK-NEXT:    rldicl r3, r3, 48, 56341; CHECK-NEXT:    extsb r3, r3342; CHECK-NEXT:    blr343;344; CHECK-LE-LABEL: getsc5:345; CHECK-LE:       # %bb.0: # %entry346; CHECK-LE-NEXT:    xxswapd vs0, v2347; CHECK-LE-NEXT:    mffprd r3, f0348; CHECK-LE-NEXT:    rldicl r3, r3, 24, 56349; CHECK-LE-NEXT:    extsb r3, r3350; CHECK-LE-NEXT:    blr351;352; CHECK-AIX-LABEL: getsc5:353; CHECK-AIX:       # %bb.0: # %entry354; CHECK-AIX-NEXT:    mfvsrd 3, 34355; CHECK-AIX-NEXT:    rldicl 3, 3, 48, 56356; CHECK-AIX-NEXT:    extsb 3, 3357; CHECK-AIX-NEXT:    blr358entry:359  %vecext = extractelement <16 x i8> %vsc, i32 5360  ret i8 %vecext361 362 363}364 365; Function Attrs: norecurse nounwind readnone366define signext i8 @getsc6(<16 x i8> %vsc) {367; CHECK-LABEL: getsc6:368; CHECK:       # %bb.0: # %entry369; CHECK-NEXT:    mfvsrd r3, v2370; CHECK-NEXT:    rldicl r3, r3, 56, 56371; CHECK-NEXT:    extsb r3, r3372; CHECK-NEXT:    blr373;374; CHECK-LE-LABEL: getsc6:375; CHECK-LE:       # %bb.0: # %entry376; CHECK-LE-NEXT:    xxswapd vs0, v2377; CHECK-LE-NEXT:    mffprd r3, f0378; CHECK-LE-NEXT:    rldicl r3, r3, 16, 56379; CHECK-LE-NEXT:    extsb r3, r3380; CHECK-LE-NEXT:    blr381;382; CHECK-AIX-LABEL: getsc6:383; CHECK-AIX:       # %bb.0: # %entry384; CHECK-AIX-NEXT:    mfvsrd 3, 34385; CHECK-AIX-NEXT:    rldicl 3, 3, 56, 56386; CHECK-AIX-NEXT:    extsb 3, 3387; CHECK-AIX-NEXT:    blr388entry:389  %vecext = extractelement <16 x i8> %vsc, i32 6390  ret i8 %vecext391 392 393}394 395; Function Attrs: norecurse nounwind readnone396define signext i8 @getsc7(<16 x i8> %vsc) {397; CHECK-LABEL: getsc7:398; CHECK:       # %bb.0: # %entry399; CHECK-NEXT:    mfvsrd r3, v2400; CHECK-NEXT:    clrldi r3, r3, 56401; CHECK-NEXT:    extsb r3, r3402; CHECK-NEXT:    blr403;404; CHECK-LE-LABEL: getsc7:405; CHECK-LE:       # %bb.0: # %entry406; CHECK-LE-NEXT:    xxswapd vs0, v2407; CHECK-LE-NEXT:    mffprd r3, f0408; CHECK-LE-NEXT:    rldicl r3, r3, 8, 56409; CHECK-LE-NEXT:    extsb r3, r3410; CHECK-LE-NEXT:    blr411;412; CHECK-AIX-LABEL: getsc7:413; CHECK-AIX:       # %bb.0: # %entry414; CHECK-AIX-NEXT:    mfvsrd 3, 34415; CHECK-AIX-NEXT:    clrldi 3, 3, 56416; CHECK-AIX-NEXT:    extsb 3, 3417; CHECK-AIX-NEXT:    blr418entry:419  %vecext = extractelement <16 x i8> %vsc, i32 7420  ret i8 %vecext421 422 423}424 425; Function Attrs: norecurse nounwind readnone426define signext i8 @getsc8(<16 x i8> %vsc) {427; CHECK-LABEL: getsc8:428; CHECK:       # %bb.0: # %entry429; CHECK-NEXT:    xxswapd vs0, v2430; CHECK-NEXT:    mffprd r3, f0431; CHECK-NEXT:    rldicl r3, r3, 8, 56432; CHECK-NEXT:    extsb r3, r3433; CHECK-NEXT:    blr434;435; CHECK-LE-LABEL: getsc8:436; CHECK-LE:       # %bb.0: # %entry437; CHECK-LE-NEXT:    mfvsrd r3, v2438; CHECK-LE-NEXT:    clrldi r3, r3, 56439; CHECK-LE-NEXT:    extsb r3, r3440; CHECK-LE-NEXT:    blr441;442; CHECK-AIX-LABEL: getsc8:443; CHECK-AIX:       # %bb.0: # %entry444; CHECK-AIX-NEXT:    xxswapd 0, 34445; CHECK-AIX-NEXT:    mffprd 3, 0446; CHECK-AIX-NEXT:    rldicl 3, 3, 8, 56447; CHECK-AIX-NEXT:    extsb 3, 3448; CHECK-AIX-NEXT:    blr449entry:450  %vecext = extractelement <16 x i8> %vsc, i32 8451  ret i8 %vecext452 453 454}455 456; Function Attrs: norecurse nounwind readnone457define signext i8 @getsc9(<16 x i8> %vsc) {458; CHECK-LABEL: getsc9:459; CHECK:       # %bb.0: # %entry460; CHECK-NEXT:    xxswapd vs0, v2461; CHECK-NEXT:    mffprd r3, f0462; CHECK-NEXT:    rldicl r3, r3, 16, 56463; CHECK-NEXT:    extsb r3, r3464; CHECK-NEXT:    blr465;466; CHECK-LE-LABEL: getsc9:467; CHECK-LE:       # %bb.0: # %entry468; CHECK-LE-NEXT:    mfvsrd r3, v2469; CHECK-LE-NEXT:    rldicl r3, r3, 56, 56470; CHECK-LE-NEXT:    extsb r3, r3471; CHECK-LE-NEXT:    blr472;473; CHECK-AIX-LABEL: getsc9:474; CHECK-AIX:       # %bb.0: # %entry475; CHECK-AIX-NEXT:    xxswapd 0, 34476; CHECK-AIX-NEXT:    mffprd 3, 0477; CHECK-AIX-NEXT:    rldicl 3, 3, 16, 56478; CHECK-AIX-NEXT:    extsb 3, 3479; CHECK-AIX-NEXT:    blr480entry:481  %vecext = extractelement <16 x i8> %vsc, i32 9482  ret i8 %vecext483 484 485}486 487; Function Attrs: norecurse nounwind readnone488define signext i8 @getsc10(<16 x i8> %vsc) {489; CHECK-LABEL: getsc10:490; CHECK:       # %bb.0: # %entry491; CHECK-NEXT:    xxswapd vs0, v2492; CHECK-NEXT:    mffprd r3, f0493; CHECK-NEXT:    rldicl r3, r3, 24, 56494; CHECK-NEXT:    extsb r3, r3495; CHECK-NEXT:    blr496;497; CHECK-LE-LABEL: getsc10:498; CHECK-LE:       # %bb.0: # %entry499; CHECK-LE-NEXT:    mfvsrd r3, v2500; CHECK-LE-NEXT:    rldicl r3, r3, 48, 56501; CHECK-LE-NEXT:    extsb r3, r3502; CHECK-LE-NEXT:    blr503;504; CHECK-AIX-LABEL: getsc10:505; CHECK-AIX:       # %bb.0: # %entry506; CHECK-AIX-NEXT:    xxswapd 0, 34507; CHECK-AIX-NEXT:    mffprd 3, 0508; CHECK-AIX-NEXT:    rldicl 3, 3, 24, 56509; CHECK-AIX-NEXT:    extsb 3, 3510; CHECK-AIX-NEXT:    blr511entry:512  %vecext = extractelement <16 x i8> %vsc, i32 10513  ret i8 %vecext514 515 516}517 518; Function Attrs: norecurse nounwind readnone519define signext i8 @getsc11(<16 x i8> %vsc) {520; CHECK-LABEL: getsc11:521; CHECK:       # %bb.0: # %entry522; CHECK-NEXT:    xxswapd vs0, v2523; CHECK-NEXT:    mffprd r3, f0524; CHECK-NEXT:    rldicl r3, r3, 32, 56525; CHECK-NEXT:    extsb r3, r3526; CHECK-NEXT:    blr527;528; CHECK-LE-LABEL: getsc11:529; CHECK-LE:       # %bb.0: # %entry530; CHECK-LE-NEXT:    mfvsrd r3, v2531; CHECK-LE-NEXT:    rldicl r3, r3, 40, 56532; CHECK-LE-NEXT:    extsb r3, r3533; CHECK-LE-NEXT:    blr534;535; CHECK-AIX-LABEL: getsc11:536; CHECK-AIX:       # %bb.0: # %entry537; CHECK-AIX-NEXT:    xxswapd 0, 34538; CHECK-AIX-NEXT:    mffprd 3, 0539; CHECK-AIX-NEXT:    rldicl 3, 3, 32, 56540; CHECK-AIX-NEXT:    extsb 3, 3541; CHECK-AIX-NEXT:    blr542entry:543  %vecext = extractelement <16 x i8> %vsc, i32 11544  ret i8 %vecext545 546 547}548 549; Function Attrs: norecurse nounwind readnone550define signext i8 @getsc12(<16 x i8> %vsc) {551; CHECK-LABEL: getsc12:552; CHECK:       # %bb.0: # %entry553; CHECK-NEXT:    xxswapd vs0, v2554; CHECK-NEXT:    mffprd r3, f0555; CHECK-NEXT:    rldicl r3, r3, 40, 56556; CHECK-NEXT:    extsb r3, r3557; CHECK-NEXT:    blr558;559; CHECK-LE-LABEL: getsc12:560; CHECK-LE:       # %bb.0: # %entry561; CHECK-LE-NEXT:    mfvsrd r3, v2562; CHECK-LE-NEXT:    rldicl r3, r3, 32, 56563; CHECK-LE-NEXT:    extsb r3, r3564; CHECK-LE-NEXT:    blr565;566; CHECK-AIX-LABEL: getsc12:567; CHECK-AIX:       # %bb.0: # %entry568; CHECK-AIX-NEXT:    xxswapd 0, 34569; CHECK-AIX-NEXT:    mffprd 3, 0570; CHECK-AIX-NEXT:    rldicl 3, 3, 40, 56571; CHECK-AIX-NEXT:    extsb 3, 3572; CHECK-AIX-NEXT:    blr573entry:574  %vecext = extractelement <16 x i8> %vsc, i32 12575  ret i8 %vecext576 577 578}579 580; Function Attrs: norecurse nounwind readnone581define signext i8 @getsc13(<16 x i8> %vsc) {582; CHECK-LABEL: getsc13:583; CHECK:       # %bb.0: # %entry584; CHECK-NEXT:    xxswapd vs0, v2585; CHECK-NEXT:    mffprd r3, f0586; CHECK-NEXT:    rldicl r3, r3, 48, 56587; CHECK-NEXT:    extsb r3, r3588; CHECK-NEXT:    blr589;590; CHECK-LE-LABEL: getsc13:591; CHECK-LE:       # %bb.0: # %entry592; CHECK-LE-NEXT:    mfvsrd r3, v2593; CHECK-LE-NEXT:    rldicl r3, r3, 24, 56594; CHECK-LE-NEXT:    extsb r3, r3595; CHECK-LE-NEXT:    blr596;597; CHECK-AIX-LABEL: getsc13:598; CHECK-AIX:       # %bb.0: # %entry599; CHECK-AIX-NEXT:    xxswapd 0, 34600; CHECK-AIX-NEXT:    mffprd 3, 0601; CHECK-AIX-NEXT:    rldicl 3, 3, 48, 56602; CHECK-AIX-NEXT:    extsb 3, 3603; CHECK-AIX-NEXT:    blr604entry:605  %vecext = extractelement <16 x i8> %vsc, i32 13606  ret i8 %vecext607 608 609}610 611; Function Attrs: norecurse nounwind readnone612define signext i8 @getsc14(<16 x i8> %vsc) {613; CHECK-LABEL: getsc14:614; CHECK:       # %bb.0: # %entry615; CHECK-NEXT:    xxswapd vs0, v2616; CHECK-NEXT:    mffprd r3, f0617; CHECK-NEXT:    rldicl r3, r3, 56, 56618; CHECK-NEXT:    extsb r3, r3619; CHECK-NEXT:    blr620;621; CHECK-LE-LABEL: getsc14:622; CHECK-LE:       # %bb.0: # %entry623; CHECK-LE-NEXT:    mfvsrd r3, v2624; CHECK-LE-NEXT:    rldicl r3, r3, 16, 56625; CHECK-LE-NEXT:    extsb r3, r3626; CHECK-LE-NEXT:    blr627;628; CHECK-AIX-LABEL: getsc14:629; CHECK-AIX:       # %bb.0: # %entry630; CHECK-AIX-NEXT:    xxswapd 0, 34631; CHECK-AIX-NEXT:    mffprd 3, 0632; CHECK-AIX-NEXT:    rldicl 3, 3, 56, 56633; CHECK-AIX-NEXT:    extsb 3, 3634; CHECK-AIX-NEXT:    blr635entry:636  %vecext = extractelement <16 x i8> %vsc, i32 14637  ret i8 %vecext638 639 640}641 642; Function Attrs: norecurse nounwind readnone643define signext i8 @getsc15(<16 x i8> %vsc) {644; CHECK-LABEL: getsc15:645; CHECK:       # %bb.0: # %entry646; CHECK-NEXT:    xxswapd vs0, v2647; CHECK-NEXT:    mffprd r3, f0648; CHECK-NEXT:    clrldi r3, r3, 56649; CHECK-NEXT:    extsb r3, r3650; CHECK-NEXT:    blr651;652; CHECK-LE-LABEL: getsc15:653; CHECK-LE:       # %bb.0: # %entry654; CHECK-LE-NEXT:    mfvsrd r3, v2655; CHECK-LE-NEXT:    rldicl r3, r3, 8, 56656; CHECK-LE-NEXT:    extsb r3, r3657; CHECK-LE-NEXT:    blr658;659; CHECK-AIX-LABEL: getsc15:660; CHECK-AIX:       # %bb.0: # %entry661; CHECK-AIX-NEXT:    xxswapd 0, 34662; CHECK-AIX-NEXT:    mffprd 3, 0663; CHECK-AIX-NEXT:    clrldi 3, 3, 56664; CHECK-AIX-NEXT:    extsb 3, 3665; CHECK-AIX-NEXT:    blr666entry:667  %vecext = extractelement <16 x i8> %vsc, i32 15668  ret i8 %vecext669 670 671}672 673; Function Attrs: norecurse nounwind readnone674define zeroext i8 @getuc0(<16 x i8> %vuc) {675; CHECK-LABEL: getuc0:676; CHECK:       # %bb.0: # %entry677; CHECK-NEXT:    mfvsrd r3, v2678; CHECK-NEXT:    rldicl r3, r3, 8, 56679; CHECK-NEXT:    blr680;681; CHECK-LE-LABEL: getuc0:682; CHECK-LE:       # %bb.0: # %entry683; CHECK-LE-NEXT:    xxswapd vs0, v2684; CHECK-LE-NEXT:    mffprd r3, f0685; CHECK-LE-NEXT:    clrldi r3, r3, 56686; CHECK-LE-NEXT:    blr687;688; CHECK-AIX-LABEL: getuc0:689; CHECK-AIX:       # %bb.0: # %entry690; CHECK-AIX-NEXT:    mfvsrd 3, 34691; CHECK-AIX-NEXT:    rldicl 3, 3, 8, 56692; CHECK-AIX-NEXT:    blr693entry:694  %vecext = extractelement <16 x i8> %vuc, i32 0695  ret i8 %vecext696 697 698}699 700; Function Attrs: norecurse nounwind readnone701define zeroext i8 @getuc1(<16 x i8> %vuc) {702; CHECK-LABEL: getuc1:703; CHECK:       # %bb.0: # %entry704; CHECK-NEXT:    mfvsrd r3, v2705; CHECK-NEXT:    rldicl r3, r3, 16, 56706; CHECK-NEXT:    blr707;708; CHECK-LE-LABEL: getuc1:709; CHECK-LE:       # %bb.0: # %entry710; CHECK-LE-NEXT:    xxswapd vs0, v2711; CHECK-LE-NEXT:    mffprd r3, f0712; CHECK-LE-NEXT:    rldicl r3, r3, 56, 56713; CHECK-LE-NEXT:    blr714;715; CHECK-AIX-LABEL: getuc1:716; CHECK-AIX:       # %bb.0: # %entry717; CHECK-AIX-NEXT:    mfvsrd 3, 34718; CHECK-AIX-NEXT:    rldicl 3, 3, 16, 56719; CHECK-AIX-NEXT:    blr720entry:721  %vecext = extractelement <16 x i8> %vuc, i32 1722  ret i8 %vecext723 724 725}726 727; Function Attrs: norecurse nounwind readnone728define zeroext i8 @getuc2(<16 x i8> %vuc) {729; CHECK-LABEL: getuc2:730; CHECK:       # %bb.0: # %entry731; CHECK-NEXT:    mfvsrd r3, v2732; CHECK-NEXT:    rldicl r3, r3, 24, 56733; CHECK-NEXT:    blr734;735; CHECK-LE-LABEL: getuc2:736; CHECK-LE:       # %bb.0: # %entry737; CHECK-LE-NEXT:    xxswapd vs0, v2738; CHECK-LE-NEXT:    mffprd r3, f0739; CHECK-LE-NEXT:    rldicl r3, r3, 48, 56740; CHECK-LE-NEXT:    blr741;742; CHECK-AIX-LABEL: getuc2:743; CHECK-AIX:       # %bb.0: # %entry744; CHECK-AIX-NEXT:    mfvsrd 3, 34745; CHECK-AIX-NEXT:    rldicl 3, 3, 24, 56746; CHECK-AIX-NEXT:    blr747entry:748  %vecext = extractelement <16 x i8> %vuc, i32 2749  ret i8 %vecext750}751 752; Function Attrs: norecurse nounwind readnone753define zeroext i8 @getuc3(<16 x i8> %vuc) {754; CHECK-LABEL: getuc3:755; CHECK:       # %bb.0: # %entry756; CHECK-NEXT:    mfvsrd r3, v2757; CHECK-NEXT:    rldicl r3, r3, 32, 56758; CHECK-NEXT:    blr759;760; CHECK-LE-LABEL: getuc3:761; CHECK-LE:       # %bb.0: # %entry762; CHECK-LE-NEXT:    xxswapd vs0, v2763; CHECK-LE-NEXT:    mffprd r3, f0764; CHECK-LE-NEXT:    rldicl r3, r3, 40, 56765; CHECK-LE-NEXT:    blr766;767; CHECK-AIX-LABEL: getuc3:768; CHECK-AIX:       # %bb.0: # %entry769; CHECK-AIX-NEXT:    mfvsrd 3, 34770; CHECK-AIX-NEXT:    rldicl 3, 3, 32, 56771; CHECK-AIX-NEXT:    blr772entry:773  %vecext = extractelement <16 x i8> %vuc, i32 3774  ret i8 %vecext775 776 777}778 779; Function Attrs: norecurse nounwind readnone780define zeroext i8 @getuc4(<16 x i8> %vuc) {781; CHECK-LABEL: getuc4:782; CHECK:       # %bb.0: # %entry783; CHECK-NEXT:    mfvsrd r3, v2784; CHECK-NEXT:    rldicl r3, r3, 40, 56785; CHECK-NEXT:    blr786;787; CHECK-LE-LABEL: getuc4:788; CHECK-LE:       # %bb.0: # %entry789; CHECK-LE-NEXT:    xxswapd vs0, v2790; CHECK-LE-NEXT:    mffprd r3, f0791; CHECK-LE-NEXT:    rldicl r3, r3, 32, 56792; CHECK-LE-NEXT:    blr793;794; CHECK-AIX-LABEL: getuc4:795; CHECK-AIX:       # %bb.0: # %entry796; CHECK-AIX-NEXT:    mfvsrd 3, 34797; CHECK-AIX-NEXT:    rldicl 3, 3, 40, 56798; CHECK-AIX-NEXT:    blr799entry:800  %vecext = extractelement <16 x i8> %vuc, i32 4801  ret i8 %vecext802 803 804}805 806; Function Attrs: norecurse nounwind readnone807define zeroext i8 @getuc5(<16 x i8> %vuc) {808; CHECK-LABEL: getuc5:809; CHECK:       # %bb.0: # %entry810; CHECK-NEXT:    mfvsrd r3, v2811; CHECK-NEXT:    rldicl r3, r3, 48, 56812; CHECK-NEXT:    blr813;814; CHECK-LE-LABEL: getuc5:815; CHECK-LE:       # %bb.0: # %entry816; CHECK-LE-NEXT:    xxswapd vs0, v2817; CHECK-LE-NEXT:    mffprd r3, f0818; CHECK-LE-NEXT:    rldicl r3, r3, 24, 56819; CHECK-LE-NEXT:    blr820;821; CHECK-AIX-LABEL: getuc5:822; CHECK-AIX:       # %bb.0: # %entry823; CHECK-AIX-NEXT:    mfvsrd 3, 34824; CHECK-AIX-NEXT:    rldicl 3, 3, 48, 56825; CHECK-AIX-NEXT:    blr826entry:827  %vecext = extractelement <16 x i8> %vuc, i32 5828  ret i8 %vecext829 830 831}832 833; Function Attrs: norecurse nounwind readnone834define zeroext i8 @getuc6(<16 x i8> %vuc) {835; CHECK-LABEL: getuc6:836; CHECK:       # %bb.0: # %entry837; CHECK-NEXT:    mfvsrd r3, v2838; CHECK-NEXT:    rldicl r3, r3, 56, 56839; CHECK-NEXT:    blr840;841; CHECK-LE-LABEL: getuc6:842; CHECK-LE:       # %bb.0: # %entry843; CHECK-LE-NEXT:    xxswapd vs0, v2844; CHECK-LE-NEXT:    mffprd r3, f0845; CHECK-LE-NEXT:    rldicl r3, r3, 16, 56846; CHECK-LE-NEXT:    blr847;848; CHECK-AIX-LABEL: getuc6:849; CHECK-AIX:       # %bb.0: # %entry850; CHECK-AIX-NEXT:    mfvsrd 3, 34851; CHECK-AIX-NEXT:    rldicl 3, 3, 56, 56852; CHECK-AIX-NEXT:    blr853entry:854  %vecext = extractelement <16 x i8> %vuc, i32 6855  ret i8 %vecext856 857 858}859 860; Function Attrs: norecurse nounwind readnone861define zeroext i8 @getuc7(<16 x i8> %vuc) {862; CHECK-LABEL: getuc7:863; CHECK:       # %bb.0: # %entry864; CHECK-NEXT:    mfvsrd r3, v2865; CHECK-NEXT:    clrldi r3, r3, 56866; CHECK-NEXT:    blr867;868; CHECK-LE-LABEL: getuc7:869; CHECK-LE:       # %bb.0: # %entry870; CHECK-LE-NEXT:    xxswapd vs0, v2871; CHECK-LE-NEXT:    mffprd r3, f0872; CHECK-LE-NEXT:    rldicl r3, r3, 8, 56873; CHECK-LE-NEXT:    blr874;875; CHECK-AIX-LABEL: getuc7:876; CHECK-AIX:       # %bb.0: # %entry877; CHECK-AIX-NEXT:    mfvsrd 3, 34878; CHECK-AIX-NEXT:    clrldi 3, 3, 56879; CHECK-AIX-NEXT:    blr880entry:881  %vecext = extractelement <16 x i8> %vuc, i32 7882  ret i8 %vecext883 884 885}886 887; Function Attrs: norecurse nounwind readnone888define zeroext i8 @getuc8(<16 x i8> %vuc) {889; CHECK-LABEL: getuc8:890; CHECK:       # %bb.0: # %entry891; CHECK-NEXT:    xxswapd vs0, v2892; CHECK-NEXT:    mffprd r3, f0893; CHECK-NEXT:    rldicl r3, r3, 8, 56894; CHECK-NEXT:    blr895;896; CHECK-LE-LABEL: getuc8:897; CHECK-LE:       # %bb.0: # %entry898; CHECK-LE-NEXT:    mfvsrd r3, v2899; CHECK-LE-NEXT:    clrldi r3, r3, 56900; CHECK-LE-NEXT:    blr901;902; CHECK-AIX-LABEL: getuc8:903; CHECK-AIX:       # %bb.0: # %entry904; CHECK-AIX-NEXT:    xxswapd 0, 34905; CHECK-AIX-NEXT:    mffprd 3, 0906; CHECK-AIX-NEXT:    rldicl 3, 3, 8, 56907; CHECK-AIX-NEXT:    blr908entry:909  %vecext = extractelement <16 x i8> %vuc, i32 8910  ret i8 %vecext911 912 913}914 915; Function Attrs: norecurse nounwind readnone916define zeroext i8 @getuc9(<16 x i8> %vuc) {917; CHECK-LABEL: getuc9:918; CHECK:       # %bb.0: # %entry919; CHECK-NEXT:    xxswapd vs0, v2920; CHECK-NEXT:    mffprd r3, f0921; CHECK-NEXT:    rldicl r3, r3, 16, 56922; CHECK-NEXT:    blr923;924; CHECK-LE-LABEL: getuc9:925; CHECK-LE:       # %bb.0: # %entry926; CHECK-LE-NEXT:    mfvsrd r3, v2927; CHECK-LE-NEXT:    rldicl r3, r3, 56, 56928; CHECK-LE-NEXT:    blr929;930; CHECK-AIX-LABEL: getuc9:931; CHECK-AIX:       # %bb.0: # %entry932; CHECK-AIX-NEXT:    xxswapd 0, 34933; CHECK-AIX-NEXT:    mffprd 3, 0934; CHECK-AIX-NEXT:    rldicl 3, 3, 16, 56935; CHECK-AIX-NEXT:    blr936entry:937  %vecext = extractelement <16 x i8> %vuc, i32 9938  ret i8 %vecext939 940 941}942 943; Function Attrs: norecurse nounwind readnone944define zeroext i8 @getuc10(<16 x i8> %vuc) {945; CHECK-LABEL: getuc10:946; CHECK:       # %bb.0: # %entry947; CHECK-NEXT:    xxswapd vs0, v2948; CHECK-NEXT:    mffprd r3, f0949; CHECK-NEXT:    rldicl r3, r3, 24, 56950; CHECK-NEXT:    blr951;952; CHECK-LE-LABEL: getuc10:953; CHECK-LE:       # %bb.0: # %entry954; CHECK-LE-NEXT:    mfvsrd r3, v2955; CHECK-LE-NEXT:    rldicl r3, r3, 48, 56956; CHECK-LE-NEXT:    blr957;958; CHECK-AIX-LABEL: getuc10:959; CHECK-AIX:       # %bb.0: # %entry960; CHECK-AIX-NEXT:    xxswapd 0, 34961; CHECK-AIX-NEXT:    mffprd 3, 0962; CHECK-AIX-NEXT:    rldicl 3, 3, 24, 56963; CHECK-AIX-NEXT:    blr964entry:965  %vecext = extractelement <16 x i8> %vuc, i32 10966  ret i8 %vecext967 968 969}970 971; Function Attrs: norecurse nounwind readnone972define zeroext i8 @getuc11(<16 x i8> %vuc) {973; CHECK-LABEL: getuc11:974; CHECK:       # %bb.0: # %entry975; CHECK-NEXT:    xxswapd vs0, v2976; CHECK-NEXT:    mffprd r3, f0977; CHECK-NEXT:    rldicl r3, r3, 32, 56978; CHECK-NEXT:    blr979;980; CHECK-LE-LABEL: getuc11:981; CHECK-LE:       # %bb.0: # %entry982; CHECK-LE-NEXT:    mfvsrd r3, v2983; CHECK-LE-NEXT:    rldicl r3, r3, 40, 56984; CHECK-LE-NEXT:    blr985;986; CHECK-AIX-LABEL: getuc11:987; CHECK-AIX:       # %bb.0: # %entry988; CHECK-AIX-NEXT:    xxswapd 0, 34989; CHECK-AIX-NEXT:    mffprd 3, 0990; CHECK-AIX-NEXT:    rldicl 3, 3, 32, 56991; CHECK-AIX-NEXT:    blr992entry:993  %vecext = extractelement <16 x i8> %vuc, i32 11994  ret i8 %vecext995 996 997}998 999; Function Attrs: norecurse nounwind readnone1000define zeroext i8 @getuc12(<16 x i8> %vuc) {1001; CHECK-LABEL: getuc12:1002; CHECK:       # %bb.0: # %entry1003; CHECK-NEXT:    xxswapd vs0, v21004; CHECK-NEXT:    mffprd r3, f01005; CHECK-NEXT:    rldicl r3, r3, 40, 561006; CHECK-NEXT:    blr1007;1008; CHECK-LE-LABEL: getuc12:1009; CHECK-LE:       # %bb.0: # %entry1010; CHECK-LE-NEXT:    mfvsrd r3, v21011; CHECK-LE-NEXT:    rldicl r3, r3, 32, 561012; CHECK-LE-NEXT:    blr1013;1014; CHECK-AIX-LABEL: getuc12:1015; CHECK-AIX:       # %bb.0: # %entry1016; CHECK-AIX-NEXT:    xxswapd 0, 341017; CHECK-AIX-NEXT:    mffprd 3, 01018; CHECK-AIX-NEXT:    rldicl 3, 3, 40, 561019; CHECK-AIX-NEXT:    blr1020entry:1021  %vecext = extractelement <16 x i8> %vuc, i32 121022  ret i8 %vecext1023 1024 1025}1026 1027; Function Attrs: norecurse nounwind readnone1028define zeroext i8 @getuc13(<16 x i8> %vuc) {1029; CHECK-LABEL: getuc13:1030; CHECK:       # %bb.0: # %entry1031; CHECK-NEXT:    xxswapd vs0, v21032; CHECK-NEXT:    mffprd r3, f01033; CHECK-NEXT:    rldicl r3, r3, 48, 561034; CHECK-NEXT:    blr1035;1036; CHECK-LE-LABEL: getuc13:1037; CHECK-LE:       # %bb.0: # %entry1038; CHECK-LE-NEXT:    mfvsrd r3, v21039; CHECK-LE-NEXT:    rldicl r3, r3, 24, 561040; CHECK-LE-NEXT:    blr1041;1042; CHECK-AIX-LABEL: getuc13:1043; CHECK-AIX:       # %bb.0: # %entry1044; CHECK-AIX-NEXT:    xxswapd 0, 341045; CHECK-AIX-NEXT:    mffprd 3, 01046; CHECK-AIX-NEXT:    rldicl 3, 3, 48, 561047; CHECK-AIX-NEXT:    blr1048entry:1049  %vecext = extractelement <16 x i8> %vuc, i32 131050  ret i8 %vecext1051 1052 1053}1054 1055; Function Attrs: norecurse nounwind readnone1056define zeroext i8 @getuc14(<16 x i8> %vuc) {1057; CHECK-LABEL: getuc14:1058; CHECK:       # %bb.0: # %entry1059; CHECK-NEXT:    xxswapd vs0, v21060; CHECK-NEXT:    mffprd r3, f01061; CHECK-NEXT:    rldicl r3, r3, 56, 561062; CHECK-NEXT:    blr1063;1064; CHECK-LE-LABEL: getuc14:1065; CHECK-LE:       # %bb.0: # %entry1066; CHECK-LE-NEXT:    mfvsrd r3, v21067; CHECK-LE-NEXT:    rldicl r3, r3, 16, 561068; CHECK-LE-NEXT:    blr1069;1070; CHECK-AIX-LABEL: getuc14:1071; CHECK-AIX:       # %bb.0: # %entry1072; CHECK-AIX-NEXT:    xxswapd 0, 341073; CHECK-AIX-NEXT:    mffprd 3, 01074; CHECK-AIX-NEXT:    rldicl 3, 3, 56, 561075; CHECK-AIX-NEXT:    blr1076entry:1077  %vecext = extractelement <16 x i8> %vuc, i32 141078  ret i8 %vecext1079 1080 1081}1082 1083; Function Attrs: norecurse nounwind readnone1084define zeroext i8 @getuc15(<16 x i8> %vuc) {1085; CHECK-LABEL: getuc15:1086; CHECK:       # %bb.0: # %entry1087; CHECK-NEXT:    xxswapd vs0, v21088; CHECK-NEXT:    mffprd r3, f01089; CHECK-NEXT:    clrldi r3, r3, 561090; CHECK-NEXT:    blr1091;1092; CHECK-LE-LABEL: getuc15:1093; CHECK-LE:       # %bb.0: # %entry1094; CHECK-LE-NEXT:    mfvsrd r3, v21095; CHECK-LE-NEXT:    rldicl r3, r3, 8, 561096; CHECK-LE-NEXT:    blr1097;1098; CHECK-AIX-LABEL: getuc15:1099; CHECK-AIX:       # %bb.0: # %entry1100; CHECK-AIX-NEXT:    xxswapd 0, 341101; CHECK-AIX-NEXT:    mffprd 3, 01102; CHECK-AIX-NEXT:    clrldi 3, 3, 561103; CHECK-AIX-NEXT:    blr1104entry:1105  %vecext = extractelement <16 x i8> %vuc, i32 151106  ret i8 %vecext1107 1108 1109}1110 1111; Function Attrs: norecurse nounwind readnone1112define signext i8 @getvelsc(<16 x i8> %vsc, i32 signext %i) {1113; CHECK-LABEL: getvelsc:1114; CHECK:       # %bb.0: # %entry1115; CHECK-NEXT:    clrldi r3, r5, 321116; CHECK-NEXT:    andi. r4, r3, 81117; CHECK-NEXT:    lvsl v3, 0, r41118; CHECK-NEXT:    li r4, 71119; CHECK-NEXT:    andc r3, r4, r31120; CHECK-NEXT:    sldi r3, r3, 31121; CHECK-NEXT:    vperm v2, v2, v2, v31122; CHECK-NEXT:    mfvsrd r4, v21123; CHECK-NEXT:    srd r3, r4, r31124; CHECK-NEXT:    extsb r3, r31125; CHECK-NEXT:    blr1126;1127; CHECK-LE-LABEL: getvelsc:1128; CHECK-LE:       # %bb.0: # %entry1129; CHECK-LE-NEXT:    clrldi r3, r5, 321130; CHECK-LE-NEXT:    li r4, 81131; CHECK-LE-NEXT:    andc r4, r4, r31132; CHECK-LE-NEXT:    lvsl v3, 0, r41133; CHECK-LE-NEXT:    li r4, 71134; CHECK-LE-NEXT:    and r3, r4, r31135; CHECK-LE-NEXT:    sldi r3, r3, 31136; CHECK-LE-NEXT:    vperm v2, v2, v2, v31137; CHECK-LE-NEXT:    mfvsrd r4, v21138; CHECK-LE-NEXT:    srd r3, r4, r31139; CHECK-LE-NEXT:    extsb r3, r31140; CHECK-LE-NEXT:    blr1141;1142; CHECK-AIX-LABEL: getvelsc:1143; CHECK-AIX:       # %bb.0: # %entry1144; CHECK-AIX-NEXT:    clrldi 3, 3, 321145; CHECK-AIX-NEXT:    andi. 4, 3, 81146; CHECK-AIX-NEXT:    lvsl 3, 0, 41147; CHECK-AIX-NEXT:    li 4, 71148; CHECK-AIX-NEXT:    andc 3, 4, 31149; CHECK-AIX-NEXT:    sldi 3, 3, 31150; CHECK-AIX-NEXT:    vperm 2, 2, 2, 31151; CHECK-AIX-NEXT:    mfvsrd 4, 341152; CHECK-AIX-NEXT:    srd 3, 4, 31153; CHECK-AIX-NEXT:    extsb 3, 31154; CHECK-AIX-NEXT:    blr1155 1156 1157entry:1158  %vecext = extractelement <16 x i8> %vsc, i32 %i1159  ret i8 %vecext1160}1161 1162; Function Attrs: norecurse nounwind readnone1163define zeroext i8 @getveluc(<16 x i8> %vuc, i32 signext %i) {1164; CHECK-LABEL: getveluc:1165; CHECK:       # %bb.0: # %entry1166; CHECK-NEXT:    clrldi r3, r5, 321167; CHECK-NEXT:    andi. r4, r3, 81168; CHECK-NEXT:    lvsl v3, 0, r41169; CHECK-NEXT:    li r4, 71170; CHECK-NEXT:    andc r3, r4, r31171; CHECK-NEXT:    sldi r3, r3, 31172; CHECK-NEXT:    vperm v2, v2, v2, v31173; CHECK-NEXT:    mfvsrd r4, v21174; CHECK-NEXT:    srd r3, r4, r31175; CHECK-NEXT:    clrldi r3, r3, 561176; CHECK-NEXT:    blr1177;1178; CHECK-LE-LABEL: getveluc:1179; CHECK-LE:       # %bb.0: # %entry1180; CHECK-LE-NEXT:    clrldi r3, r5, 321181; CHECK-LE-NEXT:    li r4, 81182; CHECK-LE-NEXT:    andc r4, r4, r31183; CHECK-LE-NEXT:    lvsl v3, 0, r41184; CHECK-LE-NEXT:    li r4, 71185; CHECK-LE-NEXT:    and r3, r4, r31186; CHECK-LE-NEXT:    sldi r3, r3, 31187; CHECK-LE-NEXT:    vperm v2, v2, v2, v31188; CHECK-LE-NEXT:    mfvsrd r4, v21189; CHECK-LE-NEXT:    srd r3, r4, r31190; CHECK-LE-NEXT:    clrldi r3, r3, 561191; CHECK-LE-NEXT:    blr1192;1193; CHECK-AIX-LABEL: getveluc:1194; CHECK-AIX:       # %bb.0: # %entry1195; CHECK-AIX-NEXT:    clrldi 3, 3, 321196; CHECK-AIX-NEXT:    andi. 4, 3, 81197; CHECK-AIX-NEXT:    lvsl 3, 0, 41198; CHECK-AIX-NEXT:    li 4, 71199; CHECK-AIX-NEXT:    andc 3, 4, 31200; CHECK-AIX-NEXT:    sldi 3, 3, 31201; CHECK-AIX-NEXT:    vperm 2, 2, 2, 31202; CHECK-AIX-NEXT:    mfvsrd 4, 341203; CHECK-AIX-NEXT:    srd 3, 4, 31204; CHECK-AIX-NEXT:    clrldi 3, 3, 561205; CHECK-AIX-NEXT:    blr1206 1207 1208entry:1209  %vecext = extractelement <16 x i8> %vuc, i32 %i1210  ret i8 %vecext1211}1212 1213; Function Attrs: norecurse nounwind readnone1214define signext i16 @getss0(<8 x i16> %vss) {1215; CHECK-LABEL: getss0:1216; CHECK:       # %bb.0: # %entry1217; CHECK-NEXT:    mfvsrd r3, v21218; CHECK-NEXT:    rldicl r3, r3, 16, 481219; CHECK-NEXT:    extsh r3, r31220; CHECK-NEXT:    blr1221;1222; CHECK-LE-LABEL: getss0:1223; CHECK-LE:       # %bb.0: # %entry1224; CHECK-LE-NEXT:    xxswapd vs0, v21225; CHECK-LE-NEXT:    mffprd r3, f01226; CHECK-LE-NEXT:    clrldi r3, r3, 481227; CHECK-LE-NEXT:    extsh r3, r31228; CHECK-LE-NEXT:    blr1229;1230; CHECK-AIX-LABEL: getss0:1231; CHECK-AIX:       # %bb.0: # %entry1232; CHECK-AIX-NEXT:    mfvsrd 3, 341233; CHECK-AIX-NEXT:    rldicl 3, 3, 16, 481234; CHECK-AIX-NEXT:    extsh 3, 31235; CHECK-AIX-NEXT:    blr1236entry:1237  %vecext = extractelement <8 x i16> %vss, i32 01238  ret i16 %vecext1239 1240 1241}1242 1243; Function Attrs: norecurse nounwind readnone1244define signext i16 @getss1(<8 x i16> %vss) {1245; CHECK-LABEL: getss1:1246; CHECK:       # %bb.0: # %entry1247; CHECK-NEXT:    mfvsrd r3, v21248; CHECK-NEXT:    rldicl r3, r3, 32, 481249; CHECK-NEXT:    extsh r3, r31250; CHECK-NEXT:    blr1251;1252; CHECK-LE-LABEL: getss1:1253; CHECK-LE:       # %bb.0: # %entry1254; CHECK-LE-NEXT:    xxswapd vs0, v21255; CHECK-LE-NEXT:    mffprd r3, f01256; CHECK-LE-NEXT:    rldicl r3, r3, 48, 481257; CHECK-LE-NEXT:    extsh r3, r31258; CHECK-LE-NEXT:    blr1259;1260; CHECK-AIX-LABEL: getss1:1261; CHECK-AIX:       # %bb.0: # %entry1262; CHECK-AIX-NEXT:    mfvsrd 3, 341263; CHECK-AIX-NEXT:    rldicl 3, 3, 32, 481264; CHECK-AIX-NEXT:    extsh 3, 31265; CHECK-AIX-NEXT:    blr1266entry:1267  %vecext = extractelement <8 x i16> %vss, i32 11268  ret i16 %vecext1269 1270 1271}1272 1273; Function Attrs: norecurse nounwind readnone1274define signext i16 @getss2(<8 x i16> %vss) {1275; CHECK-LABEL: getss2:1276; CHECK:       # %bb.0: # %entry1277; CHECK-NEXT:    mfvsrd r3, v21278; CHECK-NEXT:    rldicl r3, r3, 48, 481279; CHECK-NEXT:    extsh r3, r31280; CHECK-NEXT:    blr1281;1282; CHECK-LE-LABEL: getss2:1283; CHECK-LE:       # %bb.0: # %entry1284; CHECK-LE-NEXT:    xxswapd vs0, v21285; CHECK-LE-NEXT:    mffprd r3, f01286; CHECK-LE-NEXT:    rldicl r3, r3, 32, 481287; CHECK-LE-NEXT:    extsh r3, r31288; CHECK-LE-NEXT:    blr1289;1290; CHECK-AIX-LABEL: getss2:1291; CHECK-AIX:       # %bb.0: # %entry1292; CHECK-AIX-NEXT:    mfvsrd 3, 341293; CHECK-AIX-NEXT:    rldicl 3, 3, 48, 481294; CHECK-AIX-NEXT:    extsh 3, 31295; CHECK-AIX-NEXT:    blr1296entry:1297  %vecext = extractelement <8 x i16> %vss, i32 21298  ret i16 %vecext1299 1300 1301}1302 1303; Function Attrs: norecurse nounwind readnone1304define signext i16 @getss3(<8 x i16> %vss) {1305; CHECK-LABEL: getss3:1306; CHECK:       # %bb.0: # %entry1307; CHECK-NEXT:    mfvsrd r3, v21308; CHECK-NEXT:    clrldi r3, r3, 481309; CHECK-NEXT:    extsh r3, r31310; CHECK-NEXT:    blr1311;1312; CHECK-LE-LABEL: getss3:1313; CHECK-LE:       # %bb.0: # %entry1314; CHECK-LE-NEXT:    xxswapd vs0, v21315; CHECK-LE-NEXT:    mffprd r3, f01316; CHECK-LE-NEXT:    rldicl r3, r3, 16, 481317; CHECK-LE-NEXT:    extsh r3, r31318; CHECK-LE-NEXT:    blr1319;1320; CHECK-AIX-LABEL: getss3:1321; CHECK-AIX:       # %bb.0: # %entry1322; CHECK-AIX-NEXT:    mfvsrd 3, 341323; CHECK-AIX-NEXT:    clrldi 3, 3, 481324; CHECK-AIX-NEXT:    extsh 3, 31325; CHECK-AIX-NEXT:    blr1326entry:1327  %vecext = extractelement <8 x i16> %vss, i32 31328  ret i16 %vecext1329 1330 1331}1332 1333; Function Attrs: norecurse nounwind readnone1334define signext i16 @getss4(<8 x i16> %vss) {1335; CHECK-LABEL: getss4:1336; CHECK:       # %bb.0: # %entry1337; CHECK-NEXT:    xxswapd vs0, v21338; CHECK-NEXT:    mffprd r3, f01339; CHECK-NEXT:    rldicl r3, r3, 16, 481340; CHECK-NEXT:    extsh r3, r31341; CHECK-NEXT:    blr1342;1343; CHECK-LE-LABEL: getss4:1344; CHECK-LE:       # %bb.0: # %entry1345; CHECK-LE-NEXT:    mfvsrd r3, v21346; CHECK-LE-NEXT:    clrldi r3, r3, 481347; CHECK-LE-NEXT:    extsh r3, r31348; CHECK-LE-NEXT:    blr1349;1350; CHECK-AIX-LABEL: getss4:1351; CHECK-AIX:       # %bb.0: # %entry1352; CHECK-AIX-NEXT:    xxswapd 0, 341353; CHECK-AIX-NEXT:    mffprd 3, 01354; CHECK-AIX-NEXT:    rldicl 3, 3, 16, 481355; CHECK-AIX-NEXT:    extsh 3, 31356; CHECK-AIX-NEXT:    blr1357entry:1358  %vecext = extractelement <8 x i16> %vss, i32 41359  ret i16 %vecext1360 1361 1362}1363 1364; Function Attrs: norecurse nounwind readnone1365define signext i16 @getss5(<8 x i16> %vss) {1366; CHECK-LABEL: getss5:1367; CHECK:       # %bb.0: # %entry1368; CHECK-NEXT:    xxswapd vs0, v21369; CHECK-NEXT:    mffprd r3, f01370; CHECK-NEXT:    rldicl r3, r3, 32, 481371; CHECK-NEXT:    extsh r3, r31372; CHECK-NEXT:    blr1373;1374; CHECK-LE-LABEL: getss5:1375; CHECK-LE:       # %bb.0: # %entry1376; CHECK-LE-NEXT:    mfvsrd r3, v21377; CHECK-LE-NEXT:    rldicl r3, r3, 48, 481378; CHECK-LE-NEXT:    extsh r3, r31379; CHECK-LE-NEXT:    blr1380;1381; CHECK-AIX-LABEL: getss5:1382; CHECK-AIX:       # %bb.0: # %entry1383; CHECK-AIX-NEXT:    xxswapd 0, 341384; CHECK-AIX-NEXT:    mffprd 3, 01385; CHECK-AIX-NEXT:    rldicl 3, 3, 32, 481386; CHECK-AIX-NEXT:    extsh 3, 31387; CHECK-AIX-NEXT:    blr1388entry:1389  %vecext = extractelement <8 x i16> %vss, i32 51390  ret i16 %vecext1391 1392 1393}1394 1395; Function Attrs: norecurse nounwind readnone1396define signext i16 @getss6(<8 x i16> %vss) {1397; CHECK-LABEL: getss6:1398; CHECK:       # %bb.0: # %entry1399; CHECK-NEXT:    xxswapd vs0, v21400; CHECK-NEXT:    mffprd r3, f01401; CHECK-NEXT:    rldicl r3, r3, 48, 481402; CHECK-NEXT:    extsh r3, r31403; CHECK-NEXT:    blr1404;1405; CHECK-LE-LABEL: getss6:1406; CHECK-LE:       # %bb.0: # %entry1407; CHECK-LE-NEXT:    mfvsrd r3, v21408; CHECK-LE-NEXT:    rldicl r3, r3, 32, 481409; CHECK-LE-NEXT:    extsh r3, r31410; CHECK-LE-NEXT:    blr1411;1412; CHECK-AIX-LABEL: getss6:1413; CHECK-AIX:       # %bb.0: # %entry1414; CHECK-AIX-NEXT:    xxswapd 0, 341415; CHECK-AIX-NEXT:    mffprd 3, 01416; CHECK-AIX-NEXT:    rldicl 3, 3, 48, 481417; CHECK-AIX-NEXT:    extsh 3, 31418; CHECK-AIX-NEXT:    blr1419entry:1420  %vecext = extractelement <8 x i16> %vss, i32 61421  ret i16 %vecext1422 1423 1424}1425 1426; Function Attrs: norecurse nounwind readnone1427define signext i16 @getss7(<8 x i16> %vss) {1428; CHECK-LABEL: getss7:1429; CHECK:       # %bb.0: # %entry1430; CHECK-NEXT:    xxswapd vs0, v21431; CHECK-NEXT:    mffprd r3, f01432; CHECK-NEXT:    clrldi r3, r3, 481433; CHECK-NEXT:    extsh r3, r31434; CHECK-NEXT:    blr1435;1436; CHECK-LE-LABEL: getss7:1437; CHECK-LE:       # %bb.0: # %entry1438; CHECK-LE-NEXT:    mfvsrd r3, v21439; CHECK-LE-NEXT:    rldicl r3, r3, 16, 481440; CHECK-LE-NEXT:    extsh r3, r31441; CHECK-LE-NEXT:    blr1442;1443; CHECK-AIX-LABEL: getss7:1444; CHECK-AIX:       # %bb.0: # %entry1445; CHECK-AIX-NEXT:    xxswapd 0, 341446; CHECK-AIX-NEXT:    mffprd 3, 01447; CHECK-AIX-NEXT:    clrldi 3, 3, 481448; CHECK-AIX-NEXT:    extsh 3, 31449; CHECK-AIX-NEXT:    blr1450entry:1451  %vecext = extractelement <8 x i16> %vss, i32 71452  ret i16 %vecext1453 1454 1455}1456 1457; Function Attrs: norecurse nounwind readnone1458define zeroext i16 @getus0(<8 x i16> %vus) {1459; CHECK-LABEL: getus0:1460; CHECK:       # %bb.0: # %entry1461; CHECK-NEXT:    mfvsrd r3, v21462; CHECK-NEXT:    rldicl r3, r3, 16, 481463; CHECK-NEXT:    blr1464;1465; CHECK-LE-LABEL: getus0:1466; CHECK-LE:       # %bb.0: # %entry1467; CHECK-LE-NEXT:    xxswapd vs0, v21468; CHECK-LE-NEXT:    mffprd r3, f01469; CHECK-LE-NEXT:    clrldi r3, r3, 481470; CHECK-LE-NEXT:    blr1471;1472; CHECK-AIX-LABEL: getus0:1473; CHECK-AIX:       # %bb.0: # %entry1474; CHECK-AIX-NEXT:    mfvsrd 3, 341475; CHECK-AIX-NEXT:    rldicl 3, 3, 16, 481476; CHECK-AIX-NEXT:    blr1477entry:1478  %vecext = extractelement <8 x i16> %vus, i32 01479  ret i16 %vecext1480 1481 1482}1483 1484; Function Attrs: norecurse nounwind readnone1485define zeroext i16 @getus1(<8 x i16> %vus) {1486; CHECK-LABEL: getus1:1487; CHECK:       # %bb.0: # %entry1488; CHECK-NEXT:    mfvsrd r3, v21489; CHECK-NEXT:    rldicl r3, r3, 32, 481490; CHECK-NEXT:    blr1491;1492; CHECK-LE-LABEL: getus1:1493; CHECK-LE:       # %bb.0: # %entry1494; CHECK-LE-NEXT:    xxswapd vs0, v21495; CHECK-LE-NEXT:    mffprd r3, f01496; CHECK-LE-NEXT:    rldicl r3, r3, 48, 481497; CHECK-LE-NEXT:    blr1498;1499; CHECK-AIX-LABEL: getus1:1500; CHECK-AIX:       # %bb.0: # %entry1501; CHECK-AIX-NEXT:    mfvsrd 3, 341502; CHECK-AIX-NEXT:    rldicl 3, 3, 32, 481503; CHECK-AIX-NEXT:    blr1504entry:1505  %vecext = extractelement <8 x i16> %vus, i32 11506  ret i16 %vecext1507 1508 1509}1510 1511; Function Attrs: norecurse nounwind readnone1512define zeroext i16 @getus2(<8 x i16> %vus) {1513; CHECK-LABEL: getus2:1514; CHECK:       # %bb.0: # %entry1515; CHECK-NEXT:    mfvsrd r3, v21516; CHECK-NEXT:    rldicl r3, r3, 48, 481517; CHECK-NEXT:    blr1518;1519; CHECK-LE-LABEL: getus2:1520; CHECK-LE:       # %bb.0: # %entry1521; CHECK-LE-NEXT:    xxswapd vs0, v21522; CHECK-LE-NEXT:    mffprd r3, f01523; CHECK-LE-NEXT:    rldicl r3, r3, 32, 481524; CHECK-LE-NEXT:    blr1525;1526; CHECK-AIX-LABEL: getus2:1527; CHECK-AIX:       # %bb.0: # %entry1528; CHECK-AIX-NEXT:    mfvsrd 3, 341529; CHECK-AIX-NEXT:    rldicl 3, 3, 48, 481530; CHECK-AIX-NEXT:    blr1531entry:1532  %vecext = extractelement <8 x i16> %vus, i32 21533  ret i16 %vecext1534 1535 1536}1537 1538; Function Attrs: norecurse nounwind readnone1539define zeroext i16 @getus3(<8 x i16> %vus) {1540; CHECK-LABEL: getus3:1541; CHECK:       # %bb.0: # %entry1542; CHECK-NEXT:    mfvsrd r3, v21543; CHECK-NEXT:    clrldi r3, r3, 481544; CHECK-NEXT:    blr1545;1546; CHECK-LE-LABEL: getus3:1547; CHECK-LE:       # %bb.0: # %entry1548; CHECK-LE-NEXT:    xxswapd vs0, v21549; CHECK-LE-NEXT:    mffprd r3, f01550; CHECK-LE-NEXT:    rldicl r3, r3, 16, 481551; CHECK-LE-NEXT:    blr1552;1553; CHECK-AIX-LABEL: getus3:1554; CHECK-AIX:       # %bb.0: # %entry1555; CHECK-AIX-NEXT:    mfvsrd 3, 341556; CHECK-AIX-NEXT:    clrldi 3, 3, 481557; CHECK-AIX-NEXT:    blr1558entry:1559  %vecext = extractelement <8 x i16> %vus, i32 31560  ret i16 %vecext1561 1562 1563}1564 1565; Function Attrs: norecurse nounwind readnone1566define zeroext i16 @getus4(<8 x i16> %vus) {1567; CHECK-LABEL: getus4:1568; CHECK:       # %bb.0: # %entry1569; CHECK-NEXT:    xxswapd vs0, v21570; CHECK-NEXT:    mffprd r3, f01571; CHECK-NEXT:    rldicl r3, r3, 16, 481572; CHECK-NEXT:    blr1573;1574; CHECK-LE-LABEL: getus4:1575; CHECK-LE:       # %bb.0: # %entry1576; CHECK-LE-NEXT:    mfvsrd r3, v21577; CHECK-LE-NEXT:    clrldi r3, r3, 481578; CHECK-LE-NEXT:    blr1579;1580; CHECK-AIX-LABEL: getus4:1581; CHECK-AIX:       # %bb.0: # %entry1582; CHECK-AIX-NEXT:    xxswapd 0, 341583; CHECK-AIX-NEXT:    mffprd 3, 01584; CHECK-AIX-NEXT:    rldicl 3, 3, 16, 481585; CHECK-AIX-NEXT:    blr1586entry:1587  %vecext = extractelement <8 x i16> %vus, i32 41588  ret i16 %vecext1589 1590 1591}1592 1593; Function Attrs: norecurse nounwind readnone1594define zeroext i16 @getus5(<8 x i16> %vus) {1595; CHECK-LABEL: getus5:1596; CHECK:       # %bb.0: # %entry1597; CHECK-NEXT:    xxswapd vs0, v21598; CHECK-NEXT:    mffprd r3, f01599; CHECK-NEXT:    rldicl r3, r3, 32, 481600; CHECK-NEXT:    blr1601;1602; CHECK-LE-LABEL: getus5:1603; CHECK-LE:       # %bb.0: # %entry1604; CHECK-LE-NEXT:    mfvsrd r3, v21605; CHECK-LE-NEXT:    rldicl r3, r3, 48, 481606; CHECK-LE-NEXT:    blr1607;1608; CHECK-AIX-LABEL: getus5:1609; CHECK-AIX:       # %bb.0: # %entry1610; CHECK-AIX-NEXT:    xxswapd 0, 341611; CHECK-AIX-NEXT:    mffprd 3, 01612; CHECK-AIX-NEXT:    rldicl 3, 3, 32, 481613; CHECK-AIX-NEXT:    blr1614entry:1615  %vecext = extractelement <8 x i16> %vus, i32 51616  ret i16 %vecext1617 1618 1619}1620 1621; Function Attrs: norecurse nounwind readnone1622define zeroext i16 @getus6(<8 x i16> %vus) {1623; CHECK-LABEL: getus6:1624; CHECK:       # %bb.0: # %entry1625; CHECK-NEXT:    xxswapd vs0, v21626; CHECK-NEXT:    mffprd r3, f01627; CHECK-NEXT:    rldicl r3, r3, 48, 481628; CHECK-NEXT:    blr1629;1630; CHECK-LE-LABEL: getus6:1631; CHECK-LE:       # %bb.0: # %entry1632; CHECK-LE-NEXT:    mfvsrd r3, v21633; CHECK-LE-NEXT:    rldicl r3, r3, 32, 481634; CHECK-LE-NEXT:    blr1635;1636; CHECK-AIX-LABEL: getus6:1637; CHECK-AIX:       # %bb.0: # %entry1638; CHECK-AIX-NEXT:    xxswapd 0, 341639; CHECK-AIX-NEXT:    mffprd 3, 01640; CHECK-AIX-NEXT:    rldicl 3, 3, 48, 481641; CHECK-AIX-NEXT:    blr1642entry:1643  %vecext = extractelement <8 x i16> %vus, i32 61644  ret i16 %vecext1645 1646 1647}1648 1649; Function Attrs: norecurse nounwind readnone1650define zeroext i16 @getus7(<8 x i16> %vus) {1651; CHECK-LABEL: getus7:1652; CHECK:       # %bb.0: # %entry1653; CHECK-NEXT:    xxswapd vs0, v21654; CHECK-NEXT:    mffprd r3, f01655; CHECK-NEXT:    clrldi r3, r3, 481656; CHECK-NEXT:    blr1657;1658; CHECK-LE-LABEL: getus7:1659; CHECK-LE:       # %bb.0: # %entry1660; CHECK-LE-NEXT:    mfvsrd r3, v21661; CHECK-LE-NEXT:    rldicl r3, r3, 16, 481662; CHECK-LE-NEXT:    blr1663;1664; CHECK-AIX-LABEL: getus7:1665; CHECK-AIX:       # %bb.0: # %entry1666; CHECK-AIX-NEXT:    xxswapd 0, 341667; CHECK-AIX-NEXT:    mffprd 3, 01668; CHECK-AIX-NEXT:    clrldi 3, 3, 481669; CHECK-AIX-NEXT:    blr1670entry:1671  %vecext = extractelement <8 x i16> %vus, i32 71672  ret i16 %vecext1673 1674 1675}1676 1677; Function Attrs: norecurse nounwind readnone1678define signext i16 @getvelss(<8 x i16> %vss, i32 signext %i) {1679; CHECK-LABEL: getvelss:1680; CHECK:       # %bb.0: # %entry1681; CHECK-NEXT:    clrldi r3, r5, 321682; CHECK-NEXT:    andi. r4, r3, 41683; CHECK-NEXT:    sldi r4, r4, 11684; CHECK-NEXT:    lvsl v3, 0, r41685; CHECK-NEXT:    li r4, 31686; CHECK-NEXT:    andc r3, r4, r31687; CHECK-NEXT:    sldi r3, r3, 41688; CHECK-NEXT:    vperm v2, v2, v2, v31689; CHECK-NEXT:    mfvsrd r4, v21690; CHECK-NEXT:    srd r3, r4, r31691; CHECK-NEXT:    extsh r3, r31692; CHECK-NEXT:    blr1693;1694; CHECK-LE-LABEL: getvelss:1695; CHECK-LE:       # %bb.0: # %entry1696; CHECK-LE-NEXT:    clrldi r3, r5, 321697; CHECK-LE-NEXT:    li r4, 41698; CHECK-LE-NEXT:    andc r4, r4, r31699; CHECK-LE-NEXT:    sldi r4, r4, 11700; CHECK-LE-NEXT:    lvsl v3, 0, r41701; CHECK-LE-NEXT:    li r4, 31702; CHECK-LE-NEXT:    and r3, r4, r31703; CHECK-LE-NEXT:    sldi r3, r3, 41704; CHECK-LE-NEXT:    vperm v2, v2, v2, v31705; CHECK-LE-NEXT:    mfvsrd r4, v21706; CHECK-LE-NEXT:    srd r3, r4, r31707; CHECK-LE-NEXT:    extsh r3, r31708; CHECK-LE-NEXT:    blr1709;1710; CHECK-AIX-LABEL: getvelss:1711; CHECK-AIX:       # %bb.0: # %entry1712; CHECK-AIX-NEXT:    clrldi 3, 3, 321713; CHECK-AIX-NEXT:    andi. 4, 3, 41714; CHECK-AIX-NEXT:    sldi 4, 4, 11715; CHECK-AIX-NEXT:    lvsl 3, 0, 41716; CHECK-AIX-NEXT:    li 4, 31717; CHECK-AIX-NEXT:    andc 3, 4, 31718; CHECK-AIX-NEXT:    sldi 3, 3, 41719; CHECK-AIX-NEXT:    vperm 2, 2, 2, 31720; CHECK-AIX-NEXT:    mfvsrd 4, 341721; CHECK-AIX-NEXT:    srd 3, 4, 31722; CHECK-AIX-NEXT:    extsh 3, 31723; CHECK-AIX-NEXT:    blr1724 1725 1726entry:1727  %vecext = extractelement <8 x i16> %vss, i32 %i1728  ret i16 %vecext1729}1730 1731; Function Attrs: norecurse nounwind readnone1732define zeroext i16 @getvelus(<8 x i16> %vus, i32 signext %i) {1733; CHECK-LABEL: getvelus:1734; CHECK:       # %bb.0: # %entry1735; CHECK-NEXT:    clrldi r3, r5, 321736; CHECK-NEXT:    andi. r4, r3, 41737; CHECK-NEXT:    sldi r4, r4, 11738; CHECK-NEXT:    lvsl v3, 0, r41739; CHECK-NEXT:    li r4, 31740; CHECK-NEXT:    andc r3, r4, r31741; CHECK-NEXT:    sldi r3, r3, 41742; CHECK-NEXT:    vperm v2, v2, v2, v31743; CHECK-NEXT:    mfvsrd r4, v21744; CHECK-NEXT:    srd r3, r4, r31745; CHECK-NEXT:    clrldi r3, r3, 481746; CHECK-NEXT:    blr1747;1748; CHECK-LE-LABEL: getvelus:1749; CHECK-LE:       # %bb.0: # %entry1750; CHECK-LE-NEXT:    clrldi r3, r5, 321751; CHECK-LE-NEXT:    li r4, 41752; CHECK-LE-NEXT:    andc r4, r4, r31753; CHECK-LE-NEXT:    sldi r4, r4, 11754; CHECK-LE-NEXT:    lvsl v3, 0, r41755; CHECK-LE-NEXT:    li r4, 31756; CHECK-LE-NEXT:    and r3, r4, r31757; CHECK-LE-NEXT:    sldi r3, r3, 41758; CHECK-LE-NEXT:    vperm v2, v2, v2, v31759; CHECK-LE-NEXT:    mfvsrd r4, v21760; CHECK-LE-NEXT:    srd r3, r4, r31761; CHECK-LE-NEXT:    clrldi r3, r3, 481762; CHECK-LE-NEXT:    blr1763;1764; CHECK-AIX-LABEL: getvelus:1765; CHECK-AIX:       # %bb.0: # %entry1766; CHECK-AIX-NEXT:    clrldi 3, 3, 321767; CHECK-AIX-NEXT:    andi. 4, 3, 41768; CHECK-AIX-NEXT:    sldi 4, 4, 11769; CHECK-AIX-NEXT:    lvsl 3, 0, 41770; CHECK-AIX-NEXT:    li 4, 31771; CHECK-AIX-NEXT:    andc 3, 4, 31772; CHECK-AIX-NEXT:    sldi 3, 3, 41773; CHECK-AIX-NEXT:    vperm 2, 2, 2, 31774; CHECK-AIX-NEXT:    mfvsrd 4, 341775; CHECK-AIX-NEXT:    srd 3, 4, 31776; CHECK-AIX-NEXT:    clrldi 3, 3, 481777; CHECK-AIX-NEXT:    blr1778 1779 1780entry:1781  %vecext = extractelement <8 x i16> %vus, i32 %i1782  ret i16 %vecext1783}1784 1785; Function Attrs: norecurse nounwind readnone1786define signext i32 @getsi0(<4 x i32> %vsi) {1787; CHECK-LABEL: getsi0:1788; CHECK:       # %bb.0: # %entry1789; CHECK-NEXT:    xxsldwi vs0, v2, v2, 31790; CHECK-NEXT:    mffprwz r3, f01791; CHECK-NEXT:    extsw r3, r31792; CHECK-NEXT:    blr1793;1794; CHECK-LE-LABEL: getsi0:1795; CHECK-LE:       # %bb.0: # %entry1796; CHECK-LE-NEXT:    xxswapd vs0, v21797; CHECK-LE-NEXT:    mffprwz r3, f01798; CHECK-LE-NEXT:    extsw r3, r31799; CHECK-LE-NEXT:    blr1800;1801; CHECK-AIX-LABEL: getsi0:1802; CHECK-AIX:       # %bb.0: # %entry1803; CHECK-AIX-NEXT:    xxsldwi 0, 34, 34, 31804; CHECK-AIX-NEXT:    mffprwz 3, 01805; CHECK-AIX-NEXT:    extsw 3, 31806; CHECK-AIX-NEXT:    blr1807entry:1808  %vecext = extractelement <4 x i32> %vsi, i32 01809  ret i32 %vecext1810 1811 1812}1813 1814; Function Attrs: norecurse nounwind readnone1815define signext i32 @getsi1(<4 x i32> %vsi) {1816; CHECK-LABEL: getsi1:1817; CHECK:       # %bb.0: # %entry1818; CHECK-NEXT:    mfvsrwz r3, v21819; CHECK-NEXT:    extsw r3, r31820; CHECK-NEXT:    blr1821;1822; CHECK-LE-LABEL: getsi1:1823; CHECK-LE:       # %bb.0: # %entry1824; CHECK-LE-NEXT:    xxsldwi vs0, v2, v2, 11825; CHECK-LE-NEXT:    mffprwz r3, f01826; CHECK-LE-NEXT:    extsw r3, r31827; CHECK-LE-NEXT:    blr1828;1829; CHECK-AIX-LABEL: getsi1:1830; CHECK-AIX:       # %bb.0: # %entry1831; CHECK-AIX-NEXT:    mfvsrwz 3, 341832; CHECK-AIX-NEXT:    extsw 3, 31833; CHECK-AIX-NEXT:    blr1834entry:1835  %vecext = extractelement <4 x i32> %vsi, i32 11836  ret i32 %vecext1837 1838 1839}1840 1841; Function Attrs: norecurse nounwind readnone1842define signext i32 @getsi2(<4 x i32> %vsi) {1843; CHECK-LABEL: getsi2:1844; CHECK:       # %bb.0: # %entry1845; CHECK-NEXT:    xxsldwi vs0, v2, v2, 11846; CHECK-NEXT:    mffprwz r3, f01847; CHECK-NEXT:    extsw r3, r31848; CHECK-NEXT:    blr1849;1850; CHECK-LE-LABEL: getsi2:1851; CHECK-LE:       # %bb.0: # %entry1852; CHECK-LE-NEXT:    mfvsrwz r3, v21853; CHECK-LE-NEXT:    extsw r3, r31854; CHECK-LE-NEXT:    blr1855;1856; CHECK-AIX-LABEL: getsi2:1857; CHECK-AIX:       # %bb.0: # %entry1858; CHECK-AIX-NEXT:    xxsldwi 0, 34, 34, 11859; CHECK-AIX-NEXT:    mffprwz 3, 01860; CHECK-AIX-NEXT:    extsw 3, 31861; CHECK-AIX-NEXT:    blr1862entry:1863  %vecext = extractelement <4 x i32> %vsi, i32 21864  ret i32 %vecext1865 1866 1867}1868 1869; Function Attrs: norecurse nounwind readnone1870define signext i32 @getsi3(<4 x i32> %vsi) {1871; CHECK-LABEL: getsi3:1872; CHECK:       # %bb.0: # %entry1873; CHECK-NEXT:    xxswapd vs0, v21874; CHECK-NEXT:    mffprwz r3, f01875; CHECK-NEXT:    extsw r3, r31876; CHECK-NEXT:    blr1877;1878; CHECK-LE-LABEL: getsi3:1879; CHECK-LE:       # %bb.0: # %entry1880; CHECK-LE-NEXT:    xxsldwi vs0, v2, v2, 31881; CHECK-LE-NEXT:    mffprwz r3, f01882; CHECK-LE-NEXT:    extsw r3, r31883; CHECK-LE-NEXT:    blr1884;1885; CHECK-AIX-LABEL: getsi3:1886; CHECK-AIX:       # %bb.0: # %entry1887; CHECK-AIX-NEXT:    xxswapd 0, 341888; CHECK-AIX-NEXT:    mffprwz 3, 01889; CHECK-AIX-NEXT:    extsw 3, 31890; CHECK-AIX-NEXT:    blr1891entry:1892  %vecext = extractelement <4 x i32> %vsi, i32 31893  ret i32 %vecext1894 1895 1896}1897 1898; Function Attrs: norecurse nounwind readnone1899define zeroext i32 @getui0(<4 x i32> %vui) {1900; CHECK-LABEL: getui0:1901; CHECK:       # %bb.0: # %entry1902; CHECK-NEXT:    xxsldwi vs0, v2, v2, 31903; CHECK-NEXT:    mffprwz r3, f01904; CHECK-NEXT:    blr1905;1906; CHECK-LE-LABEL: getui0:1907; CHECK-LE:       # %bb.0: # %entry1908; CHECK-LE-NEXT:    xxswapd vs0, v21909; CHECK-LE-NEXT:    mffprwz r3, f01910; CHECK-LE-NEXT:    blr1911;1912; CHECK-AIX-LABEL: getui0:1913; CHECK-AIX:       # %bb.0: # %entry1914; CHECK-AIX-NEXT:    xxsldwi 0, 34, 34, 31915; CHECK-AIX-NEXT:    mffprwz 3, 01916; CHECK-AIX-NEXT:    blr1917entry:1918  %vecext = extractelement <4 x i32> %vui, i32 01919  ret i32 %vecext1920 1921 1922}1923 1924; Function Attrs: norecurse nounwind readnone1925define zeroext i32 @getui1(<4 x i32> %vui) {1926; CHECK-LABEL: getui1:1927; CHECK:       # %bb.0: # %entry1928; CHECK-NEXT:    mfvsrwz r3, v21929; CHECK-NEXT:    blr1930;1931; CHECK-LE-LABEL: getui1:1932; CHECK-LE:       # %bb.0: # %entry1933; CHECK-LE-NEXT:    xxsldwi vs0, v2, v2, 11934; CHECK-LE-NEXT:    mffprwz r3, f01935; CHECK-LE-NEXT:    blr1936;1937; CHECK-AIX-LABEL: getui1:1938; CHECK-AIX:       # %bb.0: # %entry1939; CHECK-AIX-NEXT:    mfvsrwz 3, 341940; CHECK-AIX-NEXT:    blr1941entry:1942  %vecext = extractelement <4 x i32> %vui, i32 11943  ret i32 %vecext1944 1945 1946}1947 1948; Function Attrs: norecurse nounwind readnone1949define zeroext i32 @getui2(<4 x i32> %vui) {1950; CHECK-LABEL: getui2:1951; CHECK:       # %bb.0: # %entry1952; CHECK-NEXT:    xxsldwi vs0, v2, v2, 11953; CHECK-NEXT:    mffprwz r3, f01954; CHECK-NEXT:    blr1955;1956; CHECK-LE-LABEL: getui2:1957; CHECK-LE:       # %bb.0: # %entry1958; CHECK-LE-NEXT:    mfvsrwz r3, v21959; CHECK-LE-NEXT:    blr1960;1961; CHECK-AIX-LABEL: getui2:1962; CHECK-AIX:       # %bb.0: # %entry1963; CHECK-AIX-NEXT:    xxsldwi 0, 34, 34, 11964; CHECK-AIX-NEXT:    mffprwz 3, 01965; CHECK-AIX-NEXT:    blr1966entry:1967  %vecext = extractelement <4 x i32> %vui, i32 21968  ret i32 %vecext1969 1970 1971}1972 1973; Function Attrs: norecurse nounwind readnone1974define zeroext i32 @getui3(<4 x i32> %vui) {1975; CHECK-LABEL: getui3:1976; CHECK:       # %bb.0: # %entry1977; CHECK-NEXT:    xxswapd vs0, v21978; CHECK-NEXT:    mffprwz r3, f01979; CHECK-NEXT:    blr1980;1981; CHECK-LE-LABEL: getui3:1982; CHECK-LE:       # %bb.0: # %entry1983; CHECK-LE-NEXT:    xxsldwi vs0, v2, v2, 31984; CHECK-LE-NEXT:    mffprwz r3, f01985; CHECK-LE-NEXT:    blr1986;1987; CHECK-AIX-LABEL: getui3:1988; CHECK-AIX:       # %bb.0: # %entry1989; CHECK-AIX-NEXT:    xxswapd 0, 341990; CHECK-AIX-NEXT:    mffprwz 3, 01991; CHECK-AIX-NEXT:    blr1992entry:1993  %vecext = extractelement <4 x i32> %vui, i32 31994  ret i32 %vecext1995 1996 1997}1998 1999; Function Attrs: norecurse nounwind readnone2000define signext i32 @getvelsi(<4 x i32> %vsi, i32 signext %i) {2001; CHECK-LABEL: getvelsi:2002; CHECK:       # %bb.0: # %entry2003; CHECK-NEXT:    clrldi r3, r5, 322004; CHECK-NEXT:    andi. r4, r3, 22005; CHECK-NEXT:    sldi r4, r4, 22006; CHECK-NEXT:    lvsl v3, 0, r42007; CHECK-NEXT:    li r4, 12008; CHECK-NEXT:    andc r3, r4, r32009; CHECK-NEXT:    sldi r3, r3, 52010; CHECK-NEXT:    vperm v2, v2, v2, v32011; CHECK-NEXT:    mfvsrd r4, v22012; CHECK-NEXT:    srd r3, r4, r32013; CHECK-NEXT:    extsw r3, r32014; CHECK-NEXT:    blr2015;2016; CHECK-LE-LABEL: getvelsi:2017; CHECK-LE:       # %bb.0: # %entry2018; CHECK-LE-NEXT:    clrldi r3, r5, 322019; CHECK-LE-NEXT:    li r4, 22020; CHECK-LE-NEXT:    andc r4, r4, r32021; CHECK-LE-NEXT:    sldi r4, r4, 22022; CHECK-LE-NEXT:    lvsl v3, 0, r42023; CHECK-LE-NEXT:    li r4, 12024; CHECK-LE-NEXT:    and r3, r4, r32025; CHECK-LE-NEXT:    sldi r3, r3, 52026; CHECK-LE-NEXT:    vperm v2, v2, v2, v32027; CHECK-LE-NEXT:    mfvsrd r4, v22028; CHECK-LE-NEXT:    srd r3, r4, r32029; CHECK-LE-NEXT:    extsw r3, r32030; CHECK-LE-NEXT:    blr2031;2032; CHECK-AIX-LABEL: getvelsi:2033; CHECK-AIX:       # %bb.0: # %entry2034; CHECK-AIX-NEXT:    clrldi 3, 3, 322035; CHECK-AIX-NEXT:    andi. 4, 3, 22036; CHECK-AIX-NEXT:    sldi 4, 4, 22037; CHECK-AIX-NEXT:    lvsl 3, 0, 42038; CHECK-AIX-NEXT:    li 4, 12039; CHECK-AIX-NEXT:    andc 3, 4, 32040; CHECK-AIX-NEXT:    sldi 3, 3, 52041; CHECK-AIX-NEXT:    vperm 2, 2, 2, 32042; CHECK-AIX-NEXT:    mfvsrd 4, 342043; CHECK-AIX-NEXT:    srd 3, 4, 32044; CHECK-AIX-NEXT:    extsw 3, 32045; CHECK-AIX-NEXT:    blr2046entry:2047  %vecext = extractelement <4 x i32> %vsi, i32 %i2048  ret i32 %vecext2049; FIXME: add check patterns when variable element extraction is implemented2050}2051 2052; Function Attrs: norecurse nounwind readnone2053define zeroext i32 @getvelui(<4 x i32> %vui, i32 signext %i) {2054; CHECK-LABEL: getvelui:2055; CHECK:       # %bb.0: # %entry2056; CHECK-NEXT:    clrldi r3, r5, 322057; CHECK-NEXT:    andi. r4, r3, 22058; CHECK-NEXT:    sldi r4, r4, 22059; CHECK-NEXT:    lvsl v3, 0, r42060; CHECK-NEXT:    li r4, 12061; CHECK-NEXT:    andc r3, r4, r32062; CHECK-NEXT:    sldi r3, r3, 52063; CHECK-NEXT:    vperm v2, v2, v2, v32064; CHECK-NEXT:    mfvsrd r4, v22065; CHECK-NEXT:    srd r3, r4, r32066; CHECK-NEXT:    clrldi r3, r3, 322067; CHECK-NEXT:    blr2068;2069; CHECK-LE-LABEL: getvelui:2070; CHECK-LE:       # %bb.0: # %entry2071; CHECK-LE-NEXT:    clrldi r3, r5, 322072; CHECK-LE-NEXT:    li r4, 22073; CHECK-LE-NEXT:    andc r4, r4, r32074; CHECK-LE-NEXT:    sldi r4, r4, 22075; CHECK-LE-NEXT:    lvsl v3, 0, r42076; CHECK-LE-NEXT:    li r4, 12077; CHECK-LE-NEXT:    and r3, r4, r32078; CHECK-LE-NEXT:    sldi r3, r3, 52079; CHECK-LE-NEXT:    vperm v2, v2, v2, v32080; CHECK-LE-NEXT:    mfvsrd r4, v22081; CHECK-LE-NEXT:    srd r3, r4, r32082; CHECK-LE-NEXT:    clrldi r3, r3, 322083; CHECK-LE-NEXT:    blr2084;2085; CHECK-AIX-LABEL: getvelui:2086; CHECK-AIX:       # %bb.0: # %entry2087; CHECK-AIX-NEXT:    clrldi 3, 3, 322088; CHECK-AIX-NEXT:    andi. 4, 3, 22089; CHECK-AIX-NEXT:    sldi 4, 4, 22090; CHECK-AIX-NEXT:    lvsl 3, 0, 42091; CHECK-AIX-NEXT:    li 4, 12092; CHECK-AIX-NEXT:    andc 3, 4, 32093; CHECK-AIX-NEXT:    sldi 3, 3, 52094; CHECK-AIX-NEXT:    vperm 2, 2, 2, 32095; CHECK-AIX-NEXT:    mfvsrd 4, 342096; CHECK-AIX-NEXT:    srd 3, 4, 32097; CHECK-AIX-NEXT:    clrldi 3, 3, 322098; CHECK-AIX-NEXT:    blr2099entry:2100  %vecext = extractelement <4 x i32> %vui, i32 %i2101  ret i32 %vecext2102; FIXME: add check patterns when variable element extraction is implemented2103}2104 2105; Function Attrs: norecurse nounwind readnone2106define i64 @getsl0(<2 x i64> %vsl) {2107; CHECK-LABEL: getsl0:2108; CHECK:       # %bb.0: # %entry2109; CHECK-NEXT:    mfvsrd r3, v22110; CHECK-NEXT:    blr2111;2112; CHECK-LE-LABEL: getsl0:2113; CHECK-LE:       # %bb.0: # %entry2114; CHECK-LE-NEXT:    xxswapd vs0, v22115; CHECK-LE-NEXT:    mffprd r3, f02116; CHECK-LE-NEXT:    blr2117;2118; CHECK-AIX-LABEL: getsl0:2119; CHECK-AIX:       # %bb.0: # %entry2120; CHECK-AIX-NEXT:    mfvsrd 3, 342121; CHECK-AIX-NEXT:    blr2122entry:2123  %vecext = extractelement <2 x i64> %vsl, i32 02124  ret i64 %vecext2125 2126 2127}2128 2129; Function Attrs: norecurse nounwind readnone2130define i64 @getsl1(<2 x i64> %vsl) {2131; CHECK-LABEL: getsl1:2132; CHECK:       # %bb.0: # %entry2133; CHECK-NEXT:    xxswapd vs0, v22134; CHECK-NEXT:    mffprd r3, f02135; CHECK-NEXT:    blr2136;2137; CHECK-LE-LABEL: getsl1:2138; CHECK-LE:       # %bb.0: # %entry2139; CHECK-LE-NEXT:    mfvsrd r3, v22140; CHECK-LE-NEXT:    blr2141;2142; CHECK-AIX-LABEL: getsl1:2143; CHECK-AIX:       # %bb.0: # %entry2144; CHECK-AIX-NEXT:    xxswapd 0, 342145; CHECK-AIX-NEXT:    mffprd 3, 02146; CHECK-AIX-NEXT:    blr2147entry:2148  %vecext = extractelement <2 x i64> %vsl, i32 12149  ret i64 %vecext2150 2151 2152}2153 2154; Function Attrs: norecurse nounwind readnone2155define i64 @getul0(<2 x i64> %vul) {2156; CHECK-LABEL: getul0:2157; CHECK:       # %bb.0: # %entry2158; CHECK-NEXT:    mfvsrd r3, v22159; CHECK-NEXT:    blr2160;2161; CHECK-LE-LABEL: getul0:2162; CHECK-LE:       # %bb.0: # %entry2163; CHECK-LE-NEXT:    xxswapd vs0, v22164; CHECK-LE-NEXT:    mffprd r3, f02165; CHECK-LE-NEXT:    blr2166;2167; CHECK-AIX-LABEL: getul0:2168; CHECK-AIX:       # %bb.0: # %entry2169; CHECK-AIX-NEXT:    mfvsrd 3, 342170; CHECK-AIX-NEXT:    blr2171entry:2172  %vecext = extractelement <2 x i64> %vul, i32 02173  ret i64 %vecext2174 2175 2176}2177 2178; Function Attrs: norecurse nounwind readnone2179define i64 @getul1(<2 x i64> %vul) {2180; CHECK-LABEL: getul1:2181; CHECK:       # %bb.0: # %entry2182; CHECK-NEXT:    xxswapd vs0, v22183; CHECK-NEXT:    mffprd r3, f02184; CHECK-NEXT:    blr2185;2186; CHECK-LE-LABEL: getul1:2187; CHECK-LE:       # %bb.0: # %entry2188; CHECK-LE-NEXT:    mfvsrd r3, v22189; CHECK-LE-NEXT:    blr2190;2191; CHECK-AIX-LABEL: getul1:2192; CHECK-AIX:       # %bb.0: # %entry2193; CHECK-AIX-NEXT:    xxswapd 0, 342194; CHECK-AIX-NEXT:    mffprd 3, 02195; CHECK-AIX-NEXT:    blr2196entry:2197  %vecext = extractelement <2 x i64> %vul, i32 12198  ret i64 %vecext2199 2200 2201}2202 2203; Function Attrs: norecurse nounwind readnone2204define i64 @getvelsl(<2 x i64> %vsl, i32 signext %i) {2205; CHECK-LABEL: getvelsl:2206; CHECK:       # %bb.0: # %entry2207; CHECK-NEXT:    andi. r3, r5, 12208; CHECK-NEXT:    sldi r3, r3, 32209; CHECK-NEXT:    lvsl v3, 0, r32210; CHECK-NEXT:    vperm v2, v2, v2, v32211; CHECK-NEXT:    mfvsrd r3, v22212; CHECK-NEXT:    blr2213;2214; CHECK-LE-LABEL: getvelsl:2215; CHECK-LE:       # %bb.0: # %entry2216; CHECK-LE-NEXT:    clrldi r3, r5, 322217; CHECK-LE-NEXT:    li r4, 12218; CHECK-LE-NEXT:    andc r3, r4, r32219; CHECK-LE-NEXT:    sldi r3, r3, 32220; CHECK-LE-NEXT:    lvsl v3, 0, r32221; CHECK-LE-NEXT:    vperm v2, v2, v2, v32222; CHECK-LE-NEXT:    mfvsrd r3, v22223; CHECK-LE-NEXT:    blr2224;2225; CHECK-AIX-LABEL: getvelsl:2226; CHECK-AIX:       # %bb.0: # %entry2227; CHECK-AIX-NEXT:    andi. 3, 3, 12228; CHECK-AIX-NEXT:    sldi 3, 3, 32229; CHECK-AIX-NEXT:    lvsl 3, 0, 32230; CHECK-AIX-NEXT:    vperm 2, 2, 2, 32231; CHECK-AIX-NEXT:    mfvsrd 3, 342232; CHECK-AIX-NEXT:    blr2233entry:2234  %vecext = extractelement <2 x i64> %vsl, i32 %i2235  ret i64 %vecext2236; FIXME: add check patterns when variable element extraction is implemented2237}2238 2239; Function Attrs: norecurse nounwind readnone2240define i64 @getvelul(<2 x i64> %vul, i32 signext %i) {2241; CHECK-LABEL: getvelul:2242; CHECK:       # %bb.0: # %entry2243; CHECK-NEXT:    andi. r3, r5, 12244; CHECK-NEXT:    sldi r3, r3, 32245; CHECK-NEXT:    lvsl v3, 0, r32246; CHECK-NEXT:    vperm v2, v2, v2, v32247; CHECK-NEXT:    mfvsrd r3, v22248; CHECK-NEXT:    blr2249;2250; CHECK-LE-LABEL: getvelul:2251; CHECK-LE:       # %bb.0: # %entry2252; CHECK-LE-NEXT:    clrldi r3, r5, 322253; CHECK-LE-NEXT:    li r4, 12254; CHECK-LE-NEXT:    andc r3, r4, r32255; CHECK-LE-NEXT:    sldi r3, r3, 32256; CHECK-LE-NEXT:    lvsl v3, 0, r32257; CHECK-LE-NEXT:    vperm v2, v2, v2, v32258; CHECK-LE-NEXT:    mfvsrd r3, v22259; CHECK-LE-NEXT:    blr2260;2261; CHECK-AIX-LABEL: getvelul:2262; CHECK-AIX:       # %bb.0: # %entry2263; CHECK-AIX-NEXT:    andi. 3, 3, 12264; CHECK-AIX-NEXT:    sldi 3, 3, 32265; CHECK-AIX-NEXT:    lvsl 3, 0, 32266; CHECK-AIX-NEXT:    vperm 2, 2, 2, 32267; CHECK-AIX-NEXT:    mfvsrd 3, 342268; CHECK-AIX-NEXT:    blr2269entry:2270  %vecext = extractelement <2 x i64> %vul, i32 %i2271  ret i64 %vecext2272; FIXME: add check patterns when variable element extraction is implemented2273}2274 2275; Function Attrs: norecurse nounwind readnone2276define float @getf0(<4 x float> %vf) {2277; CHECK-LABEL: getf0:2278; CHECK:       # %bb.0: # %entry2279; CHECK-NEXT:    xscvspdpn f1, v22280; CHECK-NEXT:    blr2281;2282; CHECK-LE-LABEL: getf0:2283; CHECK-LE:       # %bb.0: # %entry2284; CHECK-LE-NEXT:    xxsldwi vs0, v2, v2, 32285; CHECK-LE-NEXT:    xscvspdpn f1, vs02286; CHECK-LE-NEXT:    blr2287;2288; CHECK-AIX-LABEL: getf0:2289; CHECK-AIX:       # %bb.0: # %entry2290; CHECK-AIX-NEXT:    xscvspdpn 1, 342291; CHECK-AIX-NEXT:    blr2292entry:2293  %vecext = extractelement <4 x float> %vf, i32 02294  ret float %vecext2295 2296 2297}2298 2299; Function Attrs: norecurse nounwind readnone2300define float @getf1(<4 x float> %vf) {2301; CHECK-LABEL: getf1:2302; CHECK:       # %bb.0: # %entry2303; CHECK-NEXT:    xxsldwi vs0, v2, v2, 12304; CHECK-NEXT:    xscvspdpn f1, vs02305; CHECK-NEXT:    blr2306;2307; CHECK-LE-LABEL: getf1:2308; CHECK-LE:       # %bb.0: # %entry2309; CHECK-LE-NEXT:    xxswapd vs0, v22310; CHECK-LE-NEXT:    xscvspdpn f1, vs02311; CHECK-LE-NEXT:    blr2312;2313; CHECK-AIX-LABEL: getf1:2314; CHECK-AIX:       # %bb.0: # %entry2315; CHECK-AIX-NEXT:    xxsldwi 0, 34, 34, 12316; CHECK-AIX-NEXT:    xscvspdpn 1, 02317; CHECK-AIX-NEXT:    blr2318entry:2319  %vecext = extractelement <4 x float> %vf, i32 12320  ret float %vecext2321 2322 2323}2324 2325; Function Attrs: norecurse nounwind readnone2326define float @getf2(<4 x float> %vf) {2327; CHECK-LABEL: getf2:2328; CHECK:       # %bb.0: # %entry2329; CHECK-NEXT:    xxswapd vs0, v22330; CHECK-NEXT:    xscvspdpn f1, vs02331; CHECK-NEXT:    blr2332;2333; CHECK-LE-LABEL: getf2:2334; CHECK-LE:       # %bb.0: # %entry2335; CHECK-LE-NEXT:    xxsldwi vs0, v2, v2, 12336; CHECK-LE-NEXT:    xscvspdpn f1, vs02337; CHECK-LE-NEXT:    blr2338;2339; CHECK-AIX-LABEL: getf2:2340; CHECK-AIX:       # %bb.0: # %entry2341; CHECK-AIX-NEXT:    xxswapd 0, 342342; CHECK-AIX-NEXT:    xscvspdpn 1, 02343; CHECK-AIX-NEXT:    blr2344entry:2345  %vecext = extractelement <4 x float> %vf, i32 22346  ret float %vecext2347 2348 2349}2350 2351; Function Attrs: norecurse nounwind readnone2352define float @getf3(<4 x float> %vf) {2353; CHECK-LABEL: getf3:2354; CHECK:       # %bb.0: # %entry2355; CHECK-NEXT:    xxsldwi vs0, v2, v2, 32356; CHECK-NEXT:    xscvspdpn f1, vs02357; CHECK-NEXT:    blr2358;2359; CHECK-LE-LABEL: getf3:2360; CHECK-LE:       # %bb.0: # %entry2361; CHECK-LE-NEXT:    xscvspdpn f1, v22362; CHECK-LE-NEXT:    blr2363;2364; CHECK-AIX-LABEL: getf3:2365; CHECK-AIX:       # %bb.0: # %entry2366; CHECK-AIX-NEXT:    xxsldwi 0, 34, 34, 32367; CHECK-AIX-NEXT:    xscvspdpn 1, 02368; CHECK-AIX-NEXT:    blr2369entry:2370  %vecext = extractelement <4 x float> %vf, i32 32371  ret float %vecext2372 2373 2374}2375 2376; Function Attrs: norecurse nounwind readnone2377define float @getvelf(<4 x float> %vf, i32 signext %i) {2378; CHECK-LABEL: getvelf:2379; CHECK:       # %bb.0: # %entry2380; CHECK-NEXT:    rldic r3, r5, 2, 302381; CHECK-NEXT:    lvsl v3, 0, r32382; CHECK-NEXT:    vperm v2, v2, v2, v32383; CHECK-NEXT:    xscvspdpn f1, v22384; CHECK-NEXT:    blr2385;2386; CHECK-LE-LABEL: getvelf:2387; CHECK-LE:       # %bb.0: # %entry2388; CHECK-LE-NEXT:    clrldi r3, r5, 322389; CHECK-LE-NEXT:    xori r3, r3, 32390; CHECK-LE-NEXT:    sldi r3, r3, 22391; CHECK-LE-NEXT:    lvsl v3, 0, r32392; CHECK-LE-NEXT:    vperm v2, v2, v2, v32393; CHECK-LE-NEXT:    xscvspdpn f1, v22394; CHECK-LE-NEXT:    blr2395;2396; CHECK-AIX-LABEL: getvelf:2397; CHECK-AIX:       # %bb.0: # %entry2398; CHECK-AIX-NEXT:    rldic 3, 3, 2, 302399; CHECK-AIX-NEXT:    lvsl 3, 0, 32400; CHECK-AIX-NEXT:    vperm 2, 2, 2, 32401; CHECK-AIX-NEXT:    xscvspdpn 1, 342402; CHECK-AIX-NEXT:    blr2403entry:2404  %vecext = extractelement <4 x float> %vf, i32 %i2405  ret float %vecext2406; FIXME: add check patterns when variable element extraction is implemented2407}2408 2409; Function Attrs: norecurse nounwind readnone2410define double @getd0(<2 x double> %vd) {2411; CHECK-LABEL: getd0:2412; CHECK:       # %bb.0: # %entry2413; CHECK-NEXT:    xxlor f1, v2, v22414; CHECK-NEXT:    blr2415;2416; CHECK-LE-LABEL: getd0:2417; CHECK-LE:       # %bb.0: # %entry2418; CHECK-LE-NEXT:    xxswapd vs1, v22419; CHECK-LE-NEXT:    blr2420;2421; CHECK-AIX-LABEL: getd0:2422; CHECK-AIX:       # %bb.0: # %entry2423; CHECK-AIX-NEXT:    xxlor 1, 34, 342424; CHECK-AIX-NEXT:    blr2425entry:2426  %vecext = extractelement <2 x double> %vd, i32 02427  ret double %vecext2428 2429 2430}2431 2432; Function Attrs: norecurse nounwind readnone2433define double @getd1(<2 x double> %vd) {2434; CHECK-LABEL: getd1:2435; CHECK:       # %bb.0: # %entry2436; CHECK-NEXT:    xxswapd vs1, v22437; CHECK-NEXT:    blr2438;2439; CHECK-LE-LABEL: getd1:2440; CHECK-LE:       # %bb.0: # %entry2441; CHECK-LE-NEXT:    xxlor f1, v2, v22442; CHECK-LE-NEXT:    blr2443;2444; CHECK-AIX-LABEL: getd1:2445; CHECK-AIX:       # %bb.0: # %entry2446; CHECK-AIX-NEXT:    xxswapd 1, 342447; CHECK-AIX-NEXT:    blr2448entry:2449  %vecext = extractelement <2 x double> %vd, i32 12450  ret double %vecext2451}2452 2453; Function Attrs: norecurse nounwind readnone2454define double @getveld(<2 x double> %vd, i32 signext %i) {2455; CHECK-LABEL: getveld:2456; CHECK:       # %bb.0: # %entry2457; CHECK-NEXT:    andi. r3, r5, 12458; CHECK-NEXT:    sldi r3, r3, 32459; CHECK-NEXT:    lvsl v3, 0, r32460; CHECK-NEXT:    vperm v2, v2, v2, v32461; CHECK-NEXT:    xxlor vs1, v2, v22462; CHECK-NEXT:    blr2463;2464; CHECK-LE-LABEL: getveld:2465; CHECK-LE:       # %bb.0: # %entry2466; CHECK-LE-NEXT:    clrldi r3, r5, 322467; CHECK-LE-NEXT:    li r4, 12468; CHECK-LE-NEXT:    andc r3, r4, r32469; CHECK-LE-NEXT:    sldi r3, r3, 32470; CHECK-LE-NEXT:    lvsl v3, 0, r32471; CHECK-LE-NEXT:    vperm v2, v2, v2, v32472; CHECK-LE-NEXT:    xxlor vs1, v2, v22473; CHECK-LE-NEXT:    blr2474;2475; CHECK-AIX-LABEL: getveld:2476; CHECK-AIX:       # %bb.0: # %entry2477; CHECK-AIX-NEXT:    andi. 3, 3, 12478; CHECK-AIX-NEXT:    sldi 3, 3, 32479; CHECK-AIX-NEXT:    lvsl 3, 0, 32480; CHECK-AIX-NEXT:    vperm 2, 2, 2, 32481; CHECK-AIX-NEXT:    xxlor 1, 34, 342482; CHECK-AIX-NEXT:    blr2483entry:2484  %vecext = extractelement <2 x double> %vd, i32 %i2485  ret double %vecext2486; FIXME: add check patterns when variable element extraction is implemented2487}2488 2489; To check when LHS is i32 to vector and RHS is i64 to vector,2490; the combination should be skipped properly.2491define <2 x i64> @buildi2(i64 %arg, i32 %arg1) {2492; CHECK-LABEL: buildi2:2493; CHECK:       # %bb.0: # %entry2494; CHECK-NEXT:    sldi r4, r4, 322495; CHECK-NEXT:    mtfprd f1, r32496; CHECK-NEXT:    mtfprd f0, r42497; CHECK-NEXT:    xxmrghd v2, vs0, vs12498; CHECK-NEXT:    blr2499;2500; CHECK-LE-LABEL: buildi2:2501; CHECK-LE:       # %bb.0: # %entry2502; CHECK-LE-NEXT:    mtfprwz f0, r42503; CHECK-LE-NEXT:    mtfprd f1, r32504; CHECK-LE-NEXT:    xxmrghd v2, vs1, vs02505; CHECK-LE-NEXT:    blr2506;2507; CHECK-AIX-LABEL: buildi2:2508; CHECK-AIX:       # %bb.0: # %entry2509; CHECK-AIX-NEXT:    sldi 4, 4, 322510; CHECK-AIX-NEXT:    mtfprd 1, 32511; CHECK-AIX-NEXT:    mtfprd 0, 42512; CHECK-AIX-NEXT:    xxmrghd 34, 0, 12513; CHECK-AIX-NEXT:    blr2514entry:2515  %lhs.i32 = insertelement <4 x i32> undef, i32 %arg1, i32 02516  %rhs = insertelement <2 x i64> undef, i64 %arg, i32 02517  %lhs = bitcast <4 x i32> %lhs.i32 to <2 x i64>2518  %shuffle = shufflevector <2 x i64> %lhs, <2 x i64> %rhs, <2 x i32> <i32 0, i32 2>2519  ret <2 x i64> %shuffle2520}2521