1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @mla8xi8(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C) { 5*9880d681SAndroid Build Coastguard Worker;CHECK: mla {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b 6*9880d681SAndroid Build Coastguard Worker %tmp1 = mul <8 x i8> %A, %B; 7*9880d681SAndroid Build Coastguard Worker %tmp2 = add <8 x i8> %C, %tmp1; 8*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp2 9*9880d681SAndroid Build Coastguard Worker} 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @mla16xi8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C) { 12*9880d681SAndroid Build Coastguard Worker;CHECK: mla {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b 13*9880d681SAndroid Build Coastguard Worker %tmp1 = mul <16 x i8> %A, %B; 14*9880d681SAndroid Build Coastguard Worker %tmp2 = add <16 x i8> %C, %tmp1; 15*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %tmp2 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @mla4xi16(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C) { 19*9880d681SAndroid Build Coastguard Worker;CHECK: mla {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h 20*9880d681SAndroid Build Coastguard Worker %tmp1 = mul <4 x i16> %A, %B; 21*9880d681SAndroid Build Coastguard Worker %tmp2 = add <4 x i16> %C, %tmp1; 22*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp2 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @mla8xi16(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C) { 26*9880d681SAndroid Build Coastguard Worker;CHECK: mla {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h 27*9880d681SAndroid Build Coastguard Worker %tmp1 = mul <8 x i16> %A, %B; 28*9880d681SAndroid Build Coastguard Worker %tmp2 = add <8 x i16> %C, %tmp1; 29*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp2 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @mla2xi32(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C) { 33*9880d681SAndroid Build Coastguard Worker;CHECK: mla {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s 34*9880d681SAndroid Build Coastguard Worker %tmp1 = mul <2 x i32> %A, %B; 35*9880d681SAndroid Build Coastguard Worker %tmp2 = add <2 x i32> %C, %tmp1; 36*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %tmp2 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @mla4xi32(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) { 40*9880d681SAndroid Build Coastguard Worker;CHECK: mla {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s 41*9880d681SAndroid Build Coastguard Worker %tmp1 = mul <4 x i32> %A, %B; 42*9880d681SAndroid Build Coastguard Worker %tmp2 = add <4 x i32> %C, %tmp1; 43*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp2 44*9880d681SAndroid Build Coastguard Worker} 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @mls8xi8(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C) { 47*9880d681SAndroid Build Coastguard Worker;CHECK: mls {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b 48*9880d681SAndroid Build Coastguard Worker %tmp1 = mul <8 x i8> %A, %B; 49*9880d681SAndroid Build Coastguard Worker %tmp2 = sub <8 x i8> %C, %tmp1; 50*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp2 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @mls16xi8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C) { 54*9880d681SAndroid Build Coastguard Worker;CHECK: mls {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b 55*9880d681SAndroid Build Coastguard Worker %tmp1 = mul <16 x i8> %A, %B; 56*9880d681SAndroid Build Coastguard Worker %tmp2 = sub <16 x i8> %C, %tmp1; 57*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %tmp2 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @mls4xi16(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C) { 61*9880d681SAndroid Build Coastguard Worker;CHECK: mls {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h 62*9880d681SAndroid Build Coastguard Worker %tmp1 = mul <4 x i16> %A, %B; 63*9880d681SAndroid Build Coastguard Worker %tmp2 = sub <4 x i16> %C, %tmp1; 64*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp2 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @mls8xi16(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C) { 68*9880d681SAndroid Build Coastguard Worker;CHECK: mls {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h 69*9880d681SAndroid Build Coastguard Worker %tmp1 = mul <8 x i16> %A, %B; 70*9880d681SAndroid Build Coastguard Worker %tmp2 = sub <8 x i16> %C, %tmp1; 71*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp2 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @mls2xi32(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C) { 75*9880d681SAndroid Build Coastguard Worker;CHECK: mls {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s 76*9880d681SAndroid Build Coastguard Worker %tmp1 = mul <2 x i32> %A, %B; 77*9880d681SAndroid Build Coastguard Worker %tmp2 = sub <2 x i32> %C, %tmp1; 78*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %tmp2 79*9880d681SAndroid Build Coastguard Worker} 80*9880d681SAndroid Build Coastguard Worker 81*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @mls4xi32(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C) { 82*9880d681SAndroid Build Coastguard Worker;CHECK: mls {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s 83*9880d681SAndroid Build Coastguard Worker %tmp1 = mul <4 x i32> %A, %B; 84*9880d681SAndroid Build Coastguard Worker %tmp2 = sub <4 x i32> %C, %tmp1; 85*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp2 86*9880d681SAndroid Build Coastguard Worker} 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Worker 89