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