brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.7 KiB · b5ad0ab Raw
303 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=+hvxv65,+hvx-length128b,-packets < %s | FileCheck --check-prefix=V65 %s4; RUN: llc -mtriple=hexagon -mattr=+hvxv69,+hvx-length128b,-packets < %s | FileCheck --check-prefix=V69 %s5 6define <64 x i16> @mulhs16(<64 x i16> %a0, <64 x i16> %a1) #0 {7; V60-LABEL: mulhs16:8; V60:       // %bb.0:9; V60-NEXT:    {10; V60-NEXT:     v1:0.w = vmpy(v1.h,v0.h)11; V60-NEXT:    }12; V60-NEXT:    {13; V60-NEXT:     r7 = #-414; V60-NEXT:    }15; V60-NEXT:    {16; V60-NEXT:     v1:0 = vshuff(v1,v0,r7)17; V60-NEXT:    }18; V60-NEXT:    {19; V60-NEXT:     v0.h = vpacko(v1.w,v0.w)20; V60-NEXT:    }21; V60-NEXT:    {22; V60-NEXT:     jumpr r3123; V60-NEXT:    }24;25; V65-LABEL: mulhs16:26; V65:       // %bb.0:27; V65-NEXT:    {28; V65-NEXT:     v1:0.w = vmpy(v1.h,v0.h)29; V65-NEXT:    }30; V65-NEXT:    {31; V65-NEXT:     r7 = #-432; V65-NEXT:    }33; V65-NEXT:    {34; V65-NEXT:     v1:0 = vshuff(v1,v0,r7)35; V65-NEXT:    }36; V65-NEXT:    {37; V65-NEXT:     v0.h = vpacko(v1.w,v0.w)38; V65-NEXT:    }39; V65-NEXT:    {40; V65-NEXT:     jumpr r3141; V65-NEXT:    }42;43; V69-LABEL: mulhs16:44; V69:       // %bb.0:45; V69-NEXT:    {46; V69-NEXT:     v1:0.w = vmpy(v1.h,v0.h)47; V69-NEXT:    }48; V69-NEXT:    {49; V69-NEXT:     r7 = #-450; V69-NEXT:    }51; V69-NEXT:    {52; V69-NEXT:     v1:0 = vshuff(v1,v0,r7)53; V69-NEXT:    }54; V69-NEXT:    {55; V69-NEXT:     v0.h = vpacko(v1.w,v0.w)56; V69-NEXT:    }57; V69-NEXT:    {58; V69-NEXT:     jumpr r3159; V69-NEXT:    }60  %v0 = sext <64 x i16> %a0 to <64 x i32>61  %v1 = sext <64 x i16> %a1 to <64 x i32>62  %v2 = mul <64 x i32> %v0, %v163  %v3 = lshr <64 x i32> %v2, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>64  %v4 = trunc <64 x i32> %v3 to <64 x i16>65  ret <64 x i16> %v466}67 68define <64 x i16> @mulhu16(<64 x i16> %a0, <64 x i16> %a1) #0 {69; V60-LABEL: mulhu16:70; V60:       // %bb.0:71; V60-NEXT:    {72; V60-NEXT:     v1:0.uw = vmpy(v1.uh,v0.uh)73; V60-NEXT:    }74; V60-NEXT:    {75; V60-NEXT:     r7 = #-476; V60-NEXT:    }77; V60-NEXT:    {78; V60-NEXT:     v1:0 = vshuff(v1,v0,r7)79; V60-NEXT:    }80; V60-NEXT:    {81; V60-NEXT:     v0.h = vpacko(v1.w,v0.w)82; V60-NEXT:    }83; V60-NEXT:    {84; V60-NEXT:     jumpr r3185; V60-NEXT:    }86;87; V65-LABEL: mulhu16:88; V65:       // %bb.0:89; V65-NEXT:    {90; V65-NEXT:     v1:0.uw = vmpy(v1.uh,v0.uh)91; V65-NEXT:    }92; V65-NEXT:    {93; V65-NEXT:     r7 = #-494; V65-NEXT:    }95; V65-NEXT:    {96; V65-NEXT:     v1:0 = vshuff(v1,v0,r7)97; V65-NEXT:    }98; V65-NEXT:    {99; V65-NEXT:     v0.h = vpacko(v1.w,v0.w)100; V65-NEXT:    }101; V65-NEXT:    {102; V65-NEXT:     jumpr r31103; V65-NEXT:    }104;105; V69-LABEL: mulhu16:106; V69:       // %bb.0:107; V69-NEXT:    {108; V69-NEXT:     v0.uh = vmpy(v0.uh,v1.uh):>>16109; V69-NEXT:    }110; V69-NEXT:    {111; V69-NEXT:     jumpr r31112; V69-NEXT:    }113  %v0 = zext <64 x i16> %a0 to <64 x i32>114  %v1 = zext <64 x i16> %a1 to <64 x i32>115  %v2 = mul <64 x i32> %v0, %v1116  %v3 = lshr <64 x i32> %v2, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>117  %v4 = trunc <64 x i32> %v3 to <64 x i16>118  ret <64 x i16> %v4119}120 121define <32 x i32> @mulhs32(<32 x i32> %a0, <32 x i32> %a1) #0 {122; V60-LABEL: mulhs32:123; V60:       // %bb.0:124; V60-NEXT:    {125; V60-NEXT:     r0 = #16126; V60-NEXT:    }127; V60-NEXT:    {128; V60-NEXT:     v2.w = vmpye(v1.w,v0.uh)129; V60-NEXT:    }130; V60-NEXT:    {131; V60-NEXT:     v31.w = vasr(v0.w,r0)132; V60-NEXT:    }133; V60-NEXT:    {134; V60-NEXT:     v3.w = vasr(v1.w,r0)135; V60-NEXT:    }136; V60-NEXT:    {137; V60-NEXT:     v5:4.w = vmpy(v31.h,v1.uh)138; V60-NEXT:    }139; V60-NEXT:    {140; V60-NEXT:     v31:30.w = vmpy(v31.h,v3.h)141; V60-NEXT:    }142; V60-NEXT:    {143; V60-NEXT:     v7:6.w = vadd(v2.uh,v4.uh)144; V60-NEXT:    }145; V60-NEXT:    {146; V60-NEXT:     v29:28.w = vadd(v2.h,v4.h)147; V60-NEXT:    }148; V60-NEXT:    {149; V60-NEXT:     v29.w += vasr(v6.w,r0)150; V60-NEXT:    }151; V60-NEXT:    {152; V60-NEXT:     v0.w = vadd(v29.w,v30.w)153; V60-NEXT:    }154; V60-NEXT:    {155; V60-NEXT:     jumpr r31156; V60-NEXT:    }157;158; V65-LABEL: mulhs32:159; V65:       // %bb.0:160; V65-NEXT:    {161; V65-NEXT:     v3:2 = vmpye(v0.w,v1.uh)162; V65-NEXT:    }163; V65-NEXT:    {164; V65-NEXT:     v3:2 += vmpyo(v0.w,v1.h)165; V65-NEXT:    }166; V65-NEXT:    {167; V65-NEXT:     v0 = v3168; V65-NEXT:    }169; V65-NEXT:    {170; V65-NEXT:     jumpr r31171; V65-NEXT:    }172;173; V69-LABEL: mulhs32:174; V69:       // %bb.0:175; V69-NEXT:    {176; V69-NEXT:     v3:2 = vmpye(v0.w,v1.uh)177; V69-NEXT:    }178; V69-NEXT:    {179; V69-NEXT:     v3:2 += vmpyo(v0.w,v1.h)180; V69-NEXT:    }181; V69-NEXT:    {182; V69-NEXT:     v0 = v3183; V69-NEXT:    }184; V69-NEXT:    {185; V69-NEXT:     jumpr r31186; V69-NEXT:    }187  %v0 = sext <32 x i32> %a0 to <32 x i64>188  %v1 = sext <32 x i32> %a1 to <32 x i64>189  %v2 = mul <32 x i64> %v0, %v1190  %v3 = lshr <32 x i64> %v2, <i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32>191  %v4 = trunc <32 x i64> %v3 to <32 x i32>192  ret <32 x i32> %v4193}194 195define <32 x i32> @mulhu32(<32 x i32> %a0, <32 x i32> %a1) #0 {196; V60-LABEL: mulhu32:197; V60:       // %bb.0:198; V60-NEXT:    {199; V60-NEXT:     r0 = ##33686018200; V60-NEXT:    }201; V60-NEXT:    {202; V60-NEXT:     v3:2.uw = vmpy(v0.uh,v1.uh)203; V60-NEXT:    }204; V60-NEXT:    {205; V60-NEXT:     r2 = #16206; V60-NEXT:    }207; V60-NEXT:    {208; V60-NEXT:     v4 = vsplat(r0)209; V60-NEXT:    }210; V60-NEXT:    {211; V60-NEXT:     v2.uw = vlsr(v2.uw,r2)212; V60-NEXT:    }213; V60-NEXT:    {214; V60-NEXT:     v31 = vdelta(v1,v4)215; V60-NEXT:    }216; V60-NEXT:    {217; V60-NEXT:     v1:0.uw = vmpy(v0.uh,v31.uh)218; V60-NEXT:    }219; V60-NEXT:    {220; V60-NEXT:     v1:0.w = vadd(v1.uh,v0.uh)221; V60-NEXT:    }222; V60-NEXT:    {223; V60-NEXT:     v0.w = vadd(v0.w,v2.w)224; V60-NEXT:    }225; V60-NEXT:    {226; V60-NEXT:     v1.w += vasr(v0.w,r2)227; V60-NEXT:    }228; V60-NEXT:    {229; V60-NEXT:     v0.w = vadd(v3.w,v1.w)230; V60-NEXT:    }231; V60-NEXT:    {232; V60-NEXT:     jumpr r31233; V60-NEXT:    }234;235; V65-LABEL: mulhu32:236; V65:       // %bb.0:237; V65-NEXT:    {238; V65-NEXT:     v2 = vxor(v2,v2)239; V65-NEXT:    }240; V65-NEXT:    {241; V65-NEXT:     v5:4 = vmpye(v0.w,v1.uh)242; V65-NEXT:    }243; V65-NEXT:    {244; V65-NEXT:     q0 = vcmp.gt(v2.w,v0.w)245; V65-NEXT:    }246; V65-NEXT:    {247; V65-NEXT:     q1 = vcmp.gt(v2.w,v1.w)248; V65-NEXT:    }249; V65-NEXT:    {250; V65-NEXT:     v5:4 += vmpyo(v0.w,v1.h)251; V65-NEXT:    }252; V65-NEXT:    {253; V65-NEXT:     v31 = vand(q0,v1)254; V65-NEXT:    }255; V65-NEXT:    {256; V65-NEXT:     if (q1) v31.w += v0.w257; V65-NEXT:    }258; V65-NEXT:    {259; V65-NEXT:     v0.w = vadd(v5.w,v31.w)260; V65-NEXT:    }261; V65-NEXT:    {262; V65-NEXT:     jumpr r31263; V65-NEXT:    }264;265; V69-LABEL: mulhu32:266; V69:       // %bb.0:267; V69-NEXT:    {268; V69-NEXT:     v2 = vxor(v2,v2)269; V69-NEXT:    }270; V69-NEXT:    {271; V69-NEXT:     v5:4 = vmpye(v0.w,v1.uh)272; V69-NEXT:    }273; V69-NEXT:    {274; V69-NEXT:     q0 = vcmp.gt(v2.w,v0.w)275; V69-NEXT:    }276; V69-NEXT:    {277; V69-NEXT:     q1 = vcmp.gt(v2.w,v1.w)278; V69-NEXT:    }279; V69-NEXT:    {280; V69-NEXT:     v5:4 += vmpyo(v0.w,v1.h)281; V69-NEXT:    }282; V69-NEXT:    {283; V69-NEXT:     v31 = vand(q0,v1)284; V69-NEXT:    }285; V69-NEXT:    {286; V69-NEXT:     if (q1) v31.w += v0.w287; V69-NEXT:    }288; V69-NEXT:    {289; V69-NEXT:     v0.w = vadd(v5.w,v31.w)290; V69-NEXT:    }291; V69-NEXT:    {292; V69-NEXT:     jumpr r31293; V69-NEXT:    }294  %v0 = zext <32 x i32> %a0 to <32 x i64>295  %v1 = zext <32 x i32> %a1 to <32 x i64>296  %v2 = mul <32 x i64> %v0, %v1297  %v3 = lshr <32 x i64> %v2, <i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32>298  %v4 = trunc <32 x i64> %v3 to <32 x i32>299  ret <32 x i32> %v4300}301 302attributes #0 = { nounwind memory(none) }303