brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · b2790ea Raw
85 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=hexagon < %s | FileCheck %s3 4; Test that we compile the HVX dual output intrinsics.5 6define inreg <32 x i32> @f0(<32 x i32> %a0, <32 x i32> %a1, ptr %a2) #0 {7; CHECK-LABEL: f0:8; CHECK:       // %bb.0: // %b09; CHECK-NEXT:    {10; CHECK-NEXT:     r1 = #-111; CHECK-NEXT:     v2 = vmem(r0+#0)12; CHECK-NEXT:    }13; CHECK-NEXT:    {14; CHECK-NEXT:     q0 = vand(v2,r1)15; CHECK-NEXT:    }16; CHECK-NEXT:    {17; CHECK-NEXT:     v0.w = vadd(v0.w,v1.w,q0):carry18; CHECK-NEXT:     jumpr r3119; CHECK-NEXT:    }20b0:21  %v0 = load <32 x i32>, ptr %a2, align 12822  %v1 = tail call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %v0, i32 -1)23  %v2 = tail call { <32 x i32>, <128 x i1> } @llvm.hexagon.V6.vaddcarry.128B(<32 x i32> %a0, <32 x i32> %a1, <128 x i1> %v1)24  %v3 = extractvalue { <32 x i32>, <128 x i1> } %v2, 025  ret <32 x i32> %v326}27 28define inreg <32 x i32> @f1(<32 x i32> %a0, <32 x i32> %a1, ptr %a2) #0 {29; CHECK-LABEL: f1:30; CHECK:       // %bb.0: // %b031; CHECK-NEXT:    {32; CHECK-NEXT:     r1 = #-133; CHECK-NEXT:     v2 = vmem(r0+#0)34; CHECK-NEXT:    }35; CHECK-NEXT:    {36; CHECK-NEXT:     q0 = vand(v2,r1)37; CHECK-NEXT:    }38; CHECK-NEXT:    {39; CHECK-NEXT:     v0.w = vsub(v0.w,v1.w,q0):carry40; CHECK-NEXT:     jumpr r3141; CHECK-NEXT:    }42b0:43  %v0 = load <32 x i32>, ptr %a2, align 12844  %v1 = tail call <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32> %v0, i32 -1)45  %v2 = tail call { <32 x i32>, <128 x i1> } @llvm.hexagon.V6.vsubcarry.128B(<32 x i32> %a0, <32 x i32> %a1, <128 x i1> %v1)46  %v3 = extractvalue { <32 x i32>, <128 x i1> } %v2, 047  ret <32 x i32> %v348}49 50define inreg <32 x i32> @f2(<32 x i32> %a0, <32 x i32> %a1) #0 {51; CHECK-LABEL: f2:52; CHECK:       // %bb.0: // %b053; CHECK-NEXT:    {54; CHECK-NEXT:     v0.w,q0 = vadd(v0.w,v1.w):carry55; CHECK-NEXT:     jumpr r3156; CHECK-NEXT:    }57b0:58  %v0 = tail call { <32 x i32>, <128 x i1> } @llvm.hexagon.V6.vaddcarryo.128B(<32 x i32> %a0, <32 x i32> %a1)59  %v1 = extractvalue { <32 x i32>, <128 x i1> } %v0, 060  ret <32 x i32> %v161}62 63define inreg <32 x i32> @f3(<32 x i32> %a0, <32 x i32> %a1) #0 {64; CHECK-LABEL: f3:65; CHECK:       // %bb.0: // %b066; CHECK-NEXT:    {67; CHECK-NEXT:     v0.w,q0 = vsub(v0.w,v1.w):carry68; CHECK-NEXT:     jumpr r3169; CHECK-NEXT:    }70b0:71  %v0 = tail call { <32 x i32>, <128 x i1> } @llvm.hexagon.V6.vsubcarryo.128B(<32 x i32> %a0, <32 x i32> %a1)72  %v1 = extractvalue { <32 x i32>, <128 x i1> } %v0, 073  ret <32 x i32> %v174}75 76declare { <32 x i32>, <128 x i1> } @llvm.hexagon.V6.vaddcarry.128B(<32 x i32>, <32 x i32>, <128 x i1>) #177declare { <32 x i32>, <128 x i1> } @llvm.hexagon.V6.vsubcarry.128B(<32 x i32>, <32 x i32>, <128 x i1>) #178declare { <32 x i32>, <128 x i1> } @llvm.hexagon.V6.vaddcarryo.128B(<32 x i32>, <32 x i32>) #179declare { <32 x i32>, <128 x i1> } @llvm.hexagon.V6.vsubcarryo.128B(<32 x i32>, <32 x i32>) #180 81declare <128 x i1> @llvm.hexagon.V6.vandvrt.128B(<32 x i32>, i32) #182 83attributes #0 = { nounwind "target-cpu"="hexagonv66" "target-features"="+hvxv66,+hvx-length128b" }84attributes #1 = { nounwind readnone }85