blob: 71bb0e70abfaa0344839cd4340bbf4b5377fd37f [file] [log] [blame]
Tim Northover3b0846e2014-05-24 12:50:23 +00001; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s
Tim Northover40e9efd2013-08-01 09:20:35 +00002
3
4define <8 x i8> @mla8xi8(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C) {
Kevin Qine4ddaa12013-12-12 02:19:13 +00005;CHECK: mla {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
Tim Northover40e9efd2013-08-01 09:20:35 +00006 %tmp1 = mul <8 x i8> %A, %B;
7 %tmp2 = add <8 x i8> %C, %tmp1;
8 ret <8 x i8> %tmp2
9}
10
11define <16 x i8> @mla16xi8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C) {
Kevin Qine4ddaa12013-12-12 02:19:13 +000012;CHECK: mla {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
Tim Northover40e9efd2013-08-01 09:20:35 +000013 %tmp1 = mul <16 x i8> %A, %B;
14 %tmp2 = add <16 x i8> %C, %tmp1;
15 ret <16 x i8> %tmp2
16}
17
18define <4 x i16> @mla4xi16(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C) {
Kevin Qine4ddaa12013-12-12 02:19:13 +000019;CHECK: mla {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
Tim Northover40e9efd2013-08-01 09:20:35 +000020 %tmp1 = mul <4 x i16> %A, %B;
21 %tmp2 = add <4 x i16> %C, %tmp1;
22 ret <4 x i16> %tmp2
23}
24
25define <8 x i16> @mla8xi16(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C) {
Kevin Qine4ddaa12013-12-12 02:19:13 +000026;CHECK: mla {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
Tim Northover40e9efd2013-08-01 09:20:35 +000027 %tmp1 = mul <8 x i16> %A, %B;
28 %tmp2 = add <8 x i16> %C, %tmp1;
29 ret <8 x i16> %tmp2
30}
31
32define <2 x i32> @mla2xi32(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C) {
Kevin Qine4ddaa12013-12-12 02:19:13 +000033;CHECK: mla {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
Tim Northover40e9efd2013-08-01 09:20:35 +000034 %tmp1 = mul <2 x i32> %A, %B;
35 %tmp2 = add <2 x i32> %C, %tmp1;
36 ret <2 x i32> %tmp2
37}
38
39define <4 x i32> @mla4xi32(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) {
Kevin Qine4ddaa12013-12-12 02:19:13 +000040;CHECK: mla {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
Tim Northover40e9efd2013-08-01 09:20:35 +000041 %tmp1 = mul <4 x i32> %A, %B;
42 %tmp2 = add <4 x i32> %C, %tmp1;
43 ret <4 x i32> %tmp2
44}
45
46define <8 x i8> @mls8xi8(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C) {
Kevin Qine4ddaa12013-12-12 02:19:13 +000047;CHECK: mls {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
Tim Northover40e9efd2013-08-01 09:20:35 +000048 %tmp1 = mul <8 x i8> %A, %B;
49 %tmp2 = sub <8 x i8> %C, %tmp1;
50 ret <8 x i8> %tmp2
51}
52
53define <16 x i8> @mls16xi8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C) {
Kevin Qine4ddaa12013-12-12 02:19:13 +000054;CHECK: mls {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
Tim Northover40e9efd2013-08-01 09:20:35 +000055 %tmp1 = mul <16 x i8> %A, %B;
56 %tmp2 = sub <16 x i8> %C, %tmp1;
57 ret <16 x i8> %tmp2
58}
59
60define <4 x i16> @mls4xi16(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C) {
Kevin Qine4ddaa12013-12-12 02:19:13 +000061;CHECK: mls {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
Tim Northover40e9efd2013-08-01 09:20:35 +000062 %tmp1 = mul <4 x i16> %A, %B;
63 %tmp2 = sub <4 x i16> %C, %tmp1;
64 ret <4 x i16> %tmp2
65}
66
67define <8 x i16> @mls8xi16(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C) {
Kevin Qine4ddaa12013-12-12 02:19:13 +000068;CHECK: mls {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
Tim Northover40e9efd2013-08-01 09:20:35 +000069 %tmp1 = mul <8 x i16> %A, %B;
70 %tmp2 = sub <8 x i16> %C, %tmp1;
71 ret <8 x i16> %tmp2
72}
73
74define <2 x i32> @mls2xi32(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C) {
Kevin Qine4ddaa12013-12-12 02:19:13 +000075;CHECK: mls {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
Tim Northover40e9efd2013-08-01 09:20:35 +000076 %tmp1 = mul <2 x i32> %A, %B;
77 %tmp2 = sub <2 x i32> %C, %tmp1;
78 ret <2 x i32> %tmp2
79}
80
81define <4 x i32> @mls4xi32(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) {
Kevin Qine4ddaa12013-12-12 02:19:13 +000082;CHECK: mls {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
Tim Northover40e9efd2013-08-01 09:20:35 +000083 %tmp1 = mul <4 x i32> %A, %B;
84 %tmp2 = sub <4 x i32> %C, %tmp1;
85 ret <4 x i32> %tmp2
86}
87
88