1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm64-none-linux-gnu -mattr=+neon -fp-contract=fast \ 2*9880d681SAndroid Build Coastguard Worker; RUN: < %s -verify-machineinstrs -asm-verbose=false | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_high_n_s16(<8 x i16> %a, i16 %b) #0 { 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_n_s16: 6*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 9*9880d681SAndroid Build Coastguard Workerentry: 10*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 11*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <4 x i16> undef, i16 %b, i32 0 12*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %b, i32 1 13*9880d681SAndroid Build Coastguard Worker %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %b, i32 2 14*9880d681SAndroid Build Coastguard Worker %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %b, i32 3 15*9880d681SAndroid Build Coastguard Worker %vmull15.i.i = call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i) 16*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull15.i.i 17*9880d681SAndroid Build Coastguard Worker} 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_high_n_s16_imm(<8 x i16> %a) #0 { 20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_n_s16_imm: 21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].8h, #29 22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 24*9880d681SAndroid Build Coastguard Workerentry: 25*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 26*9880d681SAndroid Build Coastguard Worker %vmull15.i.i = call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 29, i16 29, i16 29, i16 29>) 27*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull15.i.i 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_high_n_s32(<4 x i32> %a, i32 %b) #0 { 31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_n_s32: 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 35*9880d681SAndroid Build Coastguard Workerentry: 36*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 37*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <2 x i32> undef, i32 %b, i32 0 38*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %b, i32 1 39*9880d681SAndroid Build Coastguard Worker %vmull9.i.i = call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i) 40*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull9.i.i 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_high_n_s32_imm(<4 x i32> %a) #0 { 44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_n_s32_imm: 45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].4s, #1, msl #8 46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 48*9880d681SAndroid Build Coastguard Workerentry: 49*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 50*9880d681SAndroid Build Coastguard Worker %vmull9.i.i = call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 511, i32 511>) 51*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull9.i.i 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_high_n_u16(<8 x i16> %a, i16 %b) #0 { 55*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_n_u16: 56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0 57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 59*9880d681SAndroid Build Coastguard Workerentry: 60*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 61*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <4 x i16> undef, i16 %b, i32 0 62*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %b, i32 1 63*9880d681SAndroid Build Coastguard Worker %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %b, i32 2 64*9880d681SAndroid Build Coastguard Worker %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %b, i32 3 65*9880d681SAndroid Build Coastguard Worker %vmull15.i.i = call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i) 66*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull15.i.i 67*9880d681SAndroid Build Coastguard Worker} 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmull_high_n_u16_imm(<8 x i16> %a) #0 { 70*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_n_u16_imm: 71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].8h, #17, lsl #8 72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 74*9880d681SAndroid Build Coastguard Workerentry: 75*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 76*9880d681SAndroid Build Coastguard Worker %vmull15.i.i = call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 4352, i16 4352, i16 4352, i16 4352>) 77*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vmull15.i.i 78*9880d681SAndroid Build Coastguard Worker} 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_high_n_u32(<4 x i32> %a, i32 %b) #0 { 81*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_n_u32: 82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0 83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 85*9880d681SAndroid Build Coastguard Workerentry: 86*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 87*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <2 x i32> undef, i32 %b, i32 0 88*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %b, i32 1 89*9880d681SAndroid Build Coastguard Worker %vmull9.i.i = call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i) 90*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull9.i.i 91*9880d681SAndroid Build Coastguard Worker} 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmull_high_n_u32_imm(<4 x i32> %a) #0 { 94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmull_high_n_u32_imm: 95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mvni [[REPLICATE:v[0-9]+]].4s, #1, msl #8 96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 98*9880d681SAndroid Build Coastguard Workerentry: 99*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 100*9880d681SAndroid Build Coastguard Worker %vmull9.i.i = call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 4294966784, i32 4294966784>) 101*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vmull9.i.i 102*9880d681SAndroid Build Coastguard Worker} 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmull_high_n_s16(<8 x i16> %a, i16 %b) #0 { 105*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_high_n_s16: 106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0 107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 109*9880d681SAndroid Build Coastguard Workerentry: 110*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 111*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <4 x i16> undef, i16 %b, i32 0 112*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %b, i32 1 113*9880d681SAndroid Build Coastguard Worker %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %b, i32 2 114*9880d681SAndroid Build Coastguard Worker %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %b, i32 3 115*9880d681SAndroid Build Coastguard Worker %vqdmull15.i.i = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i) 116*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmull15.i.i 117*9880d681SAndroid Build Coastguard Worker} 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmull_high_n_s16_imm(<8 x i16> %a) #0 { 120*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_high_n_s16_imm: 121*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mvni [[REPLICATE:v[0-9]+]].8h, #17, lsl #8 122*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmull2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 123*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 124*9880d681SAndroid Build Coastguard Workerentry: 125*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 126*9880d681SAndroid Build Coastguard Worker %vqdmull15.i.i = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 61183, i16 61183, i16 61183, i16 61183>) 127*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmull15.i.i 128*9880d681SAndroid Build Coastguard Worker} 129*9880d681SAndroid Build Coastguard Worker 130*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmull_high_n_s32(<4 x i32> %a, i32 %b) #0 { 131*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_high_n_s32: 132*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0 133*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 134*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 135*9880d681SAndroid Build Coastguard Workerentry: 136*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 137*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <2 x i32> undef, i32 %b, i32 0 138*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %b, i32 1 139*9880d681SAndroid Build Coastguard Worker %vqdmull9.i.i = call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i) 140*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmull9.i.i 141*9880d681SAndroid Build Coastguard Worker} 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmull_high_n_s32_imm(<4 x i32> %a) #0 { 144*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmull_high_n_s32_imm: 145*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].4s, #29 146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmull2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 147*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 148*9880d681SAndroid Build Coastguard Workerentry: 149*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 150*9880d681SAndroid Build Coastguard Worker %vqdmull9.i.i = call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 29, i32 29>) 151*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmull9.i.i 152*9880d681SAndroid Build Coastguard Worker} 153*9880d681SAndroid Build Coastguard Worker 154*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_high_n_s16(<4 x i32> %a, <8 x i16> %b, i16 %c) #0 { 155*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_n_s16: 156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0 157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 158*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 159*9880d681SAndroid Build Coastguard Workerentry: 160*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 161*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <4 x i16> undef, i16 %c, i32 0 162*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %c, i32 1 163*9880d681SAndroid Build Coastguard Worker %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %c, i32 2 164*9880d681SAndroid Build Coastguard Worker %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %c, i32 3 165*9880d681SAndroid Build Coastguard Worker %vmull2.i.i.i = call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i) 166*9880d681SAndroid Build Coastguard Worker %add.i.i = add <4 x i32> %vmull2.i.i.i, %a 167*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add.i.i 168*9880d681SAndroid Build Coastguard Worker} 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_high_n_s16_imm(<4 x i32> %a, <8 x i16> %b) #0 { 171*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_n_s16_imm: 172*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].8h, #29 173*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 174*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 175*9880d681SAndroid Build Coastguard Workerentry: 176*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 177*9880d681SAndroid Build Coastguard Worker %vmull2.i.i.i = call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 29, i16 29, i16 29, i16 29>) 178*9880d681SAndroid Build Coastguard Worker %add.i.i = add <4 x i32> %vmull2.i.i.i, %a 179*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add.i.i 180*9880d681SAndroid Build Coastguard Worker} 181*9880d681SAndroid Build Coastguard Worker 182*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_high_n_s32(<2 x i64> %a, <4 x i32> %b, i32 %c) #0 { 183*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_n_s32: 184*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0 185*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 186*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 187*9880d681SAndroid Build Coastguard Workerentry: 188*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 189*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <2 x i32> undef, i32 %c, i32 0 190*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %c, i32 1 191*9880d681SAndroid Build Coastguard Worker %vmull2.i.i.i = call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i) 192*9880d681SAndroid Build Coastguard Worker %add.i.i = add <2 x i64> %vmull2.i.i.i, %a 193*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add.i.i 194*9880d681SAndroid Build Coastguard Worker} 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_high_n_s32_imm(<2 x i64> %a, <4 x i32> %b) #0 { 197*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_n_s32_imm: 198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].4s, #29 199*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 200*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 201*9880d681SAndroid Build Coastguard Workerentry: 202*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 203*9880d681SAndroid Build Coastguard Worker %vmull2.i.i.i = call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 29, i32 29>) 204*9880d681SAndroid Build Coastguard Worker %add.i.i = add <2 x i64> %vmull2.i.i.i, %a 205*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add.i.i 206*9880d681SAndroid Build Coastguard Worker} 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_high_n_u16(<4 x i32> %a, <8 x i16> %b, i16 %c) #0 { 209*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_n_u16: 210*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0 211*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 212*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 213*9880d681SAndroid Build Coastguard Workerentry: 214*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 215*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <4 x i16> undef, i16 %c, i32 0 216*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %c, i32 1 217*9880d681SAndroid Build Coastguard Worker %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %c, i32 2 218*9880d681SAndroid Build Coastguard Worker %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %c, i32 3 219*9880d681SAndroid Build Coastguard Worker %vmull2.i.i.i = call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i) 220*9880d681SAndroid Build Coastguard Worker %add.i.i = add <4 x i32> %vmull2.i.i.i, %a 221*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add.i.i 222*9880d681SAndroid Build Coastguard Worker} 223*9880d681SAndroid Build Coastguard Worker 224*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlal_high_n_u16_imm(<4 x i32> %a, <8 x i16> %b) #0 { 225*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_n_u16_imm: 226*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].8h, #29 227*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 228*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 229*9880d681SAndroid Build Coastguard Workerentry: 230*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 231*9880d681SAndroid Build Coastguard Worker %vmull2.i.i.i = call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 29, i16 29, i16 29, i16 29>) 232*9880d681SAndroid Build Coastguard Worker %add.i.i = add <4 x i32> %vmull2.i.i.i, %a 233*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %add.i.i 234*9880d681SAndroid Build Coastguard Worker} 235*9880d681SAndroid Build Coastguard Worker 236*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_high_n_u32(<2 x i64> %a, <4 x i32> %b, i32 %c) #0 { 237*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_n_u32: 238*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0 239*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 240*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 241*9880d681SAndroid Build Coastguard Workerentry: 242*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 243*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <2 x i32> undef, i32 %c, i32 0 244*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %c, i32 1 245*9880d681SAndroid Build Coastguard Worker %vmull2.i.i.i = call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i) 246*9880d681SAndroid Build Coastguard Worker %add.i.i = add <2 x i64> %vmull2.i.i.i, %a 247*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add.i.i 248*9880d681SAndroid Build Coastguard Worker} 249*9880d681SAndroid Build Coastguard Worker 250*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlal_high_n_u32_imm(<2 x i64> %a, <4 x i32> %b) #0 { 251*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlal_high_n_u32_imm: 252*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].4s, #29 253*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 254*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 255*9880d681SAndroid Build Coastguard Workerentry: 256*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 257*9880d681SAndroid Build Coastguard Worker %vmull2.i.i.i = call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 29, i32 29>) 258*9880d681SAndroid Build Coastguard Worker %add.i.i = add <2 x i64> %vmull2.i.i.i, %a 259*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %add.i.i 260*9880d681SAndroid Build Coastguard Worker} 261*9880d681SAndroid Build Coastguard Worker 262*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmlal_high_n_s16(<4 x i32> %a, <8 x i16> %b, i16 %c) #0 { 263*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlal_high_n_s16: 264*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0 265*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 266*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 267*9880d681SAndroid Build Coastguard Workerentry: 268*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 269*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <4 x i16> undef, i16 %c, i32 0 270*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %c, i32 1 271*9880d681SAndroid Build Coastguard Worker %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %c, i32 2 272*9880d681SAndroid Build Coastguard Worker %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %c, i32 3 273*9880d681SAndroid Build Coastguard Worker %vqdmlal15.i.i = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i) 274*9880d681SAndroid Build Coastguard Worker %vqdmlal17.i.i = call <4 x i32> @llvm.aarch64.neon.sqadd.v4i32(<4 x i32> %a, <4 x i32> %vqdmlal15.i.i) 275*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmlal17.i.i 276*9880d681SAndroid Build Coastguard Worker} 277*9880d681SAndroid Build Coastguard Worker 278*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmlal_high_n_s16_imm(<4 x i32> %a, <8 x i16> %b) #0 { 279*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlal_high_n_s16_imm: 280*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].8h, #29 281*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmlal2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 282*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 283*9880d681SAndroid Build Coastguard Workerentry: 284*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 285*9880d681SAndroid Build Coastguard Worker %vqdmlal15.i.i = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 29, i16 29, i16 29, i16 29>) 286*9880d681SAndroid Build Coastguard Worker %vqdmlal17.i.i = call <4 x i32> @llvm.aarch64.neon.sqadd.v4i32(<4 x i32> %a, <4 x i32> %vqdmlal15.i.i) 287*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmlal17.i.i 288*9880d681SAndroid Build Coastguard Worker} 289*9880d681SAndroid Build Coastguard Worker 290*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmlal_high_n_s32(<2 x i64> %a, <4 x i32> %b, i32 %c) #0 { 291*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlal_high_n_s32: 292*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0 293*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 294*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 295*9880d681SAndroid Build Coastguard Workerentry: 296*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 297*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <2 x i32> undef, i32 %c, i32 0 298*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %c, i32 1 299*9880d681SAndroid Build Coastguard Worker %vqdmlal9.i.i = call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i) 300*9880d681SAndroid Build Coastguard Worker %vqdmlal11.i.i = call <2 x i64> @llvm.aarch64.neon.sqadd.v2i64(<2 x i64> %a, <2 x i64> %vqdmlal9.i.i) 301*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmlal11.i.i 302*9880d681SAndroid Build Coastguard Worker} 303*9880d681SAndroid Build Coastguard Worker 304*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmlal_high_n_s32_imm(<2 x i64> %a, <4 x i32> %b) #0 { 305*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlal_high_n_s32_imm: 306*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].4s, #29 307*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmlal2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 308*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 309*9880d681SAndroid Build Coastguard Workerentry: 310*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 311*9880d681SAndroid Build Coastguard Worker %vqdmlal9.i.i = call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 29, i32 29>) 312*9880d681SAndroid Build Coastguard Worker %vqdmlal11.i.i = call <2 x i64> @llvm.aarch64.neon.sqadd.v2i64(<2 x i64> %a, <2 x i64> %vqdmlal9.i.i) 313*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmlal11.i.i 314*9880d681SAndroid Build Coastguard Worker} 315*9880d681SAndroid Build Coastguard Worker 316*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_high_n_s16(<4 x i32> %a, <8 x i16> %b, i16 %c) #0 { 317*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_n_s16: 318*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0 319*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 320*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 321*9880d681SAndroid Build Coastguard Workerentry: 322*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 323*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <4 x i16> undef, i16 %c, i32 0 324*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %c, i32 1 325*9880d681SAndroid Build Coastguard Worker %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %c, i32 2 326*9880d681SAndroid Build Coastguard Worker %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %c, i32 3 327*9880d681SAndroid Build Coastguard Worker %vmull2.i.i.i = call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i) 328*9880d681SAndroid Build Coastguard Worker %sub.i.i = sub <4 x i32> %a, %vmull2.i.i.i 329*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub.i.i 330*9880d681SAndroid Build Coastguard Worker} 331*9880d681SAndroid Build Coastguard Worker 332*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_high_n_s16_imm(<4 x i32> %a, <8 x i16> %b) #0 { 333*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_n_s16_imm: 334*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].8h, #29 335*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 336*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 337*9880d681SAndroid Build Coastguard Workerentry: 338*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 339*9880d681SAndroid Build Coastguard Worker %vmull2.i.i.i = call <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 29, i16 29, i16 29, i16 29>) 340*9880d681SAndroid Build Coastguard Worker %sub.i.i = sub <4 x i32> %a, %vmull2.i.i.i 341*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub.i.i 342*9880d681SAndroid Build Coastguard Worker} 343*9880d681SAndroid Build Coastguard Worker 344*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_high_n_s32(<2 x i64> %a, <4 x i32> %b, i32 %c) #0 { 345*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_n_s32: 346*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0 347*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 348*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 349*9880d681SAndroid Build Coastguard Workerentry: 350*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 351*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <2 x i32> undef, i32 %c, i32 0 352*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %c, i32 1 353*9880d681SAndroid Build Coastguard Worker %vmull2.i.i.i = call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i) 354*9880d681SAndroid Build Coastguard Worker %sub.i.i = sub <2 x i64> %a, %vmull2.i.i.i 355*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub.i.i 356*9880d681SAndroid Build Coastguard Worker} 357*9880d681SAndroid Build Coastguard Worker 358*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_high_n_s32_imm(<2 x i64> %a, <4 x i32> %b) #0 { 359*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_n_s32_imm: 360*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].4s, #29 361*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: smlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 362*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 363*9880d681SAndroid Build Coastguard Workerentry: 364*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 365*9880d681SAndroid Build Coastguard Worker %vmull2.i.i.i = call <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 29, i32 29>) 366*9880d681SAndroid Build Coastguard Worker %sub.i.i = sub <2 x i64> %a, %vmull2.i.i.i 367*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub.i.i 368*9880d681SAndroid Build Coastguard Worker} 369*9880d681SAndroid Build Coastguard Worker 370*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_high_n_u16(<4 x i32> %a, <8 x i16> %b, i16 %c) #0 { 371*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_n_u16: 372*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0 373*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 374*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 375*9880d681SAndroid Build Coastguard Workerentry: 376*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 377*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <4 x i16> undef, i16 %c, i32 0 378*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %c, i32 1 379*9880d681SAndroid Build Coastguard Worker %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %c, i32 2 380*9880d681SAndroid Build Coastguard Worker %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %c, i32 3 381*9880d681SAndroid Build Coastguard Worker %vmull2.i.i.i = call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i) 382*9880d681SAndroid Build Coastguard Worker %sub.i.i = sub <4 x i32> %a, %vmull2.i.i.i 383*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub.i.i 384*9880d681SAndroid Build Coastguard Worker} 385*9880d681SAndroid Build Coastguard Worker 386*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlsl_high_n_u16_imm(<4 x i32> %a, <8 x i16> %b) #0 { 387*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_n_u16_imm: 388*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].8h, #29 389*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 390*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 391*9880d681SAndroid Build Coastguard Workerentry: 392*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 393*9880d681SAndroid Build Coastguard Worker %vmull2.i.i.i = call <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 29, i16 29, i16 29, i16 29>) 394*9880d681SAndroid Build Coastguard Worker %sub.i.i = sub <4 x i32> %a, %vmull2.i.i.i 395*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %sub.i.i 396*9880d681SAndroid Build Coastguard Worker} 397*9880d681SAndroid Build Coastguard Worker 398*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_high_n_u32(<2 x i64> %a, <4 x i32> %b, i32 %c) #0 { 399*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_n_u32: 400*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0 401*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 402*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 403*9880d681SAndroid Build Coastguard Workerentry: 404*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 405*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <2 x i32> undef, i32 %c, i32 0 406*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %c, i32 1 407*9880d681SAndroid Build Coastguard Worker %vmull2.i.i.i = call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i) 408*9880d681SAndroid Build Coastguard Worker %sub.i.i = sub <2 x i64> %a, %vmull2.i.i.i 409*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub.i.i 410*9880d681SAndroid Build Coastguard Worker} 411*9880d681SAndroid Build Coastguard Worker 412*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlsl_high_n_u32_imm(<2 x i64> %a, <4 x i32> %b) #0 { 413*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlsl_high_n_u32_imm: 414*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].4s, #29 415*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: umlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 416*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 417*9880d681SAndroid Build Coastguard Workerentry: 418*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 419*9880d681SAndroid Build Coastguard Worker %vmull2.i.i.i = call <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 29, i32 29>) 420*9880d681SAndroid Build Coastguard Worker %sub.i.i = sub <2 x i64> %a, %vmull2.i.i.i 421*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %sub.i.i 422*9880d681SAndroid Build Coastguard Worker} 423*9880d681SAndroid Build Coastguard Worker 424*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmlsl_high_n_s16(<4 x i32> %a, <8 x i16> %b, i16 %c) #0 { 425*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlsl_high_n_s16: 426*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].8h, w0 427*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 428*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 429*9880d681SAndroid Build Coastguard Workerentry: 430*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 431*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <4 x i16> undef, i16 %c, i32 0 432*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <4 x i16> %vecinit.i.i, i16 %c, i32 1 433*9880d681SAndroid Build Coastguard Worker %vecinit2.i.i = insertelement <4 x i16> %vecinit1.i.i, i16 %c, i32 2 434*9880d681SAndroid Build Coastguard Worker %vecinit3.i.i = insertelement <4 x i16> %vecinit2.i.i, i16 %c, i32 3 435*9880d681SAndroid Build Coastguard Worker %vqdmlsl15.i.i = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> %vecinit3.i.i) 436*9880d681SAndroid Build Coastguard Worker %vqdmlsl17.i.i = call <4 x i32> @llvm.aarch64.neon.sqsub.v4i32(<4 x i32> %a, <4 x i32> %vqdmlsl15.i.i) 437*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmlsl17.i.i 438*9880d681SAndroid Build Coastguard Worker} 439*9880d681SAndroid Build Coastguard Worker 440*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vqdmlsl_high_n_s16_imm(<4 x i32> %a, <8 x i16> %b) #0 { 441*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlsl_high_n_s16_imm: 442*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].8h, #29 443*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmlsl2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, [[REPLICATE]].8h 444*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 445*9880d681SAndroid Build Coastguard Workerentry: 446*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <8 x i16> %b, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 447*9880d681SAndroid Build Coastguard Worker %vqdmlsl15.i.i = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> %shuffle.i.i, <4 x i16> <i16 29, i16 29, i16 29, i16 29>) 448*9880d681SAndroid Build Coastguard Worker %vqdmlsl17.i.i = call <4 x i32> @llvm.aarch64.neon.sqsub.v4i32(<4 x i32> %a, <4 x i32> %vqdmlsl15.i.i) 449*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vqdmlsl17.i.i 450*9880d681SAndroid Build Coastguard Worker} 451*9880d681SAndroid Build Coastguard Worker 452*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmlsl_high_n_s32(<2 x i64> %a, <4 x i32> %b, i32 %c) #0 { 453*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlsl_high_n_s32: 454*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: dup [[REPLICATE:v[0-9]+]].4s, w0 455*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 456*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 457*9880d681SAndroid Build Coastguard Workerentry: 458*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 459*9880d681SAndroid Build Coastguard Worker %vecinit.i.i = insertelement <2 x i32> undef, i32 %c, i32 0 460*9880d681SAndroid Build Coastguard Worker %vecinit1.i.i = insertelement <2 x i32> %vecinit.i.i, i32 %c, i32 1 461*9880d681SAndroid Build Coastguard Worker %vqdmlsl9.i.i = call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> %vecinit1.i.i) 462*9880d681SAndroid Build Coastguard Worker %vqdmlsl11.i.i = call <2 x i64> @llvm.aarch64.neon.sqsub.v2i64(<2 x i64> %a, <2 x i64> %vqdmlsl9.i.i) 463*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmlsl11.i.i 464*9880d681SAndroid Build Coastguard Worker} 465*9880d681SAndroid Build Coastguard Worker 466*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vqdmlsl_high_n_s32_imm(<2 x i64> %a, <4 x i32> %b) #0 { 467*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vqdmlsl_high_n_s32_imm: 468*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movi [[REPLICATE:v[0-9]+]].4s, #29 469*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sqdmlsl2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, [[REPLICATE]].4s 470*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 471*9880d681SAndroid Build Coastguard Workerentry: 472*9880d681SAndroid Build Coastguard Worker %shuffle.i.i = shufflevector <4 x i32> %b, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 473*9880d681SAndroid Build Coastguard Worker %vqdmlsl9.i.i = call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> %shuffle.i.i, <2 x i32> <i32 29, i32 29>) 474*9880d681SAndroid Build Coastguard Worker %vqdmlsl11.i.i = call <2 x i64> @llvm.aarch64.neon.sqsub.v2i64(<2 x i64> %a, <2 x i64> %vqdmlsl9.i.i) 475*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vqdmlsl11.i.i 476*9880d681SAndroid Build Coastguard Worker} 477*9880d681SAndroid Build Coastguard Worker 478*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vmul_n_f32(<2 x float> %a, float %b) #0 { 479*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmul_n_f32: 480*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 481*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 482*9880d681SAndroid Build Coastguard Workerentry: 483*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <2 x float> undef, float %b, i32 0 484*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <2 x float> %vecinit.i, float %b, i32 1 485*9880d681SAndroid Build Coastguard Worker %mul.i = fmul <2 x float> %vecinit1.i, %a 486*9880d681SAndroid Build Coastguard Worker ret <2 x float> %mul.i 487*9880d681SAndroid Build Coastguard Worker} 488*9880d681SAndroid Build Coastguard Worker 489*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vmulq_n_f32(<4 x float> %a, float %b) #0 { 490*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_n_f32: 491*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[0] 492*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 493*9880d681SAndroid Build Coastguard Workerentry: 494*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <4 x float> undef, float %b, i32 0 495*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <4 x float> %vecinit.i, float %b, i32 1 496*9880d681SAndroid Build Coastguard Worker %vecinit2.i = insertelement <4 x float> %vecinit1.i, float %b, i32 2 497*9880d681SAndroid Build Coastguard Worker %vecinit3.i = insertelement <4 x float> %vecinit2.i, float %b, i32 3 498*9880d681SAndroid Build Coastguard Worker %mul.i = fmul <4 x float> %vecinit3.i, %a 499*9880d681SAndroid Build Coastguard Worker ret <4 x float> %mul.i 500*9880d681SAndroid Build Coastguard Worker} 501*9880d681SAndroid Build Coastguard Worker 502*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vmulq_n_f64(<2 x double> %a, double %b) #0 { 503*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmulq_n_f64: 504*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmul {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0] 505*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 506*9880d681SAndroid Build Coastguard Workerentry: 507*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <2 x double> undef, double %b, i32 0 508*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <2 x double> %vecinit.i, double %b, i32 1 509*9880d681SAndroid Build Coastguard Worker %mul.i = fmul <2 x double> %vecinit1.i, %a 510*9880d681SAndroid Build Coastguard Worker ret <2 x double> %mul.i 511*9880d681SAndroid Build Coastguard Worker} 512*9880d681SAndroid Build Coastguard Worker 513*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vfma_n_f32(<2 x float> %a, <2 x float> %b, float %n) #0 { 514*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfma_n_f32: 515*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmla {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[{{[0-9]+}}] 516*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 517*9880d681SAndroid Build Coastguard Workerentry: 518*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <2 x float> undef, float %n, i32 0 519*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <2 x float> %vecinit.i, float %n, i32 1 520*9880d681SAndroid Build Coastguard Worker %0 = call <2 x float> @llvm.fma.v2f32(<2 x float> %b, <2 x float> %vecinit1.i, <2 x float> %a) 521*9880d681SAndroid Build Coastguard Worker ret <2 x float> %0 522*9880d681SAndroid Build Coastguard Worker} 523*9880d681SAndroid Build Coastguard Worker 524*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vfmaq_n_f32(<4 x float> %a, <4 x float> %b, float %n) #0 { 525*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmaq_n_f32: 526*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmla {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[{{[0-9]+}}] 527*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 528*9880d681SAndroid Build Coastguard Workerentry: 529*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <4 x float> undef, float %n, i32 0 530*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <4 x float> %vecinit.i, float %n, i32 1 531*9880d681SAndroid Build Coastguard Worker %vecinit2.i = insertelement <4 x float> %vecinit1.i, float %n, i32 2 532*9880d681SAndroid Build Coastguard Worker %vecinit3.i = insertelement <4 x float> %vecinit2.i, float %n, i32 3 533*9880d681SAndroid Build Coastguard Worker %0 = call <4 x float> @llvm.fma.v4f32(<4 x float> %b, <4 x float> %vecinit3.i, <4 x float> %a) 534*9880d681SAndroid Build Coastguard Worker ret <4 x float> %0 535*9880d681SAndroid Build Coastguard Worker} 536*9880d681SAndroid Build Coastguard Worker 537*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_vfms_n_f32(<2 x float> %a, <2 x float> %b, float %n) #0 { 538*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfms_n_f32: 539*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmls {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[{{[0-9]+}}] 540*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 541*9880d681SAndroid Build Coastguard Workerentry: 542*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <2 x float> undef, float %n, i32 0 543*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <2 x float> %vecinit.i, float %n, i32 1 544*9880d681SAndroid Build Coastguard Worker %0 = fsub <2 x float> <float -0.000000e+00, float -0.000000e+00>, %b 545*9880d681SAndroid Build Coastguard Worker %1 = call <2 x float> @llvm.fma.v2f32(<2 x float> %0, <2 x float> %vecinit1.i, <2 x float> %a) 546*9880d681SAndroid Build Coastguard Worker ret <2 x float> %1 547*9880d681SAndroid Build Coastguard Worker} 548*9880d681SAndroid Build Coastguard Worker 549*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_vfmsq_n_f32(<4 x float> %a, <4 x float> %b, float %n) #0 { 550*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfmsq_n_f32: 551*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fmls {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[{{[0-9]+}}] 552*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 553*9880d681SAndroid Build Coastguard Workerentry: 554*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <4 x float> undef, float %n, i32 0 555*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <4 x float> %vecinit.i, float %n, i32 1 556*9880d681SAndroid Build Coastguard Worker %vecinit2.i = insertelement <4 x float> %vecinit1.i, float %n, i32 2 557*9880d681SAndroid Build Coastguard Worker %vecinit3.i = insertelement <4 x float> %vecinit2.i, float %n, i32 3 558*9880d681SAndroid Build Coastguard Worker %0 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %b 559*9880d681SAndroid Build Coastguard Worker %1 = call <4 x float> @llvm.fma.v4f32(<4 x float> %0, <4 x float> %vecinit3.i, <4 x float> %a) 560*9880d681SAndroid Build Coastguard Worker ret <4 x float> %1 561*9880d681SAndroid Build Coastguard Worker} 562*9880d681SAndroid Build Coastguard Worker 563*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind } 564*9880d681SAndroid Build Coastguard Worker 565*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16>, <4 x i16>) 566*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.smull.v2i64(<2 x i32>, <2 x i32>) 567*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16>, <4 x i16>) 568*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.umull.v2i64(<2 x i32>, <2 x i32>) 569*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16>, <4 x i16>) 570*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32>, <2 x i32>) 571*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.sqsub.v4i32(<4 x i32>, <4 x i32>) 572*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.sqsub.v2i64(<2 x i64>, <2 x i64>) 573*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.sqadd.v4i32(<4 x i32>, <4 x i32>) 574*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.sqadd.v2i64(<2 x i64>, <2 x i64>) 575*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.fma.v4f32(<4 x float>, <4 x float>, <4 x float>) 576*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.fma.v2f32(<2 x float>, <2 x float>, <2 x float>) 577