xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/arm64-detect-vec-redux.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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