brintos

brintos / llvm-project-archived public Read only

0
0
Text · 30.0 KiB · 2f543da Raw
1122 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=powerpc-ibm-aix-xcoff -verify-machineinstrs \3; RUN:          -mcpu=pwr8 -vec-extabi | FileCheck %s4 5; The build[csilf] functions simply test the scalar_to_vector handling with6; direct moves. This corresponds to the "insertelement" instruction. Subsequent7; to this, there will be a splat corresponding to the shufflevector.8 9@d = common global double 0.000000e+00, align 810 11; Function Attrs: norecurse nounwind readnone12define <16 x i8> @buildc(i8 zeroext %a) {13; CHECK-LABEL: buildc:14; CHECK:       # %bb.0: # %entry15; CHECK-NEXT:    mtvsrwz 34, 316; CHECK-NEXT:    vspltb 2, 2, 717; CHECK-NEXT:    blr18entry:19  %splat.splatinsert = insertelement <16 x i8> undef, i8 %a, i32 020  %splat.splat = shufflevector <16 x i8> %splat.splatinsert, <16 x i8> undef, <16 x i32> zeroinitializer21  ret <16 x i8> %splat.splat22}23 24; Function Attrs: norecurse nounwind readnone25define <8 x i16> @builds(i16 zeroext %a) {26; CHECK-LABEL: builds:27; CHECK:       # %bb.0: # %entry28; CHECK-NEXT:    sth 3, -16(1)29; CHECK-NEXT:    addi 3, 1, -1630; CHECK-NEXT:    lxvw4x 34, 0, 331; CHECK-NEXT:    vsplth 2, 2, 032; CHECK-NEXT:    blr33entry:34  %splat.splatinsert = insertelement <8 x i16> undef, i16 %a, i32 035  %splat.splat = shufflevector <8 x i16> %splat.splatinsert, <8 x i16> undef, <8 x i32> zeroinitializer36  ret <8 x i16> %splat.splat37}38 39; Function Attrs: norecurse nounwind readnone40define <4 x i32> @buildi(i32 zeroext %a) {41; CHECK-LABEL: buildi:42; CHECK:       # %bb.0: # %entry43; CHECK-NEXT:    stw 3, -16(1)44; CHECK-NEXT:    addi 3, 1, -1645; CHECK-NEXT:    lxvw4x 0, 0, 346; CHECK-NEXT:    xxspltw 34, 0, 047; CHECK-NEXT:    blr48entry:49  %splat.splatinsert = insertelement <4 x i32> undef, i32 %a, i32 050  %splat.splat = shufflevector <4 x i32> %splat.splatinsert, <4 x i32> undef, <4 x i32> zeroinitializer51  ret <4 x i32> %splat.splat52}53 54; Function Attrs: norecurse nounwind readnone55define <2 x i64> @buildl(i64 %a) {56; CHECK-LABEL: buildl:57; CHECK:       # %bb.0: # %entry58; CHECK-NEXT:    stw 3, -32(1)59; CHECK-NEXT:    lwz 3, L..C0(2) # %const.060; CHECK-NEXT:    stw 4, -16(1)61; CHECK-NEXT:    lxvw4x 34, 0, 362; CHECK-NEXT:    addi 3, 1, -1663; CHECK-NEXT:    lxvw4x 35, 0, 364; CHECK-NEXT:    addi 3, 1, -3265; CHECK-NEXT:    lxvw4x 36, 0, 366; CHECK-NEXT:    vperm 2, 4, 3, 267; CHECK-NEXT:    blr68entry:69  %splat.splatinsert = insertelement <2 x i64> undef, i64 %a, i32 070  %splat.splat = shufflevector <2 x i64> %splat.splatinsert, <2 x i64> undef, <2 x i32> zeroinitializer71  ret <2 x i64> %splat.splat72}73 74; Function Attrs: norecurse nounwind readnone75define <4 x float> @buildf(float %a) {76; CHECK-LABEL: buildf:77; CHECK:       # %bb.0: # %entry78; CHECK-NEXT:    xscvdpspn 0, 179; CHECK-NEXT:    xxspltw 34, 0, 180; CHECK-NEXT:    blr81entry:82  %splat.splatinsert = insertelement <4 x float> undef, float %a, i32 083  %splat.splat = shufflevector <4 x float> %splat.splatinsert, <4 x float> undef, <4 x i32> zeroinitializer84  ret <4 x float> %splat.splat85}86 87; The optimization to remove stack operations from PPCDAGToDAGISel::Select88; should still trigger for v2f64, producing an lxvdsx.89; Function Attrs: norecurse nounwind readonly90define <2 x double> @buildd() {91; CHECK-LABEL: buildd:92; CHECK:       # %bb.0: # %entry93; CHECK-NEXT:    lwz 3, L..C1(2) # @d94; CHECK-NEXT:    lxvdsx 34, 0, 395; CHECK-NEXT:    blr96entry:97  %0 = load double, ptr @d, align 898  %splat.splatinsert = insertelement <2 x double> undef, double %0, i32 099  %splat.splat = shufflevector <2 x double> %splat.splatinsert, <2 x double> undef, <2 x i32> zeroinitializer100  ret <2 x double> %splat.splat101}102 103; Function Attrs: norecurse nounwind readnone104define signext i8 @getsc0(<16 x i8> %vsc) {105; CHECK-LABEL: getsc0:106; CHECK:       # %bb.0: # %entry107; CHECK-NEXT:    addi 3, 1, -16108; CHECK-NEXT:    stxvw4x 34, 0, 3109; CHECK-NEXT:    lbz 3, -16(1)110; CHECK-NEXT:    extsb 3, 3111; CHECK-NEXT:    blr112entry:113  %vecext = extractelement <16 x i8> %vsc, i32 0114  ret i8 %vecext115}116 117; Function Attrs: norecurse nounwind readnone118define signext i8 @getsc1(<16 x i8> %vsc) {119; CHECK-LABEL: getsc1:120; CHECK:       # %bb.0: # %entry121; CHECK-NEXT:    addi 3, 1, -16122; CHECK-NEXT:    stxvw4x 34, 0, 3123; CHECK-NEXT:    lbz 3, -15(1)124; CHECK-NEXT:    extsb 3, 3125; CHECK-NEXT:    blr126entry:127  %vecext = extractelement <16 x i8> %vsc, i32 1128  ret i8 %vecext129}130 131; Function Attrs: norecurse nounwind readnone132define signext i8 @getsc2(<16 x i8> %vsc) {133; CHECK-LABEL: getsc2:134; CHECK:       # %bb.0: # %entry135; CHECK-NEXT:    addi 3, 1, -16136; CHECK-NEXT:    stxvw4x 34, 0, 3137; CHECK-NEXT:    lbz 3, -14(1)138; CHECK-NEXT:    extsb 3, 3139; CHECK-NEXT:    blr140entry:141  %vecext = extractelement <16 x i8> %vsc, i32 2142  ret i8 %vecext143}144 145; Function Attrs: norecurse nounwind readnone146define signext i8 @getsc3(<16 x i8> %vsc) {147; CHECK-LABEL: getsc3:148; CHECK:       # %bb.0: # %entry149; CHECK-NEXT:    addi 3, 1, -16150; CHECK-NEXT:    stxvw4x 34, 0, 3151; CHECK-NEXT:    lbz 3, -13(1)152; CHECK-NEXT:    extsb 3, 3153; CHECK-NEXT:    blr154entry:155  %vecext = extractelement <16 x i8> %vsc, i32 3156  ret i8 %vecext157}158 159; Function Attrs: norecurse nounwind readnone160define signext i8 @getsc4(<16 x i8> %vsc) {161; CHECK-LABEL: getsc4:162; CHECK:       # %bb.0: # %entry163; CHECK-NEXT:    addi 3, 1, -16164; CHECK-NEXT:    stxvw4x 34, 0, 3165; CHECK-NEXT:    lbz 3, -12(1)166; CHECK-NEXT:    extsb 3, 3167; CHECK-NEXT:    blr168entry:169  %vecext = extractelement <16 x i8> %vsc, i32 4170  ret i8 %vecext171}172 173; Function Attrs: norecurse nounwind readnone174define signext i8 @getsc5(<16 x i8> %vsc) {175; CHECK-LABEL: getsc5:176; CHECK:       # %bb.0: # %entry177; CHECK-NEXT:    addi 3, 1, -16178; CHECK-NEXT:    stxvw4x 34, 0, 3179; CHECK-NEXT:    lbz 3, -11(1)180; CHECK-NEXT:    extsb 3, 3181; CHECK-NEXT:    blr182entry:183  %vecext = extractelement <16 x i8> %vsc, i32 5184  ret i8 %vecext185}186 187; Function Attrs: norecurse nounwind readnone188define signext i8 @getsc6(<16 x i8> %vsc) {189; CHECK-LABEL: getsc6:190; CHECK:       # %bb.0: # %entry191; CHECK-NEXT:    addi 3, 1, -16192; CHECK-NEXT:    stxvw4x 34, 0, 3193; CHECK-NEXT:    lbz 3, -10(1)194; CHECK-NEXT:    extsb 3, 3195; CHECK-NEXT:    blr196entry:197  %vecext = extractelement <16 x i8> %vsc, i32 6198  ret i8 %vecext199}200 201; Function Attrs: norecurse nounwind readnone202define signext i8 @getsc7(<16 x i8> %vsc) {203; CHECK-LABEL: getsc7:204; CHECK:       # %bb.0: # %entry205; CHECK-NEXT:    addi 3, 1, -16206; CHECK-NEXT:    stxvw4x 34, 0, 3207; CHECK-NEXT:    lbz 3, -9(1)208; CHECK-NEXT:    extsb 3, 3209; CHECK-NEXT:    blr210entry:211  %vecext = extractelement <16 x i8> %vsc, i32 7212  ret i8 %vecext213}214 215; Function Attrs: norecurse nounwind readnone216define signext i8 @getsc8(<16 x i8> %vsc) {217; CHECK-LABEL: getsc8:218; CHECK:       # %bb.0: # %entry219; CHECK-NEXT:    addi 3, 1, -16220; CHECK-NEXT:    stxvw4x 34, 0, 3221; CHECK-NEXT:    lbz 3, -8(1)222; CHECK-NEXT:    extsb 3, 3223; CHECK-NEXT:    blr224entry:225  %vecext = extractelement <16 x i8> %vsc, i32 8226  ret i8 %vecext227}228 229; Function Attrs: norecurse nounwind readnone230define signext i8 @getsc9(<16 x i8> %vsc) {231; CHECK-LABEL: getsc9:232; CHECK:       # %bb.0: # %entry233; CHECK-NEXT:    addi 3, 1, -16234; CHECK-NEXT:    stxvw4x 34, 0, 3235; CHECK-NEXT:    lbz 3, -7(1)236; CHECK-NEXT:    extsb 3, 3237; CHECK-NEXT:    blr238entry:239  %vecext = extractelement <16 x i8> %vsc, i32 9240  ret i8 %vecext241}242 243; Function Attrs: norecurse nounwind readnone244define signext i8 @getsc10(<16 x i8> %vsc) {245; CHECK-LABEL: getsc10:246; CHECK:       # %bb.0: # %entry247; CHECK-NEXT:    addi 3, 1, -16248; CHECK-NEXT:    stxvw4x 34, 0, 3249; CHECK-NEXT:    lbz 3, -6(1)250; CHECK-NEXT:    extsb 3, 3251; CHECK-NEXT:    blr252entry:253  %vecext = extractelement <16 x i8> %vsc, i32 10254  ret i8 %vecext255}256 257; Function Attrs: norecurse nounwind readnone258define signext i8 @getsc11(<16 x i8> %vsc) {259; CHECK-LABEL: getsc11:260; CHECK:       # %bb.0: # %entry261; CHECK-NEXT:    addi 3, 1, -16262; CHECK-NEXT:    stxvw4x 34, 0, 3263; CHECK-NEXT:    lbz 3, -5(1)264; CHECK-NEXT:    extsb 3, 3265; CHECK-NEXT:    blr266entry:267  %vecext = extractelement <16 x i8> %vsc, i32 11268  ret i8 %vecext269}270 271; Function Attrs: norecurse nounwind readnone272define signext i8 @getsc12(<16 x i8> %vsc) {273; CHECK-LABEL: getsc12:274; CHECK:       # %bb.0: # %entry275; CHECK-NEXT:    addi 3, 1, -16276; CHECK-NEXT:    stxvw4x 34, 0, 3277; CHECK-NEXT:    lbz 3, -4(1)278; CHECK-NEXT:    extsb 3, 3279; CHECK-NEXT:    blr280entry:281  %vecext = extractelement <16 x i8> %vsc, i32 12282  ret i8 %vecext283}284 285; Function Attrs: norecurse nounwind readnone286define signext i8 @getsc13(<16 x i8> %vsc) {287; CHECK-LABEL: getsc13:288; CHECK:       # %bb.0: # %entry289; CHECK-NEXT:    addi 3, 1, -16290; CHECK-NEXT:    stxvw4x 34, 0, 3291; CHECK-NEXT:    lbz 3, -3(1)292; CHECK-NEXT:    extsb 3, 3293; CHECK-NEXT:    blr294entry:295  %vecext = extractelement <16 x i8> %vsc, i32 13296  ret i8 %vecext297}298 299; Function Attrs: norecurse nounwind readnone300define signext i8 @getsc14(<16 x i8> %vsc) {301; CHECK-LABEL: getsc14:302; CHECK:       # %bb.0: # %entry303; CHECK-NEXT:    addi 3, 1, -16304; CHECK-NEXT:    stxvw4x 34, 0, 3305; CHECK-NEXT:    lbz 3, -2(1)306; CHECK-NEXT:    extsb 3, 3307; CHECK-NEXT:    blr308entry:309  %vecext = extractelement <16 x i8> %vsc, i32 14310  ret i8 %vecext311}312 313; Function Attrs: norecurse nounwind readnone314define signext i8 @getsc15(<16 x i8> %vsc) {315; CHECK-LABEL: getsc15:316; CHECK:       # %bb.0: # %entry317; CHECK-NEXT:    addi 3, 1, -16318; CHECK-NEXT:    stxvw4x 34, 0, 3319; CHECK-NEXT:    lbz 3, -1(1)320; CHECK-NEXT:    extsb 3, 3321; CHECK-NEXT:    blr322entry:323  %vecext = extractelement <16 x i8> %vsc, i32 15324  ret i8 %vecext325}326 327; Function Attrs: norecurse nounwind readnone328define zeroext i8 @getuc0(<16 x i8> %vuc) {329; CHECK-LABEL: getuc0:330; CHECK:       # %bb.0: # %entry331; CHECK-NEXT:    addi 3, 1, -16332; CHECK-NEXT:    stxvw4x 34, 0, 3333; CHECK-NEXT:    lbz 3, -16(1)334; CHECK-NEXT:    blr335entry:336  %vecext = extractelement <16 x i8> %vuc, i32 0337  ret i8 %vecext338}339 340; Function Attrs: norecurse nounwind readnone341define zeroext i8 @getuc1(<16 x i8> %vuc) {342; CHECK-LABEL: getuc1:343; CHECK:       # %bb.0: # %entry344; CHECK-NEXT:    addi 3, 1, -16345; CHECK-NEXT:    stxvw4x 34, 0, 3346; CHECK-NEXT:    lbz 3, -15(1)347; CHECK-NEXT:    blr348entry:349  %vecext = extractelement <16 x i8> %vuc, i32 1350  ret i8 %vecext351}352 353; Function Attrs: norecurse nounwind readnone354define zeroext i8 @getuc2(<16 x i8> %vuc) {355; CHECK-LABEL: getuc2:356; CHECK:       # %bb.0: # %entry357; CHECK-NEXT:    addi 3, 1, -16358; CHECK-NEXT:    stxvw4x 34, 0, 3359; CHECK-NEXT:    lbz 3, -14(1)360; CHECK-NEXT:    blr361entry:362  %vecext = extractelement <16 x i8> %vuc, i32 2363  ret i8 %vecext364}365 366; Function Attrs: norecurse nounwind readnone367define zeroext i8 @getuc3(<16 x i8> %vuc) {368; CHECK-LABEL: getuc3:369; CHECK:       # %bb.0: # %entry370; CHECK-NEXT:    addi 3, 1, -16371; CHECK-NEXT:    stxvw4x 34, 0, 3372; CHECK-NEXT:    lbz 3, -13(1)373; CHECK-NEXT:    blr374entry:375  %vecext = extractelement <16 x i8> %vuc, i32 3376  ret i8 %vecext377}378 379; Function Attrs: norecurse nounwind readnone380define zeroext i8 @getuc4(<16 x i8> %vuc) {381; CHECK-LABEL: getuc4:382; CHECK:       # %bb.0: # %entry383; CHECK-NEXT:    addi 3, 1, -16384; CHECK-NEXT:    stxvw4x 34, 0, 3385; CHECK-NEXT:    lbz 3, -12(1)386; CHECK-NEXT:    blr387entry:388  %vecext = extractelement <16 x i8> %vuc, i32 4389  ret i8 %vecext390}391 392; Function Attrs: norecurse nounwind readnone393define zeroext i8 @getuc5(<16 x i8> %vuc) {394; CHECK-LABEL: getuc5:395; CHECK:       # %bb.0: # %entry396; CHECK-NEXT:    addi 3, 1, -16397; CHECK-NEXT:    stxvw4x 34, 0, 3398; CHECK-NEXT:    lbz 3, -11(1)399; CHECK-NEXT:    blr400entry:401  %vecext = extractelement <16 x i8> %vuc, i32 5402  ret i8 %vecext403}404 405; Function Attrs: norecurse nounwind readnone406define zeroext i8 @getuc6(<16 x i8> %vuc) {407; CHECK-LABEL: getuc6:408; CHECK:       # %bb.0: # %entry409; CHECK-NEXT:    addi 3, 1, -16410; CHECK-NEXT:    stxvw4x 34, 0, 3411; CHECK-NEXT:    lbz 3, -10(1)412; CHECK-NEXT:    blr413entry:414  %vecext = extractelement <16 x i8> %vuc, i32 6415  ret i8 %vecext416}417 418; Function Attrs: norecurse nounwind readnone419define zeroext i8 @getuc7(<16 x i8> %vuc) {420; CHECK-LABEL: getuc7:421; CHECK:       # %bb.0: # %entry422; CHECK-NEXT:    addi 3, 1, -16423; CHECK-NEXT:    stxvw4x 34, 0, 3424; CHECK-NEXT:    lbz 3, -9(1)425; CHECK-NEXT:    blr426entry:427  %vecext = extractelement <16 x i8> %vuc, i32 7428  ret i8 %vecext429}430 431; Function Attrs: norecurse nounwind readnone432define zeroext i8 @getuc8(<16 x i8> %vuc) {433; CHECK-LABEL: getuc8:434; CHECK:       # %bb.0: # %entry435; CHECK-NEXT:    addi 3, 1, -16436; CHECK-NEXT:    stxvw4x 34, 0, 3437; CHECK-NEXT:    lbz 3, -8(1)438; CHECK-NEXT:    blr439entry:440  %vecext = extractelement <16 x i8> %vuc, i32 8441  ret i8 %vecext442}443 444; Function Attrs: norecurse nounwind readnone445define zeroext i8 @getuc9(<16 x i8> %vuc) {446; CHECK-LABEL: getuc9:447; CHECK:       # %bb.0: # %entry448; CHECK-NEXT:    addi 3, 1, -16449; CHECK-NEXT:    stxvw4x 34, 0, 3450; CHECK-NEXT:    lbz 3, -7(1)451; CHECK-NEXT:    blr452entry:453  %vecext = extractelement <16 x i8> %vuc, i32 9454  ret i8 %vecext455}456 457; Function Attrs: norecurse nounwind readnone458define zeroext i8 @getuc10(<16 x i8> %vuc) {459; CHECK-LABEL: getuc10:460; CHECK:       # %bb.0: # %entry461; CHECK-NEXT:    addi 3, 1, -16462; CHECK-NEXT:    stxvw4x 34, 0, 3463; CHECK-NEXT:    lbz 3, -6(1)464; CHECK-NEXT:    blr465entry:466  %vecext = extractelement <16 x i8> %vuc, i32 10467  ret i8 %vecext468}469 470; Function Attrs: norecurse nounwind readnone471define zeroext i8 @getuc11(<16 x i8> %vuc) {472; CHECK-LABEL: getuc11:473; CHECK:       # %bb.0: # %entry474; CHECK-NEXT:    addi 3, 1, -16475; CHECK-NEXT:    stxvw4x 34, 0, 3476; CHECK-NEXT:    lbz 3, -5(1)477; CHECK-NEXT:    blr478entry:479  %vecext = extractelement <16 x i8> %vuc, i32 11480  ret i8 %vecext481}482 483; Function Attrs: norecurse nounwind readnone484define zeroext i8 @getuc12(<16 x i8> %vuc) {485;486; CHECK-LABEL: getuc12:487; CHECK:       # %bb.0: # %entry488; CHECK-NEXT:    addi 3, 1, -16489; CHECK-NEXT:    stxvw4x 34, 0, 3490; CHECK-NEXT:    lbz 3, -4(1)491; CHECK-NEXT:    blr492entry:493  %vecext = extractelement <16 x i8> %vuc, i32 12494  ret i8 %vecext495}496 497; Function Attrs: norecurse nounwind readnone498define zeroext i8 @getuc13(<16 x i8> %vuc) {499; CHECK-LABEL: getuc13:500; CHECK:       # %bb.0: # %entry501; CHECK-NEXT:    addi 3, 1, -16502; CHECK-NEXT:    stxvw4x 34, 0, 3503; CHECK-NEXT:    lbz 3, -3(1)504; CHECK-NEXT:    blr505entry:506  %vecext = extractelement <16 x i8> %vuc, i32 13507  ret i8 %vecext508}509 510; Function Attrs: norecurse nounwind readnone511define zeroext i8 @getuc14(<16 x i8> %vuc) {512; CHECK-LABEL: getuc14:513; CHECK:       # %bb.0: # %entry514; CHECK-NEXT:    addi 3, 1, -16515; CHECK-NEXT:    stxvw4x 34, 0, 3516; CHECK-NEXT:    lbz 3, -2(1)517; CHECK-NEXT:    blr518entry:519  %vecext = extractelement <16 x i8> %vuc, i32 14520  ret i8 %vecext521}522 523; Function Attrs: norecurse nounwind readnone524define zeroext i8 @getuc15(<16 x i8> %vuc) {525; CHECK-LABEL: getuc15:526; CHECK:       # %bb.0: # %entry527; CHECK-NEXT:    addi 3, 1, -16528; CHECK-NEXT:    stxvw4x 34, 0, 3529; CHECK-NEXT:    lbz 3, -1(1)530; CHECK-NEXT:    blr531entry:532  %vecext = extractelement <16 x i8> %vuc, i32 15533  ret i8 %vecext534}535 536; Function Attrs: norecurse nounwind readnone537define signext i8 @getvelsc(<16 x i8> %vsc, i32 signext %i) {538; CHECK-LABEL: getvelsc:539; CHECK:       # %bb.0: # %entry540; CHECK-NEXT:    addi 4, 1, -16541; CHECK-NEXT:    clrlwi 3, 3, 28542; CHECK-NEXT:    stxvw4x 34, 0, 4543; CHECK-NEXT:    lbzx 3, 4, 3544; CHECK-NEXT:    extsb 3, 3545; CHECK-NEXT:    blr546entry:547  %vecext = extractelement <16 x i8> %vsc, i32 %i548  ret i8 %vecext549}550 551; Function Attrs: norecurse nounwind readnone552define zeroext i8 @getveluc(<16 x i8> %vuc, i32 signext %i) {553; CHECK-LABEL: getveluc:554; CHECK:       # %bb.0: # %entry555; CHECK-NEXT:    addi 4, 1, -16556; CHECK-NEXT:    clrlwi 3, 3, 28557; CHECK-NEXT:    stxvw4x 34, 0, 4558; CHECK-NEXT:    lbzx 3, 4, 3559; CHECK-NEXT:    blr560entry:561  %vecext = extractelement <16 x i8> %vuc, i32 %i562  ret i8 %vecext563}564 565; Function Attrs: norecurse nounwind readnone566define signext i16 @getss0(<8 x i16> %vss) {567; CHECK-LABEL: getss0:568; CHECK:       # %bb.0: # %entry569; CHECK-NEXT:    addi 3, 1, -16570; CHECK-NEXT:    stxvw4x 34, 0, 3571; CHECK-NEXT:    lha 3, -16(1)572; CHECK-NEXT:    blr573entry:574  %vecext = extractelement <8 x i16> %vss, i32 0575  ret i16 %vecext576}577 578; Function Attrs: norecurse nounwind readnone579define signext i16 @getss1(<8 x i16> %vss) {580; CHECK-LABEL: getss1:581; CHECK:       # %bb.0: # %entry582; CHECK-NEXT:    addi 3, 1, -16583; CHECK-NEXT:    stxvw4x 34, 0, 3584; CHECK-NEXT:    lha 3, -14(1)585; CHECK-NEXT:    blr586entry:587  %vecext = extractelement <8 x i16> %vss, i32 1588  ret i16 %vecext589}590 591; Function Attrs: norecurse nounwind readnone592define signext i16 @getss2(<8 x i16> %vss) {593; CHECK-LABEL: getss2:594; CHECK:       # %bb.0: # %entry595; CHECK-NEXT:    addi 3, 1, -16596; CHECK-NEXT:    stxvw4x 34, 0, 3597; CHECK-NEXT:    lha 3, -12(1)598; CHECK-NEXT:    blr599entry:600  %vecext = extractelement <8 x i16> %vss, i32 2601  ret i16 %vecext602}603 604; Function Attrs: norecurse nounwind readnone605define signext i16 @getss3(<8 x i16> %vss) {606; CHECK-LABEL: getss3:607; CHECK:       # %bb.0: # %entry608; CHECK-NEXT:    addi 3, 1, -16609; CHECK-NEXT:    stxvw4x 34, 0, 3610; CHECK-NEXT:    lha 3, -10(1)611; CHECK-NEXT:    blr612entry:613  %vecext = extractelement <8 x i16> %vss, i32 3614  ret i16 %vecext615}616 617; Function Attrs: norecurse nounwind readnone618define signext i16 @getss4(<8 x i16> %vss) {619; CHECK-LABEL: getss4:620; CHECK:       # %bb.0: # %entry621; CHECK-NEXT:    addi 3, 1, -16622; CHECK-NEXT:    stxvw4x 34, 0, 3623; CHECK-NEXT:    lha 3, -8(1)624; CHECK-NEXT:    blr625entry:626  %vecext = extractelement <8 x i16> %vss, i32 4627  ret i16 %vecext628}629 630; Function Attrs: norecurse nounwind readnone631define signext i16 @getss5(<8 x i16> %vss) {632; CHECK-LABEL: getss5:633; CHECK:       # %bb.0: # %entry634; CHECK-NEXT:    addi 3, 1, -16635; CHECK-NEXT:    stxvw4x 34, 0, 3636; CHECK-NEXT:    lha 3, -6(1)637; CHECK-NEXT:    blr638entry:639  %vecext = extractelement <8 x i16> %vss, i32 5640  ret i16 %vecext641}642 643; Function Attrs: norecurse nounwind readnone644define signext i16 @getss6(<8 x i16> %vss) {645; CHECK-LABEL: getss6:646; CHECK:       # %bb.0: # %entry647; CHECK-NEXT:    addi 3, 1, -16648; CHECK-NEXT:    stxvw4x 34, 0, 3649; CHECK-NEXT:    lha 3, -4(1)650; CHECK-NEXT:    blr651entry:652  %vecext = extractelement <8 x i16> %vss, i32 6653  ret i16 %vecext654}655 656; Function Attrs: norecurse nounwind readnone657define signext i16 @getss7(<8 x i16> %vss) {658; CHECK-LABEL: getss7:659; CHECK:       # %bb.0: # %entry660; CHECK-NEXT:    addi 3, 1, -16661; CHECK-NEXT:    stxvw4x 34, 0, 3662; CHECK-NEXT:    lha 3, -2(1)663; CHECK-NEXT:    blr664entry:665  %vecext = extractelement <8 x i16> %vss, i32 7666  ret i16 %vecext667}668 669; Function Attrs: norecurse nounwind readnone670define zeroext i16 @getus0(<8 x i16> %vus) {671; CHECK-LABEL: getus0:672; CHECK:       # %bb.0: # %entry673; CHECK-NEXT:    addi 3, 1, -16674; CHECK-NEXT:    stxvw4x 34, 0, 3675; CHECK-NEXT:    lhz 3, -16(1)676; CHECK-NEXT:    blr677entry:678  %vecext = extractelement <8 x i16> %vus, i32 0679  ret i16 %vecext680}681 682; Function Attrs: norecurse nounwind readnone683define zeroext i16 @getus1(<8 x i16> %vus) {684; CHECK-LABEL: getus1:685; CHECK:       # %bb.0: # %entry686; CHECK-NEXT:    addi 3, 1, -16687; CHECK-NEXT:    stxvw4x 34, 0, 3688; CHECK-NEXT:    lhz 3, -14(1)689; CHECK-NEXT:    blr690entry:691  %vecext = extractelement <8 x i16> %vus, i32 1692  ret i16 %vecext693}694 695; Function Attrs: norecurse nounwind readnone696define zeroext i16 @getus2(<8 x i16> %vus) {697; CHECK-LABEL: getus2:698; CHECK:       # %bb.0: # %entry699; CHECK-NEXT:    addi 3, 1, -16700; CHECK-NEXT:    stxvw4x 34, 0, 3701; CHECK-NEXT:    lhz 3, -12(1)702; CHECK-NEXT:    blr703entry:704  %vecext = extractelement <8 x i16> %vus, i32 2705  ret i16 %vecext706}707 708; Function Attrs: norecurse nounwind readnone709define zeroext i16 @getus3(<8 x i16> %vus) {710; CHECK-LABEL: getus3:711; CHECK:       # %bb.0: # %entry712; CHECK-NEXT:    addi 3, 1, -16713; CHECK-NEXT:    stxvw4x 34, 0, 3714; CHECK-NEXT:    lhz 3, -10(1)715; CHECK-NEXT:    blr716entry:717  %vecext = extractelement <8 x i16> %vus, i32 3718  ret i16 %vecext719}720 721; Function Attrs: norecurse nounwind readnone722define zeroext i16 @getus4(<8 x i16> %vus) {723; CHECK-LABEL: getus4:724; CHECK:       # %bb.0: # %entry725; CHECK-NEXT:    addi 3, 1, -16726; CHECK-NEXT:    stxvw4x 34, 0, 3727; CHECK-NEXT:    lhz 3, -8(1)728; CHECK-NEXT:    blr729entry:730  %vecext = extractelement <8 x i16> %vus, i32 4731  ret i16 %vecext732}733 734; Function Attrs: norecurse nounwind readnone735define zeroext i16 @getus5(<8 x i16> %vus) {736; CHECK-LABEL: getus5:737; CHECK:       # %bb.0: # %entry738; CHECK-NEXT:    addi 3, 1, -16739; CHECK-NEXT:    stxvw4x 34, 0, 3740; CHECK-NEXT:    lhz 3, -6(1)741; CHECK-NEXT:    blr742entry:743  %vecext = extractelement <8 x i16> %vus, i32 5744  ret i16 %vecext745}746 747; Function Attrs: norecurse nounwind readnone748define zeroext i16 @getus6(<8 x i16> %vus) {749; CHECK-LABEL: getus6:750; CHECK:       # %bb.0: # %entry751; CHECK-NEXT:    addi 3, 1, -16752; CHECK-NEXT:    stxvw4x 34, 0, 3753; CHECK-NEXT:    lhz 3, -4(1)754; CHECK-NEXT:    blr755entry:756  %vecext = extractelement <8 x i16> %vus, i32 6757  ret i16 %vecext758}759 760; Function Attrs: norecurse nounwind readnone761define zeroext i16 @getus7(<8 x i16> %vus) {762; CHECK-LABEL: getus7:763; CHECK:       # %bb.0: # %entry764; CHECK-NEXT:    addi 3, 1, -16765; CHECK-NEXT:    stxvw4x 34, 0, 3766; CHECK-NEXT:    lhz 3, -2(1)767; CHECK-NEXT:    blr768entry:769  %vecext = extractelement <8 x i16> %vus, i32 7770  ret i16 %vecext771}772 773; Function Attrs: norecurse nounwind readnone774define signext i16 @getvelss(<8 x i16> %vss, i32 signext %i) {775; CHECK-LABEL: getvelss:776; CHECK:       # %bb.0: # %entry777; CHECK-NEXT:    addi 4, 1, -16778; CHECK-NEXT:    rlwinm 3, 3, 1, 28, 30779; CHECK-NEXT:    stxvw4x 34, 0, 4780; CHECK-NEXT:    lhax 3, 4, 3781; CHECK-NEXT:    blr782entry:783  %vecext = extractelement <8 x i16> %vss, i32 %i784  ret i16 %vecext785}786 787; Function Attrs: norecurse nounwind readnone788define zeroext i16 @getvelus(<8 x i16> %vus, i32 signext %i) {789; CHECK-LABEL: getvelus:790; CHECK:       # %bb.0: # %entry791; CHECK-NEXT:    addi 4, 1, -16792; CHECK-NEXT:    rlwinm 3, 3, 1, 28, 30793; CHECK-NEXT:    stxvw4x 34, 0, 4794; CHECK-NEXT:    lhzx 3, 4, 3795; CHECK-NEXT:    blr796entry:797  %vecext = extractelement <8 x i16> %vus, i32 %i798  ret i16 %vecext799}800 801; Function Attrs: norecurse nounwind readnone802define signext i32 @getsi0(<4 x i32> %vsi) {803; CHECK-LABEL: getsi0:804; CHECK:       # %bb.0: # %entry805; CHECK-NEXT:    addi 3, 1, -16806; CHECK-NEXT:    stxvw4x 34, 0, 3807; CHECK-NEXT:    lwz 3, -16(1)808; CHECK-NEXT:    blr809entry:810  %vecext = extractelement <4 x i32> %vsi, i32 0811  ret i32 %vecext812}813 814; Function Attrs: norecurse nounwind readnone815define signext i32 @getsi1(<4 x i32> %vsi) {816; CHECK-LABEL: getsi1:817; CHECK:       # %bb.0: # %entry818; CHECK-NEXT:    addi 3, 1, -16819; CHECK-NEXT:    stxvw4x 34, 0, 3820; CHECK-NEXT:    lwz 3, -12(1)821; CHECK-NEXT:    blr822entry:823  %vecext = extractelement <4 x i32> %vsi, i32 1824  ret i32 %vecext825}826 827; Function Attrs: norecurse nounwind readnone828define signext i32 @getsi2(<4 x i32> %vsi) {829; CHECK-LABEL: getsi2:830; CHECK:       # %bb.0: # %entry831; CHECK-NEXT:    addi 3, 1, -16832; CHECK-NEXT:    stxvw4x 34, 0, 3833; CHECK-NEXT:    lwz 3, -8(1)834; CHECK-NEXT:    blr835entry:836  %vecext = extractelement <4 x i32> %vsi, i32 2837  ret i32 %vecext838}839 840; Function Attrs: norecurse nounwind readnone841define signext i32 @getsi3(<4 x i32> %vsi) {842; CHECK-LABEL: getsi3:843; CHECK:       # %bb.0: # %entry844; CHECK-NEXT:    addi 3, 1, -16845; CHECK-NEXT:    stxvw4x 34, 0, 3846; CHECK-NEXT:    lwz 3, -4(1)847; CHECK-NEXT:    blr848entry:849  %vecext = extractelement <4 x i32> %vsi, i32 3850  ret i32 %vecext851}852 853; Function Attrs: norecurse nounwind readnone854define zeroext i32 @getui0(<4 x i32> %vui) {855; CHECK-LABEL: getui0:856; CHECK:       # %bb.0: # %entry857; CHECK-NEXT:    addi 3, 1, -16858; CHECK-NEXT:    stxvw4x 34, 0, 3859; CHECK-NEXT:    lwz 3, -16(1)860; CHECK-NEXT:    blr861entry:862  %vecext = extractelement <4 x i32> %vui, i32 0863  ret i32 %vecext864}865 866; Function Attrs: norecurse nounwind readnone867define zeroext i32 @getui1(<4 x i32> %vui) {868; CHECK-LABEL: getui1:869; CHECK:       # %bb.0: # %entry870; CHECK-NEXT:    addi 3, 1, -16871; CHECK-NEXT:    stxvw4x 34, 0, 3872; CHECK-NEXT:    lwz 3, -12(1)873; CHECK-NEXT:    blr874entry:875  %vecext = extractelement <4 x i32> %vui, i32 1876  ret i32 %vecext877}878 879; Function Attrs: norecurse nounwind readnone880define zeroext i32 @getui2(<4 x i32> %vui) {881; CHECK-LABEL: getui2:882; CHECK:       # %bb.0: # %entry883; CHECK-NEXT:    addi 3, 1, -16884; CHECK-NEXT:    stxvw4x 34, 0, 3885; CHECK-NEXT:    lwz 3, -8(1)886; CHECK-NEXT:    blr887entry:888  %vecext = extractelement <4 x i32> %vui, i32 2889  ret i32 %vecext890}891 892; Function Attrs: norecurse nounwind readnone893define zeroext i32 @getui3(<4 x i32> %vui) {894; CHECK-LABEL: getui3:895; CHECK:       # %bb.0: # %entry896; CHECK-NEXT:    addi 3, 1, -16897; CHECK-NEXT:    stxvw4x 34, 0, 3898; CHECK-NEXT:    lwz 3, -4(1)899; CHECK-NEXT:    blr900entry:901  %vecext = extractelement <4 x i32> %vui, i32 3902  ret i32 %vecext903}904 905; Function Attrs: norecurse nounwind readnone906define signext i32 @getvelsi(<4 x i32> %vsi, i32 signext %i) {907; CHECK-LABEL: getvelsi:908; CHECK:       # %bb.0: # %entry909; CHECK-NEXT:    addi 4, 1, -16910; CHECK-NEXT:    rlwinm 3, 3, 2, 28, 29911; CHECK-NEXT:    stxvw4x 34, 0, 4912; CHECK-NEXT:    lwzx 3, 4, 3913; CHECK-NEXT:    blr914entry:915  %vecext = extractelement <4 x i32> %vsi, i32 %i916  ret i32 %vecext917}918 919; Function Attrs: norecurse nounwind readnone920define zeroext i32 @getvelui(<4 x i32> %vui, i32 signext %i) {921; CHECK-LABEL: getvelui:922; CHECK:       # %bb.0: # %entry923; CHECK-NEXT:    addi 4, 1, -16924; CHECK-NEXT:    rlwinm 3, 3, 2, 28, 29925; CHECK-NEXT:    stxvw4x 34, 0, 4926; CHECK-NEXT:    lwzx 3, 4, 3927; CHECK-NEXT:    blr928entry:929  %vecext = extractelement <4 x i32> %vui, i32 %i930  ret i32 %vecext931}932 933; Function Attrs: norecurse nounwind readnone934define i64 @getsl0(<2 x i64> %vsl) {935; CHECK-LABEL: getsl0:936; CHECK:       # %bb.0: # %entry937; CHECK-NEXT:    addi 3, 1, -16938; CHECK-NEXT:    stxvw4x 34, 0, 3939; CHECK-NEXT:    lwz 3, -16(1)940; CHECK-NEXT:    lwz 4, -12(1)941; CHECK-NEXT:    blr942entry:943  %vecext = extractelement <2 x i64> %vsl, i32 0944  ret i64 %vecext945}946 947; Function Attrs: norecurse nounwind readnone948define i64 @getsl1(<2 x i64> %vsl) {949; CHECK-LABEL: getsl1:950; CHECK:       # %bb.0: # %entry951; CHECK-NEXT:    addi 3, 1, -16952; CHECK-NEXT:    stxvw4x 34, 0, 3953; CHECK-NEXT:    lwz 3, -8(1)954; CHECK-NEXT:    lwz 4, -4(1)955; CHECK-NEXT:    blr956entry:957  %vecext = extractelement <2 x i64> %vsl, i32 1958  ret i64 %vecext959}960 961; Function Attrs: norecurse nounwind readnone962define i64 @getul0(<2 x i64> %vul) {963; CHECK-LABEL: getul0:964; CHECK:       # %bb.0: # %entry965; CHECK-NEXT:    addi 3, 1, -16966; CHECK-NEXT:    stxvw4x 34, 0, 3967; CHECK-NEXT:    lwz 3, -16(1)968; CHECK-NEXT:    lwz 4, -12(1)969; CHECK-NEXT:    blr970entry:971  %vecext = extractelement <2 x i64> %vul, i32 0972  ret i64 %vecext973}974 975; Function Attrs: norecurse nounwind readnone976define i64 @getul1(<2 x i64> %vul) {977; CHECK-LABEL: getul1:978; CHECK:       # %bb.0: # %entry979; CHECK-NEXT:    addi 3, 1, -16980; CHECK-NEXT:    stxvw4x 34, 0, 3981; CHECK-NEXT:    lwz 3, -8(1)982; CHECK-NEXT:    lwz 4, -4(1)983; CHECK-NEXT:    blr984entry:985  %vecext = extractelement <2 x i64> %vul, i32 1986  ret i64 %vecext987}988 989; Function Attrs: norecurse nounwind readnone990define i64 @getvelsl(<2 x i64> %vsl, i32 signext %i) {991; CHECK-LABEL: getvelsl:992; CHECK:       # %bb.0: # %entry993; CHECK-NEXT:    add 5, 3, 3994; CHECK-NEXT:    addi 4, 1, -16995; CHECK-NEXT:    rlwinm 3, 5, 2, 28, 29996; CHECK-NEXT:    addi 5, 5, 1997; CHECK-NEXT:    stxvw4x 34, 0, 4998; CHECK-NEXT:    rlwinm 5, 5, 2, 28, 29999; CHECK-NEXT:    lwzx 3, 4, 31000; CHECK-NEXT:    lwzx 4, 4, 51001; CHECK-NEXT:    blr1002entry:1003  %vecext = extractelement <2 x i64> %vsl, i32 %i1004  ret i64 %vecext1005}1006 1007; Function Attrs: norecurse nounwind readnone1008define i64 @getvelul(<2 x i64> %vul, i32 signext %i) {1009; CHECK-LABEL: getvelul:1010; CHECK:       # %bb.0: # %entry1011; CHECK-NEXT:    add 5, 3, 31012; CHECK-NEXT:    addi 4, 1, -161013; CHECK-NEXT:    rlwinm 3, 5, 2, 28, 291014; CHECK-NEXT:    addi 5, 5, 11015; CHECK-NEXT:    stxvw4x 34, 0, 41016; CHECK-NEXT:    rlwinm 5, 5, 2, 28, 291017; CHECK-NEXT:    lwzx 3, 4, 31018; CHECK-NEXT:    lwzx 4, 4, 51019; CHECK-NEXT:    blr1020entry:1021  %vecext = extractelement <2 x i64> %vul, i32 %i1022  ret i64 %vecext1023}1024 1025; Function Attrs: norecurse nounwind readnone1026define float @getf0(<4 x float> %vf) {1027; CHECK-LABEL: getf0:1028; CHECK:       # %bb.0: # %entry1029; CHECK-NEXT:    xscvspdpn 1, 341030; CHECK-NEXT:    blr1031entry:1032  %vecext = extractelement <4 x float> %vf, i32 01033  ret float %vecext1034}1035 1036; Function Attrs: norecurse nounwind readnone1037define float @getf1(<4 x float> %vf) {1038; CHECK-LABEL: getf1:1039; CHECK:       # %bb.0: # %entry1040; CHECK-NEXT:    xxsldwi 0, 34, 34, 11041; CHECK-NEXT:    xscvspdpn 1, 01042; CHECK-NEXT:    blr1043entry:1044  %vecext = extractelement <4 x float> %vf, i32 11045  ret float %vecext1046}1047 1048; Function Attrs: norecurse nounwind readnone1049define float @getf2(<4 x float> %vf) {1050; CHECK-LABEL: getf2:1051; CHECK:       # %bb.0: # %entry1052; CHECK-NEXT:    xxswapd 0, 341053; CHECK-NEXT:    xscvspdpn 1, 01054; CHECK-NEXT:    blr1055entry:1056  %vecext = extractelement <4 x float> %vf, i32 21057  ret float %vecext1058}1059 1060; Function Attrs: norecurse nounwind readnone1061define float @getf3(<4 x float> %vf) {1062; CHECK-LABEL: getf3:1063; CHECK:       # %bb.0: # %entry1064; CHECK-NEXT:    xxsldwi 0, 34, 34, 31065; CHECK-NEXT:    xscvspdpn 1, 01066; CHECK-NEXT:    blr1067entry:1068  %vecext = extractelement <4 x float> %vf, i32 31069  ret float %vecext1070}1071 1072; Function Attrs: norecurse nounwind readnone1073define float @getvelf(<4 x float> %vf, i32 signext %i) {1074; CHECK-LABEL: getvelf:1075; CHECK:       # %bb.0: # %entry1076; CHECK-NEXT:    slwi 3, 3, 21077; CHECK-NEXT:    lvsl 3, 0, 31078; CHECK-NEXT:    vperm 2, 2, 2, 31079; CHECK-NEXT:    xscvspdpn 1, 341080; CHECK-NEXT:    blr1081entry:1082   %vecext = extractelement <4 x float> %vf, i32 %i1083   ret float %vecext1084}1085 1086; Function Attrs: norecurse nounwind readnone1087define double @getd0(<2 x double> %vd) {1088; CHECK-LABEL: getd0:1089; CHECK:       # %bb.0: # %entry1090; CHECK-NEXT:    xxlor 1, 34, 341091; CHECK-NEXT:    blr1092entry:1093  %vecext = extractelement <2 x double> %vd, i32 01094  ret double %vecext1095}1096 1097; Function Attrs: norecurse nounwind readnone1098define double @getd1(<2 x double> %vd) {1099; CHECK-LABEL: getd1:1100; CHECK:       # %bb.0: # %entry1101; CHECK-NEXT:    xxswapd 1, 341102; CHECK-NEXT:    blr1103entry:1104  %vecext = extractelement <2 x double> %vd, i32 11105  ret double %vecext1106}1107 1108; Function Attrs: norecurse nounwind readnone1109define double @getveld(<2 x double> %vd, i32 signext %i) {1110; CHECK-LABEL: getveld:1111; CHECK:       # %bb.0: # %entry1112; CHECK-NEXT:    andi. 3, 3, 11113; CHECK-NEXT:    slwi 3, 3, 31114; CHECK-NEXT:    lvsl 3, 0, 31115; CHECK-NEXT:    vperm 2, 2, 2, 31116; CHECK-NEXT:    xxlor 1, 34, 341117; CHECK-NEXT:    blr1118entry:1119  %vecext = extractelement <2 x double> %vd, i32 %i1120  ret double %vecext1121}1122