1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm64-darwin-unknown < %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-i64:64-i128:128-n32:64-S128" 4*9880d681SAndroid Build Coastguard Workertarget triple = "aarch64" 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone 7*9880d681SAndroid Build Coastguard Workerdefine i32 @dotests_56() #0 { 8*9880d681SAndroid Build Coastguard Workerentry: 9*9880d681SAndroid Build Coastguard Worker %vqshrn_n4 = tail call <2 x i32> @llvm.aarch64.neon.uqshrn.v2i32(<2 x i64> zeroinitializer, i32 19) 10*9880d681SAndroid Build Coastguard Worker %shuffle.i109 = shufflevector <2 x i32> %vqshrn_n4, <2 x i32> undef, <4 x i32> <i32 undef, i32 1, i32 undef, i32 undef> 11*9880d681SAndroid Build Coastguard Worker %neg = xor <4 x i32> %shuffle.i109, <i32 undef, i32 -1, i32 undef, i32 undef> 12*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %neg, <4 x i32> undef, <2 x i32> <i32 1, i32 undef> 13*9880d681SAndroid Build Coastguard Worker %mul = mul <2 x i32> %shuffle, <i32 add (i32 extractelement (<2 x i32> bitcast (<1 x i64> <i64 -4264345899313889281> to <2 x i32>), i32 0), i32 sub (i32 0, i32 extractelement (<2 x i32> bitcast (<1 x i64> <i64 -9223231295071453185> to <2 x i32>), i32 0))), i32 undef> 14*9880d681SAndroid Build Coastguard Worker %shuffle27 = shufflevector <2 x i32> %mul, <2 x i32> undef, <4 x i32> zeroinitializer 15*9880d681SAndroid Build Coastguard Worker %0 = bitcast <4 x i32> %shuffle27 to <8 x i16> 16*9880d681SAndroid Build Coastguard Worker %shuffle.i108 = shufflevector <8 x i16> %0, <8 x i16> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4> 17*9880d681SAndroid Build Coastguard Worker %vqshrn_n38 = tail call <8 x i8> @llvm.aarch64.neon.uqshrn.v8i8(<8 x i16> %shuffle.i108, i32 1) 18*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <8 x i8> %vqshrn_n38, <8 x i8> undef, <16 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 19*9880d681SAndroid Build Coastguard Worker %1 = bitcast <16 x i8> %shuffle.i to <2 x i64> 20*9880d681SAndroid Build Coastguard Worker %vpaddq_v2.i = tail call <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64> undef, <2 x i64> %1) #2 21*9880d681SAndroid Build Coastguard Worker %vqdmlal2.i = tail call <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32> undef, <2 x i32> undef) #2 22*9880d681SAndroid Build Coastguard Worker %vqdmlal_v3.i = tail call <2 x i64> @llvm.aarch64.neon.sqadd.v2i64(<2 x i64> %vpaddq_v2.i, <2 x i64> %vqdmlal2.i) #2 23*9880d681SAndroid Build Coastguard Worker %vmovn.i = trunc <2 x i64> %vqdmlal_v3.i to <2 x i32> 24*9880d681SAndroid Build Coastguard Worker %vqdmulh_v2.i = tail call <2 x i32> @llvm.aarch64.neon.sqdmulh.v2i32(<2 x i32> %vmovn.i, <2 x i32> zeroinitializer) #2 25*9880d681SAndroid Build Coastguard Worker %2 = bitcast <2 x i32> %vqdmulh_v2.i to <1 x i64> 26*9880d681SAndroid Build Coastguard Worker %vget_lane = extractelement <1 x i64> %2, i32 0 27*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i64 %vget_lane, -7395147708962464393 28*9880d681SAndroid Build Coastguard Worker %conv = zext i1 %cmp to i32 29*9880d681SAndroid Build Coastguard Worker ret i32 %conv 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone 33*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.uqshrn.v2i32(<2 x i64>, i32) #1 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone 36*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.aarch64.neon.uqshrn.v8i8(<8 x i16>, i32) #1 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone 39*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.sqdmull.v2i64(<2 x i32>, <2 x i32>) #1 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone 42*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.sqadd.v2i64(<2 x i64>, <2 x i64>) #1 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone 45*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64>, <2 x i64>) #1 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone 48*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.sqdmulh.v2i32(<2 x i32>, <2 x i32>) #1 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="generic" "target-features"="+neon" "unsafe-fp-math"="false" "use-soft-float"="false" } 51*9880d681SAndroid Build Coastguard Workerattributes #1 = { nounwind readnone } 52*9880d681SAndroid Build Coastguard Workerattributes #2 = { nounwind } 53