summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorDavid Green <david.green@arm.com>2020-01-05 10:54:49 +0000
committerDavid Green <david.green@arm.com>2020-01-05 11:24:04 +0000
commitc15a56f61a56e862c9613a334d1427638899942b (patch)
treedbebb65a067e34e84b25d6a81b0add214d8a8617 /llvm/test
parent5a253992212451be919978610332cc42d4b48d47 (diff)
downloadbcm5719-llvm-c15a56f61a56e862c9613a334d1427638899942b.tar.gz
bcm5719-llvm-c15a56f61a56e862c9613a334d1427638899942b.zip
[ARM] Fill in FP16 FMA patterns
This adds fp16 variants of all the fma patterns in the ARM backend. Differential Revision: https://reviews.llvm.org/D72138
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/ARM/fp16-fusedMAC.ll108
1 files changed, 44 insertions, 64 deletions
diff --git a/llvm/test/CodeGen/ARM/fp16-fusedMAC.ll b/llvm/test/CodeGen/ARM/fp16-fusedMAC.ll
index fea408a01a4..b6387b87262 100644
--- a/llvm/test/CodeGen/ARM/fp16-fusedMAC.ll
+++ b/llvm/test/CodeGen/ARM/fp16-fusedMAC.ll
@@ -230,21 +230,19 @@ define arm_aapcs_vfpcc void @fms1(half *%a1, half *%a2, half *%a3) {
; CHECK-LABEL: fms1:
; CHECK: @ %bb.0:
; CHECK-NEXT: vldr.16 s0, [r1]
-; CHECK-NEXT: vldr.16 s2, [r2]
-; CHECK-NEXT: vldr.16 s4, [r0]
-; CHECK-NEXT: vneg.f16 s4, s4
-; CHECK-NEXT: vfma.f16 s2, s4, s0
-; CHECK-NEXT: vstr.16 s2, [r0]
+; CHECK-NEXT: vldr.16 s2, [r0]
+; CHECK-NEXT: vldr.16 s4, [r2]
+; CHECK-NEXT: vfms.f16 s4, s2, s0
+; CHECK-NEXT: vstr.16 s4, [r0]
; CHECK-NEXT: bx lr
;
; DONT-FUSE-LABEL: fms1:
; DONT-FUSE: @ %bb.0:
; DONT-FUSE-NEXT: vldr.16 s0, [r1]
-; DONT-FUSE-NEXT: vldr.16 s2, [r2]
-; DONT-FUSE-NEXT: vldr.16 s4, [r0]
-; DONT-FUSE-NEXT: vneg.f16 s4, s4
-; DONT-FUSE-NEXT: vfma.f16 s2, s4, s0
-; DONT-FUSE-NEXT: vstr.16 s2, [r0]
+; DONT-FUSE-NEXT: vldr.16 s2, [r0]
+; DONT-FUSE-NEXT: vldr.16 s4, [r2]
+; DONT-FUSE-NEXT: vfms.f16 s4, s2, s0
+; DONT-FUSE-NEXT: vstr.16 s4, [r0]
; DONT-FUSE-NEXT: bx lr
%f1 = load half, half *%a1, align 2
@@ -259,22 +257,20 @@ define arm_aapcs_vfpcc void @fms1(half *%a1, half *%a2, half *%a3) {
define arm_aapcs_vfpcc void @fms2(half *%a1, half *%a2, half *%a3) {
; CHECK-LABEL: fms2:
; CHECK: @ %bb.0:
-; CHECK-NEXT: vldr.16 s0, [r1]
-; CHECK-NEXT: vldr.16 s2, [r2]
-; CHECK-NEXT: vldr.16 s4, [r0]
-; CHECK-NEXT: vneg.f16 s4, s4
-; CHECK-NEXT: vfma.f16 s2, s0, s4
-; CHECK-NEXT: vstr.16 s2, [r0]
+; CHECK-NEXT: vldr.16 s0, [r0]
+; CHECK-NEXT: vldr.16 s2, [r1]
+; CHECK-NEXT: vldr.16 s4, [r2]
+; CHECK-NEXT: vfms.f16 s4, s2, s0
+; CHECK-NEXT: vstr.16 s4, [r0]
; CHECK-NEXT: bx lr
;
; DONT-FUSE-LABEL: fms2:
; DONT-FUSE: @ %bb.0:
-; DONT-FUSE-NEXT: vldr.16 s0, [r1]
-; DONT-FUSE-NEXT: vldr.16 s2, [r2]
-; DONT-FUSE-NEXT: vldr.16 s4, [r0]
-; DONT-FUSE-NEXT: vneg.f16 s4, s4
-; DONT-FUSE-NEXT: vfma.f16 s2, s0, s4
-; DONT-FUSE-NEXT: vstr.16 s2, [r0]
+; DONT-FUSE-NEXT: vldr.16 s0, [r0]
+; DONT-FUSE-NEXT: vldr.16 s2, [r1]
+; DONT-FUSE-NEXT: vldr.16 s4, [r2]
+; DONT-FUSE-NEXT: vfms.f16 s4, s2, s0
+; DONT-FUSE-NEXT: vstr.16 s4, [r0]
; DONT-FUSE-NEXT: bx lr
%f1 = load half, half *%a1, align 2
@@ -292,9 +288,8 @@ define arm_aapcs_vfpcc void @fnma1(half *%a1, half *%a2, half *%a3) {
; CHECK-NEXT: vldr.16 s0, [r1]
; CHECK-NEXT: vldr.16 s2, [r0]
; CHECK-NEXT: vldr.16 s4, [r2]
-; CHECK-NEXT: vfma.f16 s4, s2, s0
-; CHECK-NEXT: vneg.f16 s0, s4
-; CHECK-NEXT: vstr.16 s0, [r0]
+; CHECK-NEXT: vfnma.f16 s4, s2, s0
+; CHECK-NEXT: vstr.16 s4, [r0]
; CHECK-NEXT: bx lr
;
; DONT-FUSE-LABEL: fnma1:
@@ -302,9 +297,8 @@ define arm_aapcs_vfpcc void @fnma1(half *%a1, half *%a2, half *%a3) {
; DONT-FUSE-NEXT: vldr.16 s0, [r1]
; DONT-FUSE-NEXT: vldr.16 s2, [r0]
; DONT-FUSE-NEXT: vldr.16 s4, [r2]
-; DONT-FUSE-NEXT: vfma.f16 s4, s2, s0
-; DONT-FUSE-NEXT: vneg.f16 s0, s4
-; DONT-FUSE-NEXT: vstr.16 s0, [r0]
+; DONT-FUSE-NEXT: vfnma.f16 s4, s2, s0
+; DONT-FUSE-NEXT: vstr.16 s4, [r0]
; DONT-FUSE-NEXT: bx lr
%f1 = load half, half *%a1, align 2
@@ -321,10 +315,8 @@ define arm_aapcs_vfpcc void @fnma2(half *%a1, half *%a2, half *%a3) {
; CHECK: @ %bb.0:
; CHECK-NEXT: vldr.16 s0, [r1]
; CHECK-NEXT: vldr.16 s2, [r0]
-; CHECK-NEXT: vneg.f16 s2, s2
; CHECK-NEXT: vldr.16 s4, [r2]
-; CHECK-NEXT: vneg.f16 s4, s4
-; CHECK-NEXT: vfma.f16 s4, s2, s0
+; CHECK-NEXT: vfnma.f16 s4, s2, s0
; CHECK-NEXT: vstr.16 s4, [r0]
; CHECK-NEXT: bx lr
;
@@ -332,10 +324,8 @@ define arm_aapcs_vfpcc void @fnma2(half *%a1, half *%a2, half *%a3) {
; DONT-FUSE: @ %bb.0:
; DONT-FUSE-NEXT: vldr.16 s0, [r1]
; DONT-FUSE-NEXT: vldr.16 s2, [r0]
-; DONT-FUSE-NEXT: vneg.f16 s2, s2
; DONT-FUSE-NEXT: vldr.16 s4, [r2]
-; DONT-FUSE-NEXT: vneg.f16 s4, s4
-; DONT-FUSE-NEXT: vfma.f16 s4, s2, s0
+; DONT-FUSE-NEXT: vfnma.f16 s4, s2, s0
; DONT-FUSE-NEXT: vstr.16 s4, [r0]
; DONT-FUSE-NEXT: bx lr
@@ -355,8 +345,7 @@ define arm_aapcs_vfpcc void @fnms1(half *%a1, half *%a2, half *%a3) {
; CHECK-NEXT: vldr.16 s0, [r1]
; CHECK-NEXT: vldr.16 s2, [r0]
; CHECK-NEXT: vldr.16 s4, [r2]
-; CHECK-NEXT: vneg.f16 s4, s4
-; CHECK-NEXT: vfma.f16 s4, s2, s0
+; CHECK-NEXT: vfnms.f16 s4, s2, s0
; CHECK-NEXT: vstr.16 s4, [r0]
; CHECK-NEXT: bx lr
;
@@ -365,8 +354,7 @@ define arm_aapcs_vfpcc void @fnms1(half *%a1, half *%a2, half *%a3) {
; DONT-FUSE-NEXT: vldr.16 s0, [r1]
; DONT-FUSE-NEXT: vldr.16 s2, [r0]
; DONT-FUSE-NEXT: vldr.16 s4, [r2]
-; DONT-FUSE-NEXT: vneg.f16 s4, s4
-; DONT-FUSE-NEXT: vfma.f16 s4, s2, s0
+; DONT-FUSE-NEXT: vfnms.f16 s4, s2, s0
; DONT-FUSE-NEXT: vstr.16 s4, [r0]
; DONT-FUSE-NEXT: bx lr
@@ -383,23 +371,19 @@ define arm_aapcs_vfpcc void @fnms2(half *%a1, half *%a2, half *%a3) {
; CHECK-LABEL: fnms2:
; CHECK: @ %bb.0:
; CHECK-NEXT: vldr.16 s0, [r1]
-; CHECK-NEXT: vldr.16 s2, [r2]
-; CHECK-NEXT: vldr.16 s4, [r0]
-; CHECK-NEXT: vneg.f16 s4, s4
-; CHECK-NEXT: vfma.f16 s2, s4, s0
-; CHECK-NEXT: vneg.f16 s0, s2
-; CHECK-NEXT: vstr.16 s0, [r0]
+; CHECK-NEXT: vldr.16 s2, [r0]
+; CHECK-NEXT: vldr.16 s4, [r2]
+; CHECK-NEXT: vfnms.f16 s4, s2, s0
+; CHECK-NEXT: vstr.16 s4, [r0]
; CHECK-NEXT: bx lr
;
; DONT-FUSE-LABEL: fnms2:
; DONT-FUSE: @ %bb.0:
; DONT-FUSE-NEXT: vldr.16 s0, [r1]
-; DONT-FUSE-NEXT: vldr.16 s2, [r2]
-; DONT-FUSE-NEXT: vldr.16 s4, [r0]
-; DONT-FUSE-NEXT: vneg.f16 s4, s4
-; DONT-FUSE-NEXT: vfma.f16 s2, s4, s0
-; DONT-FUSE-NEXT: vneg.f16 s0, s2
-; DONT-FUSE-NEXT: vstr.16 s0, [r0]
+; DONT-FUSE-NEXT: vldr.16 s2, [r0]
+; DONT-FUSE-NEXT: vldr.16 s4, [r2]
+; DONT-FUSE-NEXT: vfnms.f16 s4, s2, s0
+; DONT-FUSE-NEXT: vstr.16 s4, [r0]
; DONT-FUSE-NEXT: bx lr
%f1 = load half, half *%a1, align 2
@@ -415,24 +399,20 @@ define arm_aapcs_vfpcc void @fnms2(half *%a1, half *%a2, half *%a3) {
define arm_aapcs_vfpcc void @fnms3(half *%a1, half *%a2, half *%a3) {
; CHECK-LABEL: fnms3:
; CHECK: @ %bb.0:
-; CHECK-NEXT: vldr.16 s0, [r0]
-; CHECK-NEXT: vldr.16 s2, [r2]
-; CHECK-NEXT: vldr.16 s4, [r1]
-; CHECK-NEXT: vneg.f16 s4, s4
-; CHECK-NEXT: vfma.f16 s2, s0, s4
-; CHECK-NEXT: vneg.f16 s0, s2
-; CHECK-NEXT: vstr.16 s0, [r0]
+; CHECK-NEXT: vldr.16 s0, [r1]
+; CHECK-NEXT: vldr.16 s2, [r0]
+; CHECK-NEXT: vldr.16 s4, [r2]
+; CHECK-NEXT: vfnms.f16 s4, s2, s0
+; CHECK-NEXT: vstr.16 s4, [r0]
; CHECK-NEXT: bx lr
;
; DONT-FUSE-LABEL: fnms3:
; DONT-FUSE: @ %bb.0:
-; DONT-FUSE-NEXT: vldr.16 s0, [r0]
-; DONT-FUSE-NEXT: vldr.16 s2, [r2]
-; DONT-FUSE-NEXT: vldr.16 s4, [r1]
-; DONT-FUSE-NEXT: vneg.f16 s4, s4
-; DONT-FUSE-NEXT: vfma.f16 s2, s0, s4
-; DONT-FUSE-NEXT: vneg.f16 s0, s2
-; DONT-FUSE-NEXT: vstr.16 s0, [r0]
+; DONT-FUSE-NEXT: vldr.16 s0, [r1]
+; DONT-FUSE-NEXT: vldr.16 s2, [r0]
+; DONT-FUSE-NEXT: vldr.16 s4, [r2]
+; DONT-FUSE-NEXT: vfnms.f16 s4, s2, s0
+; DONT-FUSE-NEXT: vstr.16 s4, [r0]
; DONT-FUSE-NEXT: bx lr
%f1 = load half, half *%a1, align 2
OpenPOWER on IntegriCloud