1; RUN: llvm-as < %s | llc -march=arm -mattr=+neon > %t 2; RUN: grep {vmul\\.i8} %t | count 2 3; RUN: grep {vmul\\.i16} %t | count 2 4; RUN: grep {vmul\\.i32} %t | count 2 5; RUN: grep {vmul\\.f32} %t | count 2 6; RUN: grep {vmul\\.p8} %t | count 2 7 8define <8 x i8> @vmuli8(<8 x i8>* %A, <8 x i8>* %B) nounwind { 9 %tmp1 = load <8 x i8>* %A 10 %tmp2 = load <8 x i8>* %B 11 %tmp3 = mul <8 x i8> %tmp1, %tmp2 12 ret <8 x i8> %tmp3 13} 14 15define <4 x i16> @vmuli16(<4 x i16>* %A, <4 x i16>* %B) nounwind { 16 %tmp1 = load <4 x i16>* %A 17 %tmp2 = load <4 x i16>* %B 18 %tmp3 = mul <4 x i16> %tmp1, %tmp2 19 ret <4 x i16> %tmp3 20} 21 22define <2 x i32> @vmuli32(<2 x i32>* %A, <2 x i32>* %B) nounwind { 23 %tmp1 = load <2 x i32>* %A 24 %tmp2 = load <2 x i32>* %B 25 %tmp3 = mul <2 x i32> %tmp1, %tmp2 26 ret <2 x i32> %tmp3 27} 28 29define <2 x float> @vmulf32(<2 x float>* %A, <2 x float>* %B) nounwind { 30 %tmp1 = load <2 x float>* %A 31 %tmp2 = load <2 x float>* %B 32 %tmp3 = mul <2 x float> %tmp1, %tmp2 33 ret <2 x float> %tmp3 34} 35 36define <8 x i8> @vmulp8(<8 x i8>* %A, <8 x i8>* %B) nounwind { 37 %tmp1 = load <8 x i8>* %A 38 %tmp2 = load <8 x i8>* %B 39 %tmp3 = call <8 x i8> @llvm.arm.neon.vmulp.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2) 40 ret <8 x i8> %tmp3 41} 42 43define <16 x i8> @vmulQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind { 44 %tmp1 = load <16 x i8>* %A 45 %tmp2 = load <16 x i8>* %B 46 %tmp3 = mul <16 x i8> %tmp1, %tmp2 47 ret <16 x i8> %tmp3 48} 49 50define <8 x i16> @vmulQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind { 51 %tmp1 = load <8 x i16>* %A 52 %tmp2 = load <8 x i16>* %B 53 %tmp3 = mul <8 x i16> %tmp1, %tmp2 54 ret <8 x i16> %tmp3 55} 56 57define <4 x i32> @vmulQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind { 58 %tmp1 = load <4 x i32>* %A 59 %tmp2 = load <4 x i32>* %B 60 %tmp3 = mul <4 x i32> %tmp1, %tmp2 61 ret <4 x i32> %tmp3 62} 63 64define <4 x float> @vmulQf32(<4 x float>* %A, <4 x float>* %B) nounwind { 65 %tmp1 = load <4 x float>* %A 66 %tmp2 = load <4 x float>* %B 67 %tmp3 = mul <4 x float> %tmp1, %tmp2 68 ret <4 x float> %tmp3 69} 70 71define <16 x i8> @vmulQp8(<16 x i8>* %A, <16 x i8>* %B) nounwind { 72 %tmp1 = load <16 x i8>* %A 73 %tmp2 = load <16 x i8>* %B 74 %tmp3 = call <16 x i8> @llvm.arm.neon.vmulp.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2) 75 ret <16 x i8> %tmp3 76} 77 78declare <8 x i8> @llvm.arm.neon.vmulp.v8i8(<8 x i8>, <8 x i8>) nounwind readnone 79declare <16 x i8> @llvm.arm.neon.vmulp.v16i8(<16 x i8>, <16 x i8>) nounwind readnone 80