blob: cdb779f5c4e7d994ba9a266d7beeac803aaefeee [file] [edit]
;; RUN: llc --mtriple=hexagon --mcpu=hexagonv81 --mattr=+hvxv81,+hvx-length128b %s -o - | FileCheck %s
define void @mul_and_sub_1(ptr readonly %A, ptr readonly %B, ptr readonly %C, ptr writeonly %D) {
entry:
%AVec = load <32 x float>, ptr %A, align 4
%BVec = load <32 x float>, ptr %B, align 4
%CVec = load <32 x float>, ptr %C, align 4
%AtBVec = fmul <32 x float> %AVec, %BVec
%DVec = fsub <32 x float> %CVec, %AtBVec
store <32 x float> %DVec, ptr %D, align 4
ret void
}
;; CHECK: mul_and_sub_1
;; CHECK: vsub(v{{[0-9]+}}.sf,v{{[0-9]+}}.qf32)
define void @mul_and_sub_2(ptr readonly %A, ptr readonly %B, ptr readonly %C, ptr writeonly %D) {
entry:
%AVec = load <32 x float>, ptr %A, align 4
%BVec = load <32 x float>, ptr %B, align 4
%CVec = load <32 x float>, ptr %C, align 4
%AtBVec = fmul <32 x float> %AVec, %BVec
%DVec = fsub <32 x float> %AtBVec, %CVec
store <32 x float> %DVec, ptr %D, align 4
ret void
}
;; CHECK: mul_and_sub_2
;; CHECK: vsub(v{{[0-9]+}}.qf32,v{{[0-9]+}}.sf)
define void @mul_and_sub_3(ptr readonly %A, ptr readonly %B, ptr readonly %C, ptr writeonly %D) {
entry:
%AVec = load <64 x half>, ptr %A, align 4
%BVec = load <64 x half>, ptr %B, align 4
%CVec = load <64 x half>, ptr %C, align 4
%AtBVec = fmul <64 x half> %AVec, %BVec
%DVec = fsub <64 x half> %CVec, %AtBVec
store <64 x half> %DVec, ptr %D, align 4
ret void
}
;; CHECK: mul_and_sub_3
;; CHECK: vsub(v{{[0-9]+}}.hf,v{{[0-9]+}}.qf16)
define void @mul_and_sub_4(ptr readonly %A, ptr readonly %B, ptr readonly %C, ptr writeonly %D) {
entry:
%AVec = load <64 x half>, ptr %A, align 4
%BVec = load <64 x half>, ptr %B, align 4
%CVec = load <64 x half>, ptr %C, align 4
%AtBVec = fmul <64 x half> %AVec, %BVec
%DVec = fsub <64 x half> %AtBVec, %CVec
store <64 x half> %DVec, ptr %D, align 4
ret void
}
;; CHECK: mul_and_sub_4
;; CHECK: vsub(v{{[0-9]+}}.qf16,v{{[0-9]+}}.hf)