157 lines · plain
1; RUN: llc -mv65 -mattr=+hvxv65,hvx-length64b -mtriple=hexagon -O0 < %s | FileCheck %s2; RUN: llc -mv65 -mattr=+hvxv65,hvx-length64b -mtriple=hexagon -O0 < %s | FileCheck -check-prefix=CHECK-CALL %s3 4; CHECK-CALL-NOT: call5 6declare i32 @llvm.hexagon.A6.vcmpbeq.notany(i64, i64)7define i32 @A6_vcmpbeq_notany(i64 %a, i64 %b) {8 %c = call i32 @llvm.hexagon.A6.vcmpbeq.notany(i64 %a, i64 %b)9 ret i32 %c10}11; CHECK: = !any8(vcmpb.eq(r1:0,r3:2))12 13declare <16 x i32> @llvm.hexagon.V6.vabsb(<16 x i32>)14define <16 x i32> @V6_vabsb(<16 x i32> %a) {15 %b = call <16 x i32> @llvm.hexagon.V6.vabsb(<16 x i32> %a)16 ret <16 x i32> %b17}18; CHECK: = vabs(v0.b)19 20declare <16 x i32> @llvm.hexagon.V6.vabsb.sat(<16 x i32>)21define <16 x i32> @V6_vabsb_sat(<16 x i32> %a) {22 %b = call <16 x i32> @llvm.hexagon.V6.vabsb.sat(<16 x i32> %a)23 ret <16 x i32> %b24}25; CHECK: = vabs(v0.b):sat26 27declare <16 x i32> @llvm.hexagon.V6.vaslh.acc(<16 x i32>, <16 x i32>, i32)28define <16 x i32> @V6_vaslh_acc(<16 x i32> %a, <16 x i32> %b, i32 %c) {29 %d = call <16 x i32> @llvm.hexagon.V6.vaslh.acc(<16 x i32> %a, <16 x i32> %b, i32 %c)30 ret <16 x i32> %d31}32; CHECK: += vasl(v1.h,r0)33 34declare <16 x i32> @llvm.hexagon.V6.vasrh.acc(<16 x i32>, <16 x i32>, i32)35define <16 x i32> @V6_vasrh_acc(<16 x i32> %a, <16 x i32> %b, i32 %c) {36 %d = call <16 x i32> @llvm.hexagon.V6.vasrh.acc(<16 x i32> %a, <16 x i32> %b, i32 %c)37 ret <16 x i32> %d38}39; CHECK: += vasr(v1.h,r0)40 41declare <16 x i32> @llvm.hexagon.V6.vasruwuhsat(<16 x i32>, <16 x i32>, i32)42define <16 x i32> @V6_vasruwuhsat(<16 x i32> %a, <16 x i32> %b, i32 %c) {43 %d = call <16 x i32> @llvm.hexagon.V6.vasruwuhsat(<16 x i32> %a, <16 x i32> %b, i32 %c)44 ret <16 x i32> %d45}46; CHECK: = vasr(v0.uw,v1.uw,r0):sat47 48declare <16 x i32> @llvm.hexagon.V6.vasruhubsat(<16 x i32>, <16 x i32>, i32)49define <16 x i32> @V6_vasruhubsat(<16 x i32> %a, <16 x i32> %b, i32 %c) {50 %d = call <16 x i32> @llvm.hexagon.V6.vasruhubsat(<16 x i32> %a, <16 x i32> %b, i32 %c)51 ret <16 x i32> %d52}53; CHECK: = vasr(v0.uh,v1.uh,r0):sat54 55declare <16 x i32> @llvm.hexagon.V6.vasruhubrndsat(<16 x i32>, <16 x i32>, i32)56define <16 x i32> @V6_vasruhubrndsat(<16 x i32> %a, <16 x i32> %b, i32 %c) {57 %d = call <16 x i32> @llvm.hexagon.V6.vasruhubrndsat(<16 x i32> %a, <16 x i32> %b, i32 %c)58 ret <16 x i32> %d59}60; CHECK: = vasr(v0.uh,v1.uh,r0):rnd:sat61 62declare <16 x i32> @llvm.hexagon.V6.vavguw(<16 x i32>, <16 x i32>)63define <16 x i32> @V6_vavguw(<16 x i32> %a, <16 x i32> %b) {64 %c = call <16 x i32> @llvm.hexagon.V6.vavguw(<16 x i32> %a, <16 x i32> %b)65 ret <16 x i32> %c66}67; CHECK: = vavg(v0.uw,v1.uw)68 69declare <16 x i32> @llvm.hexagon.V6.vavguwrnd(<16 x i32>, <16 x i32>)70define <16 x i32> @V6_vavguwrnd(<16 x i32> %a, <16 x i32> %b) {71 %c = call <16 x i32> @llvm.hexagon.V6.vavguwrnd(<16 x i32> %a, <16 x i32> %b)72 ret <16 x i32> %c73}74; CHECK: = vavg(v0.uw,v1.uw):rnd75 76declare <16 x i32> @llvm.hexagon.V6.vavgb(<16 x i32>, <16 x i32>)77define <16 x i32> @V6_vavgb(<16 x i32> %a, <16 x i32> %b) {78 %c = call <16 x i32> @llvm.hexagon.V6.vavgb(<16 x i32> %a, <16 x i32> %b)79 ret <16 x i32> %c80}81; CHECK: = vavg(v0.b,v1.b)82 83declare <16 x i32> @llvm.hexagon.V6.vavgbrnd(<16 x i32>, <16 x i32>)84define <16 x i32> @V6_vavgbrnd(<16 x i32> %a, <16 x i32> %b) {85 %c = call <16 x i32> @llvm.hexagon.V6.vavgbrnd(<16 x i32> %a, <16 x i32> %b)86 ret <16 x i32> %c87}88; CHECK: = vavg(v0.b,v1.b):rnd89 90declare <16 x i32> @llvm.hexagon.V6.vnavgb(<16 x i32>, <16 x i32>)91define <16 x i32> @V6_vnavgb(<16 x i32> %a, <16 x i32> %b) {92 %c = call <16 x i32> @llvm.hexagon.V6.vnavgb(<16 x i32> %a, <16 x i32> %b)93 ret <16 x i32> %c94}95; CHECK: = vnavg(v0.b,v1.b)96 97declare <32 x i32> @llvm.hexagon.V6.vmpabuu(<32 x i32>, i32)98define <32 x i32> @V6_vmpabuu(<32 x i32> %a, i32 %b) {99 %c = call <32 x i32> @llvm.hexagon.V6.vmpabuu(<32 x i32> %a, i32 %b)100 ret <32 x i32> %c101}102; CHECK: = vmpa(v1:0.ub,r0.ub)103 104declare <32 x i32> @llvm.hexagon.V6.vmpabuu.acc(<32 x i32>, <32 x i32>, i32)105define <32 x i32> @V6_vmpabuu_acc(<32 x i32> %a, <32 x i32> %b, i32 %c) {106 %d = call <32 x i32> @llvm.hexagon.V6.vmpabuu.acc(<32 x i32> %a, <32 x i32> %b, i32 %c)107 ret <32 x i32> %d108}109; CHECK: += vmpa(v3:2.ub,r0.ub)110 111declare <16 x i32> @llvm.hexagon.V6.vmpauhuhsat(<16 x i32>, <16 x i32>, i64)112define <16 x i32> @V6_vmpauhuhsat(<16 x i32> %a, <16 x i32> %b, i64 %c) {113 %d = call <16 x i32> @llvm.hexagon.V6.vmpauhuhsat(<16 x i32> %a, <16 x i32> %b, i64 %c)114 ret <16 x i32> %d115}116; CHECK: = vmpa(v0.h,v1.uh,r1:0.uh):sat117 118declare <16 x i32> @llvm.hexagon.V6.vmpsuhuhsat(<16 x i32>, <16 x i32>, i64)119define <16 x i32> @V6_vmpsuhuhsat(<16 x i32> %a, <16 x i32> %b, i64 %c) {120 %d = call <16 x i32> @llvm.hexagon.V6.vmpsuhuhsat(<16 x i32> %a, <16 x i32> %b, i64 %c)121 ret <16 x i32> %d122}123; CHECK: = vmps(v0.h,v1.uh,r1:0.uh):sat124 125declare <32 x i32> @llvm.hexagon.V6.vmpyh.acc(<32 x i32>, <16 x i32>, i32)126define <32 x i32> @V6_vmpyh_acc(<32 x i32> %a, <16 x i32> %b, i32 %c) {127 %d = call <32 x i32> @llvm.hexagon.V6.vmpyh.acc(<32 x i32> %a, <16 x i32> %b, i32 %c)128 ret <32 x i32> %d129}130; CHECK: += vmpy(v2.h,r0.h)131 132declare <16 x i32> @llvm.hexagon.V6.vmpyuhe(<16 x i32>, i32)133define <16 x i32> @V6_vmpyuhe(<16 x i32> %a, i32 %b) {134 %c = call <16 x i32> @llvm.hexagon.V6.vmpyuhe(<16 x i32> %a, i32 %b)135 ret <16 x i32> %c136}137; CHECK: = vmpye(v0.uh,r0.uh)138 139;declare <16 x i32> @llvm.hexagon.V6.vprefixqb(<64 x i1>)140;define <16 x i32> @V6_vprefixqb(<64 x i1> %a) {141; %b = call <16 x i32> @llvm.hexagon.V6.vprefixqb(<64 x i1> %a)142; ret <16 x i32> %b143;}144 145;declare <16 x i32> @llvm.hexagon.V6.vprefixqh(<64 x i1>)146;define <16 x i32> @V6_vprefixqh(<64 x i1> %a) {147; %b = call <16 x i32> @llvm.hexagon.V6.vprefixqh(<64 x i1> %a)148; ret <16 x i32> %b149;}150 151;declare <16 x i32> @llvm.hexagon.V6.vprefixqw(<64 x i1>)152;define <16 x i32> @V6_vprefixqw(<64 x i1> %a) {153; %b = call <16 x i32> @llvm.hexagon.V6.vprefixqw(<64 x i1> %a)154; ret <16 x i32> %b155;}156 157