CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
144 lines
3.6 KiB
LLVM
144 lines
3.6 KiB
LLVM
; RUN: llc -mtriple=hexagon < %s | FileCheck %s
|
|
|
|
target triple = "hexagon"
|
|
|
|
define i32 @add_v32i32(<32 x i32> %vec) #0 {
|
|
; CHECK-LABEL: add_v32i32:
|
|
; CHECK: {
|
|
; CHECK: [[R0:v[0-9]+]] = valign([[_:v[0-9]+]],v0,{{.+}})
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: [[R1:v[0-9]+]].w = vadd(v0.w,[[R0]].w)
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: [[R2:v[0-9]+]] = valign([[_:v[0-9]+]],[[R1]],{{.+}})
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: [[R3:v[0-9]+]].w = vadd([[R1]].w,[[R2]].w)
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: [[R4:v[0-9]+]] = valign([[_:v[0-9]+]],[[R3]],{{.+}})
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: [[R5:v[0-9]+]].w = vadd([[R3]].w,[[R4]].w)
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: [[R6:v[0-9]+]] = valign([[_:v[0-9]+]],[[R5]],{{.+}})
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: [[R7:v[0-9]+]].w = vadd([[R5]].w,[[R6]].w)
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: [[R8:v[0-9]+]] = valign([[_:v[0-9]+]],[[R7]],{{.+}})
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: [[R9:v[0-9]+]].w = vadd([[R7]].w,[[R8]].w)
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: r0 = vextract([[R9]],{{.+}})
|
|
; CHECK: }
|
|
entry:
|
|
%r = call i32 @llvm.vector.reduce.add.v32i32(<32 x i32> %vec)
|
|
ret i32 %r
|
|
}
|
|
|
|
define i32 @add_v16i32(<16 x i32> %vec) #0 {
|
|
; CHECK-LABEL: add_v16i32:
|
|
; CHECK: {
|
|
; CHECK: [[R0:v[0-9]+]] = valign([[_:v[0-9]+]],v0,{{.+}})
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: [[R1:v[0-9]+]].w = vadd(v0.w,[[R0]].w)
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: [[R2:v[0-9]+]] = valign([[_:v[0-9]+]],[[R1]],{{.+}})
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: [[R3:v[0-9]+]].w = vadd([[R1]].w,[[R2]].w)
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: [[R4:v[0-9]+]] = valign([[_:v[0-9]+]],[[R3]],{{.+}})
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: [[R5:v[0-9]+]].w = vadd([[R3]].w,[[R4]].w)
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: [[R6:v[0-9]+]] = valign([[_:v[0-9]+]],[[R5]],{{.+}})
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: [[R7:v[0-9]+]].w = vadd([[R5]].w,[[R6]].w)
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: r0 = vextract([[R7]],{{.+}})
|
|
; CHECK: }
|
|
entry:
|
|
%r = call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %vec)
|
|
ret i32 %r
|
|
}
|
|
|
|
define i32 @add_v8i32(<8 x i32> %vec) #0 {
|
|
; CHECK-LABEL: add_v8i32:
|
|
; CHECK: {
|
|
; CHECK: r[[RS1:[0-9]+:[0-9]+]] = vaddw(r1:0,r5:4)
|
|
; CHECK: r[[R6:[0-9]+:[0-9]+]] = memd(r29+#0)
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: r[[RS2:[0-9]+:[0-9]+]] = vaddw(r3:2,r[[R6]])
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: r[[RS3:[0-9]+:[0-9]+]] = vaddw(r[[RS1]],r[[RS2]])
|
|
; CHECK: }
|
|
; CHECK: {
|
|
;; TODO: combine and double register add can be optimized to single register add.
|
|
; CHECK: r[[RS4:[0-9]+:[0-9]+]] = combine(#0,r{{[0-9]+}})
|
|
; CHECK: }
|
|
; CHECK: {
|
|
; CHECK: r1:0 = vaddw(r[[RS3]],r[[RS4]])
|
|
entry:
|
|
%r = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> %vec)
|
|
ret i32 %r
|
|
}
|
|
|
|
define i32 @add_v64i32(<64 x i32> %vec) #0 {
|
|
; CHECK-LABEL: add_v64i32:
|
|
; CHECK: vadd
|
|
; CHECK: valign
|
|
; CHECK: vadd
|
|
; CHECK: valign
|
|
; CHECK: vadd
|
|
; CHECK: valign
|
|
; CHECK: vadd
|
|
; CHECK: valign
|
|
; CHECK: vadd
|
|
; CHECK: valign
|
|
; CHECK: vadd
|
|
entry:
|
|
%r = call i32 @llvm.vector.reduce.add.v64i32(<64 x i32> %vec)
|
|
ret i32 %r
|
|
}
|
|
|
|
;; Non-pow2 vectors are scalarized.
|
|
|
|
define i32 @add_v12i32(<12 x i32> %vec) #0 {
|
|
; CHECK-LABEL: add_v12i32:
|
|
; CHECK: [[RS0:r[0-9]+]] = add(r0,r1)
|
|
; CHECK: [[RS1:r[0-9]+]] += add([[RS0]],r{{[0-9]+}})
|
|
; CHECK: [[RS2:r[0-9]+]] += add([[RS1]],r{{[0-9]+}})
|
|
; CHECK: [[RS3:r[0-9]+]] += add([[RS2]],r{{[0-9]+}})
|
|
; CHECK: [[RS4:r[0-9]+]] += add([[RS3]],r{{[0-9]+}})
|
|
; CHECK: [[RS5:r[0-9]+]] += add([[RS4]],r{{[0-9]+}})
|
|
entry:
|
|
%r = call i32 @llvm.vector.reduce.add.v12i32(<12 x i32> %vec)
|
|
ret i32 %r
|
|
}
|
|
|
|
define i32 @add_v3i32(<3 x i32> %vec) #0 {
|
|
; CHECK-LABEL: add_v3i32:
|
|
; CHECK: r{{[0-9]+}} += add(r{{[0-9]+}},r{{[0-9]+}})
|
|
entry:
|
|
%r = call i32 @llvm.vector.reduce.add.v3i32(<3 x i32> %vec)
|
|
ret i32 %r
|
|
}
|
|
|
|
attributes #0 = { nounwind readnone "target-cpu"="hexagonv68" "target-features"="+hvx,+hvx-length128b" }
|