1; RUN: llc -mv65 -mattr=+hvxv65,hvx-length64b -march=hexagon -O0 < %s | FileCheck %s 2; RUN: llc -mv65 -mattr=+hvxv65,hvx-length64b -march=hexagon -O0 < %s | FileCheck -check-prefix=CHECK-CALL %s 3 4; CHECK-CALL-NOT: call 5 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 %c 10} 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> %b 17} 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> %b 24} 25; CHECK: = vabs(v0.b):sat 26 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> %d 31} 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> %d 38} 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> %d 45} 46; CHECK: = vasr(v0.uw,v1.uw,r0):sat 47 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> %d 52} 53; CHECK: = vasr(v0.uh,v1.uh,r0):sat 54 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> %d 59} 60; CHECK: = vasr(v0.uh,v1.uh,r0):rnd:sat 61 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> %c 66} 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> %c 73} 74; CHECK: = vavg(v0.uw,v1.uw):rnd 75 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> %c 80} 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> %c 87} 88; CHECK: = vavg(v0.b,v1.b):rnd 89 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> %c 94} 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> %c 101} 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> %d 108} 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> %d 115} 116; CHECK: = vmpa(v0.h,v1.uh,r1:0.uh):sat 117 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> %d 122} 123; CHECK: = vmps(v0.h,v1.uh,r1:0.uh):sat 124 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> %d 129} 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> %c 136} 137; CHECK: = vmpye(v0.uh,r0.uh) 138 139;declare <16 x i32> @llvm.hexagon.V6.vprefixqb(<512 x i1>) 140;define <16 x i32> @V6_vprefixqb(<512 x i1> %a) { 141; %b = call <16 x i32> @llvm.hexagon.V6.vprefixqb(<512 x i1> %a) 142; ret <16 x i32> %b 143;} 144 145;declare <16 x i32> @llvm.hexagon.V6.vprefixqh(<512 x i1>) 146;define <16 x i32> @V6_vprefixqh(<512 x i1> %a) { 147; %b = call <16 x i32> @llvm.hexagon.V6.vprefixqh(<512 x i1> %a) 148; ret <16 x i32> %b 149;} 150 151;declare <16 x i32> @llvm.hexagon.V6.vprefixqw(<512 x i1>) 152;define <16 x i32> @V6_vprefixqw(<512 x i1> %a) { 153; %b = call <16 x i32> @llvm.hexagon.V6.vprefixqw(<512 x i1> %a) 154; ret <16 x i32> %b 155;} 156 157