1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-none-linux-gnu -mattr=+neon -fp-contract=fast | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.aarch64.neon.fmulx.v2f64(<2 x double>, <2 x double>) 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.fmulx.v4f32(<4 x float>, <4 x float>) 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.fmulx.v2f32(<2 x float>, <2 x float>) 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.sqrdmulh.v4i32(<4 x i32>, <4 x i32>) 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.sqrdmulh.v2i32(<2 x i32>, <2 x i32>) 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.aarch64.neon.sqrdmulh.v8i16(<8 x i16>, <8 x i16>) 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.sqrdmulh.v4i16(<4 x i16>, <4 x i16>) 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.sqdmulh.v4i32(<4 x i32>, <4 x i32>) 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.sqdmulh.v2i32(<2 x i32>, <2 x i32>) 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.aarch64.neon.sqdmulh.v8i16(<8 x i16>, <8 x i16>) 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.sqdmulh.v4i16(<4 x i16>, <4 x i16>) 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32>, <2 x i32>) 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16>, <4 x i16>) 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.sqsub.v2i64(<2 x i64>, <2 x i64>) 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.sqsub.v4i32(<4 x i32>, <4 x i32>) 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.sqadd.v2i64(<2 x i64>, <2 x i64>) 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.sqadd.v4i32(<4 x i32>, <4 x i32>) 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32>, <2 x i32>) 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16>, <4 x i16>) 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32>, <2 x i32>) 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16>, <4 x i16>) 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vmla_lane_s16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %v) { 46*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmla_lane_s16: 47*9880d681SAndroid Build Coastguard Worker; CHECK: mla {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3] 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 49*9880d681SAndroid Build Coastguard Workerentry: 50*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 51*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i16> %shuffle, %b 52*9880d681SAndroid Build Coastguard Worker %add = add <4 x i16> %mul, %a 53*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %add 54*9880d681SAndroid Build Coastguard Worker} 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmlaq_lane_s16(<8 x i16> %a, <8 x i16> %b, <4 x i16> %v) { 57*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlaq_lane_s16: 58*9880d681SAndroid Build Coastguard Worker; CHECK: mla {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[3] 59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 60*9880d681SAndroid Build Coastguard Workerentry: 61*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <8 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3> 62*9880d681SAndroid Build Coastguard Worker %mul = mul <8 x i16> %shuffle, %b 63*9880d681SAndroid Build Coastguard Worker %add = add <8 x i16> %mul, %a 64*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %add 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vmla_lane_s32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %v) { 68*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmla_lane_s32: 69*9880d681SAndroid Build Coastguard Worker; CHECK: mla {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 71*9880d681SAndroid Build Coastguard Workerentry: 72*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 73*9880d681SAndroid Build Coastguard Worker %mul = mul <2 x i32> %shuffle, %b 74*9880d681SAndroid Build Coastguard Worker %add = add <2 x i32> %mul, %a 75*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %add 76*9880d681SAndroid Build Coastguard Worker} 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlaq_lane_s32(<4 x i32> %a, <4 x i32> %b, <2 x i32> %v) { 79*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlaq_lane_s32: 80*9880d681SAndroid Build Coastguard Worker; CHECK: mla {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 81*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 82*9880d681SAndroid Build Coastguard Workerentry: 83*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 84*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i32> %shuffle, %b 85*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %mul, %a 86*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 87*9880d681SAndroid Build Coastguard Worker} 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vmla_laneq_s16(<4 x i16> %a, <4 x i16> %b, <8 x i16> %v) { 90*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmla_laneq_s16: 91*9880d681SAndroid Build Coastguard Worker; CHECK: mla {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[7] 92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 93*9880d681SAndroid Build Coastguard Workerentry: 94*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7> 95*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i16> %shuffle, %b 96*9880d681SAndroid Build Coastguard Worker %add = add <4 x i16> %mul, %a 97*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %add 98*9880d681SAndroid Build Coastguard Worker} 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmlaq_laneq_s16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %v) { 101*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlaq_laneq_s16: 102*9880d681SAndroid Build Coastguard Worker; CHECK: mla {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[7] 103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 104*9880d681SAndroid Build Coastguard Workerentry: 105*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7> 106*9880d681SAndroid Build Coastguard Worker %mul = mul <8 x i16> %shuffle, %b 107*9880d681SAndroid Build Coastguard Worker %add = add <8 x i16> %mul, %a 108*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %add 109*9880d681SAndroid Build Coastguard Worker} 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vmla_laneq_s32(<2 x i32> %a, <2 x i32> %b, <4 x i32> %v) { 112*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmla_laneq_s32: 113*9880d681SAndroid Build Coastguard Worker; CHECK: mla {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[3] 114*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 115*9880d681SAndroid Build Coastguard Workerentry: 116*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 117*9880d681SAndroid Build Coastguard Worker %mul = mul <2 x i32> %shuffle, %b 118*9880d681SAndroid Build Coastguard Worker %add = add <2 x i32> %mul, %a 119*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %add 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlaq_laneq_s32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %v) { 123*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlaq_laneq_s32: 124*9880d681SAndroid Build Coastguard Worker; CHECK: mla {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[3] 125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 126*9880d681SAndroid Build Coastguard Workerentry: 127*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 128*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i32> %shuffle, %b 129*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %mul, %a 130*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 131*9880d681SAndroid Build Coastguard Worker} 132*9880d681SAndroid Build Coastguard Worker 133*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vmls_lane_s16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %v) { 134*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmls_lane_s16: 135*9880d681SAndroid Build Coastguard Worker; CHECK: mls {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3] 136*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 137*9880d681SAndroid Build Coastguard Workerentry: 138*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 139*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i16> %shuffle, %b 140*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i16> %a, %mul 141*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %sub 142*9880d681SAndroid Build Coastguard Worker} 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmlsq_lane_s16(<8 x i16> %a, <8 x i16> %b, <4 x i16> %v) { 145*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsq_lane_s16: 146*9880d681SAndroid Build Coastguard Worker; CHECK: mls {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[3] 147*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 148*9880d681SAndroid Build Coastguard Workerentry: 149*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <8 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3> 150*9880d681SAndroid Build Coastguard Worker %mul = mul <8 x i16> %shuffle, %b 151*9880d681SAndroid Build Coastguard Worker %sub = sub <8 x i16> %a, %mul 152*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %sub 153*9880d681SAndroid Build Coastguard Worker} 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vmls_lane_s32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %v) { 156*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmls_lane_s32: 157*9880d681SAndroid Build Coastguard Worker; CHECK: mls {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 158*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 159*9880d681SAndroid Build Coastguard Workerentry: 160*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 161*9880d681SAndroid Build Coastguard Worker %mul = mul <2 x i32> %shuffle, %b 162*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i32> %a, %mul 163*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %sub 164*9880d681SAndroid Build Coastguard Worker} 165*9880d681SAndroid Build Coastguard Worker 166*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsq_lane_s32(<4 x i32> %a, <4 x i32> %b, <2 x i32> %v) { 167*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsq_lane_s32: 168*9880d681SAndroid Build Coastguard Worker; CHECK: mls {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 169*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 170*9880d681SAndroid Build Coastguard Workerentry: 171*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 172*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i32> %shuffle, %b 173*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %mul 174*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 175*9880d681SAndroid Build Coastguard Worker} 176*9880d681SAndroid Build Coastguard Worker 177*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vmls_laneq_s16(<4 x i16> %a, <4 x i16> %b, <8 x i16> %v) { 178*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmls_laneq_s16: 179*9880d681SAndroid Build Coastguard Worker; CHECK: mls {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[7] 180*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 181*9880d681SAndroid Build Coastguard Workerentry: 182*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7> 183*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i16> %shuffle, %b 184*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i16> %a, %mul 185*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %sub 186*9880d681SAndroid Build Coastguard Worker} 187*9880d681SAndroid Build Coastguard Worker 188*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmlsq_laneq_s16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %v) { 189*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsq_laneq_s16: 190*9880d681SAndroid Build Coastguard Worker; CHECK: mls {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[7] 191*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 192*9880d681SAndroid Build Coastguard Workerentry: 193*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7> 194*9880d681SAndroid Build Coastguard Worker %mul = mul <8 x i16> %shuffle, %b 195*9880d681SAndroid Build Coastguard Worker %sub = sub <8 x i16> %a, %mul 196*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %sub 197*9880d681SAndroid Build Coastguard Worker} 198*9880d681SAndroid Build Coastguard Worker 199*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vmls_laneq_s32(<2 x i32> %a, <2 x i32> %b, <4 x i32> %v) { 200*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmls_laneq_s32: 201*9880d681SAndroid Build Coastguard Worker; CHECK: mls {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[3] 202*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 203*9880d681SAndroid Build Coastguard Workerentry: 204*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 205*9880d681SAndroid Build Coastguard Worker %mul = mul <2 x i32> %shuffle, %b 206*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i32> %a, %mul 207*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %sub 208*9880d681SAndroid Build Coastguard Worker} 209*9880d681SAndroid Build Coastguard Worker 210*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsq_laneq_s32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %v) { 211*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsq_laneq_s32: 212*9880d681SAndroid Build Coastguard Worker; CHECK: mls {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[3] 213*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 214*9880d681SAndroid Build Coastguard Workerentry: 215*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 216*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i32> %shuffle, %b 217*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %mul 218*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 219*9880d681SAndroid Build Coastguard Worker} 220*9880d681SAndroid Build Coastguard Worker 221*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vmul_lane_s16(<4 x i16> %a, <4 x i16> %v) { 222*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_lane_s16: 223*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3] 224*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 225*9880d681SAndroid Build Coastguard Workerentry: 226*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 227*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i16> %shuffle, %a 228*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %mul 229*9880d681SAndroid Build Coastguard Worker} 230*9880d681SAndroid Build Coastguard Worker 231*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmulq_lane_s16(<8 x i16> %a, <4 x i16> %v) { 232*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_lane_s16: 233*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[3] 234*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 235*9880d681SAndroid Build Coastguard Workerentry: 236*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <8 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3> 237*9880d681SAndroid Build Coastguard Worker %mul = mul <8 x i16> %shuffle, %a 238*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %mul 239*9880d681SAndroid Build Coastguard Worker} 240*9880d681SAndroid Build Coastguard Worker 241*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vmul_lane_s32(<2 x i32> %a, <2 x i32> %v) { 242*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_lane_s32: 243*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 244*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 245*9880d681SAndroid Build Coastguard Workerentry: 246*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 247*9880d681SAndroid Build Coastguard Worker %mul = mul <2 x i32> %shuffle, %a 248*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %mul 249*9880d681SAndroid Build Coastguard Worker} 250*9880d681SAndroid Build Coastguard Worker 251*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmulq_lane_s32(<4 x i32> %a, <2 x i32> %v) { 252*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_lane_s32: 253*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 254*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 255*9880d681SAndroid Build Coastguard Workerentry: 256*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 257*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i32> %shuffle, %a 258*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %mul 259*9880d681SAndroid Build Coastguard Worker} 260*9880d681SAndroid Build Coastguard Worker 261*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vmul_lane_u16(<4 x i16> %a, <4 x i16> %v) { 262*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_lane_u16: 263*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3] 264*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 265*9880d681SAndroid Build Coastguard Workerentry: 266*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 267*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i16> %shuffle, %a 268*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %mul 269*9880d681SAndroid Build Coastguard Worker} 270*9880d681SAndroid Build Coastguard Worker 271*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmulq_lane_u16(<8 x i16> %a, <4 x i16> %v) { 272*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_lane_u16: 273*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[3] 274*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 275*9880d681SAndroid Build Coastguard Workerentry: 276*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <8 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3> 277*9880d681SAndroid Build Coastguard Worker %mul = mul <8 x i16> %shuffle, %a 278*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %mul 279*9880d681SAndroid Build Coastguard Worker} 280*9880d681SAndroid Build Coastguard Worker 281*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vmul_lane_u32(<2 x i32> %a, <2 x i32> %v) { 282*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_lane_u32: 283*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 284*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 285*9880d681SAndroid Build Coastguard Workerentry: 286*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 287*9880d681SAndroid Build Coastguard Worker %mul = mul <2 x i32> %shuffle, %a 288*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %mul 289*9880d681SAndroid Build Coastguard Worker} 290*9880d681SAndroid Build Coastguard Worker 291*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmulq_lane_u32(<4 x i32> %a, <2 x i32> %v) { 292*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_lane_u32: 293*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 294*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 295*9880d681SAndroid Build Coastguard Workerentry: 296*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 297*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i32> %shuffle, %a 298*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %mul 299*9880d681SAndroid Build Coastguard Worker} 300*9880d681SAndroid Build Coastguard Worker 301*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vmul_laneq_s16(<4 x i16> %a, <8 x i16> %v) { 302*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_laneq_s16: 303*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[7] 304*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 305*9880d681SAndroid Build Coastguard Workerentry: 306*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7> 307*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i16> %shuffle, %a 308*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %mul 309*9880d681SAndroid Build Coastguard Worker} 310*9880d681SAndroid Build Coastguard Worker 311*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmulq_laneq_s16(<8 x i16> %a, <8 x i16> %v) { 312*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_laneq_s16: 313*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[7] 314*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 315*9880d681SAndroid Build Coastguard Workerentry: 316*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7> 317*9880d681SAndroid Build Coastguard Worker %mul = mul <8 x i16> %shuffle, %a 318*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %mul 319*9880d681SAndroid Build Coastguard Worker} 320*9880d681SAndroid Build Coastguard Worker 321*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vmul_laneq_s32(<2 x i32> %a, <4 x i32> %v) { 322*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_laneq_s32: 323*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[3] 324*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 325*9880d681SAndroid Build Coastguard Workerentry: 326*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 327*9880d681SAndroid Build Coastguard Worker %mul = mul <2 x i32> %shuffle, %a 328*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %mul 329*9880d681SAndroid Build Coastguard Worker} 330*9880d681SAndroid Build Coastguard Worker 331*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmulq_laneq_s32(<4 x i32> %a, <4 x i32> %v) { 332*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_laneq_s32: 333*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[3] 334*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 335*9880d681SAndroid Build Coastguard Workerentry: 336*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 337*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i32> %shuffle, %a 338*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %mul 339*9880d681SAndroid Build Coastguard Worker} 340*9880d681SAndroid Build Coastguard Worker 341*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vmul_laneq_u16(<4 x i16> %a, <8 x i16> %v) { 342*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_laneq_u16: 343*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[7] 344*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 345*9880d681SAndroid Build Coastguard Workerentry: 346*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7> 347*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i16> %shuffle, %a 348*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %mul 349*9880d681SAndroid Build Coastguard Worker} 350*9880d681SAndroid Build Coastguard Worker 351*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmulq_laneq_u16(<8 x i16> %a, <8 x i16> %v) { 352*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_laneq_u16: 353*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[7] 354*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 355*9880d681SAndroid Build Coastguard Workerentry: 356*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7> 357*9880d681SAndroid Build Coastguard Worker %mul = mul <8 x i16> %shuffle, %a 358*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %mul 359*9880d681SAndroid Build Coastguard Worker} 360*9880d681SAndroid Build Coastguard Worker 361*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vmul_laneq_u32(<2 x i32> %a, <4 x i32> %v) { 362*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_laneq_u32: 363*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[3] 364*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 365*9880d681SAndroid Build Coastguard Workerentry: 366*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 367*9880d681SAndroid Build Coastguard Worker %mul = mul <2 x i32> %shuffle, %a 368*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %mul 369*9880d681SAndroid Build Coastguard Worker} 370*9880d681SAndroid Build Coastguard Worker 371*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmulq_laneq_u32(<4 x i32> %a, <4 x i32> %v) { 372*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_laneq_u32: 373*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[3] 374*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 375*9880d681SAndroid Build Coastguard Workerentry: 376*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 377*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i32> %shuffle, %a 378*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %mul 379*9880d681SAndroid Build Coastguard Worker} 380*9880d681SAndroid Build Coastguard Worker 381*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vfma_lane_f32(<2 x float> %a, <2 x float> %b, <2 x float> %v) { 382*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfma_lane_f32: 383*9880d681SAndroid Build Coastguard Worker; CHECK: fmla {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 384*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 385*9880d681SAndroid Build Coastguard Workerentry: 386*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <2 x float> %v, <2 x float> undef, <2 x i32> <i32 1, i32 1> 387*9880d681SAndroid Build Coastguard Worker %0 = tail call <2 x float> @llvm.fma.v2f32(<2 x float> %lane, <2 x float> %b, <2 x float> %a) 388*9880d681SAndroid Build Coastguard Worker ret <2 x float> %0 389*9880d681SAndroid Build Coastguard Worker} 390*9880d681SAndroid Build Coastguard Worker 391*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.fma.v2f32(<2 x float>, <2 x float>, <2 x float>) 392*9880d681SAndroid Build Coastguard Worker 393*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vfmaq_lane_f32(<4 x float> %a, <4 x float> %b, <2 x float> %v) { 394*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmaq_lane_f32: 395*9880d681SAndroid Build Coastguard Worker; CHECK: fmla {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 396*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 397*9880d681SAndroid Build Coastguard Workerentry: 398*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <2 x float> %v, <2 x float> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 399*9880d681SAndroid Build Coastguard Worker %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %lane, <4 x float> %b, <4 x float> %a) 400*9880d681SAndroid Build Coastguard Worker ret <4 x float> %0 401*9880d681SAndroid Build Coastguard Worker} 402*9880d681SAndroid Build Coastguard Worker 403*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.fma.v4f32(<4 x float>, <4 x float>, <4 x float>) 404*9880d681SAndroid Build Coastguard Worker 405*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vfma_laneq_f32(<2 x float> %a, <2 x float> %b, <4 x float> %v) { 406*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfma_laneq_f32: 407*9880d681SAndroid Build Coastguard Worker; CHECK: fmla {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[3] 408*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 409*9880d681SAndroid Build Coastguard Workerentry: 410*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <4 x float> %v, <4 x float> undef, <2 x i32> <i32 3, i32 3> 411*9880d681SAndroid Build Coastguard Worker %0 = tail call <2 x float> @llvm.fma.v2f32(<2 x float> %lane, <2 x float> %b, <2 x float> %a) 412*9880d681SAndroid Build Coastguard Worker ret <2 x float> %0 413*9880d681SAndroid Build Coastguard Worker} 414*9880d681SAndroid Build Coastguard Worker 415*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vfmaq_laneq_f32(<4 x float> %a, <4 x float> %b, <4 x float> %v) { 416*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmaq_laneq_f32: 417*9880d681SAndroid Build Coastguard Worker; CHECK: fmla {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[3] 418*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 419*9880d681SAndroid Build Coastguard Workerentry: 420*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 421*9880d681SAndroid Build Coastguard Worker %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %lane, <4 x float> %b, <4 x float> %a) 422*9880d681SAndroid Build Coastguard Worker ret <4 x float> %0 423*9880d681SAndroid Build Coastguard Worker} 424*9880d681SAndroid Build Coastguard Worker 425*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vfms_lane_f32(<2 x float> %a, <2 x float> %b, <2 x float> %v) { 426*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfms_lane_f32: 427*9880d681SAndroid Build Coastguard Worker; CHECK: fmls {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 428*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 429*9880d681SAndroid Build Coastguard Workerentry: 430*9880d681SAndroid Build Coastguard Worker %sub = fsub <2 x float> <float -0.000000e+00, float -0.000000e+00>, %v 431*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <2 x float> %sub, <2 x float> undef, <2 x i32> <i32 1, i32 1> 432*9880d681SAndroid Build Coastguard Worker %0 = tail call <2 x float> @llvm.fma.v2f32(<2 x float> %lane, <2 x float> %b, <2 x float> %a) 433*9880d681SAndroid Build Coastguard Worker ret <2 x float> %0 434*9880d681SAndroid Build Coastguard Worker} 435*9880d681SAndroid Build Coastguard Worker 436*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vfmsq_lane_f32(<4 x float> %a, <4 x float> %b, <2 x float> %v) { 437*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmsq_lane_f32: 438*9880d681SAndroid Build Coastguard Worker; CHECK: fmls {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 439*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 440*9880d681SAndroid Build Coastguard Workerentry: 441*9880d681SAndroid Build Coastguard Worker %sub = fsub <2 x float> <float -0.000000e+00, float -0.000000e+00>, %v 442*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <2 x float> %sub, <2 x float> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 443*9880d681SAndroid Build Coastguard Worker %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %lane, <4 x float> %b, <4 x float> %a) 444*9880d681SAndroid Build Coastguard Worker ret <4 x float> %0 445*9880d681SAndroid Build Coastguard Worker} 446*9880d681SAndroid Build Coastguard Worker 447*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vfms_laneq_f32(<2 x float> %a, <2 x float> %b, <4 x float> %v) { 448*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfms_laneq_f32: 449*9880d681SAndroid Build Coastguard Worker; CHECK: fmls {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[3] 450*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 451*9880d681SAndroid Build Coastguard Workerentry: 452*9880d681SAndroid Build Coastguard Worker %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %v 453*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <4 x float> %sub, <4 x float> undef, <2 x i32> <i32 3, i32 3> 454*9880d681SAndroid Build Coastguard Worker %0 = tail call <2 x float> @llvm.fma.v2f32(<2 x float> %lane, <2 x float> %b, <2 x float> %a) 455*9880d681SAndroid Build Coastguard Worker ret <2 x float> %0 456*9880d681SAndroid Build Coastguard Worker} 457*9880d681SAndroid Build Coastguard Worker 458*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vfmsq_laneq_f32(<4 x float> %a, <4 x float> %b, <4 x float> %v) { 459*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmsq_laneq_f32: 460*9880d681SAndroid Build Coastguard Worker; CHECK: fmls {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[3] 461*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 462*9880d681SAndroid Build Coastguard Workerentry: 463*9880d681SAndroid Build Coastguard Worker %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %v 464*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <4 x float> %sub, <4 x float> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 465*9880d681SAndroid Build Coastguard Worker %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %lane, <4 x float> %b, <4 x float> %a) 466*9880d681SAndroid Build Coastguard Worker ret <4 x float> %0 467*9880d681SAndroid Build Coastguard Worker} 468*9880d681SAndroid Build Coastguard Worker 469*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vfmaq_lane_f64(<2 x double> %a, <2 x double> %b, <1 x double> %v) { 470*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmaq_lane_f64: 471*9880d681SAndroid Build Coastguard Worker; CHECK: fmla {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0] 472*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 473*9880d681SAndroid Build Coastguard Workerentry: 474*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <1 x double> %v, <1 x double> undef, <2 x i32> zeroinitializer 475*9880d681SAndroid Build Coastguard Worker %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %lane, <2 x double> %b, <2 x double> %a) 476*9880d681SAndroid Build Coastguard Worker ret <2 x double> %0 477*9880d681SAndroid Build Coastguard Worker} 478*9880d681SAndroid Build Coastguard Worker 479*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.fma.v2f64(<2 x double>, <2 x double>, <2 x double>) 480*9880d681SAndroid Build Coastguard Worker 481*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vfmaq_laneq_f64(<2 x double> %a, <2 x double> %b, <2 x double> %v) { 482*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmaq_laneq_f64: 483*9880d681SAndroid Build Coastguard Worker; CHECK: fmla {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[1] 484*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 485*9880d681SAndroid Build Coastguard Workerentry: 486*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <2 x double> %v, <2 x double> undef, <2 x i32> <i32 1, i32 1> 487*9880d681SAndroid Build Coastguard Worker %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %lane, <2 x double> %b, <2 x double> %a) 488*9880d681SAndroid Build Coastguard Worker ret <2 x double> %0 489*9880d681SAndroid Build Coastguard Worker} 490*9880d681SAndroid Build Coastguard Worker 491*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vfmsq_lane_f64(<2 x double> %a, <2 x double> %b, <1 x double> %v) { 492*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmsq_lane_f64: 493*9880d681SAndroid Build Coastguard Worker; CHECK: fmls {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0] 494*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 495*9880d681SAndroid Build Coastguard Workerentry: 496*9880d681SAndroid Build Coastguard Worker %sub = fsub <1 x double> <double -0.000000e+00>, %v 497*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <1 x double> %sub, <1 x double> undef, <2 x i32> zeroinitializer 498*9880d681SAndroid Build Coastguard Worker %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %lane, <2 x double> %b, <2 x double> %a) 499*9880d681SAndroid Build Coastguard Worker ret <2 x double> %0 500*9880d681SAndroid Build Coastguard Worker} 501*9880d681SAndroid Build Coastguard Worker 502*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vfmsq_laneq_f64(<2 x double> %a, <2 x double> %b, <2 x double> %v) { 503*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmsq_laneq_f64: 504*9880d681SAndroid Build Coastguard Worker; CHECK: fmls {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[1] 505*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 506*9880d681SAndroid Build Coastguard Workerentry: 507*9880d681SAndroid Build Coastguard Worker %sub = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %v 508*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <2 x double> %sub, <2 x double> undef, <2 x i32> <i32 1, i32 1> 509*9880d681SAndroid Build Coastguard Worker %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %lane, <2 x double> %b, <2 x double> %a) 510*9880d681SAndroid Build Coastguard Worker ret <2 x double> %0 511*9880d681SAndroid Build Coastguard Worker} 512*9880d681SAndroid Build Coastguard Worker 513*9880d681SAndroid Build Coastguard Workerdefine float @test_vfmas_laneq_f32(float %a, float %b, <4 x float> %v) { 514*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmas_laneq_f32 515*9880d681SAndroid Build Coastguard Worker; CHECK: fmla {{s[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}}.s[3] 516*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 517*9880d681SAndroid Build Coastguard Workerentry: 518*9880d681SAndroid Build Coastguard Worker %extract = extractelement <4 x float> %v, i32 3 519*9880d681SAndroid Build Coastguard Worker %0 = tail call float @llvm.fma.f32(float %b, float %extract, float %a) 520*9880d681SAndroid Build Coastguard Worker ret float %0 521*9880d681SAndroid Build Coastguard Worker} 522*9880d681SAndroid Build Coastguard Worker 523*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.fma.f32(float, float, float) 524*9880d681SAndroid Build Coastguard Worker 525*9880d681SAndroid Build Coastguard Workerdefine double @test_vfmsd_lane_f64(double %a, double %b, <1 x double> %v) { 526*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmsd_lane_f64 527*9880d681SAndroid Build Coastguard Worker; CHECK: fmsub {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}} 528*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 529*9880d681SAndroid Build Coastguard Workerentry: 530*9880d681SAndroid Build Coastguard Worker %extract.rhs = extractelement <1 x double> %v, i32 0 531*9880d681SAndroid Build Coastguard Worker %extract = fsub double -0.000000e+00, %extract.rhs 532*9880d681SAndroid Build Coastguard Worker %0 = tail call double @llvm.fma.f64(double %b, double %extract, double %a) 533*9880d681SAndroid Build Coastguard Worker ret double %0 534*9880d681SAndroid Build Coastguard Worker} 535*9880d681SAndroid Build Coastguard Worker 536*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.fma.f64(double, double, double) 537*9880d681SAndroid Build Coastguard Worker 538*9880d681SAndroid Build Coastguard Workerdefine float @test_vfmss_lane_f32(float %a, float %b, <2 x float> %v) { 539*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmss_lane_f32 540*9880d681SAndroid Build Coastguard Worker; CHECK: fmls {{s[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}}.s[1] 541*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 542*9880d681SAndroid Build Coastguard Workerentry: 543*9880d681SAndroid Build Coastguard Worker %extract.rhs = extractelement <2 x float> %v, i32 1 544*9880d681SAndroid Build Coastguard Worker %extract = fsub float -0.000000e+00, %extract.rhs 545*9880d681SAndroid Build Coastguard Worker %0 = tail call float @llvm.fma.f32(float %b, float %extract, float %a) 546*9880d681SAndroid Build Coastguard Worker ret float %0 547*9880d681SAndroid Build Coastguard Worker} 548*9880d681SAndroid Build Coastguard Worker 549*9880d681SAndroid Build Coastguard Workerdefine float @test_vfmss_laneq_f32(float %a, float %b, <4 x float> %v) { 550*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmss_laneq_f32 551*9880d681SAndroid Build Coastguard Worker; CHECK: fmls {{s[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}}.s[3] 552*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 553*9880d681SAndroid Build Coastguard Workerentry: 554*9880d681SAndroid Build Coastguard Worker %extract.rhs = extractelement <4 x float> %v, i32 3 555*9880d681SAndroid Build Coastguard Worker %extract = fsub float -0.000000e+00, %extract.rhs 556*9880d681SAndroid Build Coastguard Worker %0 = tail call float @llvm.fma.f32(float %b, float %extract, float %a) 557*9880d681SAndroid Build Coastguard Worker ret float %0 558*9880d681SAndroid Build Coastguard Worker} 559*9880d681SAndroid Build Coastguard Worker 560*9880d681SAndroid Build Coastguard Workerdefine double @test_vfmsd_laneq_f64(double %a, double %b, <2 x double> %v) { 561*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmsd_laneq_f64 562*9880d681SAndroid Build Coastguard Worker; CHECK: fmls {{d[0-9]+}}, {{d[0-9]+}}, {{v[0-9]+}}.d[1] 563*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 564*9880d681SAndroid Build Coastguard Workerentry: 565*9880d681SAndroid Build Coastguard Worker %extract.rhs = extractelement <2 x double> %v, i32 1 566*9880d681SAndroid Build Coastguard Worker %extract = fsub double -0.000000e+00, %extract.rhs 567*9880d681SAndroid Build Coastguard Worker %0 = tail call double @llvm.fma.f64(double %b, double %extract, double %a) 568*9880d681SAndroid Build Coastguard Worker ret double %0 569*9880d681SAndroid Build Coastguard Worker} 570*9880d681SAndroid Build Coastguard Worker 571*9880d681SAndroid Build Coastguard Workerdefine double @test_vfmsd_lane_f64_0(double %a, double %b, <1 x double> %v) { 572*9880d681SAndroid Build Coastguard Worker; CHCK-LABEL: test_vfmsd_lane_f64_0 573*9880d681SAndroid Build Coastguard Worker; CHCK: fmsub {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}} 574*9880d681SAndroid Build Coastguard Worker; CHCK-NEXT: ret 575*9880d681SAndroid Build Coastguard Workerentry: 576*9880d681SAndroid Build Coastguard Worker %tmp0 = fsub <1 x double> <double -0.000000e+00>, %v 577*9880d681SAndroid Build Coastguard Worker %tmp1 = extractelement <1 x double> %tmp0, i32 0 578*9880d681SAndroid Build Coastguard Worker %0 = tail call double @llvm.fma.f64(double %b, double %tmp1, double %a) 579*9880d681SAndroid Build Coastguard Worker ret double %0 580*9880d681SAndroid Build Coastguard Worker} 581*9880d681SAndroid Build Coastguard Worker 582*9880d681SAndroid Build Coastguard Workerdefine float @test_vfmss_lane_f32_0(float %a, float %b, <2 x float> %v) { 583*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmss_lane_f32_0 584*9880d681SAndroid Build Coastguard Worker; CHECK: fmls {{s[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}}.s[1] 585*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 586*9880d681SAndroid Build Coastguard Workerentry: 587*9880d681SAndroid Build Coastguard Worker %tmp0 = fsub <2 x float> <float -0.000000e+00, float -0.000000e+00>, %v 588*9880d681SAndroid Build Coastguard Worker %tmp1 = extractelement <2 x float> %tmp0, i32 1 589*9880d681SAndroid Build Coastguard Worker %0 = tail call float @llvm.fma.f32(float %b, float %tmp1, float %a) 590*9880d681SAndroid Build Coastguard Worker ret float %0 591*9880d681SAndroid Build Coastguard Worker} 592*9880d681SAndroid Build Coastguard Worker 593*9880d681SAndroid Build Coastguard Workerdefine float @test_vfmss_laneq_f32_0(float %a, float %b, <4 x float> %v) { 594*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmss_laneq_f32_0 595*9880d681SAndroid Build Coastguard Worker; CHECK: fmls {{s[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}}.s[3] 596*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 597*9880d681SAndroid Build Coastguard Workerentry: 598*9880d681SAndroid Build Coastguard Worker %tmp0 = fsub <4 x float><float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %v 599*9880d681SAndroid Build Coastguard Worker %tmp1 = extractelement <4 x float> %tmp0, i32 3 600*9880d681SAndroid Build Coastguard Worker %0 = tail call float @llvm.fma.f32(float %b, float %tmp1, float %a) 601*9880d681SAndroid Build Coastguard Worker ret float %0 602*9880d681SAndroid Build Coastguard Worker} 603*9880d681SAndroid Build Coastguard Worker 604*9880d681SAndroid Build Coastguard Workerdefine double @test_vfmsd_laneq_f64_0(double %a, double %b, <2 x double> %v) { 605*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmsd_laneq_f64_0 606*9880d681SAndroid Build Coastguard Worker; CHECK: fmls {{d[0-9]+}}, {{d[0-9]+}}, {{v[0-9]+}}.d[1] 607*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 608*9880d681SAndroid Build Coastguard Workerentry: 609*9880d681SAndroid Build Coastguard Worker %tmp0 = fsub <2 x double><double -0.000000e+00, double -0.000000e+00>, %v 610*9880d681SAndroid Build Coastguard Worker %tmp1 = extractelement <2 x double> %tmp0, i32 1 611*9880d681SAndroid Build Coastguard Worker %0 = tail call double @llvm.fma.f64(double %b, double %tmp1, double %a) 612*9880d681SAndroid Build Coastguard Worker ret double %0 613*9880d681SAndroid Build Coastguard Worker} 614*9880d681SAndroid Build Coastguard Worker 615*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_lane_s16(<4 x i32> %a, <4 x i16> %b, <4 x i16> %v) { 616*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_lane_s16: 617*9880d681SAndroid Build Coastguard Worker; CHECK: mlal {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3] 618*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 619*9880d681SAndroid Build Coastguard Workerentry: 620*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 621*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 622*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %vmull2.i, %a 623*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 624*9880d681SAndroid Build Coastguard Worker} 625*9880d681SAndroid Build Coastguard Worker 626*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_lane_s32(<2 x i64> %a, <2 x i32> %b, <2 x i32> %v) { 627*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_lane_s32: 628*9880d681SAndroid Build Coastguard Worker; CHECK: mlal {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 629*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 630*9880d681SAndroid Build Coastguard Workerentry: 631*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 632*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 633*9880d681SAndroid Build Coastguard Worker %add = add <2 x i64> %vmull2.i, %a 634*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add 635*9880d681SAndroid Build Coastguard Worker} 636*9880d681SAndroid Build Coastguard Worker 637*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_laneq_s16(<4 x i32> %a, <4 x i16> %b, <8 x i16> %v) { 638*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_laneq_s16: 639*9880d681SAndroid Build Coastguard Worker; CHECK: mlal {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[7] 640*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 641*9880d681SAndroid Build Coastguard Workerentry: 642*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7> 643*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 644*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %vmull2.i, %a 645*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 646*9880d681SAndroid Build Coastguard Worker} 647*9880d681SAndroid Build Coastguard Worker 648*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_laneq_s32(<2 x i64> %a, <2 x i32> %b, <4 x i32> %v) { 649*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_laneq_s32: 650*9880d681SAndroid Build Coastguard Worker; CHECK: mlal {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[3] 651*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 652*9880d681SAndroid Build Coastguard Workerentry: 653*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 654*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 655*9880d681SAndroid Build Coastguard Worker %add = add <2 x i64> %vmull2.i, %a 656*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add 657*9880d681SAndroid Build Coastguard Worker} 658*9880d681SAndroid Build Coastguard Worker 659*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_high_lane_s16(<4 x i32> %a, <8 x i16> %b, <4 x i16> %v) { 660*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_lane_s16: 661*9880d681SAndroid Build Coastguard Worker; CHECK: mlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[3] 662*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 663*9880d681SAndroid Build Coastguard Workerentry: 664*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 665*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 666*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 667*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %vmull2.i, %a 668*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 669*9880d681SAndroid Build Coastguard Worker} 670*9880d681SAndroid Build Coastguard Worker 671*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_high_lane_s32(<2 x i64> %a, <4 x i32> %b, <2 x i32> %v) { 672*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_lane_s32: 673*9880d681SAndroid Build Coastguard Worker; CHECK: mlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 674*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 675*9880d681SAndroid Build Coastguard Workerentry: 676*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 677*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 678*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 679*9880d681SAndroid Build Coastguard Worker %add = add <2 x i64> %vmull2.i, %a 680*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add 681*9880d681SAndroid Build Coastguard Worker} 682*9880d681SAndroid Build Coastguard Worker 683*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_high_laneq_s16(<4 x i32> %a, <8 x i16> %b, <8 x i16> %v) { 684*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_laneq_s16: 685*9880d681SAndroid Build Coastguard Worker; CHECK: mlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[7] 686*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 687*9880d681SAndroid Build Coastguard Workerentry: 688*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 689*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7> 690*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 691*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %vmull2.i, %a 692*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 693*9880d681SAndroid Build Coastguard Worker} 694*9880d681SAndroid Build Coastguard Worker 695*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_high_laneq_s32(<2 x i64> %a, <4 x i32> %b, <4 x i32> %v) { 696*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_laneq_s32: 697*9880d681SAndroid Build Coastguard Worker; CHECK: mlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[3] 698*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 699*9880d681SAndroid Build Coastguard Workerentry: 700*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 701*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 702*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 703*9880d681SAndroid Build Coastguard Worker %add = add <2 x i64> %vmull2.i, %a 704*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add 705*9880d681SAndroid Build Coastguard Worker} 706*9880d681SAndroid Build Coastguard Worker 707*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_lane_s16(<4 x i32> %a, <4 x i16> %b, <4 x i16> %v) { 708*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_lane_s16: 709*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3] 710*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 711*9880d681SAndroid Build Coastguard Workerentry: 712*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 713*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 714*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %vmull2.i 715*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 716*9880d681SAndroid Build Coastguard Worker} 717*9880d681SAndroid Build Coastguard Worker 718*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_lane_s32(<2 x i64> %a, <2 x i32> %b, <2 x i32> %v) { 719*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_lane_s32: 720*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 721*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 722*9880d681SAndroid Build Coastguard Workerentry: 723*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 724*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 725*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i64> %a, %vmull2.i 726*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub 727*9880d681SAndroid Build Coastguard Worker} 728*9880d681SAndroid Build Coastguard Worker 729*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_laneq_s16(<4 x i32> %a, <4 x i16> %b, <8 x i16> %v) { 730*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_laneq_s16: 731*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[7] 732*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 733*9880d681SAndroid Build Coastguard Workerentry: 734*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7> 735*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 736*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %vmull2.i 737*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 738*9880d681SAndroid Build Coastguard Worker} 739*9880d681SAndroid Build Coastguard Worker 740*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_laneq_s32(<2 x i64> %a, <2 x i32> %b, <4 x i32> %v) { 741*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_laneq_s32: 742*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[3] 743*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 744*9880d681SAndroid Build Coastguard Workerentry: 745*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 746*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 747*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i64> %a, %vmull2.i 748*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub 749*9880d681SAndroid Build Coastguard Worker} 750*9880d681SAndroid Build Coastguard Worker 751*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_high_lane_s16(<4 x i32> %a, <8 x i16> %b, <4 x i16> %v) { 752*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_lane_s16: 753*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[3] 754*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 755*9880d681SAndroid Build Coastguard Workerentry: 756*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 757*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 758*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 759*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %vmull2.i 760*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 761*9880d681SAndroid Build Coastguard Worker} 762*9880d681SAndroid Build Coastguard Worker 763*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_high_lane_s32(<2 x i64> %a, <4 x i32> %b, <2 x i32> %v) { 764*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_lane_s32: 765*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 766*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 767*9880d681SAndroid Build Coastguard Workerentry: 768*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 769*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 770*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 771*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i64> %a, %vmull2.i 772*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub 773*9880d681SAndroid Build Coastguard Worker} 774*9880d681SAndroid Build Coastguard Worker 775*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_high_laneq_s16(<4 x i32> %a, <8 x i16> %b, <8 x i16> %v) { 776*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_laneq_s16: 777*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[7] 778*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 779*9880d681SAndroid Build Coastguard Workerentry: 780*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 781*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7> 782*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 783*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %vmull2.i 784*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 785*9880d681SAndroid Build Coastguard Worker} 786*9880d681SAndroid Build Coastguard Worker 787*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_high_laneq_s32(<2 x i64> %a, <4 x i32> %b, <4 x i32> %v) { 788*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_laneq_s32: 789*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[3] 790*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 791*9880d681SAndroid Build Coastguard Workerentry: 792*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 793*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 794*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 795*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i64> %a, %vmull2.i 796*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub 797*9880d681SAndroid Build Coastguard Worker} 798*9880d681SAndroid Build Coastguard Worker 799*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_lane_u16(<4 x i32> %a, <4 x i16> %b, <4 x i16> %v) { 800*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_lane_u16: 801*9880d681SAndroid Build Coastguard Worker; CHECK: mlal {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3] 802*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 803*9880d681SAndroid Build Coastguard Workerentry: 804*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 805*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 806*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %vmull2.i, %a 807*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 808*9880d681SAndroid Build Coastguard Worker} 809*9880d681SAndroid Build Coastguard Worker 810*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_lane_u32(<2 x i64> %a, <2 x i32> %b, <2 x i32> %v) { 811*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_lane_u32: 812*9880d681SAndroid Build Coastguard Worker; CHECK: mlal {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 813*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 814*9880d681SAndroid Build Coastguard Workerentry: 815*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 816*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 817*9880d681SAndroid Build Coastguard Worker %add = add <2 x i64> %vmull2.i, %a 818*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add 819*9880d681SAndroid Build Coastguard Worker} 820*9880d681SAndroid Build Coastguard Worker 821*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_laneq_u16(<4 x i32> %a, <4 x i16> %b, <8 x i16> %v) { 822*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_laneq_u16: 823*9880d681SAndroid Build Coastguard Worker; CHECK: mlal {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[7] 824*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 825*9880d681SAndroid Build Coastguard Workerentry: 826*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7> 827*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 828*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %vmull2.i, %a 829*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 830*9880d681SAndroid Build Coastguard Worker} 831*9880d681SAndroid Build Coastguard Worker 832*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_laneq_u32(<2 x i64> %a, <2 x i32> %b, <4 x i32> %v) { 833*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_laneq_u32: 834*9880d681SAndroid Build Coastguard Worker; CHECK: mlal {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[3] 835*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 836*9880d681SAndroid Build Coastguard Workerentry: 837*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 838*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 839*9880d681SAndroid Build Coastguard Worker %add = add <2 x i64> %vmull2.i, %a 840*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add 841*9880d681SAndroid Build Coastguard Worker} 842*9880d681SAndroid Build Coastguard Worker 843*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_high_lane_u16(<4 x i32> %a, <8 x i16> %b, <4 x i16> %v) { 844*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_lane_u16: 845*9880d681SAndroid Build Coastguard Worker; CHECK: mlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[3] 846*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 847*9880d681SAndroid Build Coastguard Workerentry: 848*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 849*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 850*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 851*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %vmull2.i, %a 852*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 853*9880d681SAndroid Build Coastguard Worker} 854*9880d681SAndroid Build Coastguard Worker 855*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_high_lane_u32(<2 x i64> %a, <4 x i32> %b, <2 x i32> %v) { 856*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_lane_u32: 857*9880d681SAndroid Build Coastguard Worker; CHECK: mlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 858*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 859*9880d681SAndroid Build Coastguard Workerentry: 860*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 861*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 862*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 863*9880d681SAndroid Build Coastguard Worker %add = add <2 x i64> %vmull2.i, %a 864*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add 865*9880d681SAndroid Build Coastguard Worker} 866*9880d681SAndroid Build Coastguard Worker 867*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_high_laneq_u16(<4 x i32> %a, <8 x i16> %b, <8 x i16> %v) { 868*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_laneq_u16: 869*9880d681SAndroid Build Coastguard Worker; CHECK: mlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[7] 870*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 871*9880d681SAndroid Build Coastguard Workerentry: 872*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 873*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7> 874*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 875*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %vmull2.i, %a 876*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 877*9880d681SAndroid Build Coastguard Worker} 878*9880d681SAndroid Build Coastguard Worker 879*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_high_laneq_u32(<2 x i64> %a, <4 x i32> %b, <4 x i32> %v) { 880*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_laneq_u32: 881*9880d681SAndroid Build Coastguard Worker; CHECK: mlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[3] 882*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 883*9880d681SAndroid Build Coastguard Workerentry: 884*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 885*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 886*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 887*9880d681SAndroid Build Coastguard Worker %add = add <2 x i64> %vmull2.i, %a 888*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add 889*9880d681SAndroid Build Coastguard Worker} 890*9880d681SAndroid Build Coastguard Worker 891*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_lane_u16(<4 x i32> %a, <4 x i16> %b, <4 x i16> %v) { 892*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_lane_u16: 893*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3] 894*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 895*9880d681SAndroid Build Coastguard Workerentry: 896*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 897*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 898*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %vmull2.i 899*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 900*9880d681SAndroid Build Coastguard Worker} 901*9880d681SAndroid Build Coastguard Worker 902*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_lane_u32(<2 x i64> %a, <2 x i32> %b, <2 x i32> %v) { 903*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_lane_u32: 904*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 905*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 906*9880d681SAndroid Build Coastguard Workerentry: 907*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 908*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 909*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i64> %a, %vmull2.i 910*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub 911*9880d681SAndroid Build Coastguard Worker} 912*9880d681SAndroid Build Coastguard Worker 913*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_laneq_u16(<4 x i32> %a, <4 x i16> %b, <8 x i16> %v) { 914*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_laneq_u16: 915*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[7] 916*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 917*9880d681SAndroid Build Coastguard Workerentry: 918*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7> 919*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 920*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %vmull2.i 921*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 922*9880d681SAndroid Build Coastguard Worker} 923*9880d681SAndroid Build Coastguard Worker 924*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_laneq_u32(<2 x i64> %a, <2 x i32> %b, <4 x i32> %v) { 925*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_laneq_u32: 926*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[3] 927*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 928*9880d681SAndroid Build Coastguard Workerentry: 929*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 930*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 931*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i64> %a, %vmull2.i 932*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub 933*9880d681SAndroid Build Coastguard Worker} 934*9880d681SAndroid Build Coastguard Worker 935*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_high_lane_u16(<4 x i32> %a, <8 x i16> %b, <4 x i16> %v) { 936*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_lane_u16: 937*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[3] 938*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 939*9880d681SAndroid Build Coastguard Workerentry: 940*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 941*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 942*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 943*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %vmull2.i 944*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 945*9880d681SAndroid Build Coastguard Worker} 946*9880d681SAndroid Build Coastguard Worker 947*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_high_lane_u32(<2 x i64> %a, <4 x i32> %b, <2 x i32> %v) { 948*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_lane_u32: 949*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 950*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 951*9880d681SAndroid Build Coastguard Workerentry: 952*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 953*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 954*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 955*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i64> %a, %vmull2.i 956*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub 957*9880d681SAndroid Build Coastguard Worker} 958*9880d681SAndroid Build Coastguard Worker 959*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_high_laneq_u16(<4 x i32> %a, <8 x i16> %b, <8 x i16> %v) { 960*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_laneq_u16: 961*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[7] 962*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 963*9880d681SAndroid Build Coastguard Workerentry: 964*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 965*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7> 966*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 967*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %vmull2.i 968*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 969*9880d681SAndroid Build Coastguard Worker} 970*9880d681SAndroid Build Coastguard Worker 971*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_high_laneq_u32(<2 x i64> %a, <4 x i32> %b, <4 x i32> %v) { 972*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_laneq_u32: 973*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[3] 974*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 975*9880d681SAndroid Build Coastguard Workerentry: 976*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 977*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 978*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 979*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i64> %a, %vmull2.i 980*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub 981*9880d681SAndroid Build Coastguard Worker} 982*9880d681SAndroid Build Coastguard Worker 983*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_lane_s16(<4 x i16> %a, <4 x i16> %v) { 984*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_lane_s16: 985*9880d681SAndroid Build Coastguard Worker; CHECK: mull {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3] 986*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 987*9880d681SAndroid Build Coastguard Workerentry: 988*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 989*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %a, <4 x i16> %shuffle) 990*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull2.i 991*9880d681SAndroid Build Coastguard Worker} 992*9880d681SAndroid Build Coastguard Worker 993*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_lane_s32(<2 x i32> %a, <2 x i32> %v) { 994*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_lane_s32: 995*9880d681SAndroid Build Coastguard Worker; CHECK: mull {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 996*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 997*9880d681SAndroid Build Coastguard Workerentry: 998*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 999*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %a, <2 x i32> %shuffle) 1000*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull2.i 1001*9880d681SAndroid Build Coastguard Worker} 1002*9880d681SAndroid Build Coastguard Worker 1003*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_lane_u16(<4 x i16> %a, <4 x i16> %v) { 1004*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_lane_u16: 1005*9880d681SAndroid Build Coastguard Worker; CHECK: mull {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3] 1006*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1007*9880d681SAndroid Build Coastguard Workerentry: 1008*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 1009*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %a, <4 x i16> %shuffle) 1010*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull2.i 1011*9880d681SAndroid Build Coastguard Worker} 1012*9880d681SAndroid Build Coastguard Worker 1013*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_lane_u32(<2 x i32> %a, <2 x i32> %v) { 1014*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_lane_u32: 1015*9880d681SAndroid Build Coastguard Worker; CHECK: mull {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 1016*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1017*9880d681SAndroid Build Coastguard Workerentry: 1018*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 1019*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %a, <2 x i32> %shuffle) 1020*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull2.i 1021*9880d681SAndroid Build Coastguard Worker} 1022*9880d681SAndroid Build Coastguard Worker 1023*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_high_lane_s16(<8 x i16> %a, <4 x i16> %v) { 1024*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_lane_s16: 1025*9880d681SAndroid Build Coastguard Worker; CHECK: mull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[3] 1026*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1027*9880d681SAndroid Build Coastguard Workerentry: 1028*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 1029*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 1030*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 1031*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull2.i 1032*9880d681SAndroid Build Coastguard Worker} 1033*9880d681SAndroid Build Coastguard Worker 1034*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_high_lane_s32(<4 x i32> %a, <2 x i32> %v) { 1035*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_lane_s32: 1036*9880d681SAndroid Build Coastguard Worker; CHECK: mull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 1037*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1038*9880d681SAndroid Build Coastguard Workerentry: 1039*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 1040*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 1041*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 1042*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull2.i 1043*9880d681SAndroid Build Coastguard Worker} 1044*9880d681SAndroid Build Coastguard Worker 1045*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_high_lane_u16(<8 x i16> %a, <4 x i16> %v) { 1046*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_lane_u16: 1047*9880d681SAndroid Build Coastguard Worker; CHECK: mull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[3] 1048*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1049*9880d681SAndroid Build Coastguard Workerentry: 1050*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 1051*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 1052*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 1053*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull2.i 1054*9880d681SAndroid Build Coastguard Worker} 1055*9880d681SAndroid Build Coastguard Worker 1056*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_high_lane_u32(<4 x i32> %a, <2 x i32> %v) { 1057*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_lane_u32: 1058*9880d681SAndroid Build Coastguard Worker; CHECK: mull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 1059*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1060*9880d681SAndroid Build Coastguard Workerentry: 1061*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 1062*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 1063*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 1064*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull2.i 1065*9880d681SAndroid Build Coastguard Worker} 1066*9880d681SAndroid Build Coastguard Worker 1067*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_laneq_s16(<4 x i16> %a, <8 x i16> %v) { 1068*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_laneq_s16: 1069*9880d681SAndroid Build Coastguard Worker; CHECK: mull {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[7] 1070*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1071*9880d681SAndroid Build Coastguard Workerentry: 1072*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7> 1073*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %a, <4 x i16> %shuffle) 1074*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull2.i 1075*9880d681SAndroid Build Coastguard Worker} 1076*9880d681SAndroid Build Coastguard Worker 1077*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_laneq_s32(<2 x i32> %a, <4 x i32> %v) { 1078*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_laneq_s32: 1079*9880d681SAndroid Build Coastguard Worker; CHECK: mull {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[3] 1080*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1081*9880d681SAndroid Build Coastguard Workerentry: 1082*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 1083*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %a, <2 x i32> %shuffle) 1084*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull2.i 1085*9880d681SAndroid Build Coastguard Worker} 1086*9880d681SAndroid Build Coastguard Worker 1087*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_laneq_u16(<4 x i16> %a, <8 x i16> %v) { 1088*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_laneq_u16: 1089*9880d681SAndroid Build Coastguard Worker; CHECK: mull {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[7] 1090*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1091*9880d681SAndroid Build Coastguard Workerentry: 1092*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7> 1093*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %a, <4 x i16> %shuffle) 1094*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull2.i 1095*9880d681SAndroid Build Coastguard Worker} 1096*9880d681SAndroid Build Coastguard Worker 1097*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_laneq_u32(<2 x i32> %a, <4 x i32> %v) { 1098*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_laneq_u32: 1099*9880d681SAndroid Build Coastguard Worker; CHECK: mull {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[3] 1100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1101*9880d681SAndroid Build Coastguard Workerentry: 1102*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 1103*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %a, <2 x i32> %shuffle) 1104*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull2.i 1105*9880d681SAndroid Build Coastguard Worker} 1106*9880d681SAndroid Build Coastguard Worker 1107*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_high_laneq_s16(<8 x i16> %a, <8 x i16> %v) { 1108*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_laneq_s16: 1109*9880d681SAndroid Build Coastguard Worker; CHECK: mull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[7] 1110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1111*9880d681SAndroid Build Coastguard Workerentry: 1112*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 1113*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7> 1114*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 1115*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull2.i 1116*9880d681SAndroid Build Coastguard Worker} 1117*9880d681SAndroid Build Coastguard Worker 1118*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_high_laneq_s32(<4 x i32> %a, <4 x i32> %v) { 1119*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_laneq_s32: 1120*9880d681SAndroid Build Coastguard Worker; CHECK: mull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[3] 1121*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1122*9880d681SAndroid Build Coastguard Workerentry: 1123*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 1124*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 1125*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 1126*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull2.i 1127*9880d681SAndroid Build Coastguard Worker} 1128*9880d681SAndroid Build Coastguard Worker 1129*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_high_laneq_u16(<8 x i16> %a, <8 x i16> %v) { 1130*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_laneq_u16: 1131*9880d681SAndroid Build Coastguard Worker; CHECK: mull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[7] 1132*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1133*9880d681SAndroid Build Coastguard Workerentry: 1134*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 1135*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7> 1136*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 1137*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull2.i 1138*9880d681SAndroid Build Coastguard Worker} 1139*9880d681SAndroid Build Coastguard Worker 1140*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_high_laneq_u32(<4 x i32> %a, <4 x i32> %v) { 1141*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_laneq_u32: 1142*9880d681SAndroid Build Coastguard Worker; CHECK: mull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[3] 1143*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1144*9880d681SAndroid Build Coastguard Workerentry: 1145*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 1146*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 1147*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 1148*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull2.i 1149*9880d681SAndroid Build Coastguard Worker} 1150*9880d681SAndroid Build Coastguard Worker 1151*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmlal_lane_s16(<4 x i32> %a, <4 x i16> %b, <4 x i16> %v) { 1152*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlal_lane_s16: 1153*9880d681SAndroid Build Coastguard Worker; CHECK: qdmlal {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3] 1154*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1155*9880d681SAndroid Build Coastguard Workerentry: 1156*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 1157*9880d681SAndroid Build Coastguard Worker %vqdmlal2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 1158*9880d681SAndroid Build Coastguard Worker %vqdmlal4.i = tail call <4 x i32> @llvm.aarch64.neon.sqadd.v4i32(<4 x i32> %a, <4 x i32> %vqdmlal2.i) 1159*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmlal4.i 1160*9880d681SAndroid Build Coastguard Worker} 1161*9880d681SAndroid Build Coastguard Worker 1162*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmlal_lane_s32(<2 x i64> %a, <2 x i32> %b, <2 x i32> %v) { 1163*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlal_lane_s32: 1164*9880d681SAndroid Build Coastguard Worker; CHECK: qdmlal {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 1165*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1166*9880d681SAndroid Build Coastguard Workerentry: 1167*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 1168*9880d681SAndroid Build Coastguard Worker %vqdmlal2.i = tail call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 1169*9880d681SAndroid Build Coastguard Worker %vqdmlal4.i = tail call <2 x i64> @llvm.aarch64.neon.sqadd.v2i64(<2 x i64> %a, <2 x i64> %vqdmlal2.i) 1170*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmlal4.i 1171*9880d681SAndroid Build Coastguard Worker} 1172*9880d681SAndroid Build Coastguard Worker 1173*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmlal_high_lane_s16(<4 x i32> %a, <8 x i16> %b, <4 x i16> %v) { 1174*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlal_high_lane_s16: 1175*9880d681SAndroid Build Coastguard Worker; CHECK: qdmlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[3] 1176*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1177*9880d681SAndroid Build Coastguard Workerentry: 1178*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 1179*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 1180*9880d681SAndroid Build Coastguard Worker %vqdmlal2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 1181*9880d681SAndroid Build Coastguard Worker %vqdmlal4.i = tail call <4 x i32> @llvm.aarch64.neon.sqadd.v4i32(<4 x i32> %a, <4 x i32> %vqdmlal2.i) 1182*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmlal4.i 1183*9880d681SAndroid Build Coastguard Worker} 1184*9880d681SAndroid Build Coastguard Worker 1185*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmlal_high_lane_s32(<2 x i64> %a, <4 x i32> %b, <2 x i32> %v) { 1186*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlal_high_lane_s32: 1187*9880d681SAndroid Build Coastguard Worker; CHECK: qdmlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 1188*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1189*9880d681SAndroid Build Coastguard Workerentry: 1190*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 1191*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 1192*9880d681SAndroid Build Coastguard Worker %vqdmlal2.i = tail call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 1193*9880d681SAndroid Build Coastguard Worker %vqdmlal4.i = tail call <2 x i64> @llvm.aarch64.neon.sqadd.v2i64(<2 x i64> %a, <2 x i64> %vqdmlal2.i) 1194*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmlal4.i 1195*9880d681SAndroid Build Coastguard Worker} 1196*9880d681SAndroid Build Coastguard Worker 1197*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmlsl_lane_s16(<4 x i32> %a, <4 x i16> %b, <4 x i16> %v) { 1198*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlsl_lane_s16: 1199*9880d681SAndroid Build Coastguard Worker; CHECK: qdmlsl {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3] 1200*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1201*9880d681SAndroid Build Coastguard Workerentry: 1202*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 1203*9880d681SAndroid Build Coastguard Worker %vqdmlsl2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 1204*9880d681SAndroid Build Coastguard Worker %vqdmlsl4.i = tail call <4 x i32> @llvm.aarch64.neon.sqsub.v4i32(<4 x i32> %a, <4 x i32> %vqdmlsl2.i) 1205*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmlsl4.i 1206*9880d681SAndroid Build Coastguard Worker} 1207*9880d681SAndroid Build Coastguard Worker 1208*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmlsl_lane_s32(<2 x i64> %a, <2 x i32> %b, <2 x i32> %v) { 1209*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlsl_lane_s32: 1210*9880d681SAndroid Build Coastguard Worker; CHECK: qdmlsl {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 1211*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1212*9880d681SAndroid Build Coastguard Workerentry: 1213*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 1214*9880d681SAndroid Build Coastguard Worker %vqdmlsl2.i = tail call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 1215*9880d681SAndroid Build Coastguard Worker %vqdmlsl4.i = tail call <2 x i64> @llvm.aarch64.neon.sqsub.v2i64(<2 x i64> %a, <2 x i64> %vqdmlsl2.i) 1216*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmlsl4.i 1217*9880d681SAndroid Build Coastguard Worker} 1218*9880d681SAndroid Build Coastguard Worker 1219*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmlsl_high_lane_s16(<4 x i32> %a, <8 x i16> %b, <4 x i16> %v) { 1220*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlsl_high_lane_s16: 1221*9880d681SAndroid Build Coastguard Worker; CHECK: qdmlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[3] 1222*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1223*9880d681SAndroid Build Coastguard Workerentry: 1224*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 1225*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 1226*9880d681SAndroid Build Coastguard Worker %vqdmlsl2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 1227*9880d681SAndroid Build Coastguard Worker %vqdmlsl4.i = tail call <4 x i32> @llvm.aarch64.neon.sqsub.v4i32(<4 x i32> %a, <4 x i32> %vqdmlsl2.i) 1228*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmlsl4.i 1229*9880d681SAndroid Build Coastguard Worker} 1230*9880d681SAndroid Build Coastguard Worker 1231*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmlsl_high_lane_s32(<2 x i64> %a, <4 x i32> %b, <2 x i32> %v) { 1232*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlsl_high_lane_s32: 1233*9880d681SAndroid Build Coastguard Worker; CHECK: qdmlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 1234*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1235*9880d681SAndroid Build Coastguard Workerentry: 1236*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 1237*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 1238*9880d681SAndroid Build Coastguard Worker %vqdmlsl2.i = tail call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 1239*9880d681SAndroid Build Coastguard Worker %vqdmlsl4.i = tail call <2 x i64> @llvm.aarch64.neon.sqsub.v2i64(<2 x i64> %a, <2 x i64> %vqdmlsl2.i) 1240*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmlsl4.i 1241*9880d681SAndroid Build Coastguard Worker} 1242*9880d681SAndroid Build Coastguard Worker 1243*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmull_lane_s16(<4 x i16> %a, <4 x i16> %v) { 1244*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_lane_s16: 1245*9880d681SAndroid Build Coastguard Worker; CHECK: qdmull {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3] 1246*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1247*9880d681SAndroid Build Coastguard Workerentry: 1248*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 1249*9880d681SAndroid Build Coastguard Worker %vqdmull2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %a, <4 x i16> %shuffle) 1250*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmull2.i 1251*9880d681SAndroid Build Coastguard Worker} 1252*9880d681SAndroid Build Coastguard Worker 1253*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmull_lane_s32(<2 x i32> %a, <2 x i32> %v) { 1254*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_lane_s32: 1255*9880d681SAndroid Build Coastguard Worker; CHECK: qdmull {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 1256*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1257*9880d681SAndroid Build Coastguard Workerentry: 1258*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 1259*9880d681SAndroid Build Coastguard Worker %vqdmull2.i = tail call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %a, <2 x i32> %shuffle) 1260*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmull2.i 1261*9880d681SAndroid Build Coastguard Worker} 1262*9880d681SAndroid Build Coastguard Worker 1263*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmull_laneq_s16(<4 x i16> %a, <8 x i16> %v) { 1264*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_laneq_s16: 1265*9880d681SAndroid Build Coastguard Worker; CHECK: qdmull {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3] 1266*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1267*9880d681SAndroid Build Coastguard Workerentry: 1268*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 1269*9880d681SAndroid Build Coastguard Worker %vqdmull2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %a, <4 x i16> %shuffle) 1270*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmull2.i 1271*9880d681SAndroid Build Coastguard Worker} 1272*9880d681SAndroid Build Coastguard Worker 1273*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmull_laneq_s32(<2 x i32> %a, <4 x i32> %v) { 1274*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_laneq_s32: 1275*9880d681SAndroid Build Coastguard Worker; CHECK: qdmull {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[3] 1276*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1277*9880d681SAndroid Build Coastguard Workerentry: 1278*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 1279*9880d681SAndroid Build Coastguard Worker %vqdmull2.i = tail call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %a, <2 x i32> %shuffle) 1280*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmull2.i 1281*9880d681SAndroid Build Coastguard Worker} 1282*9880d681SAndroid Build Coastguard Worker 1283*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmull_high_lane_s16(<8 x i16> %a, <4 x i16> %v) { 1284*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_high_lane_s16: 1285*9880d681SAndroid Build Coastguard Worker; CHECK: qdmull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[3] 1286*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1287*9880d681SAndroid Build Coastguard Workerentry: 1288*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 1289*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 1290*9880d681SAndroid Build Coastguard Worker %vqdmull2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 1291*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmull2.i 1292*9880d681SAndroid Build Coastguard Worker} 1293*9880d681SAndroid Build Coastguard Worker 1294*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmull_high_lane_s32(<4 x i32> %a, <2 x i32> %v) { 1295*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_high_lane_s32: 1296*9880d681SAndroid Build Coastguard Worker; CHECK: qdmull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 1297*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1298*9880d681SAndroid Build Coastguard Workerentry: 1299*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 1300*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 1301*9880d681SAndroid Build Coastguard Worker %vqdmull2.i = tail call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 1302*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmull2.i 1303*9880d681SAndroid Build Coastguard Worker} 1304*9880d681SAndroid Build Coastguard Worker 1305*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmull_high_laneq_s16(<8 x i16> %a, <8 x i16> %v) { 1306*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_high_laneq_s16: 1307*9880d681SAndroid Build Coastguard Worker; CHECK: qdmull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[7] 1308*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1309*9880d681SAndroid Build Coastguard Workerentry: 1310*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 1311*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7> 1312*9880d681SAndroid Build Coastguard Worker %vqdmull2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 1313*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmull2.i 1314*9880d681SAndroid Build Coastguard Worker} 1315*9880d681SAndroid Build Coastguard Worker 1316*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmull_high_laneq_s32(<4 x i32> %a, <4 x i32> %v) { 1317*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_high_laneq_s32: 1318*9880d681SAndroid Build Coastguard Worker; CHECK: qdmull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[3] 1319*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1320*9880d681SAndroid Build Coastguard Workerentry: 1321*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 1322*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> <i32 3, i32 3> 1323*9880d681SAndroid Build Coastguard Worker %vqdmull2.i = tail call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 1324*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmull2.i 1325*9880d681SAndroid Build Coastguard Worker} 1326*9880d681SAndroid Build Coastguard Worker 1327*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vqdmulh_lane_s16(<4 x i16> %a, <4 x i16> %v) { 1328*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmulh_lane_s16: 1329*9880d681SAndroid Build Coastguard Worker; CHECK: qdmulh {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3] 1330*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1331*9880d681SAndroid Build Coastguard Workerentry: 1332*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 1333*9880d681SAndroid Build Coastguard Worker %vqdmulh2.i = tail call <4 x i16> @llvm.aarch64.neon.sqdmulh.v4i16(<4 x i16> %a, <4 x i16> %shuffle) 1334*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %vqdmulh2.i 1335*9880d681SAndroid Build Coastguard Worker} 1336*9880d681SAndroid Build Coastguard Worker 1337*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vqdmulhq_lane_s16(<8 x i16> %a, <4 x i16> %v) { 1338*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmulhq_lane_s16: 1339*9880d681SAndroid Build Coastguard Worker; CHECK: qdmulh {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[3] 1340*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1341*9880d681SAndroid Build Coastguard Workerentry: 1342*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <8 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3> 1343*9880d681SAndroid Build Coastguard Worker %vqdmulh2.i = tail call <8 x i16> @llvm.aarch64.neon.sqdmulh.v8i16(<8 x i16> %a, <8 x i16> %shuffle) 1344*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %vqdmulh2.i 1345*9880d681SAndroid Build Coastguard Worker} 1346*9880d681SAndroid Build Coastguard Worker 1347*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vqdmulh_lane_s32(<2 x i32> %a, <2 x i32> %v) { 1348*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmulh_lane_s32: 1349*9880d681SAndroid Build Coastguard Worker; CHECK: qdmulh {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 1350*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1351*9880d681SAndroid Build Coastguard Workerentry: 1352*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 1353*9880d681SAndroid Build Coastguard Worker %vqdmulh2.i = tail call <2 x i32> @llvm.aarch64.neon.sqdmulh.v2i32(<2 x i32> %a, <2 x i32> %shuffle) 1354*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %vqdmulh2.i 1355*9880d681SAndroid Build Coastguard Worker} 1356*9880d681SAndroid Build Coastguard Worker 1357*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmulhq_lane_s32(<4 x i32> %a, <2 x i32> %v) { 1358*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmulhq_lane_s32: 1359*9880d681SAndroid Build Coastguard Worker; CHECK: qdmulh {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 1360*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1361*9880d681SAndroid Build Coastguard Workerentry: 1362*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 1363*9880d681SAndroid Build Coastguard Worker %vqdmulh2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmulh.v4i32(<4 x i32> %a, <4 x i32> %shuffle) 1364*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmulh2.i 1365*9880d681SAndroid Build Coastguard Worker} 1366*9880d681SAndroid Build Coastguard Worker 1367*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vqrdmulh_lane_s16(<4 x i16> %a, <4 x i16> %v) { 1368*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqrdmulh_lane_s16: 1369*9880d681SAndroid Build Coastguard Worker; CHECK: qrdmulh {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3] 1370*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1371*9880d681SAndroid Build Coastguard Workerentry: 1372*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 1373*9880d681SAndroid Build Coastguard Worker %vqrdmulh2.i = tail call <4 x i16> @llvm.aarch64.neon.sqrdmulh.v4i16(<4 x i16> %a, <4 x i16> %shuffle) 1374*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %vqrdmulh2.i 1375*9880d681SAndroid Build Coastguard Worker} 1376*9880d681SAndroid Build Coastguard Worker 1377*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vqrdmulhq_lane_s16(<8 x i16> %a, <4 x i16> %v) { 1378*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqrdmulhq_lane_s16: 1379*9880d681SAndroid Build Coastguard Worker; CHECK: qrdmulh {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[3] 1380*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1381*9880d681SAndroid Build Coastguard Workerentry: 1382*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <8 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3> 1383*9880d681SAndroid Build Coastguard Worker %vqrdmulh2.i = tail call <8 x i16> @llvm.aarch64.neon.sqrdmulh.v8i16(<8 x i16> %a, <8 x i16> %shuffle) 1384*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %vqrdmulh2.i 1385*9880d681SAndroid Build Coastguard Worker} 1386*9880d681SAndroid Build Coastguard Worker 1387*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vqrdmulh_lane_s32(<2 x i32> %a, <2 x i32> %v) { 1388*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqrdmulh_lane_s32: 1389*9880d681SAndroid Build Coastguard Worker; CHECK: qrdmulh {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 1390*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1391*9880d681SAndroid Build Coastguard Workerentry: 1392*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 1393*9880d681SAndroid Build Coastguard Worker %vqrdmulh2.i = tail call <2 x i32> @llvm.aarch64.neon.sqrdmulh.v2i32(<2 x i32> %a, <2 x i32> %shuffle) 1394*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %vqrdmulh2.i 1395*9880d681SAndroid Build Coastguard Worker} 1396*9880d681SAndroid Build Coastguard Worker 1397*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqrdmulhq_lane_s32(<4 x i32> %a, <2 x i32> %v) { 1398*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqrdmulhq_lane_s32: 1399*9880d681SAndroid Build Coastguard Worker; CHECK: qrdmulh {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 1400*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1401*9880d681SAndroid Build Coastguard Workerentry: 1402*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 1403*9880d681SAndroid Build Coastguard Worker %vqrdmulh2.i = tail call <4 x i32> @llvm.aarch64.neon.sqrdmulh.v4i32(<4 x i32> %a, <4 x i32> %shuffle) 1404*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqrdmulh2.i 1405*9880d681SAndroid Build Coastguard Worker} 1406*9880d681SAndroid Build Coastguard Worker 1407*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vmul_lane_f32(<2 x float> %a, <2 x float> %v) { 1408*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_lane_f32: 1409*9880d681SAndroid Build Coastguard Worker; CHECK: fmul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 1410*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1411*9880d681SAndroid Build Coastguard Workerentry: 1412*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x float> %v, <2 x float> undef, <2 x i32> <i32 1, i32 1> 1413*9880d681SAndroid Build Coastguard Worker %mul = fmul <2 x float> %shuffle, %a 1414*9880d681SAndroid Build Coastguard Worker ret <2 x float> %mul 1415*9880d681SAndroid Build Coastguard Worker} 1416*9880d681SAndroid Build Coastguard Worker 1417*9880d681SAndroid Build Coastguard Workerdefine <1 x double> @test_vmul_lane_f64(<1 x double> %a, <1 x double> %v) { 1418*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_lane_f64: 1419*9880d681SAndroid Build Coastguard Worker; CHECK: fmul {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}} 1420*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1421*9880d681SAndroid Build Coastguard Workerentry: 1422*9880d681SAndroid Build Coastguard Worker %0 = bitcast <1 x double> %a to <8 x i8> 1423*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x i8> %0 to double 1424*9880d681SAndroid Build Coastguard Worker %extract = extractelement <1 x double> %v, i32 0 1425*9880d681SAndroid Build Coastguard Worker %2 = fmul double %1, %extract 1426*9880d681SAndroid Build Coastguard Worker %3 = insertelement <1 x double> undef, double %2, i32 0 1427*9880d681SAndroid Build Coastguard Worker ret <1 x double> %3 1428*9880d681SAndroid Build Coastguard Worker} 1429*9880d681SAndroid Build Coastguard Worker 1430*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vmulq_lane_f32(<4 x float> %a, <2 x float> %v) { 1431*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_lane_f32: 1432*9880d681SAndroid Build Coastguard Worker; CHECK: fmul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 1433*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1434*9880d681SAndroid Build Coastguard Workerentry: 1435*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x float> %v, <2 x float> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 1436*9880d681SAndroid Build Coastguard Worker %mul = fmul <4 x float> %shuffle, %a 1437*9880d681SAndroid Build Coastguard Worker ret <4 x float> %mul 1438*9880d681SAndroid Build Coastguard Worker} 1439*9880d681SAndroid Build Coastguard Worker 1440*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vmulq_lane_f64(<2 x double> %a, <1 x double> %v) { 1441*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_lane_f64: 1442*9880d681SAndroid Build Coastguard Worker; CHECK: fmul {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0] 1443*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1444*9880d681SAndroid Build Coastguard Workerentry: 1445*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <1 x double> %v, <1 x double> undef, <2 x i32> zeroinitializer 1446*9880d681SAndroid Build Coastguard Worker %mul = fmul <2 x double> %shuffle, %a 1447*9880d681SAndroid Build Coastguard Worker ret <2 x double> %mul 1448*9880d681SAndroid Build Coastguard Worker} 1449*9880d681SAndroid Build Coastguard Worker 1450*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vmul_laneq_f32(<2 x float> %a, <4 x float> %v) { 1451*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_laneq_f32: 1452*9880d681SAndroid Build Coastguard Worker; CHECK: fmul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[3] 1453*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1454*9880d681SAndroid Build Coastguard Workerentry: 1455*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x float> %v, <4 x float> undef, <2 x i32> <i32 3, i32 3> 1456*9880d681SAndroid Build Coastguard Worker %mul = fmul <2 x float> %shuffle, %a 1457*9880d681SAndroid Build Coastguard Worker ret <2 x float> %mul 1458*9880d681SAndroid Build Coastguard Worker} 1459*9880d681SAndroid Build Coastguard Worker 1460*9880d681SAndroid Build Coastguard Workerdefine <1 x double> @test_vmul_laneq_f64(<1 x double> %a, <2 x double> %v) { 1461*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_laneq_f64: 1462*9880d681SAndroid Build Coastguard Worker; CHECK: fmul {{d[0-9]+}}, {{d[0-9]+}}, {{v[0-9]+}}.d[1] 1463*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1464*9880d681SAndroid Build Coastguard Workerentry: 1465*9880d681SAndroid Build Coastguard Worker %0 = bitcast <1 x double> %a to <8 x i8> 1466*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x i8> %0 to double 1467*9880d681SAndroid Build Coastguard Worker %extract = extractelement <2 x double> %v, i32 1 1468*9880d681SAndroid Build Coastguard Worker %2 = fmul double %1, %extract 1469*9880d681SAndroid Build Coastguard Worker %3 = insertelement <1 x double> undef, double %2, i32 0 1470*9880d681SAndroid Build Coastguard Worker ret <1 x double> %3 1471*9880d681SAndroid Build Coastguard Worker} 1472*9880d681SAndroid Build Coastguard Worker 1473*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vmulq_laneq_f32(<4 x float> %a, <4 x float> %v) { 1474*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_laneq_f32: 1475*9880d681SAndroid Build Coastguard Worker; CHECK: fmul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[3] 1476*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1477*9880d681SAndroid Build Coastguard Workerentry: 1478*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 1479*9880d681SAndroid Build Coastguard Worker %mul = fmul <4 x float> %shuffle, %a 1480*9880d681SAndroid Build Coastguard Worker ret <4 x float> %mul 1481*9880d681SAndroid Build Coastguard Worker} 1482*9880d681SAndroid Build Coastguard Worker 1483*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vmulq_laneq_f64(<2 x double> %a, <2 x double> %v) { 1484*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_laneq_f64: 1485*9880d681SAndroid Build Coastguard Worker; CHECK: fmul {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[1] 1486*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1487*9880d681SAndroid Build Coastguard Workerentry: 1488*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <2 x i32> <i32 1, i32 1> 1489*9880d681SAndroid Build Coastguard Worker %mul = fmul <2 x double> %shuffle, %a 1490*9880d681SAndroid Build Coastguard Worker ret <2 x double> %mul 1491*9880d681SAndroid Build Coastguard Worker} 1492*9880d681SAndroid Build Coastguard Worker 1493*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vmulx_lane_f32(<2 x float> %a, <2 x float> %v) { 1494*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulx_lane_f32: 1495*9880d681SAndroid Build Coastguard Worker; CHECK: mulx {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 1496*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1497*9880d681SAndroid Build Coastguard Workerentry: 1498*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x float> %v, <2 x float> undef, <2 x i32> <i32 1, i32 1> 1499*9880d681SAndroid Build Coastguard Worker %vmulx2.i = tail call <2 x float> @llvm.aarch64.neon.fmulx.v2f32(<2 x float> %a, <2 x float> %shuffle) 1500*9880d681SAndroid Build Coastguard Worker ret <2 x float> %vmulx2.i 1501*9880d681SAndroid Build Coastguard Worker} 1502*9880d681SAndroid Build Coastguard Worker 1503*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vmulxq_lane_f32(<4 x float> %a, <2 x float> %v) { 1504*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulxq_lane_f32: 1505*9880d681SAndroid Build Coastguard Worker; CHECK: mulx {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 1506*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1507*9880d681SAndroid Build Coastguard Workerentry: 1508*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x float> %v, <2 x float> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 1509*9880d681SAndroid Build Coastguard Worker %vmulx2.i = tail call <4 x float> @llvm.aarch64.neon.fmulx.v4f32(<4 x float> %a, <4 x float> %shuffle) 1510*9880d681SAndroid Build Coastguard Worker ret <4 x float> %vmulx2.i 1511*9880d681SAndroid Build Coastguard Worker} 1512*9880d681SAndroid Build Coastguard Worker 1513*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vmulxq_lane_f64(<2 x double> %a, <1 x double> %v) { 1514*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulxq_lane_f64: 1515*9880d681SAndroid Build Coastguard Worker; CHECK: mulx {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0] 1516*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1517*9880d681SAndroid Build Coastguard Workerentry: 1518*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <1 x double> %v, <1 x double> undef, <2 x i32> zeroinitializer 1519*9880d681SAndroid Build Coastguard Worker %vmulx2.i = tail call <2 x double> @llvm.aarch64.neon.fmulx.v2f64(<2 x double> %a, <2 x double> %shuffle) 1520*9880d681SAndroid Build Coastguard Worker ret <2 x double> %vmulx2.i 1521*9880d681SAndroid Build Coastguard Worker} 1522*9880d681SAndroid Build Coastguard Worker 1523*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vmulx_laneq_f32(<2 x float> %a, <4 x float> %v) { 1524*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulx_laneq_f32: 1525*9880d681SAndroid Build Coastguard Worker; CHECK: mulx {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[3] 1526*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1527*9880d681SAndroid Build Coastguard Workerentry: 1528*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x float> %v, <4 x float> undef, <2 x i32> <i32 3, i32 3> 1529*9880d681SAndroid Build Coastguard Worker %vmulx2.i = tail call <2 x float> @llvm.aarch64.neon.fmulx.v2f32(<2 x float> %a, <2 x float> %shuffle) 1530*9880d681SAndroid Build Coastguard Worker ret <2 x float> %vmulx2.i 1531*9880d681SAndroid Build Coastguard Worker} 1532*9880d681SAndroid Build Coastguard Worker 1533*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vmulxq_laneq_f32(<4 x float> %a, <4 x float> %v) { 1534*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulxq_laneq_f32: 1535*9880d681SAndroid Build Coastguard Worker; CHECK: mulx {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[3] 1536*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1537*9880d681SAndroid Build Coastguard Workerentry: 1538*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 1539*9880d681SAndroid Build Coastguard Worker %vmulx2.i = tail call <4 x float> @llvm.aarch64.neon.fmulx.v4f32(<4 x float> %a, <4 x float> %shuffle) 1540*9880d681SAndroid Build Coastguard Worker ret <4 x float> %vmulx2.i 1541*9880d681SAndroid Build Coastguard Worker} 1542*9880d681SAndroid Build Coastguard Worker 1543*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vmulxq_laneq_f64(<2 x double> %a, <2 x double> %v) { 1544*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulxq_laneq_f64: 1545*9880d681SAndroid Build Coastguard Worker; CHECK: mulx {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[1] 1546*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1547*9880d681SAndroid Build Coastguard Workerentry: 1548*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <2 x i32> <i32 1, i32 1> 1549*9880d681SAndroid Build Coastguard Worker %vmulx2.i = tail call <2 x double> @llvm.aarch64.neon.fmulx.v2f64(<2 x double> %a, <2 x double> %shuffle) 1550*9880d681SAndroid Build Coastguard Worker ret <2 x double> %vmulx2.i 1551*9880d681SAndroid Build Coastguard Worker} 1552*9880d681SAndroid Build Coastguard Worker 1553*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vmla_lane_s16_0(<4 x i16> %a, <4 x i16> %b, <4 x i16> %v) { 1554*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmla_lane_s16_0: 1555*9880d681SAndroid Build Coastguard Worker; CHECK: mla {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 1556*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1557*9880d681SAndroid Build Coastguard Workerentry: 1558*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 1559*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i16> %shuffle, %b 1560*9880d681SAndroid Build Coastguard Worker %add = add <4 x i16> %mul, %a 1561*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %add 1562*9880d681SAndroid Build Coastguard Worker} 1563*9880d681SAndroid Build Coastguard Worker 1564*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmlaq_lane_s16_0(<8 x i16> %a, <8 x i16> %b, <4 x i16> %v) { 1565*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlaq_lane_s16_0: 1566*9880d681SAndroid Build Coastguard Worker; CHECK: mla {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 1567*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1568*9880d681SAndroid Build Coastguard Workerentry: 1569*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <8 x i32> zeroinitializer 1570*9880d681SAndroid Build Coastguard Worker %mul = mul <8 x i16> %shuffle, %b 1571*9880d681SAndroid Build Coastguard Worker %add = add <8 x i16> %mul, %a 1572*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %add 1573*9880d681SAndroid Build Coastguard Worker} 1574*9880d681SAndroid Build Coastguard Worker 1575*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vmla_lane_s32_0(<2 x i32> %a, <2 x i32> %b, <2 x i32> %v) { 1576*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmla_lane_s32_0: 1577*9880d681SAndroid Build Coastguard Worker; CHECK: mla {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 1578*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1579*9880d681SAndroid Build Coastguard Workerentry: 1580*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 1581*9880d681SAndroid Build Coastguard Worker %mul = mul <2 x i32> %shuffle, %b 1582*9880d681SAndroid Build Coastguard Worker %add = add <2 x i32> %mul, %a 1583*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %add 1584*9880d681SAndroid Build Coastguard Worker} 1585*9880d681SAndroid Build Coastguard Worker 1586*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlaq_lane_s32_0(<4 x i32> %a, <4 x i32> %b, <2 x i32> %v) { 1587*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlaq_lane_s32_0: 1588*9880d681SAndroid Build Coastguard Worker; CHECK: mla {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 1589*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1590*9880d681SAndroid Build Coastguard Workerentry: 1591*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <4 x i32> zeroinitializer 1592*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i32> %shuffle, %b 1593*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %mul, %a 1594*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 1595*9880d681SAndroid Build Coastguard Worker} 1596*9880d681SAndroid Build Coastguard Worker 1597*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vmla_laneq_s16_0(<4 x i16> %a, <4 x i16> %b, <8 x i16> %v) { 1598*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmla_laneq_s16_0: 1599*9880d681SAndroid Build Coastguard Worker; CHECK: mla {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 1600*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1601*9880d681SAndroid Build Coastguard Workerentry: 1602*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 1603*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i16> %shuffle, %b 1604*9880d681SAndroid Build Coastguard Worker %add = add <4 x i16> %mul, %a 1605*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %add 1606*9880d681SAndroid Build Coastguard Worker} 1607*9880d681SAndroid Build Coastguard Worker 1608*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmlaq_laneq_s16_0(<8 x i16> %a, <8 x i16> %b, <8 x i16> %v) { 1609*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlaq_laneq_s16_0: 1610*9880d681SAndroid Build Coastguard Worker; CHECK: mla {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 1611*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1612*9880d681SAndroid Build Coastguard Workerentry: 1613*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> zeroinitializer 1614*9880d681SAndroid Build Coastguard Worker %mul = mul <8 x i16> %shuffle, %b 1615*9880d681SAndroid Build Coastguard Worker %add = add <8 x i16> %mul, %a 1616*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %add 1617*9880d681SAndroid Build Coastguard Worker} 1618*9880d681SAndroid Build Coastguard Worker 1619*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vmla_laneq_s32_0(<2 x i32> %a, <2 x i32> %b, <4 x i32> %v) { 1620*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmla_laneq_s32_0: 1621*9880d681SAndroid Build Coastguard Worker; CHECK: mla {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 1622*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1623*9880d681SAndroid Build Coastguard Workerentry: 1624*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 1625*9880d681SAndroid Build Coastguard Worker %mul = mul <2 x i32> %shuffle, %b 1626*9880d681SAndroid Build Coastguard Worker %add = add <2 x i32> %mul, %a 1627*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %add 1628*9880d681SAndroid Build Coastguard Worker} 1629*9880d681SAndroid Build Coastguard Worker 1630*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlaq_laneq_s32_0(<4 x i32> %a, <4 x i32> %b, <4 x i32> %v) { 1631*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlaq_laneq_s32_0: 1632*9880d681SAndroid Build Coastguard Worker; CHECK: mla {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 1633*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1634*9880d681SAndroid Build Coastguard Workerentry: 1635*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> zeroinitializer 1636*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i32> %shuffle, %b 1637*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %mul, %a 1638*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 1639*9880d681SAndroid Build Coastguard Worker} 1640*9880d681SAndroid Build Coastguard Worker 1641*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vmls_lane_s16_0(<4 x i16> %a, <4 x i16> %b, <4 x i16> %v) { 1642*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmls_lane_s16_0: 1643*9880d681SAndroid Build Coastguard Worker; CHECK: mls {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 1644*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1645*9880d681SAndroid Build Coastguard Workerentry: 1646*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 1647*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i16> %shuffle, %b 1648*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i16> %a, %mul 1649*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %sub 1650*9880d681SAndroid Build Coastguard Worker} 1651*9880d681SAndroid Build Coastguard Worker 1652*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmlsq_lane_s16_0(<8 x i16> %a, <8 x i16> %b, <4 x i16> %v) { 1653*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsq_lane_s16_0: 1654*9880d681SAndroid Build Coastguard Worker; CHECK: mls {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 1655*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1656*9880d681SAndroid Build Coastguard Workerentry: 1657*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <8 x i32> zeroinitializer 1658*9880d681SAndroid Build Coastguard Worker %mul = mul <8 x i16> %shuffle, %b 1659*9880d681SAndroid Build Coastguard Worker %sub = sub <8 x i16> %a, %mul 1660*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %sub 1661*9880d681SAndroid Build Coastguard Worker} 1662*9880d681SAndroid Build Coastguard Worker 1663*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vmls_lane_s32_0(<2 x i32> %a, <2 x i32> %b, <2 x i32> %v) { 1664*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmls_lane_s32_0: 1665*9880d681SAndroid Build Coastguard Worker; CHECK: mls {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 1666*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1667*9880d681SAndroid Build Coastguard Workerentry: 1668*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 1669*9880d681SAndroid Build Coastguard Worker %mul = mul <2 x i32> %shuffle, %b 1670*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i32> %a, %mul 1671*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %sub 1672*9880d681SAndroid Build Coastguard Worker} 1673*9880d681SAndroid Build Coastguard Worker 1674*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsq_lane_s32_0(<4 x i32> %a, <4 x i32> %b, <2 x i32> %v) { 1675*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsq_lane_s32_0: 1676*9880d681SAndroid Build Coastguard Worker; CHECK: mls {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 1677*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1678*9880d681SAndroid Build Coastguard Workerentry: 1679*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <4 x i32> zeroinitializer 1680*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i32> %shuffle, %b 1681*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %mul 1682*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 1683*9880d681SAndroid Build Coastguard Worker} 1684*9880d681SAndroid Build Coastguard Worker 1685*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vmls_laneq_s16_0(<4 x i16> %a, <4 x i16> %b, <8 x i16> %v) { 1686*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmls_laneq_s16_0: 1687*9880d681SAndroid Build Coastguard Worker; CHECK: mls {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 1688*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1689*9880d681SAndroid Build Coastguard Workerentry: 1690*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 1691*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i16> %shuffle, %b 1692*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i16> %a, %mul 1693*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %sub 1694*9880d681SAndroid Build Coastguard Worker} 1695*9880d681SAndroid Build Coastguard Worker 1696*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmlsq_laneq_s16_0(<8 x i16> %a, <8 x i16> %b, <8 x i16> %v) { 1697*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsq_laneq_s16_0: 1698*9880d681SAndroid Build Coastguard Worker; CHECK: mls {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 1699*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1700*9880d681SAndroid Build Coastguard Workerentry: 1701*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> zeroinitializer 1702*9880d681SAndroid Build Coastguard Worker %mul = mul <8 x i16> %shuffle, %b 1703*9880d681SAndroid Build Coastguard Worker %sub = sub <8 x i16> %a, %mul 1704*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %sub 1705*9880d681SAndroid Build Coastguard Worker} 1706*9880d681SAndroid Build Coastguard Worker 1707*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vmls_laneq_s32_0(<2 x i32> %a, <2 x i32> %b, <4 x i32> %v) { 1708*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmls_laneq_s32_0: 1709*9880d681SAndroid Build Coastguard Worker; CHECK: mls {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 1710*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1711*9880d681SAndroid Build Coastguard Workerentry: 1712*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 1713*9880d681SAndroid Build Coastguard Worker %mul = mul <2 x i32> %shuffle, %b 1714*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i32> %a, %mul 1715*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %sub 1716*9880d681SAndroid Build Coastguard Worker} 1717*9880d681SAndroid Build Coastguard Worker 1718*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsq_laneq_s32_0(<4 x i32> %a, <4 x i32> %b, <4 x i32> %v) { 1719*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsq_laneq_s32_0: 1720*9880d681SAndroid Build Coastguard Worker; CHECK: mls {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 1721*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1722*9880d681SAndroid Build Coastguard Workerentry: 1723*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> zeroinitializer 1724*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i32> %shuffle, %b 1725*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %mul 1726*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 1727*9880d681SAndroid Build Coastguard Worker} 1728*9880d681SAndroid Build Coastguard Worker 1729*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vmul_lane_s16_0(<4 x i16> %a, <4 x i16> %v) { 1730*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_lane_s16_0: 1731*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 1732*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1733*9880d681SAndroid Build Coastguard Workerentry: 1734*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 1735*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i16> %shuffle, %a 1736*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %mul 1737*9880d681SAndroid Build Coastguard Worker} 1738*9880d681SAndroid Build Coastguard Worker 1739*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmulq_lane_s16_0(<8 x i16> %a, <4 x i16> %v) { 1740*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_lane_s16_0: 1741*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 1742*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1743*9880d681SAndroid Build Coastguard Workerentry: 1744*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <8 x i32> zeroinitializer 1745*9880d681SAndroid Build Coastguard Worker %mul = mul <8 x i16> %shuffle, %a 1746*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %mul 1747*9880d681SAndroid Build Coastguard Worker} 1748*9880d681SAndroid Build Coastguard Worker 1749*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vmul_lane_s32_0(<2 x i32> %a, <2 x i32> %v) { 1750*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_lane_s32_0: 1751*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 1752*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1753*9880d681SAndroid Build Coastguard Workerentry: 1754*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 1755*9880d681SAndroid Build Coastguard Worker %mul = mul <2 x i32> %shuffle, %a 1756*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %mul 1757*9880d681SAndroid Build Coastguard Worker} 1758*9880d681SAndroid Build Coastguard Worker 1759*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmulq_lane_s32_0(<4 x i32> %a, <2 x i32> %v) { 1760*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_lane_s32_0: 1761*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 1762*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1763*9880d681SAndroid Build Coastguard Workerentry: 1764*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <4 x i32> zeroinitializer 1765*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i32> %shuffle, %a 1766*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %mul 1767*9880d681SAndroid Build Coastguard Worker} 1768*9880d681SAndroid Build Coastguard Worker 1769*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vmul_lane_u16_0(<4 x i16> %a, <4 x i16> %v) { 1770*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_lane_u16_0: 1771*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 1772*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1773*9880d681SAndroid Build Coastguard Workerentry: 1774*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 1775*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i16> %shuffle, %a 1776*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %mul 1777*9880d681SAndroid Build Coastguard Worker} 1778*9880d681SAndroid Build Coastguard Worker 1779*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmulq_lane_u16_0(<8 x i16> %a, <4 x i16> %v) { 1780*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_lane_u16_0: 1781*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 1782*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1783*9880d681SAndroid Build Coastguard Workerentry: 1784*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <8 x i32> zeroinitializer 1785*9880d681SAndroid Build Coastguard Worker %mul = mul <8 x i16> %shuffle, %a 1786*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %mul 1787*9880d681SAndroid Build Coastguard Worker} 1788*9880d681SAndroid Build Coastguard Worker 1789*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vmul_lane_u32_0(<2 x i32> %a, <2 x i32> %v) { 1790*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_lane_u32_0: 1791*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 1792*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1793*9880d681SAndroid Build Coastguard Workerentry: 1794*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 1795*9880d681SAndroid Build Coastguard Worker %mul = mul <2 x i32> %shuffle, %a 1796*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %mul 1797*9880d681SAndroid Build Coastguard Worker} 1798*9880d681SAndroid Build Coastguard Worker 1799*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmulq_lane_u32_0(<4 x i32> %a, <2 x i32> %v) { 1800*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_lane_u32_0: 1801*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 1802*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1803*9880d681SAndroid Build Coastguard Workerentry: 1804*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <4 x i32> zeroinitializer 1805*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i32> %shuffle, %a 1806*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %mul 1807*9880d681SAndroid Build Coastguard Worker} 1808*9880d681SAndroid Build Coastguard Worker 1809*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vmul_laneq_s16_0(<4 x i16> %a, <8 x i16> %v) { 1810*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_laneq_s16_0: 1811*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 1812*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1813*9880d681SAndroid Build Coastguard Workerentry: 1814*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 1815*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i16> %shuffle, %a 1816*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %mul 1817*9880d681SAndroid Build Coastguard Worker} 1818*9880d681SAndroid Build Coastguard Worker 1819*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmulq_laneq_s16_0(<8 x i16> %a, <8 x i16> %v) { 1820*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_laneq_s16_0: 1821*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 1822*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1823*9880d681SAndroid Build Coastguard Workerentry: 1824*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> zeroinitializer 1825*9880d681SAndroid Build Coastguard Worker %mul = mul <8 x i16> %shuffle, %a 1826*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %mul 1827*9880d681SAndroid Build Coastguard Worker} 1828*9880d681SAndroid Build Coastguard Worker 1829*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vmul_laneq_s32_0(<2 x i32> %a, <4 x i32> %v) { 1830*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_laneq_s32_0: 1831*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 1832*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1833*9880d681SAndroid Build Coastguard Workerentry: 1834*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 1835*9880d681SAndroid Build Coastguard Worker %mul = mul <2 x i32> %shuffle, %a 1836*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %mul 1837*9880d681SAndroid Build Coastguard Worker} 1838*9880d681SAndroid Build Coastguard Worker 1839*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmulq_laneq_s32_0(<4 x i32> %a, <4 x i32> %v) { 1840*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_laneq_s32_0: 1841*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 1842*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1843*9880d681SAndroid Build Coastguard Workerentry: 1844*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> zeroinitializer 1845*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i32> %shuffle, %a 1846*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %mul 1847*9880d681SAndroid Build Coastguard Worker} 1848*9880d681SAndroid Build Coastguard Worker 1849*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vmul_laneq_u16_0(<4 x i16> %a, <8 x i16> %v) { 1850*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_laneq_u16_0: 1851*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 1852*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1853*9880d681SAndroid Build Coastguard Workerentry: 1854*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 1855*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i16> %shuffle, %a 1856*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %mul 1857*9880d681SAndroid Build Coastguard Worker} 1858*9880d681SAndroid Build Coastguard Worker 1859*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmulq_laneq_u16_0(<8 x i16> %a, <8 x i16> %v) { 1860*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_laneq_u16_0: 1861*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 1862*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1863*9880d681SAndroid Build Coastguard Workerentry: 1864*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> zeroinitializer 1865*9880d681SAndroid Build Coastguard Worker %mul = mul <8 x i16> %shuffle, %a 1866*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %mul 1867*9880d681SAndroid Build Coastguard Worker} 1868*9880d681SAndroid Build Coastguard Worker 1869*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vmul_laneq_u32_0(<2 x i32> %a, <4 x i32> %v) { 1870*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_laneq_u32_0: 1871*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 1872*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1873*9880d681SAndroid Build Coastguard Workerentry: 1874*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 1875*9880d681SAndroid Build Coastguard Worker %mul = mul <2 x i32> %shuffle, %a 1876*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %mul 1877*9880d681SAndroid Build Coastguard Worker} 1878*9880d681SAndroid Build Coastguard Worker 1879*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmulq_laneq_u32_0(<4 x i32> %a, <4 x i32> %v) { 1880*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_laneq_u32_0: 1881*9880d681SAndroid Build Coastguard Worker; CHECK: mul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 1882*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1883*9880d681SAndroid Build Coastguard Workerentry: 1884*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> zeroinitializer 1885*9880d681SAndroid Build Coastguard Worker %mul = mul <4 x i32> %shuffle, %a 1886*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %mul 1887*9880d681SAndroid Build Coastguard Worker} 1888*9880d681SAndroid Build Coastguard Worker 1889*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vfma_lane_f32_0(<2 x float> %a, <2 x float> %b, <2 x float> %v) { 1890*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfma_lane_f32_0: 1891*9880d681SAndroid Build Coastguard Worker; CHECK: fmla {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 1892*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1893*9880d681SAndroid Build Coastguard Workerentry: 1894*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <2 x float> %v, <2 x float> undef, <2 x i32> zeroinitializer 1895*9880d681SAndroid Build Coastguard Worker %0 = tail call <2 x float> @llvm.fma.v2f32(<2 x float> %lane, <2 x float> %b, <2 x float> %a) 1896*9880d681SAndroid Build Coastguard Worker ret <2 x float> %0 1897*9880d681SAndroid Build Coastguard Worker} 1898*9880d681SAndroid Build Coastguard Worker 1899*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vfmaq_lane_f32_0(<4 x float> %a, <4 x float> %b, <2 x float> %v) { 1900*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmaq_lane_f32_0: 1901*9880d681SAndroid Build Coastguard Worker; CHECK: fmla {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 1902*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1903*9880d681SAndroid Build Coastguard Workerentry: 1904*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <2 x float> %v, <2 x float> undef, <4 x i32> zeroinitializer 1905*9880d681SAndroid Build Coastguard Worker %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %lane, <4 x float> %b, <4 x float> %a) 1906*9880d681SAndroid Build Coastguard Worker ret <4 x float> %0 1907*9880d681SAndroid Build Coastguard Worker} 1908*9880d681SAndroid Build Coastguard Worker 1909*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vfma_laneq_f32_0(<2 x float> %a, <2 x float> %b, <4 x float> %v) { 1910*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfma_laneq_f32_0: 1911*9880d681SAndroid Build Coastguard Worker; CHECK: fmla {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 1912*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1913*9880d681SAndroid Build Coastguard Workerentry: 1914*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <4 x float> %v, <4 x float> undef, <2 x i32> zeroinitializer 1915*9880d681SAndroid Build Coastguard Worker %0 = tail call <2 x float> @llvm.fma.v2f32(<2 x float> %lane, <2 x float> %b, <2 x float> %a) 1916*9880d681SAndroid Build Coastguard Worker ret <2 x float> %0 1917*9880d681SAndroid Build Coastguard Worker} 1918*9880d681SAndroid Build Coastguard Worker 1919*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vfmaq_laneq_f32_0(<4 x float> %a, <4 x float> %b, <4 x float> %v) { 1920*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmaq_laneq_f32_0: 1921*9880d681SAndroid Build Coastguard Worker; CHECK: fmla {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 1922*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1923*9880d681SAndroid Build Coastguard Workerentry: 1924*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> zeroinitializer 1925*9880d681SAndroid Build Coastguard Worker %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %lane, <4 x float> %b, <4 x float> %a) 1926*9880d681SAndroid Build Coastguard Worker ret <4 x float> %0 1927*9880d681SAndroid Build Coastguard Worker} 1928*9880d681SAndroid Build Coastguard Worker 1929*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vfms_lane_f32_0(<2 x float> %a, <2 x float> %b, <2 x float> %v) { 1930*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfms_lane_f32_0: 1931*9880d681SAndroid Build Coastguard Worker; CHECK: fmls {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 1932*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1933*9880d681SAndroid Build Coastguard Workerentry: 1934*9880d681SAndroid Build Coastguard Worker %sub = fsub <2 x float> <float -0.000000e+00, float -0.000000e+00>, %v 1935*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <2 x float> %sub, <2 x float> undef, <2 x i32> zeroinitializer 1936*9880d681SAndroid Build Coastguard Worker %0 = tail call <2 x float> @llvm.fma.v2f32(<2 x float> %lane, <2 x float> %b, <2 x float> %a) 1937*9880d681SAndroid Build Coastguard Worker ret <2 x float> %0 1938*9880d681SAndroid Build Coastguard Worker} 1939*9880d681SAndroid Build Coastguard Worker 1940*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vfmsq_lane_f32_0(<4 x float> %a, <4 x float> %b, <2 x float> %v) { 1941*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmsq_lane_f32_0: 1942*9880d681SAndroid Build Coastguard Worker; CHECK: fmls {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 1943*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1944*9880d681SAndroid Build Coastguard Workerentry: 1945*9880d681SAndroid Build Coastguard Worker %sub = fsub <2 x float> <float -0.000000e+00, float -0.000000e+00>, %v 1946*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <2 x float> %sub, <2 x float> undef, <4 x i32> zeroinitializer 1947*9880d681SAndroid Build Coastguard Worker %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %lane, <4 x float> %b, <4 x float> %a) 1948*9880d681SAndroid Build Coastguard Worker ret <4 x float> %0 1949*9880d681SAndroid Build Coastguard Worker} 1950*9880d681SAndroid Build Coastguard Worker 1951*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vfms_laneq_f32_0(<2 x float> %a, <2 x float> %b, <4 x float> %v) { 1952*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfms_laneq_f32_0: 1953*9880d681SAndroid Build Coastguard Worker; CHECK: fmls {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 1954*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1955*9880d681SAndroid Build Coastguard Workerentry: 1956*9880d681SAndroid Build Coastguard Worker %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %v 1957*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <4 x float> %sub, <4 x float> undef, <2 x i32> zeroinitializer 1958*9880d681SAndroid Build Coastguard Worker %0 = tail call <2 x float> @llvm.fma.v2f32(<2 x float> %lane, <2 x float> %b, <2 x float> %a) 1959*9880d681SAndroid Build Coastguard Worker ret <2 x float> %0 1960*9880d681SAndroid Build Coastguard Worker} 1961*9880d681SAndroid Build Coastguard Worker 1962*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vfmsq_laneq_f32_0(<4 x float> %a, <4 x float> %b, <4 x float> %v) { 1963*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmsq_laneq_f32_0: 1964*9880d681SAndroid Build Coastguard Worker; CHECK: fmls {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 1965*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1966*9880d681SAndroid Build Coastguard Workerentry: 1967*9880d681SAndroid Build Coastguard Worker %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %v 1968*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <4 x float> %sub, <4 x float> undef, <4 x i32> zeroinitializer 1969*9880d681SAndroid Build Coastguard Worker %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %lane, <4 x float> %b, <4 x float> %a) 1970*9880d681SAndroid Build Coastguard Worker ret <4 x float> %0 1971*9880d681SAndroid Build Coastguard Worker} 1972*9880d681SAndroid Build Coastguard Worker 1973*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vfmaq_laneq_f64_0(<2 x double> %a, <2 x double> %b, <2 x double> %v) { 1974*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmaq_laneq_f64_0: 1975*9880d681SAndroid Build Coastguard Worker; CHECK: fmla {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0] 1976*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1977*9880d681SAndroid Build Coastguard Workerentry: 1978*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <2 x double> %v, <2 x double> undef, <2 x i32> zeroinitializer 1979*9880d681SAndroid Build Coastguard Worker %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %lane, <2 x double> %b, <2 x double> %a) 1980*9880d681SAndroid Build Coastguard Worker ret <2 x double> %0 1981*9880d681SAndroid Build Coastguard Worker} 1982*9880d681SAndroid Build Coastguard Worker 1983*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vfmsq_laneq_f64_0(<2 x double> %a, <2 x double> %b, <2 x double> %v) { 1984*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmsq_laneq_f64_0: 1985*9880d681SAndroid Build Coastguard Worker; CHECK: fmls {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0] 1986*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1987*9880d681SAndroid Build Coastguard Workerentry: 1988*9880d681SAndroid Build Coastguard Worker %sub = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %v 1989*9880d681SAndroid Build Coastguard Worker %lane = shufflevector <2 x double> %sub, <2 x double> undef, <2 x i32> zeroinitializer 1990*9880d681SAndroid Build Coastguard Worker %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %lane, <2 x double> %b, <2 x double> %a) 1991*9880d681SAndroid Build Coastguard Worker ret <2 x double> %0 1992*9880d681SAndroid Build Coastguard Worker} 1993*9880d681SAndroid Build Coastguard Worker 1994*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_lane_s16_0(<4 x i32> %a, <4 x i16> %b, <4 x i16> %v) { 1995*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_lane_s16_0: 1996*9880d681SAndroid Build Coastguard Worker; CHECK: mlal {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 1997*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1998*9880d681SAndroid Build Coastguard Workerentry: 1999*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2000*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 2001*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %vmull2.i, %a 2002*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 2003*9880d681SAndroid Build Coastguard Worker} 2004*9880d681SAndroid Build Coastguard Worker 2005*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_lane_s32_0(<2 x i64> %a, <2 x i32> %b, <2 x i32> %v) { 2006*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_lane_s32_0: 2007*9880d681SAndroid Build Coastguard Worker; CHECK: mlal {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2008*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2009*9880d681SAndroid Build Coastguard Workerentry: 2010*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2011*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 2012*9880d681SAndroid Build Coastguard Worker %add = add <2 x i64> %vmull2.i, %a 2013*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add 2014*9880d681SAndroid Build Coastguard Worker} 2015*9880d681SAndroid Build Coastguard Worker 2016*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_laneq_s16_0(<4 x i32> %a, <4 x i16> %b, <8 x i16> %v) { 2017*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_laneq_s16_0: 2018*9880d681SAndroid Build Coastguard Worker; CHECK: mlal {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 2019*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2020*9880d681SAndroid Build Coastguard Workerentry: 2021*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 2022*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 2023*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %vmull2.i, %a 2024*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 2025*9880d681SAndroid Build Coastguard Worker} 2026*9880d681SAndroid Build Coastguard Worker 2027*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_laneq_s32_0(<2 x i64> %a, <2 x i32> %b, <4 x i32> %v) { 2028*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_laneq_s32_0: 2029*9880d681SAndroid Build Coastguard Worker; CHECK: mlal {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2030*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2031*9880d681SAndroid Build Coastguard Workerentry: 2032*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 2033*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 2034*9880d681SAndroid Build Coastguard Worker %add = add <2 x i64> %vmull2.i, %a 2035*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add 2036*9880d681SAndroid Build Coastguard Worker} 2037*9880d681SAndroid Build Coastguard Worker 2038*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_high_lane_s16_0(<4 x i32> %a, <8 x i16> %b, <4 x i16> %v) { 2039*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_lane_s16_0: 2040*9880d681SAndroid Build Coastguard Worker; CHECK: mlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2041*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2042*9880d681SAndroid Build Coastguard Workerentry: 2043*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 2044*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2045*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 2046*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %vmull2.i, %a 2047*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 2048*9880d681SAndroid Build Coastguard Worker} 2049*9880d681SAndroid Build Coastguard Worker 2050*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_high_lane_s32_0(<2 x i64> %a, <4 x i32> %b, <2 x i32> %v) { 2051*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_lane_s32_0: 2052*9880d681SAndroid Build Coastguard Worker; CHECK: mlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2053*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2054*9880d681SAndroid Build Coastguard Workerentry: 2055*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 2056*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2057*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 2058*9880d681SAndroid Build Coastguard Worker %add = add <2 x i64> %vmull2.i, %a 2059*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add 2060*9880d681SAndroid Build Coastguard Worker} 2061*9880d681SAndroid Build Coastguard Worker 2062*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_high_laneq_s16_0(<4 x i32> %a, <8 x i16> %b, <8 x i16> %v) { 2063*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_laneq_s16_0: 2064*9880d681SAndroid Build Coastguard Worker; CHECK: mlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2065*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2066*9880d681SAndroid Build Coastguard Workerentry: 2067*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 2068*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 2069*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 2070*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %vmull2.i, %a 2071*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 2072*9880d681SAndroid Build Coastguard Worker} 2073*9880d681SAndroid Build Coastguard Worker 2074*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_high_laneq_s32_0(<2 x i64> %a, <4 x i32> %b, <4 x i32> %v) { 2075*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_laneq_s32_0: 2076*9880d681SAndroid Build Coastguard Worker; CHECK: mlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2077*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2078*9880d681SAndroid Build Coastguard Workerentry: 2079*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 2080*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 2081*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 2082*9880d681SAndroid Build Coastguard Worker %add = add <2 x i64> %vmull2.i, %a 2083*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add 2084*9880d681SAndroid Build Coastguard Worker} 2085*9880d681SAndroid Build Coastguard Worker 2086*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_lane_s16_0(<4 x i32> %a, <4 x i16> %b, <4 x i16> %v) { 2087*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_lane_s16_0: 2088*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 2089*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2090*9880d681SAndroid Build Coastguard Workerentry: 2091*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2092*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 2093*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %vmull2.i 2094*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 2095*9880d681SAndroid Build Coastguard Worker} 2096*9880d681SAndroid Build Coastguard Worker 2097*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_lane_s32_0(<2 x i64> %a, <2 x i32> %b, <2 x i32> %v) { 2098*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_lane_s32_0: 2099*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2101*9880d681SAndroid Build Coastguard Workerentry: 2102*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2103*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 2104*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i64> %a, %vmull2.i 2105*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub 2106*9880d681SAndroid Build Coastguard Worker} 2107*9880d681SAndroid Build Coastguard Worker 2108*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_laneq_s16_0(<4 x i32> %a, <4 x i16> %b, <8 x i16> %v) { 2109*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_laneq_s16_0: 2110*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 2111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2112*9880d681SAndroid Build Coastguard Workerentry: 2113*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 2114*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 2115*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %vmull2.i 2116*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 2117*9880d681SAndroid Build Coastguard Worker} 2118*9880d681SAndroid Build Coastguard Worker 2119*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_laneq_s32_0(<2 x i64> %a, <2 x i32> %b, <4 x i32> %v) { 2120*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_laneq_s32_0: 2121*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2122*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2123*9880d681SAndroid Build Coastguard Workerentry: 2124*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 2125*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 2126*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i64> %a, %vmull2.i 2127*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub 2128*9880d681SAndroid Build Coastguard Worker} 2129*9880d681SAndroid Build Coastguard Worker 2130*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_high_lane_s16_0(<4 x i32> %a, <8 x i16> %b, <4 x i16> %v) { 2131*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_lane_s16_0: 2132*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2133*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2134*9880d681SAndroid Build Coastguard Workerentry: 2135*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 2136*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2137*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 2138*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %vmull2.i 2139*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 2140*9880d681SAndroid Build Coastguard Worker} 2141*9880d681SAndroid Build Coastguard Worker 2142*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_high_lane_s32_0(<2 x i64> %a, <4 x i32> %b, <2 x i32> %v) { 2143*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_lane_s32_0: 2144*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2145*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2146*9880d681SAndroid Build Coastguard Workerentry: 2147*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 2148*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2149*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 2150*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i64> %a, %vmull2.i 2151*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub 2152*9880d681SAndroid Build Coastguard Worker} 2153*9880d681SAndroid Build Coastguard Worker 2154*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_high_laneq_s16_0(<4 x i32> %a, <8 x i16> %b, <8 x i16> %v) { 2155*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_laneq_s16_0: 2156*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2158*9880d681SAndroid Build Coastguard Workerentry: 2159*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 2160*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 2161*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 2162*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %vmull2.i 2163*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 2164*9880d681SAndroid Build Coastguard Worker} 2165*9880d681SAndroid Build Coastguard Worker 2166*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_high_laneq_s32_0(<2 x i64> %a, <4 x i32> %b, <4 x i32> %v) { 2167*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_laneq_s32_0: 2168*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2169*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2170*9880d681SAndroid Build Coastguard Workerentry: 2171*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 2172*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 2173*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 2174*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i64> %a, %vmull2.i 2175*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub 2176*9880d681SAndroid Build Coastguard Worker} 2177*9880d681SAndroid Build Coastguard Worker 2178*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_lane_u16_0(<4 x i32> %a, <4 x i16> %b, <4 x i16> %v) { 2179*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_lane_u16_0: 2180*9880d681SAndroid Build Coastguard Worker; CHECK: mlal {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 2181*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2182*9880d681SAndroid Build Coastguard Workerentry: 2183*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2184*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 2185*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %vmull2.i, %a 2186*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 2187*9880d681SAndroid Build Coastguard Worker} 2188*9880d681SAndroid Build Coastguard Worker 2189*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_lane_u32_0(<2 x i64> %a, <2 x i32> %b, <2 x i32> %v) { 2190*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_lane_u32_0: 2191*9880d681SAndroid Build Coastguard Worker; CHECK: mlal {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2192*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2193*9880d681SAndroid Build Coastguard Workerentry: 2194*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2195*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 2196*9880d681SAndroid Build Coastguard Worker %add = add <2 x i64> %vmull2.i, %a 2197*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add 2198*9880d681SAndroid Build Coastguard Worker} 2199*9880d681SAndroid Build Coastguard Worker 2200*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_laneq_u16_0(<4 x i32> %a, <4 x i16> %b, <8 x i16> %v) { 2201*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_laneq_u16_0: 2202*9880d681SAndroid Build Coastguard Worker; CHECK: mlal {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 2203*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2204*9880d681SAndroid Build Coastguard Workerentry: 2205*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 2206*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 2207*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %vmull2.i, %a 2208*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 2209*9880d681SAndroid Build Coastguard Worker} 2210*9880d681SAndroid Build Coastguard Worker 2211*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_laneq_u32_0(<2 x i64> %a, <2 x i32> %b, <4 x i32> %v) { 2212*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_laneq_u32_0: 2213*9880d681SAndroid Build Coastguard Worker; CHECK: mlal {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2214*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2215*9880d681SAndroid Build Coastguard Workerentry: 2216*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 2217*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 2218*9880d681SAndroid Build Coastguard Worker %add = add <2 x i64> %vmull2.i, %a 2219*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add 2220*9880d681SAndroid Build Coastguard Worker} 2221*9880d681SAndroid Build Coastguard Worker 2222*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_high_lane_u16_0(<4 x i32> %a, <8 x i16> %b, <4 x i16> %v) { 2223*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_lane_u16_0: 2224*9880d681SAndroid Build Coastguard Worker; CHECK: mlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2225*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2226*9880d681SAndroid Build Coastguard Workerentry: 2227*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 2228*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2229*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 2230*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %vmull2.i, %a 2231*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 2232*9880d681SAndroid Build Coastguard Worker} 2233*9880d681SAndroid Build Coastguard Worker 2234*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_high_lane_u32_0(<2 x i64> %a, <4 x i32> %b, <2 x i32> %v) { 2235*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_lane_u32_0: 2236*9880d681SAndroid Build Coastguard Worker; CHECK: mlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2237*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2238*9880d681SAndroid Build Coastguard Workerentry: 2239*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 2240*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2241*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 2242*9880d681SAndroid Build Coastguard Worker %add = add <2 x i64> %vmull2.i, %a 2243*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add 2244*9880d681SAndroid Build Coastguard Worker} 2245*9880d681SAndroid Build Coastguard Worker 2246*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_high_laneq_u16_0(<4 x i32> %a, <8 x i16> %b, <8 x i16> %v) { 2247*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_laneq_u16_0: 2248*9880d681SAndroid Build Coastguard Worker; CHECK: mlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2249*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2250*9880d681SAndroid Build Coastguard Workerentry: 2251*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 2252*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 2253*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 2254*9880d681SAndroid Build Coastguard Worker %add = add <4 x i32> %vmull2.i, %a 2255*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add 2256*9880d681SAndroid Build Coastguard Worker} 2257*9880d681SAndroid Build Coastguard Worker 2258*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_high_laneq_u32_0(<2 x i64> %a, <4 x i32> %b, <4 x i32> %v) { 2259*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_laneq_u32_0: 2260*9880d681SAndroid Build Coastguard Worker; CHECK: mlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2261*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2262*9880d681SAndroid Build Coastguard Workerentry: 2263*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 2264*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 2265*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 2266*9880d681SAndroid Build Coastguard Worker %add = add <2 x i64> %vmull2.i, %a 2267*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add 2268*9880d681SAndroid Build Coastguard Worker} 2269*9880d681SAndroid Build Coastguard Worker 2270*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_lane_u16_0(<4 x i32> %a, <4 x i16> %b, <4 x i16> %v) { 2271*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_lane_u16_0: 2272*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 2273*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2274*9880d681SAndroid Build Coastguard Workerentry: 2275*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2276*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 2277*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %vmull2.i 2278*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 2279*9880d681SAndroid Build Coastguard Worker} 2280*9880d681SAndroid Build Coastguard Worker 2281*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_lane_u32_0(<2 x i64> %a, <2 x i32> %b, <2 x i32> %v) { 2282*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_lane_u32_0: 2283*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2284*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2285*9880d681SAndroid Build Coastguard Workerentry: 2286*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2287*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 2288*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i64> %a, %vmull2.i 2289*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub 2290*9880d681SAndroid Build Coastguard Worker} 2291*9880d681SAndroid Build Coastguard Worker 2292*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_laneq_u16_0(<4 x i32> %a, <4 x i16> %b, <8 x i16> %v) { 2293*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_laneq_u16_0: 2294*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 2295*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2296*9880d681SAndroid Build Coastguard Workerentry: 2297*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 2298*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 2299*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %vmull2.i 2300*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 2301*9880d681SAndroid Build Coastguard Worker} 2302*9880d681SAndroid Build Coastguard Worker 2303*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_laneq_u32_0(<2 x i64> %a, <2 x i32> %b, <4 x i32> %v) { 2304*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_laneq_u32_0: 2305*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2306*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2307*9880d681SAndroid Build Coastguard Workerentry: 2308*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 2309*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 2310*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i64> %a, %vmull2.i 2311*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub 2312*9880d681SAndroid Build Coastguard Worker} 2313*9880d681SAndroid Build Coastguard Worker 2314*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_high_lane_u16_0(<4 x i32> %a, <8 x i16> %b, <4 x i16> %v) { 2315*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_lane_u16_0: 2316*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2317*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2318*9880d681SAndroid Build Coastguard Workerentry: 2319*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 2320*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2321*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 2322*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %vmull2.i 2323*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 2324*9880d681SAndroid Build Coastguard Worker} 2325*9880d681SAndroid Build Coastguard Worker 2326*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_high_lane_u32_0(<2 x i64> %a, <4 x i32> %b, <2 x i32> %v) { 2327*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_lane_u32_0: 2328*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2329*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2330*9880d681SAndroid Build Coastguard Workerentry: 2331*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 2332*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2333*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 2334*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i64> %a, %vmull2.i 2335*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub 2336*9880d681SAndroid Build Coastguard Worker} 2337*9880d681SAndroid Build Coastguard Worker 2338*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_high_laneq_u16_0(<4 x i32> %a, <8 x i16> %b, <8 x i16> %v) { 2339*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_laneq_u16_0: 2340*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2341*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2342*9880d681SAndroid Build Coastguard Workerentry: 2343*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 2344*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 2345*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 2346*9880d681SAndroid Build Coastguard Worker %sub = sub <4 x i32> %a, %vmull2.i 2347*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub 2348*9880d681SAndroid Build Coastguard Worker} 2349*9880d681SAndroid Build Coastguard Worker 2350*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_high_laneq_u32_0(<2 x i64> %a, <4 x i32> %b, <4 x i32> %v) { 2351*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_laneq_u32_0: 2352*9880d681SAndroid Build Coastguard Worker; CHECK: mlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2353*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2354*9880d681SAndroid Build Coastguard Workerentry: 2355*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 2356*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 2357*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 2358*9880d681SAndroid Build Coastguard Worker %sub = sub <2 x i64> %a, %vmull2.i 2359*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub 2360*9880d681SAndroid Build Coastguard Worker} 2361*9880d681SAndroid Build Coastguard Worker 2362*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_lane_s16_0(<4 x i16> %a, <4 x i16> %v) { 2363*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_lane_s16_0: 2364*9880d681SAndroid Build Coastguard Worker; CHECK: mull {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 2365*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2366*9880d681SAndroid Build Coastguard Workerentry: 2367*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2368*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %a, <4 x i16> %shuffle) 2369*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull2.i 2370*9880d681SAndroid Build Coastguard Worker} 2371*9880d681SAndroid Build Coastguard Worker 2372*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_lane_s32_0(<2 x i32> %a, <2 x i32> %v) { 2373*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_lane_s32_0: 2374*9880d681SAndroid Build Coastguard Worker; CHECK: mull {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2375*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2376*9880d681SAndroid Build Coastguard Workerentry: 2377*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2378*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %a, <2 x i32> %shuffle) 2379*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull2.i 2380*9880d681SAndroid Build Coastguard Worker} 2381*9880d681SAndroid Build Coastguard Worker 2382*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_lane_u16_0(<4 x i16> %a, <4 x i16> %v) { 2383*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_lane_u16_0: 2384*9880d681SAndroid Build Coastguard Worker; CHECK: mull {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 2385*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2386*9880d681SAndroid Build Coastguard Workerentry: 2387*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2388*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %a, <4 x i16> %shuffle) 2389*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull2.i 2390*9880d681SAndroid Build Coastguard Worker} 2391*9880d681SAndroid Build Coastguard Worker 2392*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_lane_u32_0(<2 x i32> %a, <2 x i32> %v) { 2393*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_lane_u32_0: 2394*9880d681SAndroid Build Coastguard Worker; CHECK: mull {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2395*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2396*9880d681SAndroid Build Coastguard Workerentry: 2397*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2398*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %a, <2 x i32> %shuffle) 2399*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull2.i 2400*9880d681SAndroid Build Coastguard Worker} 2401*9880d681SAndroid Build Coastguard Worker 2402*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_high_lane_s16_0(<8 x i16> %a, <4 x i16> %v) { 2403*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_lane_s16_0: 2404*9880d681SAndroid Build Coastguard Worker; CHECK: mull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2405*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2406*9880d681SAndroid Build Coastguard Workerentry: 2407*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 2408*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2409*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 2410*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull2.i 2411*9880d681SAndroid Build Coastguard Worker} 2412*9880d681SAndroid Build Coastguard Worker 2413*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_high_lane_s32_0(<4 x i32> %a, <2 x i32> %v) { 2414*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_lane_s32_0: 2415*9880d681SAndroid Build Coastguard Worker; CHECK: mull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2416*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2417*9880d681SAndroid Build Coastguard Workerentry: 2418*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 2419*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2420*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 2421*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull2.i 2422*9880d681SAndroid Build Coastguard Worker} 2423*9880d681SAndroid Build Coastguard Worker 2424*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_high_lane_u16_0(<8 x i16> %a, <4 x i16> %v) { 2425*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_lane_u16_0: 2426*9880d681SAndroid Build Coastguard Worker; CHECK: mull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2427*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2428*9880d681SAndroid Build Coastguard Workerentry: 2429*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 2430*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2431*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 2432*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull2.i 2433*9880d681SAndroid Build Coastguard Worker} 2434*9880d681SAndroid Build Coastguard Worker 2435*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_high_lane_u32_0(<4 x i32> %a, <2 x i32> %v) { 2436*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_lane_u32_0: 2437*9880d681SAndroid Build Coastguard Worker; CHECK: mull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2438*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2439*9880d681SAndroid Build Coastguard Workerentry: 2440*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 2441*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2442*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 2443*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull2.i 2444*9880d681SAndroid Build Coastguard Worker} 2445*9880d681SAndroid Build Coastguard Worker 2446*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_laneq_s16_0(<4 x i16> %a, <8 x i16> %v) { 2447*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_laneq_s16_0: 2448*9880d681SAndroid Build Coastguard Worker; CHECK: mull {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 2449*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2450*9880d681SAndroid Build Coastguard Workerentry: 2451*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 2452*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %a, <4 x i16> %shuffle) 2453*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull2.i 2454*9880d681SAndroid Build Coastguard Worker} 2455*9880d681SAndroid Build Coastguard Worker 2456*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_laneq_s32_0(<2 x i32> %a, <4 x i32> %v) { 2457*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_laneq_s32_0: 2458*9880d681SAndroid Build Coastguard Worker; CHECK: mull {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2459*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2460*9880d681SAndroid Build Coastguard Workerentry: 2461*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 2462*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %a, <2 x i32> %shuffle) 2463*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull2.i 2464*9880d681SAndroid Build Coastguard Worker} 2465*9880d681SAndroid Build Coastguard Worker 2466*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_laneq_u16_0(<4 x i16> %a, <8 x i16> %v) { 2467*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_laneq_u16_0: 2468*9880d681SAndroid Build Coastguard Worker; CHECK: mull {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 2469*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2470*9880d681SAndroid Build Coastguard Workerentry: 2471*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 2472*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %a, <4 x i16> %shuffle) 2473*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull2.i 2474*9880d681SAndroid Build Coastguard Worker} 2475*9880d681SAndroid Build Coastguard Worker 2476*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_laneq_u32_0(<2 x i32> %a, <4 x i32> %v) { 2477*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_laneq_u32_0: 2478*9880d681SAndroid Build Coastguard Worker; CHECK: mull {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2479*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2480*9880d681SAndroid Build Coastguard Workerentry: 2481*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 2482*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %a, <2 x i32> %shuffle) 2483*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull2.i 2484*9880d681SAndroid Build Coastguard Worker} 2485*9880d681SAndroid Build Coastguard Worker 2486*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_high_laneq_s16_0(<8 x i16> %a, <8 x i16> %v) { 2487*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_laneq_s16_0: 2488*9880d681SAndroid Build Coastguard Worker; CHECK: mull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2489*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2490*9880d681SAndroid Build Coastguard Workerentry: 2491*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 2492*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 2493*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 2494*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull2.i 2495*9880d681SAndroid Build Coastguard Worker} 2496*9880d681SAndroid Build Coastguard Worker 2497*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_high_laneq_s32_0(<4 x i32> %a, <4 x i32> %v) { 2498*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_laneq_s32_0: 2499*9880d681SAndroid Build Coastguard Worker; CHECK: mull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2500*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2501*9880d681SAndroid Build Coastguard Workerentry: 2502*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 2503*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 2504*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 2505*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull2.i 2506*9880d681SAndroid Build Coastguard Worker} 2507*9880d681SAndroid Build Coastguard Worker 2508*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_high_laneq_u16_0(<8 x i16> %a, <8 x i16> %v) { 2509*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_laneq_u16_0: 2510*9880d681SAndroid Build Coastguard Worker; CHECK: mull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2511*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2512*9880d681SAndroid Build Coastguard Workerentry: 2513*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 2514*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 2515*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 2516*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull2.i 2517*9880d681SAndroid Build Coastguard Worker} 2518*9880d681SAndroid Build Coastguard Worker 2519*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_high_laneq_u32_0(<4 x i32> %a, <4 x i32> %v) { 2520*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_laneq_u32_0: 2521*9880d681SAndroid Build Coastguard Worker; CHECK: mull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2522*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2523*9880d681SAndroid Build Coastguard Workerentry: 2524*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 2525*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 2526*9880d681SAndroid Build Coastguard Worker %vmull2.i = tail call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 2527*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull2.i 2528*9880d681SAndroid Build Coastguard Worker} 2529*9880d681SAndroid Build Coastguard Worker 2530*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmlal_lane_s16_0(<4 x i32> %a, <4 x i16> %b, <4 x i16> %v) { 2531*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlal_lane_s16_0: 2532*9880d681SAndroid Build Coastguard Worker; CHECK: qdmlal {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 2533*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2534*9880d681SAndroid Build Coastguard Workerentry: 2535*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2536*9880d681SAndroid Build Coastguard Worker %vqdmlal2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 2537*9880d681SAndroid Build Coastguard Worker %vqdmlal4.i = tail call <4 x i32> @llvm.aarch64.neon.sqadd.v4i32(<4 x i32> %a, <4 x i32> %vqdmlal2.i) 2538*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmlal4.i 2539*9880d681SAndroid Build Coastguard Worker} 2540*9880d681SAndroid Build Coastguard Worker 2541*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmlal_lane_s32_0(<2 x i64> %a, <2 x i32> %b, <2 x i32> %v) { 2542*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlal_lane_s32_0: 2543*9880d681SAndroid Build Coastguard Worker; CHECK: qdmlal {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2544*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2545*9880d681SAndroid Build Coastguard Workerentry: 2546*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2547*9880d681SAndroid Build Coastguard Worker %vqdmlal2.i = tail call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 2548*9880d681SAndroid Build Coastguard Worker %vqdmlal4.i = tail call <2 x i64> @llvm.aarch64.neon.sqadd.v2i64(<2 x i64> %a, <2 x i64> %vqdmlal2.i) 2549*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmlal4.i 2550*9880d681SAndroid Build Coastguard Worker} 2551*9880d681SAndroid Build Coastguard Worker 2552*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmlal_high_lane_s16_0(<4 x i32> %a, <8 x i16> %b, <4 x i16> %v) { 2553*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlal_high_lane_s16_0: 2554*9880d681SAndroid Build Coastguard Worker; CHECK: qdmlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2555*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2556*9880d681SAndroid Build Coastguard Workerentry: 2557*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 2558*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2559*9880d681SAndroid Build Coastguard Worker %vqdmlal2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 2560*9880d681SAndroid Build Coastguard Worker %vqdmlal4.i = tail call <4 x i32> @llvm.aarch64.neon.sqadd.v4i32(<4 x i32> %a, <4 x i32> %vqdmlal2.i) 2561*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmlal4.i 2562*9880d681SAndroid Build Coastguard Worker} 2563*9880d681SAndroid Build Coastguard Worker 2564*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmlal_high_lane_s32_0(<2 x i64> %a, <4 x i32> %b, <2 x i32> %v) { 2565*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlal_high_lane_s32_0: 2566*9880d681SAndroid Build Coastguard Worker; CHECK: qdmlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2567*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2568*9880d681SAndroid Build Coastguard Workerentry: 2569*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 2570*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2571*9880d681SAndroid Build Coastguard Worker %vqdmlal2.i = tail call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 2572*9880d681SAndroid Build Coastguard Worker %vqdmlal4.i = tail call <2 x i64> @llvm.aarch64.neon.sqadd.v2i64(<2 x i64> %a, <2 x i64> %vqdmlal2.i) 2573*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmlal4.i 2574*9880d681SAndroid Build Coastguard Worker} 2575*9880d681SAndroid Build Coastguard Worker 2576*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmlsl_lane_s16_0(<4 x i32> %a, <4 x i16> %b, <4 x i16> %v) { 2577*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlsl_lane_s16_0: 2578*9880d681SAndroid Build Coastguard Worker; CHECK: qdmlsl {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 2579*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2580*9880d681SAndroid Build Coastguard Workerentry: 2581*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2582*9880d681SAndroid Build Coastguard Worker %vqdmlsl2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %b, <4 x i16> %shuffle) 2583*9880d681SAndroid Build Coastguard Worker %vqdmlsl4.i = tail call <4 x i32> @llvm.aarch64.neon.sqsub.v4i32(<4 x i32> %a, <4 x i32> %vqdmlsl2.i) 2584*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmlsl4.i 2585*9880d681SAndroid Build Coastguard Worker} 2586*9880d681SAndroid Build Coastguard Worker 2587*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmlsl_lane_s32_0(<2 x i64> %a, <2 x i32> %b, <2 x i32> %v) { 2588*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlsl_lane_s32_0: 2589*9880d681SAndroid Build Coastguard Worker; CHECK: qdmlsl {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2590*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2591*9880d681SAndroid Build Coastguard Workerentry: 2592*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2593*9880d681SAndroid Build Coastguard Worker %vqdmlsl2.i = tail call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %b, <2 x i32> %shuffle) 2594*9880d681SAndroid Build Coastguard Worker %vqdmlsl4.i = tail call <2 x i64> @llvm.aarch64.neon.sqsub.v2i64(<2 x i64> %a, <2 x i64> %vqdmlsl2.i) 2595*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmlsl4.i 2596*9880d681SAndroid Build Coastguard Worker} 2597*9880d681SAndroid Build Coastguard Worker 2598*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmlsl_high_lane_s16_0(<4 x i32> %a, <8 x i16> %b, <4 x i16> %v) { 2599*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlsl_high_lane_s16_0: 2600*9880d681SAndroid Build Coastguard Worker; CHECK: qdmlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2601*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2602*9880d681SAndroid Build Coastguard Workerentry: 2603*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 2604*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2605*9880d681SAndroid Build Coastguard Worker %vqdmlsl2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 2606*9880d681SAndroid Build Coastguard Worker %vqdmlsl4.i = tail call <4 x i32> @llvm.aarch64.neon.sqsub.v4i32(<4 x i32> %a, <4 x i32> %vqdmlsl2.i) 2607*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmlsl4.i 2608*9880d681SAndroid Build Coastguard Worker} 2609*9880d681SAndroid Build Coastguard Worker 2610*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmlsl_high_lane_s32_0(<2 x i64> %a, <4 x i32> %b, <2 x i32> %v) { 2611*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlsl_high_lane_s32_0: 2612*9880d681SAndroid Build Coastguard Worker; CHECK: qdmlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2613*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2614*9880d681SAndroid Build Coastguard Workerentry: 2615*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 2616*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2617*9880d681SAndroid Build Coastguard Worker %vqdmlsl2.i = tail call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 2618*9880d681SAndroid Build Coastguard Worker %vqdmlsl4.i = tail call <2 x i64> @llvm.aarch64.neon.sqsub.v2i64(<2 x i64> %a, <2 x i64> %vqdmlsl2.i) 2619*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmlsl4.i 2620*9880d681SAndroid Build Coastguard Worker} 2621*9880d681SAndroid Build Coastguard Worker 2622*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmull_lane_s16_0(<4 x i16> %a, <4 x i16> %v) { 2623*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_lane_s16_0: 2624*9880d681SAndroid Build Coastguard Worker; CHECK: qdmull {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 2625*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2626*9880d681SAndroid Build Coastguard Workerentry: 2627*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2628*9880d681SAndroid Build Coastguard Worker %vqdmull2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %a, <4 x i16> %shuffle) 2629*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmull2.i 2630*9880d681SAndroid Build Coastguard Worker} 2631*9880d681SAndroid Build Coastguard Worker 2632*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmull_lane_s32_0(<2 x i32> %a, <2 x i32> %v) { 2633*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_lane_s32_0: 2634*9880d681SAndroid Build Coastguard Worker; CHECK: qdmull {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2635*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2636*9880d681SAndroid Build Coastguard Workerentry: 2637*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2638*9880d681SAndroid Build Coastguard Worker %vqdmull2.i = tail call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %a, <2 x i32> %shuffle) 2639*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmull2.i 2640*9880d681SAndroid Build Coastguard Worker} 2641*9880d681SAndroid Build Coastguard Worker 2642*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmull_laneq_s16_0(<4 x i16> %a, <8 x i16> %v) { 2643*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_laneq_s16_0: 2644*9880d681SAndroid Build Coastguard Worker; CHECK: qdmull {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 2645*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2646*9880d681SAndroid Build Coastguard Workerentry: 2647*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 2648*9880d681SAndroid Build Coastguard Worker %vqdmull2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %a, <4 x i16> %shuffle) 2649*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmull2.i 2650*9880d681SAndroid Build Coastguard Worker} 2651*9880d681SAndroid Build Coastguard Worker 2652*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmull_laneq_s32_0(<2 x i32> %a, <4 x i32> %v) { 2653*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_laneq_s32_0: 2654*9880d681SAndroid Build Coastguard Worker; CHECK: qdmull {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2655*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2656*9880d681SAndroid Build Coastguard Workerentry: 2657*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 2658*9880d681SAndroid Build Coastguard Worker %vqdmull2.i = tail call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %a, <2 x i32> %shuffle) 2659*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmull2.i 2660*9880d681SAndroid Build Coastguard Worker} 2661*9880d681SAndroid Build Coastguard Worker 2662*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmull_high_lane_s16_0(<8 x i16> %a, <4 x i16> %v) { 2663*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_high_lane_s16_0: 2664*9880d681SAndroid Build Coastguard Worker; CHECK: qdmull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2665*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2666*9880d681SAndroid Build Coastguard Workerentry: 2667*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 2668*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2669*9880d681SAndroid Build Coastguard Worker %vqdmull2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 2670*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmull2.i 2671*9880d681SAndroid Build Coastguard Worker} 2672*9880d681SAndroid Build Coastguard Worker 2673*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmull_high_lane_s32_0(<4 x i32> %a, <2 x i32> %v) { 2674*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_high_lane_s32_0: 2675*9880d681SAndroid Build Coastguard Worker; CHECK: qdmull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2676*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2677*9880d681SAndroid Build Coastguard Workerentry: 2678*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 2679*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2680*9880d681SAndroid Build Coastguard Worker %vqdmull2.i = tail call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 2681*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmull2.i 2682*9880d681SAndroid Build Coastguard Worker} 2683*9880d681SAndroid Build Coastguard Worker 2684*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmull_high_laneq_s16_0(<8 x i16> %a, <8 x i16> %v) { 2685*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_high_laneq_s16_0: 2686*9880d681SAndroid Build Coastguard Worker; CHECK: qdmull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2687*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2688*9880d681SAndroid Build Coastguard Workerentry: 2689*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 2690*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v, <8 x i16> undef, <4 x i32> zeroinitializer 2691*9880d681SAndroid Build Coastguard Worker %vqdmull2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i, <4 x i16> %shuffle) 2692*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmull2.i 2693*9880d681SAndroid Build Coastguard Worker} 2694*9880d681SAndroid Build Coastguard Worker 2695*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmull_high_laneq_s32_0(<4 x i32> %a, <4 x i32> %v) { 2696*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_high_laneq_s32_0: 2697*9880d681SAndroid Build Coastguard Worker; CHECK: qdmull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2698*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2699*9880d681SAndroid Build Coastguard Workerentry: 2700*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 2701*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v, <4 x i32> undef, <2 x i32> zeroinitializer 2702*9880d681SAndroid Build Coastguard Worker %vqdmull2.i = tail call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i, <2 x i32> %shuffle) 2703*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmull2.i 2704*9880d681SAndroid Build Coastguard Worker} 2705*9880d681SAndroid Build Coastguard Worker 2706*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vqdmulh_lane_s16_0(<4 x i16> %a, <4 x i16> %v) { 2707*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmulh_lane_s16_0: 2708*9880d681SAndroid Build Coastguard Worker; CHECK: qdmulh {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 2709*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2710*9880d681SAndroid Build Coastguard Workerentry: 2711*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2712*9880d681SAndroid Build Coastguard Worker %vqdmulh2.i = tail call <4 x i16> @llvm.aarch64.neon.sqdmulh.v4i16(<4 x i16> %a, <4 x i16> %shuffle) 2713*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %vqdmulh2.i 2714*9880d681SAndroid Build Coastguard Worker} 2715*9880d681SAndroid Build Coastguard Worker 2716*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vqdmulhq_lane_s16_0(<8 x i16> %a, <4 x i16> %v) { 2717*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmulhq_lane_s16_0: 2718*9880d681SAndroid Build Coastguard Worker; CHECK: qdmulh {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2719*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2720*9880d681SAndroid Build Coastguard Workerentry: 2721*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <8 x i32> zeroinitializer 2722*9880d681SAndroid Build Coastguard Worker %vqdmulh2.i = tail call <8 x i16> @llvm.aarch64.neon.sqdmulh.v8i16(<8 x i16> %a, <8 x i16> %shuffle) 2723*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %vqdmulh2.i 2724*9880d681SAndroid Build Coastguard Worker} 2725*9880d681SAndroid Build Coastguard Worker 2726*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vqdmulh_lane_s32_0(<2 x i32> %a, <2 x i32> %v) { 2727*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmulh_lane_s32_0: 2728*9880d681SAndroid Build Coastguard Worker; CHECK: qdmulh {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2729*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2730*9880d681SAndroid Build Coastguard Workerentry: 2731*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2732*9880d681SAndroid Build Coastguard Worker %vqdmulh2.i = tail call <2 x i32> @llvm.aarch64.neon.sqdmulh.v2i32(<2 x i32> %a, <2 x i32> %shuffle) 2733*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %vqdmulh2.i 2734*9880d681SAndroid Build Coastguard Worker} 2735*9880d681SAndroid Build Coastguard Worker 2736*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmulhq_lane_s32_0(<4 x i32> %a, <2 x i32> %v) { 2737*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmulhq_lane_s32_0: 2738*9880d681SAndroid Build Coastguard Worker; CHECK: qdmulh {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2739*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2740*9880d681SAndroid Build Coastguard Workerentry: 2741*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <4 x i32> zeroinitializer 2742*9880d681SAndroid Build Coastguard Worker %vqdmulh2.i = tail call <4 x i32> @llvm.aarch64.neon.sqdmulh.v4i32(<4 x i32> %a, <4 x i32> %shuffle) 2743*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmulh2.i 2744*9880d681SAndroid Build Coastguard Worker} 2745*9880d681SAndroid Build Coastguard Worker 2746*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vqrdmulh_lane_s16_0(<4 x i16> %a, <4 x i16> %v) { 2747*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqrdmulh_lane_s16_0: 2748*9880d681SAndroid Build Coastguard Worker; CHECK: qrdmulh {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[0] 2749*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2750*9880d681SAndroid Build Coastguard Workerentry: 2751*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> zeroinitializer 2752*9880d681SAndroid Build Coastguard Worker %vqrdmulh2.i = tail call <4 x i16> @llvm.aarch64.neon.sqrdmulh.v4i16(<4 x i16> %a, <4 x i16> %shuffle) 2753*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %vqrdmulh2.i 2754*9880d681SAndroid Build Coastguard Worker} 2755*9880d681SAndroid Build Coastguard Worker 2756*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vqrdmulhq_lane_s16_0(<8 x i16> %a, <4 x i16> %v) { 2757*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqrdmulhq_lane_s16_0: 2758*9880d681SAndroid Build Coastguard Worker; CHECK: qrdmulh {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[0] 2759*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2760*9880d681SAndroid Build Coastguard Workerentry: 2761*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v, <4 x i16> undef, <8 x i32> zeroinitializer 2762*9880d681SAndroid Build Coastguard Worker %vqrdmulh2.i = tail call <8 x i16> @llvm.aarch64.neon.sqrdmulh.v8i16(<8 x i16> %a, <8 x i16> %shuffle) 2763*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %vqrdmulh2.i 2764*9880d681SAndroid Build Coastguard Worker} 2765*9880d681SAndroid Build Coastguard Worker 2766*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vqrdmulh_lane_s32_0(<2 x i32> %a, <2 x i32> %v) { 2767*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqrdmulh_lane_s32_0: 2768*9880d681SAndroid Build Coastguard Worker; CHECK: qrdmulh {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2769*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2770*9880d681SAndroid Build Coastguard Workerentry: 2771*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> zeroinitializer 2772*9880d681SAndroid Build Coastguard Worker %vqrdmulh2.i = tail call <2 x i32> @llvm.aarch64.neon.sqrdmulh.v2i32(<2 x i32> %a, <2 x i32> %shuffle) 2773*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %vqrdmulh2.i 2774*9880d681SAndroid Build Coastguard Worker} 2775*9880d681SAndroid Build Coastguard Worker 2776*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqrdmulhq_lane_s32_0(<4 x i32> %a, <2 x i32> %v) { 2777*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqrdmulhq_lane_s32_0: 2778*9880d681SAndroid Build Coastguard Worker; CHECK: qrdmulh {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2779*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2780*9880d681SAndroid Build Coastguard Workerentry: 2781*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v, <2 x i32> undef, <4 x i32> zeroinitializer 2782*9880d681SAndroid Build Coastguard Worker %vqrdmulh2.i = tail call <4 x i32> @llvm.aarch64.neon.sqrdmulh.v4i32(<4 x i32> %a, <4 x i32> %shuffle) 2783*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqrdmulh2.i 2784*9880d681SAndroid Build Coastguard Worker} 2785*9880d681SAndroid Build Coastguard Worker 2786*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vmul_lane_f32_0(<2 x float> %a, <2 x float> %v) { 2787*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_lane_f32_0: 2788*9880d681SAndroid Build Coastguard Worker; CHECK: fmul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2789*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2790*9880d681SAndroid Build Coastguard Workerentry: 2791*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x float> %v, <2 x float> undef, <2 x i32> zeroinitializer 2792*9880d681SAndroid Build Coastguard Worker %mul = fmul <2 x float> %shuffle, %a 2793*9880d681SAndroid Build Coastguard Worker ret <2 x float> %mul 2794*9880d681SAndroid Build Coastguard Worker} 2795*9880d681SAndroid Build Coastguard Worker 2796*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vmulq_lane_f32_0(<4 x float> %a, <2 x float> %v) { 2797*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_lane_f32_0: 2798*9880d681SAndroid Build Coastguard Worker; CHECK: fmul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2799*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2800*9880d681SAndroid Build Coastguard Workerentry: 2801*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x float> %v, <2 x float> undef, <4 x i32> zeroinitializer 2802*9880d681SAndroid Build Coastguard Worker %mul = fmul <4 x float> %shuffle, %a 2803*9880d681SAndroid Build Coastguard Worker ret <4 x float> %mul 2804*9880d681SAndroid Build Coastguard Worker} 2805*9880d681SAndroid Build Coastguard Worker 2806*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vmul_laneq_f32_0(<2 x float> %a, <4 x float> %v) { 2807*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_laneq_f32_0: 2808*9880d681SAndroid Build Coastguard Worker; CHECK: fmul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2809*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2810*9880d681SAndroid Build Coastguard Workerentry: 2811*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x float> %v, <4 x float> undef, <2 x i32> zeroinitializer 2812*9880d681SAndroid Build Coastguard Worker %mul = fmul <2 x float> %shuffle, %a 2813*9880d681SAndroid Build Coastguard Worker ret <2 x float> %mul 2814*9880d681SAndroid Build Coastguard Worker} 2815*9880d681SAndroid Build Coastguard Worker 2816*9880d681SAndroid Build Coastguard Workerdefine <1 x double> @test_vmul_laneq_f64_0(<1 x double> %a, <2 x double> %v) { 2817*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_laneq_f64_0: 2818*9880d681SAndroid Build Coastguard Worker; CHECK: fmul {{d[0-9]+}}, {{d[0-9]+}}, {{v[0-9]+}}.d[0] 2819*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2820*9880d681SAndroid Build Coastguard Workerentry: 2821*9880d681SAndroid Build Coastguard Worker %0 = bitcast <1 x double> %a to <8 x i8> 2822*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x i8> %0 to double 2823*9880d681SAndroid Build Coastguard Worker %extract = extractelement <2 x double> %v, i32 0 2824*9880d681SAndroid Build Coastguard Worker %2 = fmul double %1, %extract 2825*9880d681SAndroid Build Coastguard Worker %3 = insertelement <1 x double> undef, double %2, i32 0 2826*9880d681SAndroid Build Coastguard Worker ret <1 x double> %3 2827*9880d681SAndroid Build Coastguard Worker} 2828*9880d681SAndroid Build Coastguard Worker 2829*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vmulq_laneq_f32_0(<4 x float> %a, <4 x float> %v) { 2830*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_laneq_f32_0: 2831*9880d681SAndroid Build Coastguard Worker; CHECK: fmul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2832*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2833*9880d681SAndroid Build Coastguard Workerentry: 2834*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> zeroinitializer 2835*9880d681SAndroid Build Coastguard Worker %mul = fmul <4 x float> %shuffle, %a 2836*9880d681SAndroid Build Coastguard Worker ret <4 x float> %mul 2837*9880d681SAndroid Build Coastguard Worker} 2838*9880d681SAndroid Build Coastguard Worker 2839*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vmulq_laneq_f64_0(<2 x double> %a, <2 x double> %v) { 2840*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_laneq_f64_0: 2841*9880d681SAndroid Build Coastguard Worker; CHECK: fmul {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0] 2842*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2843*9880d681SAndroid Build Coastguard Workerentry: 2844*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <2 x i32> zeroinitializer 2845*9880d681SAndroid Build Coastguard Worker %mul = fmul <2 x double> %shuffle, %a 2846*9880d681SAndroid Build Coastguard Worker ret <2 x double> %mul 2847*9880d681SAndroid Build Coastguard Worker} 2848*9880d681SAndroid Build Coastguard Worker 2849*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vmulx_lane_f32_0(<2 x float> %a, <2 x float> %v) { 2850*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulx_lane_f32_0: 2851*9880d681SAndroid Build Coastguard Worker; CHECK: mulx {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2852*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2853*9880d681SAndroid Build Coastguard Workerentry: 2854*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x float> %v, <2 x float> undef, <2 x i32> zeroinitializer 2855*9880d681SAndroid Build Coastguard Worker %vmulx2.i = tail call <2 x float> @llvm.aarch64.neon.fmulx.v2f32(<2 x float> %a, <2 x float> %shuffle) 2856*9880d681SAndroid Build Coastguard Worker ret <2 x float> %vmulx2.i 2857*9880d681SAndroid Build Coastguard Worker} 2858*9880d681SAndroid Build Coastguard Worker 2859*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vmulxq_lane_f32_0(<4 x float> %a, <2 x float> %v) { 2860*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulxq_lane_f32_0: 2861*9880d681SAndroid Build Coastguard Worker; CHECK: mulx {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2862*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2863*9880d681SAndroid Build Coastguard Workerentry: 2864*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x float> %v, <2 x float> undef, <4 x i32> zeroinitializer 2865*9880d681SAndroid Build Coastguard Worker %vmulx2.i = tail call <4 x float> @llvm.aarch64.neon.fmulx.v4f32(<4 x float> %a, <4 x float> %shuffle) 2866*9880d681SAndroid Build Coastguard Worker ret <4 x float> %vmulx2.i 2867*9880d681SAndroid Build Coastguard Worker} 2868*9880d681SAndroid Build Coastguard Worker 2869*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vmulxq_lane_f64_0(<2 x double> %a, <1 x double> %v) { 2870*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulxq_lane_f64_0: 2871*9880d681SAndroid Build Coastguard Worker; CHECK: mulx {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0] 2872*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2873*9880d681SAndroid Build Coastguard Workerentry: 2874*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <1 x double> %v, <1 x double> undef, <2 x i32> zeroinitializer 2875*9880d681SAndroid Build Coastguard Worker %vmulx2.i = tail call <2 x double> @llvm.aarch64.neon.fmulx.v2f64(<2 x double> %a, <2 x double> %shuffle) 2876*9880d681SAndroid Build Coastguard Worker ret <2 x double> %vmulx2.i 2877*9880d681SAndroid Build Coastguard Worker} 2878*9880d681SAndroid Build Coastguard Worker 2879*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vmulx_laneq_f32_0(<2 x float> %a, <4 x float> %v) { 2880*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulx_laneq_f32_0: 2881*9880d681SAndroid Build Coastguard Worker; CHECK: mulx {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 2882*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2883*9880d681SAndroid Build Coastguard Workerentry: 2884*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x float> %v, <4 x float> undef, <2 x i32> zeroinitializer 2885*9880d681SAndroid Build Coastguard Worker %vmulx2.i = tail call <2 x float> @llvm.aarch64.neon.fmulx.v2f32(<2 x float> %a, <2 x float> %shuffle) 2886*9880d681SAndroid Build Coastguard Worker ret <2 x float> %vmulx2.i 2887*9880d681SAndroid Build Coastguard Worker} 2888*9880d681SAndroid Build Coastguard Worker 2889*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vmulxq_laneq_f32_0(<4 x float> %a, <4 x float> %v) { 2890*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulxq_laneq_f32_0: 2891*9880d681SAndroid Build Coastguard Worker; CHECK: mulx {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 2892*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2893*9880d681SAndroid Build Coastguard Workerentry: 2894*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> zeroinitializer 2895*9880d681SAndroid Build Coastguard Worker %vmulx2.i = tail call <4 x float> @llvm.aarch64.neon.fmulx.v4f32(<4 x float> %a, <4 x float> %shuffle) 2896*9880d681SAndroid Build Coastguard Worker ret <4 x float> %vmulx2.i 2897*9880d681SAndroid Build Coastguard Worker} 2898*9880d681SAndroid Build Coastguard Worker 2899*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vmulxq_laneq_f64_0(<2 x double> %a, <2 x double> %v) { 2900*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulxq_laneq_f64_0: 2901*9880d681SAndroid Build Coastguard Worker; CHECK: mulx {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0] 2902*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 2903*9880d681SAndroid Build Coastguard Workerentry: 2904*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <2 x i32> zeroinitializer 2905*9880d681SAndroid Build Coastguard Worker %vmulx2.i = tail call <2 x double> @llvm.aarch64.neon.fmulx.v2f64(<2 x double> %a, <2 x double> %shuffle) 2906*9880d681SAndroid Build Coastguard Worker ret <2 x double> %vmulx2.i 2907*9880d681SAndroid Build Coastguard Worker} 2908*9880d681SAndroid Build Coastguard Worker 2909