brintos

brintos / llvm-project-archived public Read only

0
0
Text · 27.8 KiB · a9bf133 Raw
1190 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=hexagon -mattr=+hvxv60,+hvx-length128b,-packets < %s | FileCheck --check-prefix=V60 %s3; RUN: llc -mtriple=hexagon -mattr=+hvxv62,+hvx-length128b,-packets < %s | FileCheck --check-prefix=V62 %s4; RUN: llc -mtriple=hexagon -mattr=+hvxv66,+hvx-length128b,-packets < %s | FileCheck --check-prefix=V66 %s5 6define <128 x i8> @f0(<128 x i8> %a0, <128 x i8> %a1, i8 %a2) #0 {7; V60-LABEL: f0:8; V60:       // %bb.0:9; V60-NEXT:    {10; V60-NEXT:     r0 = vsplatb(r0)11; V60-NEXT:    }12; V60-NEXT:    {13; V60-NEXT:     r1 = ##11790106314; V60-NEXT:    }15; V60-NEXT:    {16; V60-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)17; V60-NEXT:    }18; V60-NEXT:    {19; V60-NEXT:     v2 = vsplat(r0)20; V60-NEXT:    }21; V60-NEXT:    {22; V60-NEXT:     v3 = vsplat(r1)23; V60-NEXT:    }24; V60-NEXT:    {25; V60-NEXT:     v2 = vand(v2,v3)26; V60-NEXT:    }27; V60-NEXT:    {28; V60-NEXT:     v3:2.uh = vzxt(v2.ub)29; V60-NEXT:    }30; V60-NEXT:    {31; V60-NEXT:     v0.h = vasl(v0.h,v2.h)32; V60-NEXT:    }33; V60-NEXT:    {34; V60-NEXT:     v1.h = vasl(v1.h,v3.h)35; V60-NEXT:    }36; V60-NEXT:    {37; V60-NEXT:     v0.b = vshuffo(v1.b,v0.b)38; V60-NEXT:    }39; V60-NEXT:    {40; V60-NEXT:     jumpr r3141; V60-NEXT:    }42;43; V62-LABEL: f0:44; V62:       // %bb.0:45; V62-NEXT:    {46; V62-NEXT:     r2 = #747; V62-NEXT:    }48; V62-NEXT:    {49; V62-NEXT:     v2.b = vsplat(r0)50; V62-NEXT:    }51; V62-NEXT:    {52; V62-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)53; V62-NEXT:    }54; V62-NEXT:    {55; V62-NEXT:     v3.b = vsplat(r2)56; V62-NEXT:    }57; V62-NEXT:    {58; V62-NEXT:     v2 = vand(v2,v3)59; V62-NEXT:    }60; V62-NEXT:    {61; V62-NEXT:     v3:2.uh = vzxt(v2.ub)62; V62-NEXT:    }63; V62-NEXT:    {64; V62-NEXT:     v0.h = vasl(v0.h,v2.h)65; V62-NEXT:    }66; V62-NEXT:    {67; V62-NEXT:     v1.h = vasl(v1.h,v3.h)68; V62-NEXT:    }69; V62-NEXT:    {70; V62-NEXT:     v0.b = vshuffo(v1.b,v0.b)71; V62-NEXT:    }72; V62-NEXT:    {73; V62-NEXT:     jumpr r3174; V62-NEXT:    }75;76; V66-LABEL: f0:77; V66:       // %bb.0:78; V66-NEXT:    {79; V66-NEXT:     r2 = #780; V66-NEXT:    }81; V66-NEXT:    {82; V66-NEXT:     v2.b = vsplat(r0)83; V66-NEXT:    }84; V66-NEXT:    {85; V66-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)86; V66-NEXT:    }87; V66-NEXT:    {88; V66-NEXT:     v3.b = vsplat(r2)89; V66-NEXT:    }90; V66-NEXT:    {91; V66-NEXT:     v2 = vand(v2,v3)92; V66-NEXT:    }93; V66-NEXT:    {94; V66-NEXT:     v3:2.uh = vzxt(v2.ub)95; V66-NEXT:    }96; V66-NEXT:    {97; V66-NEXT:     v0.h = vasl(v0.h,v2.h)98; V66-NEXT:    }99; V66-NEXT:    {100; V66-NEXT:     v1.h = vasl(v1.h,v3.h)101; V66-NEXT:    }102; V66-NEXT:    {103; V66-NEXT:     v0.b = vshuffo(v1.b,v0.b)104; V66-NEXT:    }105; V66-NEXT:    {106; V66-NEXT:     jumpr r31107; V66-NEXT:    }108  %v0 = insertelement <128 x i8> undef, i8 %a2, i32 0109  %v1 = shufflevector <128 x i8> %v0, <128 x i8> undef, <128 x i32> zeroinitializer110  %v2 = call <128 x i8> @llvm.fshl.v128i8(<128 x i8> %a0, <128 x i8> %a1, <128 x i8> %v1)111  ret <128 x i8> %v2112}113 114define <64 x i16> @f1(<64 x i16> %a0, <64 x i16> %a1, i16 %a2) #0 {115; V60-LABEL: f1:116; V60:       // %bb.0:117; V60-NEXT:    {118; V60-NEXT:     r1 = and(r0,#15)119; V60-NEXT:    }120; V60-NEXT:    {121; V60-NEXT:     p0 = bitsclr(r0,#15)122; V60-NEXT:    }123; V60-NEXT:    {124; V60-NEXT:     v2.h = vasl(v0.h,r1)125; V60-NEXT:    }126; V60-NEXT:    {127; V60-NEXT:     r1 = sub(#16,r1)128; V60-NEXT:    }129; V60-NEXT:    {130; V60-NEXT:     v1.uh = vlsr(v1.uh,r1)131; V60-NEXT:    }132; V60-NEXT:    {133; V60-NEXT:     v1 = vor(v2,v1)134; V60-NEXT:    }135; V60-NEXT:    {136; V60-NEXT:     if (!p0) v0 = v1137; V60-NEXT:    }138; V60-NEXT:    {139; V60-NEXT:     jumpr r31140; V60-NEXT:    }141;142; V62-LABEL: f1:143; V62:       // %bb.0:144; V62-NEXT:    {145; V62-NEXT:     r1 = and(r0,#15)146; V62-NEXT:    }147; V62-NEXT:    {148; V62-NEXT:     p0 = bitsclr(r0,#15)149; V62-NEXT:    }150; V62-NEXT:    {151; V62-NEXT:     v2.h = vasl(v0.h,r1)152; V62-NEXT:    }153; V62-NEXT:    {154; V62-NEXT:     r1 = sub(#16,r1)155; V62-NEXT:    }156; V62-NEXT:    {157; V62-NEXT:     v1.uh = vlsr(v1.uh,r1)158; V62-NEXT:    }159; V62-NEXT:    {160; V62-NEXT:     v1 = vor(v2,v1)161; V62-NEXT:    }162; V62-NEXT:    {163; V62-NEXT:     if (!p0) v0 = v1164; V62-NEXT:    }165; V62-NEXT:    {166; V62-NEXT:     jumpr r31167; V62-NEXT:    }168;169; V66-LABEL: f1:170; V66:       // %bb.0:171; V66-NEXT:    {172; V66-NEXT:     r1 = and(r0,#15)173; V66-NEXT:    }174; V66-NEXT:    {175; V66-NEXT:     p0 = bitsclr(r0,#15)176; V66-NEXT:    }177; V66-NEXT:    {178; V66-NEXT:     v2.h = vasl(v0.h,r1)179; V66-NEXT:    }180; V66-NEXT:    {181; V66-NEXT:     r1 = sub(#16,r1)182; V66-NEXT:    }183; V66-NEXT:    {184; V66-NEXT:     v1.uh = vlsr(v1.uh,r1)185; V66-NEXT:    }186; V66-NEXT:    {187; V66-NEXT:     v1 = vor(v2,v1)188; V66-NEXT:    }189; V66-NEXT:    {190; V66-NEXT:     if (!p0) v0 = v1191; V66-NEXT:    }192; V66-NEXT:    {193; V66-NEXT:     jumpr r31194; V66-NEXT:    }195  %v0 = insertelement <64 x i16> undef, i16 %a2, i32 0196  %v1 = shufflevector <64 x i16> %v0, <64 x i16> undef, <64 x i32> zeroinitializer197  %v2 = call <64 x i16> @llvm.fshl.v64i16(<64 x i16> %a0, <64 x i16> %a1, <64 x i16> %v1)198  ret <64 x i16> %v2199}200 201define <32 x i32> @f2(<32 x i32> %a0, <32 x i32> %a1, i32 %a2) #0 {202; V60-LABEL: f2:203; V60:       // %bb.0:204; V60-NEXT:    {205; V60-NEXT:     r1 = and(r0,#31)206; V60-NEXT:    }207; V60-NEXT:    {208; V60-NEXT:     p0 = bitsclr(r0,#31)209; V60-NEXT:    }210; V60-NEXT:    {211; V60-NEXT:     v2.w = vasl(v0.w,r1)212; V60-NEXT:    }213; V60-NEXT:    {214; V60-NEXT:     r1 = sub(#32,r1)215; V60-NEXT:    }216; V60-NEXT:    {217; V60-NEXT:     v1.uw = vlsr(v1.uw,r1)218; V60-NEXT:    }219; V60-NEXT:    {220; V60-NEXT:     v1 = vor(v2,v1)221; V60-NEXT:    }222; V60-NEXT:    {223; V60-NEXT:     if (!p0) v0 = v1224; V60-NEXT:    }225; V60-NEXT:    {226; V60-NEXT:     jumpr r31227; V60-NEXT:    }228;229; V62-LABEL: f2:230; V62:       // %bb.0:231; V62-NEXT:    {232; V62-NEXT:     r1 = and(r0,#31)233; V62-NEXT:    }234; V62-NEXT:    {235; V62-NEXT:     p0 = bitsclr(r0,#31)236; V62-NEXT:    }237; V62-NEXT:    {238; V62-NEXT:     v2.w = vasl(v0.w,r1)239; V62-NEXT:    }240; V62-NEXT:    {241; V62-NEXT:     r1 = sub(#32,r1)242; V62-NEXT:    }243; V62-NEXT:    {244; V62-NEXT:     v1.uw = vlsr(v1.uw,r1)245; V62-NEXT:    }246; V62-NEXT:    {247; V62-NEXT:     v1 = vor(v2,v1)248; V62-NEXT:    }249; V62-NEXT:    {250; V62-NEXT:     if (!p0) v0 = v1251; V62-NEXT:    }252; V62-NEXT:    {253; V62-NEXT:     jumpr r31254; V62-NEXT:    }255;256; V66-LABEL: f2:257; V66:       // %bb.0:258; V66-NEXT:    {259; V66-NEXT:     r0 = and(r0,#31)260; V66-NEXT:    }261; V66-NEXT:    {262; V66-NEXT:     r1 = #32263; V66-NEXT:    }264; V66-NEXT:    {265; V66-NEXT:     v4 = vxor(v4,v4)266; V66-NEXT:    }267; V66-NEXT:    {268; V66-NEXT:     v2 = vsplat(r0)269; V66-NEXT:    }270; V66-NEXT:    {271; V66-NEXT:     v3 = vsplat(r1)272; V66-NEXT:    }273; V66-NEXT:    {274; V66-NEXT:     v3.w = vsub(v3.w,v2.w)275; V66-NEXT:    }276; V66-NEXT:    {277; V66-NEXT:     v2.w = vsub(v4.w,v2.w)278; V66-NEXT:    }279; V66-NEXT:    {280; V66-NEXT:     v4.w = vlsr(v1.w,v3.w)281; V66-NEXT:    }282; V66-NEXT:    {283; V66-NEXT:     v5:4.w = vasrinto(v0.w,v2.w)284; V66-NEXT:    }285; V66-NEXT:    {286; V66-NEXT:     v0 = v5287; V66-NEXT:    }288; V66-NEXT:    {289; V66-NEXT:     jumpr r31290; V66-NEXT:    }291  %v0 = insertelement <32 x i32> undef, i32 %a2, i32 0292  %v1 = shufflevector <32 x i32> %v0, <32 x i32> undef, <32 x i32> zeroinitializer293  %v2 = call <32 x i32> @llvm.fshl.v32i32(<32 x i32> %a0, <32 x i32> %a1, <32 x i32> %v1)294  ret <32 x i32> %v2295}296 297define <128 x i8> @f3(<128 x i8> %a0, <128 x i8> %a1, i8 %a2) #0 {298; V60-LABEL: f3:299; V60:       // %bb.0:300; V60-NEXT:    {301; V60-NEXT:     r0 = vsplatb(r0)302; V60-NEXT:    }303; V60-NEXT:    {304; V60-NEXT:     r1 = ##117901063305; V60-NEXT:    }306; V60-NEXT:    {307; V60-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)308; V60-NEXT:    }309; V60-NEXT:    {310; V60-NEXT:     v2 = vsplat(r0)311; V60-NEXT:    }312; V60-NEXT:    {313; V60-NEXT:     v3 = vsplat(r1)314; V60-NEXT:    }315; V60-NEXT:    {316; V60-NEXT:     v2 = vand(v2,v3)317; V60-NEXT:    }318; V60-NEXT:    {319; V60-NEXT:     v3:2.uh = vzxt(v2.ub)320; V60-NEXT:    }321; V60-NEXT:    {322; V60-NEXT:     v0.h = vlsr(v0.h,v2.h)323; V60-NEXT:    }324; V60-NEXT:    {325; V60-NEXT:     v1.h = vlsr(v1.h,v3.h)326; V60-NEXT:    }327; V60-NEXT:    {328; V60-NEXT:     v0.b = vshuffe(v1.b,v0.b)329; V60-NEXT:    }330; V60-NEXT:    {331; V60-NEXT:     jumpr r31332; V60-NEXT:    }333;334; V62-LABEL: f3:335; V62:       // %bb.0:336; V62-NEXT:    {337; V62-NEXT:     r2 = #7338; V62-NEXT:    }339; V62-NEXT:    {340; V62-NEXT:     v2.b = vsplat(r0)341; V62-NEXT:    }342; V62-NEXT:    {343; V62-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)344; V62-NEXT:    }345; V62-NEXT:    {346; V62-NEXT:     v3.b = vsplat(r2)347; V62-NEXT:    }348; V62-NEXT:    {349; V62-NEXT:     v2 = vand(v2,v3)350; V62-NEXT:    }351; V62-NEXT:    {352; V62-NEXT:     v3:2.uh = vzxt(v2.ub)353; V62-NEXT:    }354; V62-NEXT:    {355; V62-NEXT:     v0.h = vlsr(v0.h,v2.h)356; V62-NEXT:    }357; V62-NEXT:    {358; V62-NEXT:     v1.h = vlsr(v1.h,v3.h)359; V62-NEXT:    }360; V62-NEXT:    {361; V62-NEXT:     v0.b = vshuffe(v1.b,v0.b)362; V62-NEXT:    }363; V62-NEXT:    {364; V62-NEXT:     jumpr r31365; V62-NEXT:    }366;367; V66-LABEL: f3:368; V66:       // %bb.0:369; V66-NEXT:    {370; V66-NEXT:     r2 = #7371; V66-NEXT:    }372; V66-NEXT:    {373; V66-NEXT:     v2.b = vsplat(r0)374; V66-NEXT:    }375; V66-NEXT:    {376; V66-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)377; V66-NEXT:    }378; V66-NEXT:    {379; V66-NEXT:     v3.b = vsplat(r2)380; V66-NEXT:    }381; V66-NEXT:    {382; V66-NEXT:     v2 = vand(v2,v3)383; V66-NEXT:    }384; V66-NEXT:    {385; V66-NEXT:     v3:2.uh = vzxt(v2.ub)386; V66-NEXT:    }387; V66-NEXT:    {388; V66-NEXT:     v0.h = vlsr(v0.h,v2.h)389; V66-NEXT:    }390; V66-NEXT:    {391; V66-NEXT:     v1.h = vlsr(v1.h,v3.h)392; V66-NEXT:    }393; V66-NEXT:    {394; V66-NEXT:     v0.b = vshuffe(v1.b,v0.b)395; V66-NEXT:    }396; V66-NEXT:    {397; V66-NEXT:     jumpr r31398; V66-NEXT:    }399  %v0 = insertelement <128 x i8> undef, i8 %a2, i32 0400  %v1 = shufflevector <128 x i8> %v0, <128 x i8> undef, <128 x i32> zeroinitializer401  %v2 = call <128 x i8> @llvm.fshr.v128i8(<128 x i8> %a0, <128 x i8> %a1, <128 x i8> %v1)402  ret <128 x i8> %v2403}404 405define <64 x i16> @f4(<64 x i16> %a0, <64 x i16> %a1, i16 %a2) #0 {406; V60-LABEL: f4:407; V60:       // %bb.0:408; V60-NEXT:    {409; V60-NEXT:     r1 = and(r0,#15)410; V60-NEXT:    }411; V60-NEXT:    {412; V60-NEXT:     p0 = bitsclr(r0,#15)413; V60-NEXT:    }414; V60-NEXT:    {415; V60-NEXT:     v2.uh = vlsr(v1.uh,r1)416; V60-NEXT:    }417; V60-NEXT:    {418; V60-NEXT:     r1 = sub(#16,r1)419; V60-NEXT:    }420; V60-NEXT:    {421; V60-NEXT:     v0.h = vasl(v0.h,r1)422; V60-NEXT:    }423; V60-NEXT:    {424; V60-NEXT:     v0 = vor(v0,v2)425; V60-NEXT:    }426; V60-NEXT:    {427; V60-NEXT:     if (p0) v0 = v1428; V60-NEXT:    }429; V60-NEXT:    {430; V60-NEXT:     jumpr r31431; V60-NEXT:    }432;433; V62-LABEL: f4:434; V62:       // %bb.0:435; V62-NEXT:    {436; V62-NEXT:     r1 = and(r0,#15)437; V62-NEXT:    }438; V62-NEXT:    {439; V62-NEXT:     p0 = bitsclr(r0,#15)440; V62-NEXT:    }441; V62-NEXT:    {442; V62-NEXT:     v2.uh = vlsr(v1.uh,r1)443; V62-NEXT:    }444; V62-NEXT:    {445; V62-NEXT:     r1 = sub(#16,r1)446; V62-NEXT:    }447; V62-NEXT:    {448; V62-NEXT:     v0.h = vasl(v0.h,r1)449; V62-NEXT:    }450; V62-NEXT:    {451; V62-NEXT:     v0 = vor(v0,v2)452; V62-NEXT:    }453; V62-NEXT:    {454; V62-NEXT:     if (p0) v0 = v1455; V62-NEXT:    }456; V62-NEXT:    {457; V62-NEXT:     jumpr r31458; V62-NEXT:    }459;460; V66-LABEL: f4:461; V66:       // %bb.0:462; V66-NEXT:    {463; V66-NEXT:     r1 = and(r0,#15)464; V66-NEXT:    }465; V66-NEXT:    {466; V66-NEXT:     p0 = bitsclr(r0,#15)467; V66-NEXT:    }468; V66-NEXT:    {469; V66-NEXT:     v2.uh = vlsr(v1.uh,r1)470; V66-NEXT:    }471; V66-NEXT:    {472; V66-NEXT:     r1 = sub(#16,r1)473; V66-NEXT:    }474; V66-NEXT:    {475; V66-NEXT:     v0.h = vasl(v0.h,r1)476; V66-NEXT:    }477; V66-NEXT:    {478; V66-NEXT:     v0 = vor(v0,v2)479; V66-NEXT:    }480; V66-NEXT:    {481; V66-NEXT:     if (p0) v0 = v1482; V66-NEXT:    }483; V66-NEXT:    {484; V66-NEXT:     jumpr r31485; V66-NEXT:    }486  %v0 = insertelement <64 x i16> undef, i16 %a2, i32 0487  %v1 = shufflevector <64 x i16> %v0, <64 x i16> undef, <64 x i32> zeroinitializer488  %v2 = call <64 x i16> @llvm.fshr.v64i16(<64 x i16> %a0, <64 x i16> %a1, <64 x i16> %v1)489  ret <64 x i16> %v2490}491 492define <32 x i32> @f5(<32 x i32> %a0, <32 x i32> %a1, i32 %a2) #0 {493; V60-LABEL: f5:494; V60:       // %bb.0:495; V60-NEXT:    {496; V60-NEXT:     r1 = and(r0,#31)497; V60-NEXT:    }498; V60-NEXT:    {499; V60-NEXT:     p0 = bitsclr(r0,#31)500; V60-NEXT:    }501; V60-NEXT:    {502; V60-NEXT:     v2.uw = vlsr(v1.uw,r1)503; V60-NEXT:    }504; V60-NEXT:    {505; V60-NEXT:     r1 = sub(#32,r1)506; V60-NEXT:    }507; V60-NEXT:    {508; V60-NEXT:     v0.w = vasl(v0.w,r1)509; V60-NEXT:    }510; V60-NEXT:    {511; V60-NEXT:     v0 = vor(v0,v2)512; V60-NEXT:    }513; V60-NEXT:    {514; V60-NEXT:     if (p0) v0 = v1515; V60-NEXT:    }516; V60-NEXT:    {517; V60-NEXT:     jumpr r31518; V60-NEXT:    }519;520; V62-LABEL: f5:521; V62:       // %bb.0:522; V62-NEXT:    {523; V62-NEXT:     r1 = and(r0,#31)524; V62-NEXT:    }525; V62-NEXT:    {526; V62-NEXT:     p0 = bitsclr(r0,#31)527; V62-NEXT:    }528; V62-NEXT:    {529; V62-NEXT:     v2.uw = vlsr(v1.uw,r1)530; V62-NEXT:    }531; V62-NEXT:    {532; V62-NEXT:     r1 = sub(#32,r1)533; V62-NEXT:    }534; V62-NEXT:    {535; V62-NEXT:     v0.w = vasl(v0.w,r1)536; V62-NEXT:    }537; V62-NEXT:    {538; V62-NEXT:     v0 = vor(v0,v2)539; V62-NEXT:    }540; V62-NEXT:    {541; V62-NEXT:     if (p0) v0 = v1542; V62-NEXT:    }543; V62-NEXT:    {544; V62-NEXT:     jumpr r31545; V62-NEXT:    }546;547; V66-LABEL: f5:548; V66:       // %bb.0:549; V66-NEXT:    {550; V66-NEXT:     r0 = and(r0,#31)551; V66-NEXT:    }552; V66-NEXT:    {553; V66-NEXT:     v3 = vsplat(r0)554; V66-NEXT:    }555; V66-NEXT:    {556; V66-NEXT:     v2.w = vlsr(v1.w,v3.w)557; V66-NEXT:    }558; V66-NEXT:    {559; V66-NEXT:     v3:2.w = vasrinto(v0.w,v3.w)560; V66-NEXT:    }561; V66-NEXT:    {562; V66-NEXT:     v0 = v2563; V66-NEXT:    }564; V66-NEXT:    {565; V66-NEXT:     jumpr r31566; V66-NEXT:    }567  %v0 = insertelement <32 x i32> undef, i32 %a2, i32 0568  %v1 = shufflevector <32 x i32> %v0, <32 x i32> undef, <32 x i32> zeroinitializer569  %v2 = call <32 x i32> @llvm.fshr.v32i32(<32 x i32> %a0, <32 x i32> %a1, <32 x i32> %v1)570  ret <32 x i32> %v2571}572 573define <128 x i8> @f6(<128 x i8> %a0, <128 x i8> %a1, <128 x i8> %a2) #0 {574; V60-LABEL: f6:575; V60:       // %bb.0:576; V60-NEXT:    {577; V60-NEXT:     r0 = ##117901063578; V60-NEXT:    }579; V60-NEXT:    {580; V60-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)581; V60-NEXT:    }582; V60-NEXT:    {583; V60-NEXT:     v3 = vsplat(r0)584; V60-NEXT:    }585; V60-NEXT:    {586; V60-NEXT:     v2 = vand(v2,v3)587; V60-NEXT:    }588; V60-NEXT:    {589; V60-NEXT:     v3:2.uh = vzxt(v2.ub)590; V60-NEXT:    }591; V60-NEXT:    {592; V60-NEXT:     v0.h = vasl(v0.h,v2.h)593; V60-NEXT:    }594; V60-NEXT:    {595; V60-NEXT:     v1.h = vasl(v1.h,v3.h)596; V60-NEXT:    }597; V60-NEXT:    {598; V60-NEXT:     v0.b = vshuffo(v1.b,v0.b)599; V60-NEXT:    }600; V60-NEXT:    {601; V60-NEXT:     jumpr r31602; V60-NEXT:    }603;604; V62-LABEL: f6:605; V62:       // %bb.0:606; V62-NEXT:    {607; V62-NEXT:     r0 = #7608; V62-NEXT:    }609; V62-NEXT:    {610; V62-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)611; V62-NEXT:    }612; V62-NEXT:    {613; V62-NEXT:     v3.b = vsplat(r0)614; V62-NEXT:    }615; V62-NEXT:    {616; V62-NEXT:     v2 = vand(v2,v3)617; V62-NEXT:    }618; V62-NEXT:    {619; V62-NEXT:     v3:2.uh = vzxt(v2.ub)620; V62-NEXT:    }621; V62-NEXT:    {622; V62-NEXT:     v0.h = vasl(v0.h,v2.h)623; V62-NEXT:    }624; V62-NEXT:    {625; V62-NEXT:     v1.h = vasl(v1.h,v3.h)626; V62-NEXT:    }627; V62-NEXT:    {628; V62-NEXT:     v0.b = vshuffo(v1.b,v0.b)629; V62-NEXT:    }630; V62-NEXT:    {631; V62-NEXT:     jumpr r31632; V62-NEXT:    }633;634; V66-LABEL: f6:635; V66:       // %bb.0:636; V66-NEXT:    {637; V66-NEXT:     r0 = #7638; V66-NEXT:    }639; V66-NEXT:    {640; V66-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)641; V66-NEXT:    }642; V66-NEXT:    {643; V66-NEXT:     v3.b = vsplat(r0)644; V66-NEXT:    }645; V66-NEXT:    {646; V66-NEXT:     v2 = vand(v2,v3)647; V66-NEXT:    }648; V66-NEXT:    {649; V66-NEXT:     v3:2.uh = vzxt(v2.ub)650; V66-NEXT:    }651; V66-NEXT:    {652; V66-NEXT:     v0.h = vasl(v0.h,v2.h)653; V66-NEXT:    }654; V66-NEXT:    {655; V66-NEXT:     v1.h = vasl(v1.h,v3.h)656; V66-NEXT:    }657; V66-NEXT:    {658; V66-NEXT:     v0.b = vshuffo(v1.b,v0.b)659; V66-NEXT:    }660; V66-NEXT:    {661; V66-NEXT:     jumpr r31662; V66-NEXT:    }663  %v0 = call <128 x i8> @llvm.fshl.v128i8(<128 x i8> %a0, <128 x i8> %a1, <128 x i8> %a2)664  ret <128 x i8> %v0665}666 667define <64 x i16> @f7(<64 x i16> %a0, <64 x i16> %a1, <64 x i16> %a2) #0 {668; V60-LABEL: f7:669; V60:       // %bb.0:670; V60-NEXT:    {671; V60-NEXT:     r0 = ##983055672; V60-NEXT:    }673; V60-NEXT:    {674; V60-NEXT:     r1 = ##1048592675; V60-NEXT:    }676; V60-NEXT:    {677; V60-NEXT:     v3 = vxor(v3,v3)678; V60-NEXT:    }679; V60-NEXT:    {680; V60-NEXT:     v4 = vsplat(r0)681; V60-NEXT:    }682; V60-NEXT:    {683; V60-NEXT:     v5 = vsplat(r1)684; V60-NEXT:    }685; V60-NEXT:    {686; V60-NEXT:     v2 = vand(v2,v4)687; V60-NEXT:    }688; V60-NEXT:    {689; V60-NEXT:     v4.h = vsub(v5.h,v2.h)690; V60-NEXT:    }691; V60-NEXT:    {692; V60-NEXT:     q0 = vcmp.eq(v2.h,v3.h)693; V60-NEXT:    }694; V60-NEXT:    {695; V60-NEXT:     v31.h = vasl(v0.h,v2.h)696; V60-NEXT:    }697; V60-NEXT:    {698; V60-NEXT:     v1.h = vlsr(v1.h,v4.h)699; V60-NEXT:    }700; V60-NEXT:    {701; V60-NEXT:     v1 = vor(v31,v1)702; V60-NEXT:    }703; V60-NEXT:    {704; V60-NEXT:     v0 = vmux(q0,v0,v1)705; V60-NEXT:    }706; V60-NEXT:    {707; V60-NEXT:     jumpr r31708; V60-NEXT:    }709;710; V62-LABEL: f7:711; V62:       // %bb.0:712; V62-NEXT:    {713; V62-NEXT:     r1:0 = combine(#16,#15)714; V62-NEXT:    }715; V62-NEXT:    {716; V62-NEXT:     v3.h = vsplat(r0)717; V62-NEXT:    }718; V62-NEXT:    {719; V62-NEXT:     v4.h = vsplat(r1)720; V62-NEXT:    }721; V62-NEXT:    {722; V62-NEXT:     v2 = vand(v2,v3)723; V62-NEXT:    }724; V62-NEXT:    {725; V62-NEXT:     v3.h = vsub(v4.h,v2.h)726; V62-NEXT:    }727; V62-NEXT:    {728; V62-NEXT:     v0.h = vasl(v0.h,v2.h)729; V62-NEXT:    }730; V62-NEXT:    {731; V62-NEXT:     v1.h = vlsr(v1.h,v3.h)732; V62-NEXT:    }733; V62-NEXT:    {734; V62-NEXT:     v0 = vor(v0,v1)735; V62-NEXT:    }736; V62-NEXT:    {737; V62-NEXT:     jumpr r31738; V62-NEXT:    }739;740; V66-LABEL: f7:741; V66:       // %bb.0:742; V66-NEXT:    {743; V66-NEXT:     r1:0 = combine(#16,#15)744; V66-NEXT:    }745; V66-NEXT:    {746; V66-NEXT:     v3.h = vsplat(r0)747; V66-NEXT:    }748; V66-NEXT:    {749; V66-NEXT:     v4.h = vsplat(r1)750; V66-NEXT:    }751; V66-NEXT:    {752; V66-NEXT:     v2 = vand(v2,v3)753; V66-NEXT:    }754; V66-NEXT:    {755; V66-NEXT:     v3.h = vsub(v4.h,v2.h)756; V66-NEXT:    }757; V66-NEXT:    {758; V66-NEXT:     v0.h = vasl(v0.h,v2.h)759; V66-NEXT:    }760; V66-NEXT:    {761; V66-NEXT:     v1.h = vlsr(v1.h,v3.h)762; V66-NEXT:    }763; V66-NEXT:    {764; V66-NEXT:     v0 = vor(v0,v1)765; V66-NEXT:    }766; V66-NEXT:    {767; V66-NEXT:     jumpr r31768; V66-NEXT:    }769  %v0 = call <64 x i16> @llvm.fshl.v64i16(<64 x i16> %a0, <64 x i16> %a1, <64 x i16> %a2)770  ret <64 x i16> %v0771}772 773define <32 x i32> @f8(<32 x i32> %a0, <32 x i32> %a1, <32 x i32> %a2) #0 {774; V60-LABEL: f8:775; V60:       // %bb.0:776; V60-NEXT:    {777; V60-NEXT:     r1:0 = combine(#32,#31)778; V60-NEXT:    }779; V60-NEXT:    {780; V60-NEXT:     v3 = vxor(v3,v3)781; V60-NEXT:    }782; V60-NEXT:    {783; V60-NEXT:     v4 = vsplat(r0)784; V60-NEXT:    }785; V60-NEXT:    {786; V60-NEXT:     v5 = vsplat(r1)787; V60-NEXT:    }788; V60-NEXT:    {789; V60-NEXT:     v2 = vand(v2,v4)790; V60-NEXT:    }791; V60-NEXT:    {792; V60-NEXT:     v5.w = vsub(v5.w,v2.w)793; V60-NEXT:    }794; V60-NEXT:    {795; V60-NEXT:     v4 = vand(v2,v4)796; V60-NEXT:    }797; V60-NEXT:    {798; V60-NEXT:     v2.w = vasl(v0.w,v2.w)799; V60-NEXT:    }800; V60-NEXT:    {801; V60-NEXT:     q0 = vcmp.eq(v4.w,v3.w)802; V60-NEXT:    }803; V60-NEXT:    {804; V60-NEXT:     v1.w = vlsr(v1.w,v5.w)805; V60-NEXT:    }806; V60-NEXT:    {807; V60-NEXT:     v1 = vor(v2,v1)808; V60-NEXT:    }809; V60-NEXT:    {810; V60-NEXT:     v0 = vmux(q0,v0,v1)811; V60-NEXT:    }812; V60-NEXT:    {813; V60-NEXT:     jumpr r31814; V60-NEXT:    }815;816; V62-LABEL: f8:817; V62:       // %bb.0:818; V62-NEXT:    {819; V62-NEXT:     r1:0 = combine(#32,#31)820; V62-NEXT:    }821; V62-NEXT:    {822; V62-NEXT:     v3 = vsplat(r0)823; V62-NEXT:    }824; V62-NEXT:    {825; V62-NEXT:     v4 = vsplat(r1)826; V62-NEXT:    }827; V62-NEXT:    {828; V62-NEXT:     v2 = vand(v2,v3)829; V62-NEXT:    }830; V62-NEXT:    {831; V62-NEXT:     v3.w = vsub(v4.w,v2.w)832; V62-NEXT:    }833; V62-NEXT:    {834; V62-NEXT:     v0.w = vasl(v0.w,v2.w)835; V62-NEXT:    }836; V62-NEXT:    {837; V62-NEXT:     v1.w = vlsr(v1.w,v3.w)838; V62-NEXT:    }839; V62-NEXT:    {840; V62-NEXT:     v0 = vor(v0,v1)841; V62-NEXT:    }842; V62-NEXT:    {843; V62-NEXT:     jumpr r31844; V62-NEXT:    }845;846; V66-LABEL: f8:847; V66:       // %bb.0:848; V66-NEXT:    {849; V66-NEXT:     r1:0 = combine(#32,#31)850; V66-NEXT:    }851; V66-NEXT:    {852; V66-NEXT:     v31 = vxor(v31,v31)853; V66-NEXT:    }854; V66-NEXT:    {855; V66-NEXT:     v3 = vsplat(r0)856; V66-NEXT:    }857; V66-NEXT:    {858; V66-NEXT:     v4 = vsplat(r1)859; V66-NEXT:    }860; V66-NEXT:    {861; V66-NEXT:     v2 = vand(v2,v3)862; V66-NEXT:    }863; V66-NEXT:    {864; V66-NEXT:     v4.w = vsub(v4.w,v2.w)865; V66-NEXT:    }866; V66-NEXT:    {867; V66-NEXT:     v2.w = vsub(v31.w,v2.w)868; V66-NEXT:    }869; V66-NEXT:    {870; V66-NEXT:     v4.w = vlsr(v1.w,v4.w)871; V66-NEXT:    }872; V66-NEXT:    {873; V66-NEXT:     v5:4.w = vasrinto(v0.w,v2.w)874; V66-NEXT:    }875; V66-NEXT:    {876; V66-NEXT:     v0 = v5877; V66-NEXT:    }878; V66-NEXT:    {879; V66-NEXT:     jumpr r31880; V66-NEXT:    }881  %v0 = call <32 x i32> @llvm.fshl.v32i32(<32 x i32> %a0, <32 x i32> %a1, <32 x i32> %a2)882  ret <32 x i32> %v0883}884 885define <128 x i8> @f9(<128 x i8> %a0, <128 x i8> %a1, <128 x i8> %a2) #0 {886; V60-LABEL: f9:887; V60:       // %bb.0:888; V60-NEXT:    {889; V60-NEXT:     r0 = ##117901063890; V60-NEXT:    }891; V60-NEXT:    {892; V60-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)893; V60-NEXT:    }894; V60-NEXT:    {895; V60-NEXT:     v3 = vsplat(r0)896; V60-NEXT:    }897; V60-NEXT:    {898; V60-NEXT:     v2 = vand(v2,v3)899; V60-NEXT:    }900; V60-NEXT:    {901; V60-NEXT:     v3:2.uh = vzxt(v2.ub)902; V60-NEXT:    }903; V60-NEXT:    {904; V60-NEXT:     v0.h = vlsr(v0.h,v2.h)905; V60-NEXT:    }906; V60-NEXT:    {907; V60-NEXT:     v1.h = vlsr(v1.h,v3.h)908; V60-NEXT:    }909; V60-NEXT:    {910; V60-NEXT:     v0.b = vshuffe(v1.b,v0.b)911; V60-NEXT:    }912; V60-NEXT:    {913; V60-NEXT:     jumpr r31914; V60-NEXT:    }915;916; V62-LABEL: f9:917; V62:       // %bb.0:918; V62-NEXT:    {919; V62-NEXT:     r0 = #7920; V62-NEXT:    }921; V62-NEXT:    {922; V62-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)923; V62-NEXT:    }924; V62-NEXT:    {925; V62-NEXT:     v3.b = vsplat(r0)926; V62-NEXT:    }927; V62-NEXT:    {928; V62-NEXT:     v2 = vand(v2,v3)929; V62-NEXT:    }930; V62-NEXT:    {931; V62-NEXT:     v3:2.uh = vzxt(v2.ub)932; V62-NEXT:    }933; V62-NEXT:    {934; V62-NEXT:     v0.h = vlsr(v0.h,v2.h)935; V62-NEXT:    }936; V62-NEXT:    {937; V62-NEXT:     v1.h = vlsr(v1.h,v3.h)938; V62-NEXT:    }939; V62-NEXT:    {940; V62-NEXT:     v0.b = vshuffe(v1.b,v0.b)941; V62-NEXT:    }942; V62-NEXT:    {943; V62-NEXT:     jumpr r31944; V62-NEXT:    }945;946; V66-LABEL: f9:947; V66:       // %bb.0:948; V66-NEXT:    {949; V66-NEXT:     r0 = #7950; V66-NEXT:    }951; V66-NEXT:    {952; V66-NEXT:     v1:0.b = vshuffoe(v0.b,v1.b)953; V66-NEXT:    }954; V66-NEXT:    {955; V66-NEXT:     v3.b = vsplat(r0)956; V66-NEXT:    }957; V66-NEXT:    {958; V66-NEXT:     v2 = vand(v2,v3)959; V66-NEXT:    }960; V66-NEXT:    {961; V66-NEXT:     v3:2.uh = vzxt(v2.ub)962; V66-NEXT:    }963; V66-NEXT:    {964; V66-NEXT:     v0.h = vlsr(v0.h,v2.h)965; V66-NEXT:    }966; V66-NEXT:    {967; V66-NEXT:     v1.h = vlsr(v1.h,v3.h)968; V66-NEXT:    }969; V66-NEXT:    {970; V66-NEXT:     v0.b = vshuffe(v1.b,v0.b)971; V66-NEXT:    }972; V66-NEXT:    {973; V66-NEXT:     jumpr r31974; V66-NEXT:    }975  %v0 = call <128 x i8> @llvm.fshr.v128i8(<128 x i8> %a0, <128 x i8> %a1, <128 x i8> %a2)976  ret <128 x i8> %v0977}978 979define <64 x i16> @f10(<64 x i16> %a0, <64 x i16> %a1, <64 x i16> %a2) #0 {980; V60-LABEL: f10:981; V60:       // %bb.0:982; V60-NEXT:    {983; V60-NEXT:     r0 = ##983055984; V60-NEXT:    }985; V60-NEXT:    {986; V60-NEXT:     r1 = ##1048592987; V60-NEXT:    }988; V60-NEXT:    {989; V60-NEXT:     v3 = vxor(v3,v3)990; V60-NEXT:    }991; V60-NEXT:    {992; V60-NEXT:     v4 = vsplat(r0)993; V60-NEXT:    }994; V60-NEXT:    {995; V60-NEXT:     v5 = vsplat(r1)996; V60-NEXT:    }997; V60-NEXT:    {998; V60-NEXT:     v2 = vand(v2,v4)999; V60-NEXT:    }1000; V60-NEXT:    {1001; V60-NEXT:     v4.h = vsub(v5.h,v2.h)1002; V60-NEXT:    }1003; V60-NEXT:    {1004; V60-NEXT:     q0 = vcmp.eq(v2.h,v3.h)1005; V60-NEXT:    }1006; V60-NEXT:    {1007; V60-NEXT:     v31.h = vlsr(v1.h,v2.h)1008; V60-NEXT:    }1009; V60-NEXT:    {1010; V60-NEXT:     v0.h = vasl(v0.h,v4.h)1011; V60-NEXT:    }1012; V60-NEXT:    {1013; V60-NEXT:     v0 = vor(v0,v31)1014; V60-NEXT:    }1015; V60-NEXT:    {1016; V60-NEXT:     v0 = vmux(q0,v1,v0)1017; V60-NEXT:    }1018; V60-NEXT:    {1019; V60-NEXT:     jumpr r311020; V60-NEXT:    }1021;1022; V62-LABEL: f10:1023; V62:       // %bb.0:1024; V62-NEXT:    {1025; V62-NEXT:     r1:0 = combine(#16,#15)1026; V62-NEXT:    }1027; V62-NEXT:    {1028; V62-NEXT:     v3.h = vsplat(r0)1029; V62-NEXT:    }1030; V62-NEXT:    {1031; V62-NEXT:     v4.h = vsplat(r1)1032; V62-NEXT:    }1033; V62-NEXT:    {1034; V62-NEXT:     v2 = vand(v2,v3)1035; V62-NEXT:    }1036; V62-NEXT:    {1037; V62-NEXT:     v3.h = vsub(v2.h,v4.h)1038; V62-NEXT:    }1039; V62-NEXT:    {1040; V62-NEXT:     v1.h = vlsr(v1.h,v2.h)1041; V62-NEXT:    }1042; V62-NEXT:    {1043; V62-NEXT:     v0.h = vlsr(v0.h,v3.h)1044; V62-NEXT:    }1045; V62-NEXT:    {1046; V62-NEXT:     v0 = vor(v0,v1)1047; V62-NEXT:    }1048; V62-NEXT:    {1049; V62-NEXT:     jumpr r311050; V62-NEXT:    }1051;1052; V66-LABEL: f10:1053; V66:       // %bb.0:1054; V66-NEXT:    {1055; V66-NEXT:     r1:0 = combine(#16,#15)1056; V66-NEXT:    }1057; V66-NEXT:    {1058; V66-NEXT:     v3.h = vsplat(r0)1059; V66-NEXT:    }1060; V66-NEXT:    {1061; V66-NEXT:     v4.h = vsplat(r1)1062; V66-NEXT:    }1063; V66-NEXT:    {1064; V66-NEXT:     v2 = vand(v2,v3)1065; V66-NEXT:    }1066; V66-NEXT:    {1067; V66-NEXT:     v3.h = vsub(v2.h,v4.h)1068; V66-NEXT:    }1069; V66-NEXT:    {1070; V66-NEXT:     v1.h = vlsr(v1.h,v2.h)1071; V66-NEXT:    }1072; V66-NEXT:    {1073; V66-NEXT:     v0.h = vlsr(v0.h,v3.h)1074; V66-NEXT:    }1075; V66-NEXT:    {1076; V66-NEXT:     v0 = vor(v0,v1)1077; V66-NEXT:    }1078; V66-NEXT:    {1079; V66-NEXT:     jumpr r311080; V66-NEXT:    }1081  %v0 = call <64 x i16> @llvm.fshr.v64i16(<64 x i16> %a0, <64 x i16> %a1, <64 x i16> %a2)1082  ret <64 x i16> %v01083}1084 1085define <32 x i32> @f11(<32 x i32> %a0, <32 x i32> %a1, <32 x i32> %a2) #0 {1086; V60-LABEL: f11:1087; V60:       // %bb.0:1088; V60-NEXT:    {1089; V60-NEXT:     r1:0 = combine(#32,#31)1090; V60-NEXT:    }1091; V60-NEXT:    {1092; V60-NEXT:     v3 = vxor(v3,v3)1093; V60-NEXT:    }1094; V60-NEXT:    {1095; V60-NEXT:     v4 = vsplat(r0)1096; V60-NEXT:    }1097; V60-NEXT:    {1098; V60-NEXT:     v5 = vsplat(r1)1099; V60-NEXT:    }1100; V60-NEXT:    {1101; V60-NEXT:     v2 = vand(v2,v4)1102; V60-NEXT:    }1103; V60-NEXT:    {1104; V60-NEXT:     v4.w = vsub(v5.w,v2.w)1105; V60-NEXT:    }1106; V60-NEXT:    {1107; V60-NEXT:     q0 = vcmp.eq(v2.w,v3.w)1108; V60-NEXT:    }1109; V60-NEXT:    {1110; V60-NEXT:     v31.w = vlsr(v1.w,v2.w)1111; V60-NEXT:    }1112; V60-NEXT:    {1113; V60-NEXT:     v0.w = vasl(v0.w,v4.w)1114; V60-NEXT:    }1115; V60-NEXT:    {1116; V60-NEXT:     v0 = vor(v0,v31)1117; V60-NEXT:    }1118; V60-NEXT:    {1119; V60-NEXT:     v0 = vmux(q0,v1,v0)1120; V60-NEXT:    }1121; V60-NEXT:    {1122; V60-NEXT:     jumpr r311123; V60-NEXT:    }1124;1125; V62-LABEL: f11:1126; V62:       // %bb.0:1127; V62-NEXT:    {1128; V62-NEXT:     r1:0 = combine(#32,#31)1129; V62-NEXT:    }1130; V62-NEXT:    {1131; V62-NEXT:     v3 = vsplat(r0)1132; V62-NEXT:    }1133; V62-NEXT:    {1134; V62-NEXT:     v4 = vsplat(r1)1135; V62-NEXT:    }1136; V62-NEXT:    {1137; V62-NEXT:     v2 = vand(v2,v3)1138; V62-NEXT:    }1139; V62-NEXT:    {1140; V62-NEXT:     v3.w = vsub(v2.w,v4.w)1141; V62-NEXT:    }1142; V62-NEXT:    {1143; V62-NEXT:     v1.w = vlsr(v1.w,v2.w)1144; V62-NEXT:    }1145; V62-NEXT:    {1146; V62-NEXT:     v0.w = vlsr(v0.w,v3.w)1147; V62-NEXT:    }1148; V62-NEXT:    {1149; V62-NEXT:     v0 = vor(v0,v1)1150; V62-NEXT:    }1151; V62-NEXT:    {1152; V62-NEXT:     jumpr r311153; V62-NEXT:    }1154;1155; V66-LABEL: f11:1156; V66:       // %bb.0:1157; V66-NEXT:    {1158; V66-NEXT:     r0 = #311159; V66-NEXT:    }1160; V66-NEXT:    {1161; V66-NEXT:     v3 = vsplat(r0)1162; V66-NEXT:    }1163; V66-NEXT:    {1164; V66-NEXT:     v3 = vand(v2,v3)1165; V66-NEXT:    }1166; V66-NEXT:    {1167; V66-NEXT:     v2.w = vlsr(v1.w,v3.w)1168; V66-NEXT:    }1169; V66-NEXT:    {1170; V66-NEXT:     v3:2.w = vasrinto(v0.w,v3.w)1171; V66-NEXT:    }1172; V66-NEXT:    {1173; V66-NEXT:     v0 = v21174; V66-NEXT:    }1175; V66-NEXT:    {1176; V66-NEXT:     jumpr r311177; V66-NEXT:    }1178  %v0 = call <32 x i32> @llvm.fshr.v32i32(<32 x i32> %a0, <32 x i32> %a1, <32 x i32> %a2)1179  ret <32 x i32> %v01180}1181 1182declare <128 x i8> @llvm.fshl.v128i8(<128 x i8>, <128 x i8>, <128 x i8>)1183declare <128 x i8> @llvm.fshr.v128i8(<128 x i8>, <128 x i8>, <128 x i8>)1184declare <64 x i16> @llvm.fshl.v64i16(<64 x i16>, <64 x i16>, <64 x i16>)1185declare <64 x i16> @llvm.fshr.v64i16(<64 x i16>, <64 x i16>, <64 x i16>)1186declare <32 x i32> @llvm.fshl.v32i32(<32 x i32>, <32 x i32>, <32 x i32>)1187declare <32 x i32> @llvm.fshr.v32i32(<32 x i32>, <32 x i32>, <32 x i32>)1188 1189attributes #0 = { nounwind }1190