xref: /aosp_15_r20/frameworks/rs/driver/runtime/arch/asimd.ll (revision e1eccf28f96817838ad6867f7f39d2351ec11f56)
1*e1eccf28SAndroid Build Coastguard Workertarget datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
2*e1eccf28SAndroid Build Coastguard Workertarget triple = "aarch64-linux-android"
3*e1eccf28SAndroid Build Coastguard Worker
4*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;               INTRINSICS               ;;;;;;;;;;
6*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7*e1eccf28SAndroid Build Coastguard Worker
8*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.fmax.v2f32(<2 x float>, <2 x float>) nounwind readnone
9*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.fmax.v4f32(<4 x float>, <4 x float>) nounwind readnone
10*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.smax.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
11*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
12*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.umax.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
13*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
14*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.smax.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
15*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.umax.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
16*e1eccf28SAndroid Build Coastguard Worker
17*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.fmin.v2f32(<2 x float>, <2 x float>) nounwind readnone
18*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.fmin.v4f32(<4 x float>, <4 x float>) nounwind readnone
19*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.smin.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
20*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
21*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.umin.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
22*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
23*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.smin.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
24*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.umin.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
25*e1eccf28SAndroid Build Coastguard Worker
26*e1eccf28SAndroid Build Coastguard Workerdeclare <8 x i8>  @llvm.aarch64.neon.sqshl.v8i8(<8 x i16>, <8 x i16>) nounwind readnone
27*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.sqshl.v4i16(<4 x i32>, <4 x i32>) nounwind readnone
28*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.sqshl.v2i32(<2 x i64>, <2 x i64>) nounwind readnone
29*e1eccf28SAndroid Build Coastguard Worker
30*e1eccf28SAndroid Build Coastguard Workerdeclare <8 x i8>  @llvm.aarch64.neon.sqshrun.v8i8(<8 x i16>, <8 x i16>) nounwind readnone
31*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.sqshrun.v4i16(<4 x i32>, <4 x i32>) nounwind readnone
32*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.sqshrun.v2i32(<2 x i64>, <2 x i64>) nounwind readnone
33*e1eccf28SAndroid Build Coastguard Worker
34*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.frecpe.v2f32(<2 x float>) nounwind readnone
35*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.frecpe.v4f32(<4 x float>) nounwind readnone
36*e1eccf28SAndroid Build Coastguard Worker
37*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.frsqrte.v2f32(<2 x float>) nounwind readnone
38*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.frsqrte.v4f32(<4 x float>) nounwind readnone
39*e1eccf28SAndroid Build Coastguard Worker
40*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.frecps.v2f32(<2 x float>, <2 x float>) nounwind readnone
41*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.frecps.v4f32(<4 x float>, <4 x float>) nounwind readnone
42*e1eccf28SAndroid Build Coastguard Worker
43*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.frsqrts.v2f32(<2 x float>, <2 x float>) nounwind readnone
44*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.frsqrts.v4f32(<4 x float>, <4 x float>) nounwind readnone
45*e1eccf28SAndroid Build Coastguard Worker
46*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
47*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;                HELPERS                 ;;;;;;;;;;
48*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
49*e1eccf28SAndroid Build Coastguard Worker
50*e1eccf28SAndroid Build Coastguard Workerdefine internal <4 x float> @smear_4f(float %in) nounwind readnone alwaysinline {
51*e1eccf28SAndroid Build Coastguard Worker  %1 = insertelement <4 x float> undef, float %in, i32 0
52*e1eccf28SAndroid Build Coastguard Worker  %2 = insertelement <4 x float> %1, float %in, i32 1
53*e1eccf28SAndroid Build Coastguard Worker  %3 = insertelement <4 x float> %2, float %in, i32 2
54*e1eccf28SAndroid Build Coastguard Worker  %4 = insertelement <4 x float> %3, float %in, i32 3
55*e1eccf28SAndroid Build Coastguard Worker  ret <4 x float> %4
56*e1eccf28SAndroid Build Coastguard Worker}
57*e1eccf28SAndroid Build Coastguard Worker
58*e1eccf28SAndroid Build Coastguard Workerdefine internal <4 x i32> @smear_4i(i32 %in) nounwind readnone alwaysinline {
59*e1eccf28SAndroid Build Coastguard Worker  %1 = insertelement <4 x i32> undef, i32 %in, i32 0
60*e1eccf28SAndroid Build Coastguard Worker  %2 = insertelement <4 x i32> %1, i32 %in, i32 1
61*e1eccf28SAndroid Build Coastguard Worker  %3 = insertelement <4 x i32> %2, i32 %in, i32 2
62*e1eccf28SAndroid Build Coastguard Worker  %4 = insertelement <4 x i32> %3, i32 %in, i32 3
63*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i32> %4
64*e1eccf28SAndroid Build Coastguard Worker}
65*e1eccf28SAndroid Build Coastguard Worker
66*e1eccf28SAndroid Build Coastguard Workerdefine internal <4 x i16> @smear_4s(i16 %in) nounwind readnone alwaysinline {
67*e1eccf28SAndroid Build Coastguard Worker  %1 = insertelement <4 x i16> undef, i16 %in, i32 0
68*e1eccf28SAndroid Build Coastguard Worker  %2 = insertelement <4 x i16> %1, i16 %in, i32 1
69*e1eccf28SAndroid Build Coastguard Worker  %3 = insertelement <4 x i16> %2, i16 %in, i32 2
70*e1eccf28SAndroid Build Coastguard Worker  %4 = insertelement <4 x i16> %3, i16 %in, i32 3
71*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i16> %4
72*e1eccf28SAndroid Build Coastguard Worker}
73*e1eccf28SAndroid Build Coastguard Worker
74*e1eccf28SAndroid Build Coastguard Worker
75*e1eccf28SAndroid Build Coastguard Worker
76*e1eccf28SAndroid Build Coastguard Workerdefine internal <2 x float> @smear_2f(float %in) nounwind readnone alwaysinline {
77*e1eccf28SAndroid Build Coastguard Worker  %1 = insertelement <2 x float> undef, float %in, i32 0
78*e1eccf28SAndroid Build Coastguard Worker  %2 = insertelement <2 x float> %1, float %in, i32 1
79*e1eccf28SAndroid Build Coastguard Worker  ret <2 x float> %2
80*e1eccf28SAndroid Build Coastguard Worker}
81*e1eccf28SAndroid Build Coastguard Worker
82*e1eccf28SAndroid Build Coastguard Workerdefine internal <2 x i32> @smear_2i(i32 %in) nounwind readnone alwaysinline {
83*e1eccf28SAndroid Build Coastguard Worker  %1 = insertelement <2 x i32> undef, i32 %in, i32 0
84*e1eccf28SAndroid Build Coastguard Worker  %2 = insertelement <2 x i32> %1, i32 %in, i32 1
85*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i32> %2
86*e1eccf28SAndroid Build Coastguard Worker}
87*e1eccf28SAndroid Build Coastguard Worker
88*e1eccf28SAndroid Build Coastguard Workerdefine internal <2 x i16> @smear_2s(i16 %in) nounwind readnone alwaysinline {
89*e1eccf28SAndroid Build Coastguard Worker  %1 = insertelement <2 x i16> undef, i16 %in, i32 0
90*e1eccf28SAndroid Build Coastguard Worker  %2 = insertelement <2 x i16> %1, i16 %in, i32 1
91*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i16> %2
92*e1eccf28SAndroid Build Coastguard Worker}
93*e1eccf28SAndroid Build Coastguard Worker
94*e1eccf28SAndroid Build Coastguard Worker
95*e1eccf28SAndroid Build Coastguard Workerdefine internal <4 x i32> @smear_4i32(i32 %in) nounwind readnone alwaysinline {
96*e1eccf28SAndroid Build Coastguard Worker  %1 = insertelement <4 x i32> undef, i32 %in, i32 0
97*e1eccf28SAndroid Build Coastguard Worker  %2 = insertelement <4 x i32> %1, i32 %in, i32 1
98*e1eccf28SAndroid Build Coastguard Worker  %3 = insertelement <4 x i32> %2, i32 %in, i32 2
99*e1eccf28SAndroid Build Coastguard Worker  %4 = insertelement <4 x i32> %3, i32 %in, i32 3
100*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i32> %4
101*e1eccf28SAndroid Build Coastguard Worker}
102*e1eccf28SAndroid Build Coastguard Worker
103*e1eccf28SAndroid Build Coastguard Worker
104*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
105*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;                 CLAMP                  ;;;;;;;;;;
106*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
107*e1eccf28SAndroid Build Coastguard Worker
108*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z5clampDv4_fS_S_(<4 x float> %value, <4 x float> %low, <4 x float> %high) nounwind readonly {
109*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @llvm.aarch64.neon.fmin.v4f32(<4 x float> %value, <4 x float> %high) nounwind readnone
110*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <4 x float> @llvm.aarch64.neon.fmax.v4f32(<4 x float> %1, <4 x float> %low) nounwind readnone
111*e1eccf28SAndroid Build Coastguard Worker  ret <4 x float> %2
112*e1eccf28SAndroid Build Coastguard Worker}
113*e1eccf28SAndroid Build Coastguard Worker
114*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z5clampDv4_fff(<4 x float> %value, float %low, float %high) nounwind readonly {
115*e1eccf28SAndroid Build Coastguard Worker  %_high = tail call <4 x float> @smear_4f(float %high) nounwind readnone
116*e1eccf28SAndroid Build Coastguard Worker  %_low = tail call <4 x float> @smear_4f(float %low) nounwind readnone
117*e1eccf28SAndroid Build Coastguard Worker  %out = tail call <4 x float> @_Z5clampDv4_fS_S_(<4 x float> %value, <4 x float> %_low, <4 x float> %_high) nounwind readonly
118*e1eccf28SAndroid Build Coastguard Worker  ret <4 x float> %out
119*e1eccf28SAndroid Build Coastguard Worker}
120*e1eccf28SAndroid Build Coastguard Worker
121*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z5clampDv3_fS_S_(<3 x float> %value, <3 x float> %low, <3 x float> %high) nounwind readonly {
122*e1eccf28SAndroid Build Coastguard Worker  %_value = shufflevector <3 x float> %value, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
123*e1eccf28SAndroid Build Coastguard Worker  %_low = shufflevector <3 x float> %low, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
124*e1eccf28SAndroid Build Coastguard Worker  %_high = shufflevector <3 x float> %high, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
125*e1eccf28SAndroid Build Coastguard Worker  %a = tail call <4 x float> @llvm.aarch64.neon.fmin.v4f32(<4 x float> %_value, <4 x float> %_high) nounwind readnone
126*e1eccf28SAndroid Build Coastguard Worker  %b = tail call <4 x float> @llvm.aarch64.neon.fmax.v4f32(<4 x float> %a, <4 x float> %_low) nounwind readnone
127*e1eccf28SAndroid Build Coastguard Worker  %c = shufflevector <4 x float> %b, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2>
128*e1eccf28SAndroid Build Coastguard Worker  ret <3 x float> %c
129*e1eccf28SAndroid Build Coastguard Worker}
130*e1eccf28SAndroid Build Coastguard Worker
131*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z5clampDv3_fff(<3 x float> %value, float %low, float %high) nounwind readonly {
132*e1eccf28SAndroid Build Coastguard Worker  %_value = shufflevector <3 x float> %value, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
133*e1eccf28SAndroid Build Coastguard Worker  %_high = tail call <4 x float> @smear_4f(float %high) nounwind readnone
134*e1eccf28SAndroid Build Coastguard Worker  %_low = tail call <4 x float> @smear_4f(float %low) nounwind readnone
135*e1eccf28SAndroid Build Coastguard Worker  %a = tail call <4 x float> @llvm.aarch64.neon.fmin.v4f32(<4 x float> %_value, <4 x float> %_high) nounwind readnone
136*e1eccf28SAndroid Build Coastguard Worker  %b = tail call <4 x float> @llvm.aarch64.neon.fmax.v4f32(<4 x float> %a, <4 x float> %_low) nounwind readnone
137*e1eccf28SAndroid Build Coastguard Worker  %c = shufflevector <4 x float> %b, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2>
138*e1eccf28SAndroid Build Coastguard Worker  ret <3 x float> %c
139*e1eccf28SAndroid Build Coastguard Worker}
140*e1eccf28SAndroid Build Coastguard Worker
141*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z5clampDv2_fS_S_(<2 x float> %value, <2 x float> %low, <2 x float> %high) nounwind readonly {
142*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <2 x float> @llvm.aarch64.neon.fmin.v2f32(<2 x float> %value, <2 x float> %high) nounwind readnone
143*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <2 x float> @llvm.aarch64.neon.fmax.v2f32(<2 x float> %1, <2 x float> %low) nounwind readnone
144*e1eccf28SAndroid Build Coastguard Worker  ret <2 x float> %2
145*e1eccf28SAndroid Build Coastguard Worker}
146*e1eccf28SAndroid Build Coastguard Worker
147*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z5clampDv2_fff(<2 x float> %value, float %low, float %high) nounwind readonly {
148*e1eccf28SAndroid Build Coastguard Worker  %_high = tail call <2 x float> @smear_2f(float %high) nounwind readnone
149*e1eccf28SAndroid Build Coastguard Worker  %_low = tail call <2 x float> @smear_2f(float %low) nounwind readnone
150*e1eccf28SAndroid Build Coastguard Worker  %a = tail call <2 x float> @llvm.aarch64.neon.fmin.v2f32(<2 x float> %value, <2 x float> %_high) nounwind readnone
151*e1eccf28SAndroid Build Coastguard Worker  %b = tail call <2 x float> @llvm.aarch64.neon.fmax.v2f32(<2 x float> %a, <2 x float> %_low) nounwind readnone
152*e1eccf28SAndroid Build Coastguard Worker  ret <2 x float> %b
153*e1eccf28SAndroid Build Coastguard Worker}
154*e1eccf28SAndroid Build Coastguard Worker
155*e1eccf28SAndroid Build Coastguard Workerdefine float @_Z5clampfff(float %value, float %low, float %high) nounwind readonly {
156*e1eccf28SAndroid Build Coastguard Worker  %1 = fcmp olt float %value, %high
157*e1eccf28SAndroid Build Coastguard Worker  %2 = select i1 %1, float %value, float %high
158*e1eccf28SAndroid Build Coastguard Worker  %3 = fcmp ogt float %2, %low
159*e1eccf28SAndroid Build Coastguard Worker  %4 = select i1 %3, float %2, float %low
160*e1eccf28SAndroid Build Coastguard Worker  ret float %4
161*e1eccf28SAndroid Build Coastguard Worker}
162*e1eccf28SAndroid Build Coastguard Worker
163*e1eccf28SAndroid Build Coastguard Worker
164*e1eccf28SAndroid Build Coastguard Worker
165*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i32> @_Z5clampDv4_iS_S_(<4 x i32> %value, <4 x i32> %low, <4 x i32> %high) nounwind readonly {
166*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %value, <4 x i32> %high) nounwind readnone
167*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %1, <4 x i32> %low) nounwind readnone
168*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i32> %2
169*e1eccf28SAndroid Build Coastguard Worker}
170*e1eccf28SAndroid Build Coastguard Worker
171*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i32> @_Z5clampDv4_iii(<4 x i32> %value, i32 %low, i32 %high) nounwind readonly {
172*e1eccf28SAndroid Build Coastguard Worker  %_high = tail call <4 x i32> @smear_4i(i32 %high) nounwind readnone
173*e1eccf28SAndroid Build Coastguard Worker  %_low = tail call <4 x i32> @smear_4i(i32 %low) nounwind readnone
174*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %value, <4 x i32> %_high) nounwind readnone
175*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %1, <4 x i32> %_low) nounwind readnone
176*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i32> %2
177*e1eccf28SAndroid Build Coastguard Worker}
178*e1eccf28SAndroid Build Coastguard Worker
179*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i32> @_Z5clampDv3_iS_S_(<3 x i32> %value, <3 x i32> %low, <3 x i32> %high) nounwind readonly {
180*e1eccf28SAndroid Build Coastguard Worker  %_value = shufflevector <3 x i32> %value, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
181*e1eccf28SAndroid Build Coastguard Worker  %_low = shufflevector <3 x i32> %low, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
182*e1eccf28SAndroid Build Coastguard Worker  %_high = shufflevector <3 x i32> %high, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
183*e1eccf28SAndroid Build Coastguard Worker  %a = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %_value, <4 x i32> %_high) nounwind readnone
184*e1eccf28SAndroid Build Coastguard Worker  %b = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %a, <4 x i32> %_low) nounwind readnone
185*e1eccf28SAndroid Build Coastguard Worker  %c = shufflevector <4 x i32> %b, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
186*e1eccf28SAndroid Build Coastguard Worker  ret <3 x i32> %c
187*e1eccf28SAndroid Build Coastguard Worker}
188*e1eccf28SAndroid Build Coastguard Worker
189*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i32> @_Z5clampDv3_iii(<3 x i32> %value, i32 %low, i32 %high) nounwind readonly {
190*e1eccf28SAndroid Build Coastguard Worker  %_value = shufflevector <3 x i32> %value, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
191*e1eccf28SAndroid Build Coastguard Worker  %_high = tail call <4 x i32> @smear_4i(i32 %high) nounwind readnone
192*e1eccf28SAndroid Build Coastguard Worker  %_low = tail call <4 x i32> @smear_4i(i32 %low) nounwind readnone
193*e1eccf28SAndroid Build Coastguard Worker  %a = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %_value, <4 x i32> %_high) nounwind readnone
194*e1eccf28SAndroid Build Coastguard Worker  %b = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %a, <4 x i32> %_low) nounwind readnone
195*e1eccf28SAndroid Build Coastguard Worker  %c = shufflevector <4 x i32> %b, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
196*e1eccf28SAndroid Build Coastguard Worker  ret <3 x i32> %c
197*e1eccf28SAndroid Build Coastguard Worker}
198*e1eccf28SAndroid Build Coastguard Worker
199*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i32> @_Z5clampDv2_iS_S_(<2 x i32> %value, <2 x i32> %low, <2 x i32> %high) nounwind readonly {
200*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <2 x i32> @llvm.aarch64.neon.smin.v2i32(<2 x i32> %value, <2 x i32> %high) nounwind readnone
201*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <2 x i32> @llvm.aarch64.neon.smax.v2i32(<2 x i32> %1, <2 x i32> %low) nounwind readnone
202*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i32> %2
203*e1eccf28SAndroid Build Coastguard Worker}
204*e1eccf28SAndroid Build Coastguard Worker
205*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i32> @_Z5clampDv2_iii(<2 x i32> %value, i32 %low, i32 %high) nounwind readonly {
206*e1eccf28SAndroid Build Coastguard Worker  %_high = tail call <2 x i32> @smear_2i(i32 %high) nounwind readnone
207*e1eccf28SAndroid Build Coastguard Worker  %_low = tail call <2 x i32> @smear_2i(i32 %low) nounwind readnone
208*e1eccf28SAndroid Build Coastguard Worker  %a = tail call <2 x i32> @llvm.aarch64.neon.smin.v2i32(<2 x i32> %value, <2 x i32> %_high) nounwind readnone
209*e1eccf28SAndroid Build Coastguard Worker  %b = tail call <2 x i32> @llvm.aarch64.neon.smax.v2i32(<2 x i32> %a, <2 x i32> %_low) nounwind readnone
210*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i32> %b
211*e1eccf28SAndroid Build Coastguard Worker}
212*e1eccf28SAndroid Build Coastguard Worker
213*e1eccf28SAndroid Build Coastguard Worker
214*e1eccf28SAndroid Build Coastguard Worker
215*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i32> @_Z5clampDv4_jS_S_(<4 x i32> %value, <4 x i32> %low, <4 x i32> %high) nounwind readonly {
216*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %value, <4 x i32> %high) nounwind readnone
217*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %1, <4 x i32> %low) nounwind readnone
218*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i32> %2
219*e1eccf28SAndroid Build Coastguard Worker}
220*e1eccf28SAndroid Build Coastguard Worker
221*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i32> @_Z5clampDv4_jjj(<4 x i32> %value, i32 %low, i32 %high) nounwind readonly {
222*e1eccf28SAndroid Build Coastguard Worker  %_high = tail call <4 x i32> @smear_4i(i32 %high) nounwind readnone
223*e1eccf28SAndroid Build Coastguard Worker  %_low = tail call <4 x i32> @smear_4i(i32 %low) nounwind readnone
224*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %value, <4 x i32> %_high) nounwind readnone
225*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %1, <4 x i32> %_low) nounwind readnone
226*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i32> %2
227*e1eccf28SAndroid Build Coastguard Worker}
228*e1eccf28SAndroid Build Coastguard Worker
229*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i32> @_Z5clampDv3_jS_S_(<3 x i32> %value, <3 x i32> %low, <3 x i32> %high) nounwind readonly {
230*e1eccf28SAndroid Build Coastguard Worker  %_value = shufflevector <3 x i32> %value, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
231*e1eccf28SAndroid Build Coastguard Worker  %_low = shufflevector <3 x i32> %low, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
232*e1eccf28SAndroid Build Coastguard Worker  %_high = shufflevector <3 x i32> %high, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
233*e1eccf28SAndroid Build Coastguard Worker  %a = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %_value, <4 x i32> %_high) nounwind readnone
234*e1eccf28SAndroid Build Coastguard Worker  %b = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %a, <4 x i32> %_low) nounwind readnone
235*e1eccf28SAndroid Build Coastguard Worker  %c = shufflevector <4 x i32> %b, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
236*e1eccf28SAndroid Build Coastguard Worker  ret <3 x i32> %c
237*e1eccf28SAndroid Build Coastguard Worker}
238*e1eccf28SAndroid Build Coastguard Worker
239*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i32> @_Z5clampDv3_jjj(<3 x i32> %value, i32 %low, i32 %high) nounwind readonly {
240*e1eccf28SAndroid Build Coastguard Worker  %_value = shufflevector <3 x i32> %value, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
241*e1eccf28SAndroid Build Coastguard Worker  %_high = tail call <4 x i32> @smear_4i(i32 %high) nounwind readnone
242*e1eccf28SAndroid Build Coastguard Worker  %_low = tail call <4 x i32> @smear_4i(i32 %low) nounwind readnone
243*e1eccf28SAndroid Build Coastguard Worker  %a = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %_value, <4 x i32> %_high) nounwind readnone
244*e1eccf28SAndroid Build Coastguard Worker  %b = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %a, <4 x i32> %_low) nounwind readnone
245*e1eccf28SAndroid Build Coastguard Worker  %c = shufflevector <4 x i32> %b, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
246*e1eccf28SAndroid Build Coastguard Worker  ret <3 x i32> %c
247*e1eccf28SAndroid Build Coastguard Worker}
248*e1eccf28SAndroid Build Coastguard Worker
249*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i32> @_Z5clampDv2_jS_S_(<2 x i32> %value, <2 x i32> %low, <2 x i32> %high) nounwind readonly {
250*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <2 x i32> @llvm.aarch64.neon.umin.v2i32(<2 x i32> %value, <2 x i32> %high) nounwind readnone
251*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <2 x i32> @llvm.aarch64.neon.umax.v2i32(<2 x i32> %1, <2 x i32> %low) nounwind readnone
252*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i32> %2
253*e1eccf28SAndroid Build Coastguard Worker}
254*e1eccf28SAndroid Build Coastguard Worker
255*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i32> @_Z5clampDv2_jjj(<2 x i32> %value, i32 %low, i32 %high) nounwind readonly {
256*e1eccf28SAndroid Build Coastguard Worker  %_high = tail call <2 x i32> @smear_2i(i32 %high) nounwind readnone
257*e1eccf28SAndroid Build Coastguard Worker  %_low = tail call <2 x i32> @smear_2i(i32 %low) nounwind readnone
258*e1eccf28SAndroid Build Coastguard Worker  %a = tail call <2 x i32> @llvm.aarch64.neon.umin.v2i32(<2 x i32> %value, <2 x i32> %_high) nounwind readnone
259*e1eccf28SAndroid Build Coastguard Worker  %b = tail call <2 x i32> @llvm.aarch64.neon.umax.v2i32(<2 x i32> %a, <2 x i32> %_low) nounwind readnone
260*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i32> %b
261*e1eccf28SAndroid Build Coastguard Worker}
262*e1eccf28SAndroid Build Coastguard Worker
263*e1eccf28SAndroid Build Coastguard Worker
264*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
265*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;                  FMAX                  ;;;;;;;;;;
266*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
267*e1eccf28SAndroid Build Coastguard Worker
268*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z4fmaxDv4_fS_(<4 x float> %v1, <4 x float> %v2) nounwind readonly {
269*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @llvm.aarch64.neon.fmax.v4f32(<4 x float> %v1, <4 x float> %v2) nounwind readnone
270*e1eccf28SAndroid Build Coastguard Worker  ret <4 x float> %1
271*e1eccf28SAndroid Build Coastguard Worker}
272*e1eccf28SAndroid Build Coastguard Worker
273*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z4fmaxDv4_ff(<4 x float> %v1, float %v2) nounwind readonly {
274*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @smear_4f(float %v2) nounwind readnone
275*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <4 x float> @llvm.aarch64.neon.fmax.v4f32(<4 x float> %v1, <4 x float> %1) nounwind readnone
276*e1eccf28SAndroid Build Coastguard Worker  ret <4 x float> %2
277*e1eccf28SAndroid Build Coastguard Worker}
278*e1eccf28SAndroid Build Coastguard Worker
279*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z4fmaxDv3_fS_(<3 x float> %v1, <3 x float> %v2) nounwind readonly {
280*e1eccf28SAndroid Build Coastguard Worker  %1 = shufflevector <3 x float> %v1, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
281*e1eccf28SAndroid Build Coastguard Worker  %2 = shufflevector <3 x float> %v2, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
282*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <4 x float> @llvm.aarch64.neon.fmax.v4f32(<4 x float> %1, <4 x float> %2) nounwind readnone
283*e1eccf28SAndroid Build Coastguard Worker  %4 = shufflevector <4 x float> %3, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2>
284*e1eccf28SAndroid Build Coastguard Worker  ret <3 x float> %4
285*e1eccf28SAndroid Build Coastguard Worker}
286*e1eccf28SAndroid Build Coastguard Worker
287*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z4fmaxDv3_ff(<3 x float> %v1, float %v2) nounwind readonly {
288*e1eccf28SAndroid Build Coastguard Worker  %1 = shufflevector <3 x float> %v1, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
289*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <4 x float> @smear_4f(float %v2) nounwind readnone
290*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <4 x float> @llvm.aarch64.neon.fmax.v4f32(<4 x float> %1, <4 x float> %2) nounwind readnone
291*e1eccf28SAndroid Build Coastguard Worker  %c = shufflevector <4 x float> %3, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2>
292*e1eccf28SAndroid Build Coastguard Worker  ret <3 x float> %c
293*e1eccf28SAndroid Build Coastguard Worker}
294*e1eccf28SAndroid Build Coastguard Worker
295*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z4fmaxDv2_fS_(<2 x float> %v1, <2 x float> %v2) nounwind readonly {
296*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <2 x float> @llvm.aarch64.neon.fmax.v2f32(<2 x float> %v1, <2 x float> %v2) nounwind readnone
297*e1eccf28SAndroid Build Coastguard Worker  ret <2 x float> %1
298*e1eccf28SAndroid Build Coastguard Worker}
299*e1eccf28SAndroid Build Coastguard Worker
300*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z4fmaxDv2_ff(<2 x float> %v1, float %v2) nounwind readonly {
301*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <2 x float> @smear_2f(float %v2) nounwind readnone
302*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <2 x float> @llvm.aarch64.neon.fmax.v2f32(<2 x float> %v1, <2 x float> %1) nounwind readnone
303*e1eccf28SAndroid Build Coastguard Worker  ret <2 x float> %2
304*e1eccf28SAndroid Build Coastguard Worker}
305*e1eccf28SAndroid Build Coastguard Worker
306*e1eccf28SAndroid Build Coastguard Workerdefine float @_Z4fmaxff(float %v1, float %v2) nounwind readonly {
307*e1eccf28SAndroid Build Coastguard Worker  %1 = fcmp ogt float %v1, %v2
308*e1eccf28SAndroid Build Coastguard Worker  %2 = select i1 %1, float %v1, float %v2
309*e1eccf28SAndroid Build Coastguard Worker  ret float %2
310*e1eccf28SAndroid Build Coastguard Worker}
311*e1eccf28SAndroid Build Coastguard Worker
312*e1eccf28SAndroid Build Coastguard Worker
313*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
314*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;                  FMIN                  ;;;;;;;;;;
315*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
316*e1eccf28SAndroid Build Coastguard Worker
317*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z4fminDv4_fS_(<4 x float> %v1, <4 x float> %v2) nounwind readonly {
318*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @llvm.aarch64.neon.fmin.v4f32(<4 x float> %v1, <4 x float> %v2) nounwind readnone
319*e1eccf28SAndroid Build Coastguard Worker  ret <4 x float> %1
320*e1eccf28SAndroid Build Coastguard Worker}
321*e1eccf28SAndroid Build Coastguard Worker
322*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z4fminDv4_ff(<4 x float> %v1, float %v2) nounwind readonly {
323*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @smear_4f(float %v2) nounwind readnone
324*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <4 x float> @llvm.aarch64.neon.fmin.v4f32(<4 x float> %v1, <4 x float> %1) nounwind readnone
325*e1eccf28SAndroid Build Coastguard Worker  ret <4 x float> %2
326*e1eccf28SAndroid Build Coastguard Worker}
327*e1eccf28SAndroid Build Coastguard Worker
328*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z4fminDv3_fS_(<3 x float> %v1, <3 x float> %v2) nounwind readonly {
329*e1eccf28SAndroid Build Coastguard Worker  %1 = shufflevector <3 x float> %v1, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
330*e1eccf28SAndroid Build Coastguard Worker  %2 = shufflevector <3 x float> %v2, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
331*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <4 x float> @llvm.aarch64.neon.fmin.v4f32(<4 x float> %1, <4 x float> %2) nounwind readnone
332*e1eccf28SAndroid Build Coastguard Worker  %4 = shufflevector <4 x float> %3, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2>
333*e1eccf28SAndroid Build Coastguard Worker  ret <3 x float> %4
334*e1eccf28SAndroid Build Coastguard Worker}
335*e1eccf28SAndroid Build Coastguard Worker
336*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z4fminDv3_ff(<3 x float> %v1, float %v2) nounwind readonly {
337*e1eccf28SAndroid Build Coastguard Worker  %1 = shufflevector <3 x float> %v1, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
338*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <4 x float> @smear_4f(float %v2) nounwind readnone
339*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <4 x float> @llvm.aarch64.neon.fmin.v4f32(<4 x float> %1, <4 x float> %2) nounwind readnone
340*e1eccf28SAndroid Build Coastguard Worker  %c = shufflevector <4 x float> %3, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2>
341*e1eccf28SAndroid Build Coastguard Worker  ret <3 x float> %c
342*e1eccf28SAndroid Build Coastguard Worker}
343*e1eccf28SAndroid Build Coastguard Worker
344*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z4fminDv2_fS_(<2 x float> %v1, <2 x float> %v2) nounwind readonly {
345*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <2 x float> @llvm.aarch64.neon.fmin.v2f32(<2 x float> %v1, <2 x float> %v2) nounwind readnone
346*e1eccf28SAndroid Build Coastguard Worker  ret <2 x float> %1
347*e1eccf28SAndroid Build Coastguard Worker}
348*e1eccf28SAndroid Build Coastguard Worker
349*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z4fminDv2_ff(<2 x float> %v1, float %v2) nounwind readonly {
350*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <2 x float> @smear_2f(float %v2) nounwind readnone
351*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <2 x float> @llvm.aarch64.neon.fmin.v2f32(<2 x float> %v1, <2 x float> %1) nounwind readnone
352*e1eccf28SAndroid Build Coastguard Worker  ret <2 x float> %2
353*e1eccf28SAndroid Build Coastguard Worker}
354*e1eccf28SAndroid Build Coastguard Worker
355*e1eccf28SAndroid Build Coastguard Workerdefine float @_Z4fminff(float %v1, float %v2) nounwind readnone {
356*e1eccf28SAndroid Build Coastguard Worker  %1 = fcmp olt float %v1, %v2
357*e1eccf28SAndroid Build Coastguard Worker  %2 = select i1 %1, float %v1, float %v2
358*e1eccf28SAndroid Build Coastguard Worker  ret float %2
359*e1eccf28SAndroid Build Coastguard Worker}
360*e1eccf28SAndroid Build Coastguard Worker
361*e1eccf28SAndroid Build Coastguard Worker
362*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
363*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;                  MAX                   ;;;;;;;;;;
364*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
365*e1eccf28SAndroid Build Coastguard Worker
366*e1eccf28SAndroid Build Coastguard Workerdefine signext i8 @_Z3maxcc(i8 signext %v1, i8 signext %v2) nounwind readnone {
367*e1eccf28SAndroid Build Coastguard Worker  %1 = icmp sgt i8 %v1, %v2
368*e1eccf28SAndroid Build Coastguard Worker  %2 = select i1 %1, i8 %v1, i8 %v2
369*e1eccf28SAndroid Build Coastguard Worker  ret i8 %2
370*e1eccf28SAndroid Build Coastguard Worker}
371*e1eccf28SAndroid Build Coastguard Worker
372*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i8> @_Z3maxDv2_cS_(<2 x i8> %v1, <2 x i8> %v2) nounwind readnone {
373*e1eccf28SAndroid Build Coastguard Worker  %1 = sext <2 x i8> %v1 to <2 x i32>
374*e1eccf28SAndroid Build Coastguard Worker  %2 = sext <2 x i8> %v2 to <2 x i32>
375*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <2 x i32> @llvm.aarch64.neon.smax.v2i32(<2 x i32> %1, <2 x i32> %2) nounwind readnone
376*e1eccf28SAndroid Build Coastguard Worker  %4 = trunc <2 x i32> %3 to <2 x i8>
377*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i8> %4
378*e1eccf28SAndroid Build Coastguard Worker}
379*e1eccf28SAndroid Build Coastguard Worker
380*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i8> @_Z3maxDv3_cS_(i32 %v1, i32 %v2) nounwind readnone {
381*e1eccf28SAndroid Build Coastguard Worker  %1 = bitcast i32 %v1 to <4 x i8>
382*e1eccf28SAndroid Build Coastguard Worker  %2 = bitcast i32 %v2 to <4 x i8>
383*e1eccf28SAndroid Build Coastguard Worker  %3 = sext <4 x i8> %1 to <4 x i32>
384*e1eccf28SAndroid Build Coastguard Worker  %4 = sext <4 x i8> %2 to <4 x i32>
385*e1eccf28SAndroid Build Coastguard Worker  %5 = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %3, <4 x i32> %4) nounwind readnone
386*e1eccf28SAndroid Build Coastguard Worker  %6 = shufflevector <4 x i32> %5, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
387*e1eccf28SAndroid Build Coastguard Worker  %7 = trunc <3 x i32> %6 to <3 x i8>
388*e1eccf28SAndroid Build Coastguard Worker  ret <3 x i8> %7
389*e1eccf28SAndroid Build Coastguard Worker}
390*e1eccf28SAndroid Build Coastguard Worker
391*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z3maxDv4_cS_(<4 x i8> %v1, <4 x i8> %v2) nounwind readnone {
392*e1eccf28SAndroid Build Coastguard Worker  %1 = sext <4 x i8> %v1 to <4 x i32>
393*e1eccf28SAndroid Build Coastguard Worker  %2 = sext <4 x i8> %v2 to <4 x i32>
394*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone
395*e1eccf28SAndroid Build Coastguard Worker  %4 = trunc <4 x i32> %3 to <4 x i8>
396*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i8> %4
397*e1eccf28SAndroid Build Coastguard Worker}
398*e1eccf28SAndroid Build Coastguard Worker
399*e1eccf28SAndroid Build Coastguard Workerdefine signext i16 @_Z3maxss(i16 signext %v1, i16 signext %v2) nounwind readnone {
400*e1eccf28SAndroid Build Coastguard Worker  %1 = icmp sgt i16 %v1, %v2
401*e1eccf28SAndroid Build Coastguard Worker  %2 = select i1 %1, i16 %v1, i16 %v2
402*e1eccf28SAndroid Build Coastguard Worker  ret i16 %2
403*e1eccf28SAndroid Build Coastguard Worker}
404*e1eccf28SAndroid Build Coastguard Worker
405*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i16> @_Z3maxDv2_sS_(<2 x i16> %v1, <2 x i16> %v2) nounwind readnone {
406*e1eccf28SAndroid Build Coastguard Worker  %1 = sext <2 x i16> %v1 to <2 x i32>
407*e1eccf28SAndroid Build Coastguard Worker  %2 = sext <2 x i16> %v2 to <2 x i32>
408*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <2 x i32> @llvm.aarch64.neon.smax.v2i32(<2 x i32> %1, <2 x i32> %2) nounwind readnone
409*e1eccf28SAndroid Build Coastguard Worker  %4 = trunc <2 x i32> %3 to <2 x i16>
410*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i16> %4
411*e1eccf28SAndroid Build Coastguard Worker}
412*e1eccf28SAndroid Build Coastguard Worker
413*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i16> @_Z3maxDv3_sS_(<3 x i16> %v1, <3 x i16> %v2) nounwind readnone {
414*e1eccf28SAndroid Build Coastguard Worker  %1 = sext <3 x i16> %v1 to <3 x i32>
415*e1eccf28SAndroid Build Coastguard Worker  %2 = sext <3 x i16> %v2 to <3 x i32>
416*e1eccf28SAndroid Build Coastguard Worker  %3 = shufflevector <3 x i32> %1, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
417*e1eccf28SAndroid Build Coastguard Worker  %4 = shufflevector <3 x i32> %2, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
418*e1eccf28SAndroid Build Coastguard Worker  %5 = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %3, <4 x i32> %4) nounwind readnone
419*e1eccf28SAndroid Build Coastguard Worker  %6 = shufflevector <4 x i32> %5, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
420*e1eccf28SAndroid Build Coastguard Worker  %7 = trunc <3 x i32> %6 to <3 x i16>
421*e1eccf28SAndroid Build Coastguard Worker  ret <3 x i16> %7
422*e1eccf28SAndroid Build Coastguard Worker}
423*e1eccf28SAndroid Build Coastguard Worker
424*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i16> @_Z3maxDv4_sS_(<4 x i16> %v1, <4 x i16> %v2) nounwind readnone {
425*e1eccf28SAndroid Build Coastguard Worker  %1 = sext <4 x i16> %v1 to <4 x i32>
426*e1eccf28SAndroid Build Coastguard Worker  %2 = sext <4 x i16> %v2 to <4 x i32>
427*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone
428*e1eccf28SAndroid Build Coastguard Worker  %4 = trunc <4 x i32> %3 to <4 x i16>
429*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i16> %4
430*e1eccf28SAndroid Build Coastguard Worker}
431*e1eccf28SAndroid Build Coastguard Worker
432*e1eccf28SAndroid Build Coastguard Workerdefine i32 @_Z3maxii(i32 %v1, i32 %v2) nounwind readnone {
433*e1eccf28SAndroid Build Coastguard Worker  %1 = icmp sgt i32 %v1, %v2
434*e1eccf28SAndroid Build Coastguard Worker  %2 = select i1 %1, i32 %v1, i32 %v2
435*e1eccf28SAndroid Build Coastguard Worker  ret i32 %2
436*e1eccf28SAndroid Build Coastguard Worker}
437*e1eccf28SAndroid Build Coastguard Worker
438*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i32> @_Z3maxDv2_iS_(<2 x i32> %v1, <2 x i32> %v2) nounwind readnone {
439*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <2 x i32> @llvm.aarch64.neon.smax.v2i32(<2 x i32> %v1, <2 x i32> %v2) nounwind readnone
440*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i32> %1
441*e1eccf28SAndroid Build Coastguard Worker}
442*e1eccf28SAndroid Build Coastguard Worker
443*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i32> @_Z3maxDv3_iS_(<3 x i32> %v1, <3 x i32> %v2) nounwind readnone {
444*e1eccf28SAndroid Build Coastguard Worker  %1 = shufflevector <3 x i32> %v1, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
445*e1eccf28SAndroid Build Coastguard Worker  %2 = shufflevector <3 x i32> %v2, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
446*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <4 x i32   > @llvm.aarch64.neon.smax.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone
447*e1eccf28SAndroid Build Coastguard Worker  %4 = shufflevector <4 x i32> %3, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
448*e1eccf28SAndroid Build Coastguard Worker  ret <3 x i32> %4
449*e1eccf28SAndroid Build Coastguard Worker}
450*e1eccf28SAndroid Build Coastguard Worker
451*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i32> @_Z3maxDv4_iS_(<4 x i32> %v1, <4 x i32> %v2) nounwind readnone {
452*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %v1, <4 x i32> %v2) nounwind readnone
453*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i32> %1
454*e1eccf28SAndroid Build Coastguard Worker}
455*e1eccf28SAndroid Build Coastguard Worker
456*e1eccf28SAndroid Build Coastguard Workerdefine i64 @_Z3maxxx(i64 %v1, i64 %v2) nounwind readnone {
457*e1eccf28SAndroid Build Coastguard Worker  %1 = icmp sgt i64 %v1, %v2
458*e1eccf28SAndroid Build Coastguard Worker  %2 = select i1 %1, i64 %v1, i64 %v2
459*e1eccf28SAndroid Build Coastguard Worker  ret i64 %2
460*e1eccf28SAndroid Build Coastguard Worker}
461*e1eccf28SAndroid Build Coastguard Worker
462*e1eccf28SAndroid Build Coastguard Worker; TODO:  long vector types
463*e1eccf28SAndroid Build Coastguard Worker
464*e1eccf28SAndroid Build Coastguard Workerdefine zeroext i8 @_Z3maxhh(i8 zeroext %v1, i8 zeroext %v2) nounwind readnone {
465*e1eccf28SAndroid Build Coastguard Worker  %1 = icmp ugt i8 %v1, %v2
466*e1eccf28SAndroid Build Coastguard Worker  %2 = select i1 %1, i8 %v1, i8 %v2
467*e1eccf28SAndroid Build Coastguard Worker  ret i8 %2
468*e1eccf28SAndroid Build Coastguard Worker}
469*e1eccf28SAndroid Build Coastguard Worker
470*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i8> @_Z3maxDv2_hS_(<2 x i8> %v1, <2 x i8> %v2) nounwind readnone {
471*e1eccf28SAndroid Build Coastguard Worker  %1 = zext <2 x i8> %v1 to <2 x i32>
472*e1eccf28SAndroid Build Coastguard Worker  %2 = zext <2 x i8> %v2 to <2 x i32>
473*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <2 x i32> @llvm.aarch64.neon.umax.v2i32(<2 x i32> %1, <2 x i32> %2) nounwind readnone
474*e1eccf28SAndroid Build Coastguard Worker  %4 = trunc <2 x i32> %3 to <2 x i8>
475*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i8> %4
476*e1eccf28SAndroid Build Coastguard Worker}
477*e1eccf28SAndroid Build Coastguard Worker
478*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i8> @_Z3maxDv3_hS_(i32 %v1, i32 %v2) nounwind readnone {
479*e1eccf28SAndroid Build Coastguard Worker  %1 = bitcast i32 %v1 to <4 x i8>
480*e1eccf28SAndroid Build Coastguard Worker  %2 = bitcast i32 %v2 to <4 x i8>
481*e1eccf28SAndroid Build Coastguard Worker  %3 = zext <4 x i8> %1 to <4 x i32>
482*e1eccf28SAndroid Build Coastguard Worker  %4 = zext <4 x i8> %2 to <4 x i32>
483*e1eccf28SAndroid Build Coastguard Worker  %5 = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %3, <4 x i32> %4) nounwind readnone
484*e1eccf28SAndroid Build Coastguard Worker  %6 = shufflevector <4 x i32> %5, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
485*e1eccf28SAndroid Build Coastguard Worker  %7 = trunc <3 x i32> %6 to <3 x i8>
486*e1eccf28SAndroid Build Coastguard Worker  ret <3 x i8> %7
487*e1eccf28SAndroid Build Coastguard Worker}
488*e1eccf28SAndroid Build Coastguard Worker
489*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z3maxDv4_hS_(<4 x i8> %v1, <4 x i8> %v2) nounwind readnone {
490*e1eccf28SAndroid Build Coastguard Worker  %1 = zext <4 x i8> %v1 to <4 x i32>
491*e1eccf28SAndroid Build Coastguard Worker  %2 = zext <4 x i8> %v2 to <4 x i32>
492*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone
493*e1eccf28SAndroid Build Coastguard Worker  %4 = trunc <4 x i32> %3 to <4 x i8>
494*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i8> %4
495*e1eccf28SAndroid Build Coastguard Worker}
496*e1eccf28SAndroid Build Coastguard Worker
497*e1eccf28SAndroid Build Coastguard Workerdefine zeroext i16 @_Z3maxtt(i16 zeroext %v1, i16 zeroext %v2) nounwind readnone {
498*e1eccf28SAndroid Build Coastguard Worker  %1 = icmp ugt i16 %v1, %v2
499*e1eccf28SAndroid Build Coastguard Worker  %2 = select i1 %1, i16 %v1, i16 %v2
500*e1eccf28SAndroid Build Coastguard Worker  ret i16 %2
501*e1eccf28SAndroid Build Coastguard Worker}
502*e1eccf28SAndroid Build Coastguard Worker
503*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i16> @_Z3maxDv2_tS_(<2 x i16> %v1, <2 x i16> %v2) nounwind readnone {
504*e1eccf28SAndroid Build Coastguard Worker  %1 = zext <2 x i16> %v1 to <2 x i32>
505*e1eccf28SAndroid Build Coastguard Worker  %2 = zext <2 x i16> %v2 to <2 x i32>
506*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <2 x i32> @llvm.aarch64.neon.umax.v2i32(<2 x i32> %1, <2 x i32> %2) nounwind readnone
507*e1eccf28SAndroid Build Coastguard Worker  %4 = trunc <2 x i32> %3 to <2 x i16>
508*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i16> %4
509*e1eccf28SAndroid Build Coastguard Worker}
510*e1eccf28SAndroid Build Coastguard Worker
511*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i16> @_Z3maxDv3_tS_(<3 x i16> %v1, <3 x i16> %v2) nounwind readnone {
512*e1eccf28SAndroid Build Coastguard Worker  %1 = zext <3 x i16> %v1 to <3 x i32>
513*e1eccf28SAndroid Build Coastguard Worker  %2 = zext <3 x i16> %v2 to <3 x i32>
514*e1eccf28SAndroid Build Coastguard Worker  %3 = shufflevector <3 x i32> %1, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
515*e1eccf28SAndroid Build Coastguard Worker  %4 = shufflevector <3 x i32> %2, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
516*e1eccf28SAndroid Build Coastguard Worker  %5 = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %3, <4 x i32> %4) nounwind readnone
517*e1eccf28SAndroid Build Coastguard Worker  %6 = shufflevector <4 x i32> %5, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
518*e1eccf28SAndroid Build Coastguard Worker  %7 = trunc <3 x i32> %6 to <3 x i16>
519*e1eccf28SAndroid Build Coastguard Worker  ret <3 x i16> %7
520*e1eccf28SAndroid Build Coastguard Worker}
521*e1eccf28SAndroid Build Coastguard Worker
522*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i16> @_Z3maxDv4_tS_(<4 x i16> %v1, <4 x i16> %v2) nounwind readnone {
523*e1eccf28SAndroid Build Coastguard Worker  %1 = zext <4 x i16> %v1 to <4 x i32>
524*e1eccf28SAndroid Build Coastguard Worker  %2 = zext <4 x i16> %v2 to <4 x i32>
525*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone
526*e1eccf28SAndroid Build Coastguard Worker  %4 = trunc <4 x i32> %3 to <4 x i16>
527*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i16> %4
528*e1eccf28SAndroid Build Coastguard Worker}
529*e1eccf28SAndroid Build Coastguard Worker
530*e1eccf28SAndroid Build Coastguard Workerdefine i32 @_Z3maxjj(i32 %v1, i32 %v2) nounwind readnone {
531*e1eccf28SAndroid Build Coastguard Worker  %1 = icmp ugt i32 %v1, %v2
532*e1eccf28SAndroid Build Coastguard Worker  %2 = select i1 %1, i32 %v1, i32 %v2
533*e1eccf28SAndroid Build Coastguard Worker  ret i32 %2
534*e1eccf28SAndroid Build Coastguard Worker}
535*e1eccf28SAndroid Build Coastguard Worker
536*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i32> @_Z3maxDv2_jS_(<2 x i32> %v1, <2 x i32> %v2) nounwind readnone {
537*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <2 x i32> @llvm.aarch64.neon.umax.v2i32(<2 x i32> %v1, <2 x i32> %v2) nounwind readnone
538*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i32> %1
539*e1eccf28SAndroid Build Coastguard Worker}
540*e1eccf28SAndroid Build Coastguard Worker
541*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i32> @_Z3maxDv3_jS_(<3 x i32> %v1, <3 x i32> %v2) nounwind readnone {
542*e1eccf28SAndroid Build Coastguard Worker  %1 = shufflevector <3 x i32> %v1, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
543*e1eccf28SAndroid Build Coastguard Worker  %2 = shufflevector <3 x i32> %v2, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
544*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <4 x i32   > @llvm.aarch64.neon.umax.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone
545*e1eccf28SAndroid Build Coastguard Worker  %4 = shufflevector <4 x i32> %3, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
546*e1eccf28SAndroid Build Coastguard Worker  ret <3 x i32> %4
547*e1eccf28SAndroid Build Coastguard Worker}
548*e1eccf28SAndroid Build Coastguard Worker
549*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i32> @_Z3maxDv4_jS_(<4 x i32> %v1, <4 x i32> %v2) nounwind readnone {
550*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %v1, <4 x i32> %v2) nounwind readnone
551*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i32> %1
552*e1eccf28SAndroid Build Coastguard Worker}
553*e1eccf28SAndroid Build Coastguard Worker
554*e1eccf28SAndroid Build Coastguard Worker
555*e1eccf28SAndroid Build Coastguard Worker; TODO:  long vector types
556*e1eccf28SAndroid Build Coastguard Worker
557*e1eccf28SAndroid Build Coastguard Workerdefine float @_Z3maxff(float %v1, float %v2) nounwind readnone {
558*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call float @_Z4fmaxff(float %v1, float %v2)
559*e1eccf28SAndroid Build Coastguard Worker  ret float %1
560*e1eccf28SAndroid Build Coastguard Worker}
561*e1eccf28SAndroid Build Coastguard Worker
562*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z3maxDv2_fS_(<2 x float> %v1, <2 x float> %v2) nounwind readnone {
563*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <2 x float> @_Z4fmaxDv2_fS_(<2 x float> %v1, <2 x float> %v2)
564*e1eccf28SAndroid Build Coastguard Worker  ret <2 x float> %1
565*e1eccf28SAndroid Build Coastguard Worker}
566*e1eccf28SAndroid Build Coastguard Worker
567*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z3maxDv2_ff(<2 x float> %v1, float %v2) nounwind readnone {
568*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <2 x float> @_Z4fmaxDv2_ff(<2 x float> %v1, float %v2)
569*e1eccf28SAndroid Build Coastguard Worker  ret <2 x float> %1
570*e1eccf28SAndroid Build Coastguard Worker}
571*e1eccf28SAndroid Build Coastguard Worker
572*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z3maxDv3_fS_(<3 x float> %v1, <3 x float> %v2) nounwind readnone {
573*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <3 x float> @_Z4fmaxDv3_fS_(<3 x float> %v1, <3 x float> %v2)
574*e1eccf28SAndroid Build Coastguard Worker  ret <3 x float> %1
575*e1eccf28SAndroid Build Coastguard Worker}
576*e1eccf28SAndroid Build Coastguard Worker
577*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z3maxDv3_ff(<3 x float> %v1, float %v2) nounwind readnone {
578*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <3 x float> @_Z4fmaxDv3_ff(<3 x float> %v1, float %v2)
579*e1eccf28SAndroid Build Coastguard Worker  ret <3 x float> %1
580*e1eccf28SAndroid Build Coastguard Worker}
581*e1eccf28SAndroid Build Coastguard Worker
582*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z3maxDv4_fS_(<4 x float> %v1, <4 x float> %v2) nounwind readnone {
583*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @_Z4fmaxDv4_fS_(<4 x float> %v1, <4 x float> %v2)
584*e1eccf28SAndroid Build Coastguard Worker  ret <4 x float> %1
585*e1eccf28SAndroid Build Coastguard Worker}
586*e1eccf28SAndroid Build Coastguard Worker
587*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z3maxDv4_ff(<4 x float> %v1, float %v2) nounwind readnone {
588*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @_Z4fmaxDv4_ff(<4 x float> %v1, float %v2)
589*e1eccf28SAndroid Build Coastguard Worker  ret <4 x float> %1
590*e1eccf28SAndroid Build Coastguard Worker}
591*e1eccf28SAndroid Build Coastguard Worker
592*e1eccf28SAndroid Build Coastguard Worker
593*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
594*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;                  MIN                   ;;;;;;;;;;
595*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
596*e1eccf28SAndroid Build Coastguard Worker
597*e1eccf28SAndroid Build Coastguard Workerdefine signext i8 @_Z3mincc(i8 signext %v1, i8 signext %v2) nounwind readnone {
598*e1eccf28SAndroid Build Coastguard Worker  %1 = icmp slt i8 %v1, %v2
599*e1eccf28SAndroid Build Coastguard Worker  %2 = select i1 %1, i8 %v1, i8 %v2
600*e1eccf28SAndroid Build Coastguard Worker  ret i8 %2
601*e1eccf28SAndroid Build Coastguard Worker}
602*e1eccf28SAndroid Build Coastguard Worker
603*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i8> @_Z3minDv2_cS_(<2 x i8> %v1, <2 x i8> %v2) nounwind readnone {
604*e1eccf28SAndroid Build Coastguard Worker  %1 = sext <2 x i8> %v1 to <2 x i32>
605*e1eccf28SAndroid Build Coastguard Worker  %2 = sext <2 x i8> %v2 to <2 x i32>
606*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <2 x i32> @llvm.aarch64.neon.smin.v2i32(<2 x i32> %1, <2 x i32> %2) nounwind readnone
607*e1eccf28SAndroid Build Coastguard Worker  %4 = trunc <2 x i32> %3 to <2 x i8>
608*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i8> %4
609*e1eccf28SAndroid Build Coastguard Worker}
610*e1eccf28SAndroid Build Coastguard Worker
611*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i8> @_Z3minDv3_cS_(i32 %v1, i32 %v2) nounwind readnone {
612*e1eccf28SAndroid Build Coastguard Worker  %1 = bitcast i32 %v1 to <4 x i8>
613*e1eccf28SAndroid Build Coastguard Worker  %2 = bitcast i32 %v2 to <4 x i8>
614*e1eccf28SAndroid Build Coastguard Worker  %3 = sext <4 x i8> %1 to <4 x i32>
615*e1eccf28SAndroid Build Coastguard Worker  %4 = sext <4 x i8> %2 to <4 x i32>
616*e1eccf28SAndroid Build Coastguard Worker  %5 = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %3, <4 x i32> %4) nounwind readnone
617*e1eccf28SAndroid Build Coastguard Worker  %6 = shufflevector <4 x i32> %5, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
618*e1eccf28SAndroid Build Coastguard Worker  %7 = trunc <3 x i32> %6 to <3 x i8>
619*e1eccf28SAndroid Build Coastguard Worker  ret <3 x i8> %7
620*e1eccf28SAndroid Build Coastguard Worker}
621*e1eccf28SAndroid Build Coastguard Worker
622*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z3minDv4_cS_(<4 x i8> %v1, <4 x i8> %v2) nounwind readnone {
623*e1eccf28SAndroid Build Coastguard Worker  %1 = sext <4 x i8> %v1 to <4 x i32>
624*e1eccf28SAndroid Build Coastguard Worker  %2 = sext <4 x i8> %v2 to <4 x i32>
625*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone
626*e1eccf28SAndroid Build Coastguard Worker  %4 = trunc <4 x i32> %3 to <4 x i8>
627*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i8> %4
628*e1eccf28SAndroid Build Coastguard Worker}
629*e1eccf28SAndroid Build Coastguard Worker
630*e1eccf28SAndroid Build Coastguard Workerdefine signext i16 @_Z3minss(i16 signext %v1, i16 signext %v2) nounwind readnone {
631*e1eccf28SAndroid Build Coastguard Worker  %1 = icmp slt i16 %v1, %v2
632*e1eccf28SAndroid Build Coastguard Worker  %2 = select i1 %1, i16 %v1, i16 %v2
633*e1eccf28SAndroid Build Coastguard Worker  ret i16 %2
634*e1eccf28SAndroid Build Coastguard Worker}
635*e1eccf28SAndroid Build Coastguard Worker
636*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i16> @_Z3minDv2_sS_(<2 x i16> %v1, <2 x i16> %v2) nounwind readnone {
637*e1eccf28SAndroid Build Coastguard Worker  %1 = sext <2 x i16> %v1 to <2 x i32>
638*e1eccf28SAndroid Build Coastguard Worker  %2 = sext <2 x i16> %v2 to <2 x i32>
639*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <2 x i32> @llvm.aarch64.neon.smin.v2i32(<2 x i32> %1, <2 x i32> %2) nounwind readnone
640*e1eccf28SAndroid Build Coastguard Worker  %4 = trunc <2 x i32> %3 to <2 x i16>
641*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i16> %4
642*e1eccf28SAndroid Build Coastguard Worker}
643*e1eccf28SAndroid Build Coastguard Worker
644*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i16> @_Z3minDv3_sS_(<3 x i16> %v1, <3 x i16> %v2) nounwind readnone {
645*e1eccf28SAndroid Build Coastguard Worker  %1 = sext <3 x i16> %v1 to <3 x i32>
646*e1eccf28SAndroid Build Coastguard Worker  %2 = sext <3 x i16> %v2 to <3 x i32>
647*e1eccf28SAndroid Build Coastguard Worker  %3 = shufflevector <3 x i32> %1, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
648*e1eccf28SAndroid Build Coastguard Worker  %4 = shufflevector <3 x i32> %2, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
649*e1eccf28SAndroid Build Coastguard Worker  %5 = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %3, <4 x i32> %4) nounwind readnone
650*e1eccf28SAndroid Build Coastguard Worker  %6 = shufflevector <4 x i32> %5, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
651*e1eccf28SAndroid Build Coastguard Worker  %7 = trunc <3 x i32> %6 to <3 x i16>
652*e1eccf28SAndroid Build Coastguard Worker  ret <3 x i16> %7
653*e1eccf28SAndroid Build Coastguard Worker}
654*e1eccf28SAndroid Build Coastguard Worker
655*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i16> @_Z3minDv4_sS_(<4 x i16> %v1, <4 x i16> %v2) nounwind readnone {
656*e1eccf28SAndroid Build Coastguard Worker  %1 = sext <4 x i16> %v1 to <4 x i32>
657*e1eccf28SAndroid Build Coastguard Worker  %2 = sext <4 x i16> %v2 to <4 x i32>
658*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone
659*e1eccf28SAndroid Build Coastguard Worker  %4 = trunc <4 x i32> %3 to <4 x i16>
660*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i16> %4
661*e1eccf28SAndroid Build Coastguard Worker}
662*e1eccf28SAndroid Build Coastguard Worker
663*e1eccf28SAndroid Build Coastguard Workerdefine i32 @_Z3minii(i32 %v1, i32 %v2) nounwind readnone {
664*e1eccf28SAndroid Build Coastguard Worker  %1 = icmp slt i32 %v1, %v2
665*e1eccf28SAndroid Build Coastguard Worker  %2 = select i1 %1, i32 %v1, i32 %v2
666*e1eccf28SAndroid Build Coastguard Worker  ret i32 %2
667*e1eccf28SAndroid Build Coastguard Worker}
668*e1eccf28SAndroid Build Coastguard Worker
669*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i32> @_Z3minDv2_iS_(<2 x i32> %v1, <2 x i32> %v2) nounwind readnone {
670*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <2 x i32> @llvm.aarch64.neon.smin.v2i32(<2 x i32> %v1, <2 x i32> %v2) nounwind readnone
671*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i32> %1
672*e1eccf28SAndroid Build Coastguard Worker}
673*e1eccf28SAndroid Build Coastguard Worker
674*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i32> @_Z3minDv3_iS_(<3 x i32> %v1, <3 x i32> %v2) nounwind readnone {
675*e1eccf28SAndroid Build Coastguard Worker  %1 = shufflevector <3 x i32> %v1, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
676*e1eccf28SAndroid Build Coastguard Worker  %2 = shufflevector <3 x i32> %v2, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
677*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <4 x i32   > @llvm.aarch64.neon.smin.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone
678*e1eccf28SAndroid Build Coastguard Worker  %4 = shufflevector <4 x i32> %3, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
679*e1eccf28SAndroid Build Coastguard Worker  ret <3 x i32> %4
680*e1eccf28SAndroid Build Coastguard Worker}
681*e1eccf28SAndroid Build Coastguard Worker
682*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i32> @_Z3minDv4_iS_(<4 x i32> %v1, <4 x i32> %v2) nounwind readnone {
683*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %v1, <4 x i32> %v2) nounwind readnone
684*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i32> %1
685*e1eccf28SAndroid Build Coastguard Worker}
686*e1eccf28SAndroid Build Coastguard Worker
687*e1eccf28SAndroid Build Coastguard Workerdefine i64 @_Z3minxx(i64 %v1, i64 %v2) nounwind readnone {
688*e1eccf28SAndroid Build Coastguard Worker  %1 = icmp slt i64 %v1, %v2
689*e1eccf28SAndroid Build Coastguard Worker  %2 = select i1 %1, i64 %v1, i64 %v2
690*e1eccf28SAndroid Build Coastguard Worker  ret i64 %2
691*e1eccf28SAndroid Build Coastguard Worker}
692*e1eccf28SAndroid Build Coastguard Worker
693*e1eccf28SAndroid Build Coastguard Worker; TODO:  long vector types
694*e1eccf28SAndroid Build Coastguard Worker
695*e1eccf28SAndroid Build Coastguard Workerdefine zeroext i8 @_Z3minhh(i8 zeroext %v1, i8 zeroext %v2) nounwind readnone {
696*e1eccf28SAndroid Build Coastguard Worker  %1 = icmp ult i8 %v1, %v2
697*e1eccf28SAndroid Build Coastguard Worker  %2 = select i1 %1, i8 %v1, i8 %v2
698*e1eccf28SAndroid Build Coastguard Worker  ret i8 %2
699*e1eccf28SAndroid Build Coastguard Worker}
700*e1eccf28SAndroid Build Coastguard Worker
701*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i8> @_Z3minDv2_hS_(<2 x i8> %v1, <2 x i8> %v2) nounwind readnone {
702*e1eccf28SAndroid Build Coastguard Worker  %1 = zext <2 x i8> %v1 to <2 x i32>
703*e1eccf28SAndroid Build Coastguard Worker  %2 = zext <2 x i8> %v2 to <2 x i32>
704*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <2 x i32> @llvm.aarch64.neon.umin.v2i32(<2 x i32> %1, <2 x i32> %2) nounwind readnone
705*e1eccf28SAndroid Build Coastguard Worker  %4 = trunc <2 x i32> %3 to <2 x i8>
706*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i8> %4
707*e1eccf28SAndroid Build Coastguard Worker}
708*e1eccf28SAndroid Build Coastguard Worker
709*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i8> @_Z3minDv3_hS_(i32 %v1, i32 %v2) nounwind readnone {
710*e1eccf28SAndroid Build Coastguard Worker  %1 = bitcast i32 %v1 to <4 x i8>
711*e1eccf28SAndroid Build Coastguard Worker  %2 = bitcast i32 %v2 to <4 x i8>
712*e1eccf28SAndroid Build Coastguard Worker  %3 = zext <4 x i8> %1 to <4 x i32>
713*e1eccf28SAndroid Build Coastguard Worker  %4 = zext <4 x i8> %2 to <4 x i32>
714*e1eccf28SAndroid Build Coastguard Worker  %5 = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %3, <4 x i32> %4) nounwind readnone
715*e1eccf28SAndroid Build Coastguard Worker  %6 = shufflevector <4 x i32> %5, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
716*e1eccf28SAndroid Build Coastguard Worker  %7 = trunc <3 x i32> %6 to <3 x i8>
717*e1eccf28SAndroid Build Coastguard Worker  ret <3 x i8> %7
718*e1eccf28SAndroid Build Coastguard Worker}
719*e1eccf28SAndroid Build Coastguard Worker
720*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z3minDv4_hS_(<4 x i8> %v1, <4 x i8> %v2) nounwind readnone {
721*e1eccf28SAndroid Build Coastguard Worker  %1 = zext <4 x i8> %v1 to <4 x i32>
722*e1eccf28SAndroid Build Coastguard Worker  %2 = zext <4 x i8> %v2 to <4 x i32>
723*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone
724*e1eccf28SAndroid Build Coastguard Worker  %4 = trunc <4 x i32> %3 to <4 x i8>
725*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i8> %4
726*e1eccf28SAndroid Build Coastguard Worker}
727*e1eccf28SAndroid Build Coastguard Worker
728*e1eccf28SAndroid Build Coastguard Workerdefine zeroext i16 @_Z3mintt(i16 zeroext %v1, i16 zeroext %v2) nounwind readnone {
729*e1eccf28SAndroid Build Coastguard Worker  %1 = icmp ult i16 %v1, %v2
730*e1eccf28SAndroid Build Coastguard Worker  %2 = select i1 %1, i16 %v1, i16 %v2
731*e1eccf28SAndroid Build Coastguard Worker  ret i16 %2
732*e1eccf28SAndroid Build Coastguard Worker}
733*e1eccf28SAndroid Build Coastguard Worker
734*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i16> @_Z3minDv2_tS_(<2 x i16> %v1, <2 x i16> %v2) nounwind readnone {
735*e1eccf28SAndroid Build Coastguard Worker  %1 = zext <2 x i16> %v1 to <2 x i32>
736*e1eccf28SAndroid Build Coastguard Worker  %2 = zext <2 x i16> %v2 to <2 x i32>
737*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <2 x i32> @llvm.aarch64.neon.umin.v2i32(<2 x i32> %1, <2 x i32> %2) nounwind readnone
738*e1eccf28SAndroid Build Coastguard Worker  %4 = trunc <2 x i32> %3 to <2 x i16>
739*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i16> %4
740*e1eccf28SAndroid Build Coastguard Worker}
741*e1eccf28SAndroid Build Coastguard Worker
742*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i16> @_Z3minDv3_tS_(<3 x i16> %v1, <3 x i16> %v2) nounwind readnone {
743*e1eccf28SAndroid Build Coastguard Worker  %1 = zext <3 x i16> %v1 to <3 x i32>
744*e1eccf28SAndroid Build Coastguard Worker  %2 = zext <3 x i16> %v2 to <3 x i32>
745*e1eccf28SAndroid Build Coastguard Worker  %3 = shufflevector <3 x i32> %1, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
746*e1eccf28SAndroid Build Coastguard Worker  %4 = shufflevector <3 x i32> %2, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
747*e1eccf28SAndroid Build Coastguard Worker  %5 = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %3, <4 x i32> %4) nounwind readnone
748*e1eccf28SAndroid Build Coastguard Worker  %6 = shufflevector <4 x i32> %5, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
749*e1eccf28SAndroid Build Coastguard Worker  %7 = trunc <3 x i32> %6 to <3 x i16>
750*e1eccf28SAndroid Build Coastguard Worker  ret <3 x i16> %7
751*e1eccf28SAndroid Build Coastguard Worker}
752*e1eccf28SAndroid Build Coastguard Worker
753*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i16> @_Z3minDv4_tS_(<4 x i16> %v1, <4 x i16> %v2) nounwind readnone {
754*e1eccf28SAndroid Build Coastguard Worker  %1 = zext <4 x i16> %v1 to <4 x i32>
755*e1eccf28SAndroid Build Coastguard Worker  %2 = zext <4 x i16> %v2 to <4 x i32>
756*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone
757*e1eccf28SAndroid Build Coastguard Worker  %4 = trunc <4 x i32> %3 to <4 x i16>
758*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i16> %4
759*e1eccf28SAndroid Build Coastguard Worker}
760*e1eccf28SAndroid Build Coastguard Worker
761*e1eccf28SAndroid Build Coastguard Workerdefine i32 @_Z3minjj(i32 %v1, i32 %v2) nounwind readnone {
762*e1eccf28SAndroid Build Coastguard Worker  %1 = icmp ult i32 %v1, %v2
763*e1eccf28SAndroid Build Coastguard Worker  %2 = select i1 %1, i32 %v1, i32 %v2
764*e1eccf28SAndroid Build Coastguard Worker  ret i32 %2
765*e1eccf28SAndroid Build Coastguard Worker}
766*e1eccf28SAndroid Build Coastguard Worker
767*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i32> @_Z3minDv2_jS_(<2 x i32> %v1, <2 x i32> %v2) nounwind readnone {
768*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <2 x i32> @llvm.aarch64.neon.umin.v2i32(<2 x i32> %v1, <2 x i32> %v2) nounwind readnone
769*e1eccf28SAndroid Build Coastguard Worker  ret <2 x i32> %1
770*e1eccf28SAndroid Build Coastguard Worker}
771*e1eccf28SAndroid Build Coastguard Worker
772*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i32> @_Z3minDv3_jS_(<3 x i32> %v1, <3 x i32> %v2) nounwind readnone {
773*e1eccf28SAndroid Build Coastguard Worker  %1 = shufflevector <3 x i32> %v1, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
774*e1eccf28SAndroid Build Coastguard Worker  %2 = shufflevector <3 x i32> %v2, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
775*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <4 x i32   > @llvm.aarch64.neon.umin.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone
776*e1eccf28SAndroid Build Coastguard Worker  %4 = shufflevector <4 x i32> %3, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
777*e1eccf28SAndroid Build Coastguard Worker  ret <3 x i32> %4
778*e1eccf28SAndroid Build Coastguard Worker}
779*e1eccf28SAndroid Build Coastguard Worker
780*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i32> @_Z3minDv4_jS_(<4 x i32> %v1, <4 x i32> %v2) nounwind readnone {
781*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %v1, <4 x i32> %v2) nounwind readnone
782*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i32> %1
783*e1eccf28SAndroid Build Coastguard Worker}
784*e1eccf28SAndroid Build Coastguard Worker
785*e1eccf28SAndroid Build Coastguard Worker
786*e1eccf28SAndroid Build Coastguard Worker; TODO:  long vector types
787*e1eccf28SAndroid Build Coastguard Worker
788*e1eccf28SAndroid Build Coastguard Workerdefine float @_Z3minff(float %v1, float %v2) nounwind readnone {
789*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call float @_Z4fminff(float %v1, float %v2)
790*e1eccf28SAndroid Build Coastguard Worker  ret float %1
791*e1eccf28SAndroid Build Coastguard Worker}
792*e1eccf28SAndroid Build Coastguard Worker
793*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z3minDv2_fS_(<2 x float> %v1, <2 x float> %v2) nounwind readnone {
794*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <2 x float> @_Z4fminDv2_fS_(<2 x float> %v1, <2 x float> %v2)
795*e1eccf28SAndroid Build Coastguard Worker  ret <2 x float> %1
796*e1eccf28SAndroid Build Coastguard Worker}
797*e1eccf28SAndroid Build Coastguard Worker
798*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z3minDv2_ff(<2 x float> %v1, float %v2) nounwind readnone {
799*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <2 x float> @_Z4fminDv2_ff(<2 x float> %v1, float %v2)
800*e1eccf28SAndroid Build Coastguard Worker  ret <2 x float> %1
801*e1eccf28SAndroid Build Coastguard Worker}
802*e1eccf28SAndroid Build Coastguard Worker
803*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z3minDv3_fS_(<3 x float> %v1, <3 x float> %v2) nounwind readnone {
804*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <3 x float> @_Z4fminDv3_fS_(<3 x float> %v1, <3 x float> %v2)
805*e1eccf28SAndroid Build Coastguard Worker  ret <3 x float> %1
806*e1eccf28SAndroid Build Coastguard Worker}
807*e1eccf28SAndroid Build Coastguard Worker
808*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z3minDv3_ff(<3 x float> %v1, float %v2) nounwind readnone {
809*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <3 x float> @_Z4fminDv3_ff(<3 x float> %v1, float %v2)
810*e1eccf28SAndroid Build Coastguard Worker  ret <3 x float> %1
811*e1eccf28SAndroid Build Coastguard Worker}
812*e1eccf28SAndroid Build Coastguard Worker
813*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z3minDv4_fS_(<4 x float> %v1, <4 x float> %v2) nounwind readnone {
814*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @_Z4fminDv4_fS_(<4 x float> %v1, <4 x float> %v2)
815*e1eccf28SAndroid Build Coastguard Worker  ret <4 x float> %1
816*e1eccf28SAndroid Build Coastguard Worker}
817*e1eccf28SAndroid Build Coastguard Worker
818*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z3minDv4_ff(<4 x float> %v1, float %v2) nounwind readnone {
819*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @_Z4fminDv4_ff(<4 x float> %v1, float %v2)
820*e1eccf28SAndroid Build Coastguard Worker  ret <4 x float> %1
821*e1eccf28SAndroid Build Coastguard Worker}
822*e1eccf28SAndroid Build Coastguard Worker
823*e1eccf28SAndroid Build Coastguard Worker
824*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
825*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;                  YUV                   ;;;;;;;;;;
826*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
827*e1eccf28SAndroid Build Coastguard Worker
828*e1eccf28SAndroid Build Coastguard Worker@yuv_U = internal constant <4 x i32> <i32 0, i32 -100, i32 516, i32 0>, align 16
829*e1eccf28SAndroid Build Coastguard Worker@yuv_V = internal constant <4 x i32> <i32 409, i32 -208, i32 0, i32 0>, align 16
830*e1eccf28SAndroid Build Coastguard Worker@yuv_0 = internal constant <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
831*e1eccf28SAndroid Build Coastguard Worker@yuv_255 = internal constant <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>, align 16
832*e1eccf28SAndroid Build Coastguard Worker
833*e1eccf28SAndroid Build Coastguard Worker
834*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z18rsYuvToRGBA_uchar4hhh(i8 %pY, i8 %pU, i8 %pV) nounwind readnone alwaysinline {
835*e1eccf28SAndroid Build Coastguard Worker  %_sy = zext i8 %pY to i32
836*e1eccf28SAndroid Build Coastguard Worker  %_su = zext i8 %pU to i32
837*e1eccf28SAndroid Build Coastguard Worker  %_sv = zext i8 %pV to i32
838*e1eccf28SAndroid Build Coastguard Worker
839*e1eccf28SAndroid Build Coastguard Worker  %_sy2 = add i32 -16, %_sy
840*e1eccf28SAndroid Build Coastguard Worker  %_sy3 = mul i32 298, %_sy2
841*e1eccf28SAndroid Build Coastguard Worker  %_su2 = add i32 -128, %_su
842*e1eccf28SAndroid Build Coastguard Worker  %_sv2 = add i32 -128, %_sv
843*e1eccf28SAndroid Build Coastguard Worker  %_y = tail call <4 x i32> @smear_4i32(i32 %_sy3) nounwind readnone
844*e1eccf28SAndroid Build Coastguard Worker  %_u = tail call <4 x i32> @smear_4i32(i32 %_su2) nounwind readnone
845*e1eccf28SAndroid Build Coastguard Worker  %_v = tail call <4 x i32> @smear_4i32(i32 %_sv2) nounwind readnone
846*e1eccf28SAndroid Build Coastguard Worker
847*e1eccf28SAndroid Build Coastguard Worker  %mu = load <4 x i32>, <4 x i32>* @yuv_U, align 8
848*e1eccf28SAndroid Build Coastguard Worker  %mv = load <4 x i32>, <4 x i32>* @yuv_V, align 8
849*e1eccf28SAndroid Build Coastguard Worker  %_u2 = mul <4 x i32> %_u, %mu
850*e1eccf28SAndroid Build Coastguard Worker  %_v2 = mul <4 x i32> %_v, %mv
851*e1eccf28SAndroid Build Coastguard Worker  %_y2 = add <4 x i32> %_y, %_u2
852*e1eccf28SAndroid Build Coastguard Worker  %_y3 = add <4 x i32> %_y2, %_v2
853*e1eccf28SAndroid Build Coastguard Worker
854*e1eccf28SAndroid Build Coastguard Worker ; %r1 = tail call <4 x i16> @llvm.aarch64.neon.sqshrun.v4i16(<4 x i32> %_y3, <4 x i32> <i32 8, i32 8, i32 8, i32 8>) nounwind readnone
855*e1eccf28SAndroid Build Coastguard Worker;  %r2 = trunc <4 x i16> %r1 to <4 x i8>
856*e1eccf28SAndroid Build Coastguard Worker;  ret <4 x i8> %r2
857*e1eccf28SAndroid Build Coastguard Worker
858*e1eccf28SAndroid Build Coastguard Worker  %c0 = load <4 x i32>, <4 x i32>* @yuv_0, align 8
859*e1eccf28SAndroid Build Coastguard Worker  %c255 = load <4 x i32>, <4 x i32>* @yuv_255, align 8
860*e1eccf28SAndroid Build Coastguard Worker  %r1 = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %_y3, <4 x i32> %c0) nounwind readnone
861*e1eccf28SAndroid Build Coastguard Worker  %r2 = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %r1, <4 x i32> %c255) nounwind readnone
862*e1eccf28SAndroid Build Coastguard Worker  %r3 = lshr <4 x i32> %r2, <i32 8, i32 8, i32 8, i32 8>
863*e1eccf28SAndroid Build Coastguard Worker  %r4 = trunc <4 x i32> %r3 to <4 x i8>
864*e1eccf28SAndroid Build Coastguard Worker  ret <4 x i8> %r4
865*e1eccf28SAndroid Build Coastguard Worker}
866*e1eccf28SAndroid Build Coastguard Worker
867*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
868*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;              half_RECIP              ;;;;;;;;;;
869*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
870*e1eccf28SAndroid Build Coastguard Worker
871*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z10half_recipDv2_f(<2 x float> %v) nounwind readnone {
872*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <2 x float> @llvm.aarch64.neon.frecpe.v2f32(<2 x float> %v) nounwind readnone
873*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <2 x float> @llvm.aarch64.neon.frecps.v2f32(<2 x float> %1, <2 x float> %v) nounwind readnone
874*e1eccf28SAndroid Build Coastguard Worker  %3 = fmul <2 x float> %1, %2
875*e1eccf28SAndroid Build Coastguard Worker  %4 = tail call <2 x float> @llvm.aarch64.neon.frecps.v2f32(<2 x float> %3, <2 x float> %v) nounwind readnone
876*e1eccf28SAndroid Build Coastguard Worker  %5 = fmul <2 x float> %4, %3
877*e1eccf28SAndroid Build Coastguard Worker  ret <2 x float> %5
878*e1eccf28SAndroid Build Coastguard Worker}
879*e1eccf28SAndroid Build Coastguard Worker
880*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z10half_recipDv4_f(<4 x float> %v) nounwind readnone {
881*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @llvm.aarch64.neon.frecpe.v4f32(<4 x float> %v) nounwind readnone
882*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <4 x float> @llvm.aarch64.neon.frecps.v4f32(<4 x float> %1, <4 x float> %v) nounwind readnone
883*e1eccf28SAndroid Build Coastguard Worker  %3 = fmul <4 x float> %1, %2
884*e1eccf28SAndroid Build Coastguard Worker  %4 = tail call <4 x float> @llvm.aarch64.neon.frecps.v4f32(<4 x float> %3, <4 x float> %v) nounwind readnone
885*e1eccf28SAndroid Build Coastguard Worker  %5 = fmul <4 x float> %4, %3
886*e1eccf28SAndroid Build Coastguard Worker  ret <4 x float> %5
887*e1eccf28SAndroid Build Coastguard Worker}
888*e1eccf28SAndroid Build Coastguard Worker
889*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z10half_recipDv3_f(<3 x float> %v) nounwind readnone {
890*e1eccf28SAndroid Build Coastguard Worker  %1 = shufflevector <3 x float> %v, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
891*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <4 x float> @_Z10half_recipDv4_f(<4 x float> %1) nounwind readnone
892*e1eccf28SAndroid Build Coastguard Worker  %3 = shufflevector <4 x float> %2, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2>
893*e1eccf28SAndroid Build Coastguard Worker  ret <3 x float> %3
894*e1eccf28SAndroid Build Coastguard Worker}
895*e1eccf28SAndroid Build Coastguard Worker
896*e1eccf28SAndroid Build Coastguard Worker
897*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
898*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;              half_RSQRT              ;;;;;;;;;;
899*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
900*e1eccf28SAndroid Build Coastguard Worker
901*e1eccf28SAndroid Build Coastguard Workerdefine float @_Z10half_rsqrtf(float %v) {
902*e1eccf28SAndroid Build Coastguard Worker  %1 = insertelement <2 x float> undef, float %v, i32 0
903*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <2 x float> @llvm.aarch64.neon.frsqrte.v2f32(<2 x float> %1) nounwind readnone
904*e1eccf28SAndroid Build Coastguard Worker  %3 = fmul <2 x float> %2, %2
905*e1eccf28SAndroid Build Coastguard Worker  %4 = tail call <2 x float> @llvm.aarch64.neon.frsqrts.v2f32(<2 x float> %1, <2 x float> %3) nounwind readnone
906*e1eccf28SAndroid Build Coastguard Worker  %5 = fmul <2 x float> %2, %4
907*e1eccf28SAndroid Build Coastguard Worker  %6 = extractelement <2 x float> %5, i32 0
908*e1eccf28SAndroid Build Coastguard Worker  ret float %6
909*e1eccf28SAndroid Build Coastguard Worker}
910*e1eccf28SAndroid Build Coastguard Worker
911*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z10half_rsqrtDv2_f(<2 x float> %v) nounwind readnone {
912*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <2 x float> @llvm.aarch64.neon.frsqrte.v2f32(<2 x float> %v) nounwind readnone
913*e1eccf28SAndroid Build Coastguard Worker  %2 = fmul <2 x float> %1, %1
914*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <2 x float> @llvm.aarch64.neon.frsqrts.v2f32(<2 x float> %v, <2 x float> %2) nounwind readnone
915*e1eccf28SAndroid Build Coastguard Worker  %4 = fmul <2 x float> %1, %3
916*e1eccf28SAndroid Build Coastguard Worker  ret <2 x float> %4
917*e1eccf28SAndroid Build Coastguard Worker}
918*e1eccf28SAndroid Build Coastguard Worker
919*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z10half_rsqrtDv3_f(<3 x float> %v) nounwind readnone {
920*e1eccf28SAndroid Build Coastguard Worker  %1 = shufflevector <3 x float> %v, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
921*e1eccf28SAndroid Build Coastguard Worker  %2 = tail call <4 x float> @llvm.aarch64.neon.frsqrte.v4f32(<4 x float> %1) nounwind readnone
922*e1eccf28SAndroid Build Coastguard Worker  %3 = fmul <4 x float> %2, %2
923*e1eccf28SAndroid Build Coastguard Worker  %4 = tail call <4 x float> @llvm.aarch64.neon.frsqrts.v4f32(<4 x float> %1, <4 x float> %3) nounwind readnone
924*e1eccf28SAndroid Build Coastguard Worker  %5 = fmul <4 x float> %2, %4
925*e1eccf28SAndroid Build Coastguard Worker  %6 = shufflevector <4 x float> %5, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2>
926*e1eccf28SAndroid Build Coastguard Worker  ret <3 x float> %6
927*e1eccf28SAndroid Build Coastguard Worker}
928*e1eccf28SAndroid Build Coastguard Worker
929*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z10half_rsqrtDv4_f(<4 x float> %v) nounwind readnone {
930*e1eccf28SAndroid Build Coastguard Worker  %1 = tail call <4 x float> @llvm.aarch64.neon.frsqrte.v4f32(<4 x float> %v) nounwind readnone
931*e1eccf28SAndroid Build Coastguard Worker  %2 = fmul <4 x float> %1, %1
932*e1eccf28SAndroid Build Coastguard Worker  %3 = tail call <4 x float> @llvm.aarch64.neon.frsqrts.v4f32(<4 x float> %v, <4 x float> %2) nounwind readnone
933*e1eccf28SAndroid Build Coastguard Worker  %4 = fmul <4 x float> %1, %3
934*e1eccf28SAndroid Build Coastguard Worker  ret <4 x float> %4
935*e1eccf28SAndroid Build Coastguard Worker}
936*e1eccf28SAndroid Build Coastguard Worker
937*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
938*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;              matrix                    ;;;;;;;;;;
939*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
940*e1eccf28SAndroid Build Coastguard Worker
941*e1eccf28SAndroid Build Coastguard Worker%struct.rs_matrix4x4 = type { [16 x float] }
942*e1eccf28SAndroid Build Coastguard Worker%struct.rs_matrix3x3 = type { [9 x float] }
943*e1eccf28SAndroid Build Coastguard Worker%struct.rs_matrix2x2 = type { [4 x float] }
944*e1eccf28SAndroid Build Coastguard Worker
945*e1eccf28SAndroid Build Coastguard Workerdefine internal <4 x float> @smear_f(float %in) nounwind readnone alwaysinline {
946*e1eccf28SAndroid Build Coastguard Worker  %1 = insertelement <4 x float> undef, float %in, i32 0
947*e1eccf28SAndroid Build Coastguard Worker  %2 = insertelement <4 x float> %1, float %in, i32 1
948*e1eccf28SAndroid Build Coastguard Worker  %3 = insertelement <4 x float> %2, float %in, i32 2
949*e1eccf28SAndroid Build Coastguard Worker  %4 = insertelement <4 x float> %3, float %in, i32 3
950*e1eccf28SAndroid Build Coastguard Worker  ret <4 x float> %4
951*e1eccf28SAndroid Build Coastguard Worker}
952*e1eccf28SAndroid Build Coastguard Worker
953*e1eccf28SAndroid Build Coastguard Worker
954*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z16rsMatrixMultiplyPK12rs_matrix3x3Dv3_f(%struct.rs_matrix3x3* nocapture %m, <3 x float> %in) nounwind readonly {
955*e1eccf28SAndroid Build Coastguard Worker  %x0 = extractelement <3 x float> %in, i32 0
956*e1eccf28SAndroid Build Coastguard Worker  %x = tail call <4 x float> @smear_f(float %x0) nounwind readnone
957*e1eccf28SAndroid Build Coastguard Worker  %y0 = extractelement <3 x float> %in, i32 1
958*e1eccf28SAndroid Build Coastguard Worker  %y = tail call <4 x float> @smear_f(float %y0) nounwind readnone
959*e1eccf28SAndroid Build Coastguard Worker  %z0 = extractelement <3 x float> %in, i32 2
960*e1eccf28SAndroid Build Coastguard Worker  %z = tail call <4 x float> @smear_f(float %z0) nounwind readnone
961*e1eccf28SAndroid Build Coastguard Worker
962*e1eccf28SAndroid Build Coastguard Worker  %px = getelementptr inbounds %struct.rs_matrix3x3, %struct.rs_matrix3x3* %m, i32 0, i32 0, i32 0
963*e1eccf28SAndroid Build Coastguard Worker  %px2 = bitcast float* %px to <4 x float>*
964*e1eccf28SAndroid Build Coastguard Worker  %xm = load <4 x float>, <4 x float>* %px2, align 4
965*e1eccf28SAndroid Build Coastguard Worker
966*e1eccf28SAndroid Build Coastguard Worker  %py = getelementptr inbounds %struct.rs_matrix3x3, %struct.rs_matrix3x3* %m, i32 0, i32 0, i32 3
967*e1eccf28SAndroid Build Coastguard Worker  %py2 = bitcast float* %py to <4 x float>*
968*e1eccf28SAndroid Build Coastguard Worker  ; %ym = call <4 x float> @llvm.aarch64.neon.ld4.v4f32(i8* %py2, i32 4) nounwind
969*e1eccf28SAndroid Build Coastguard Worker  %ym = load <4 x float>, <4 x float>* %py2, align 4
970*e1eccf28SAndroid Build Coastguard Worker
971*e1eccf28SAndroid Build Coastguard Worker  %pz = getelementptr inbounds %struct.rs_matrix3x3, %struct.rs_matrix3x3* %m, i32 0, i32 0, i32 5
972*e1eccf28SAndroid Build Coastguard Worker  %pz2 = bitcast float* %pz to <4 x float>*
973*e1eccf28SAndroid Build Coastguard Worker;  %zm2 = call <4 x float> @llvm.aarch64.neon.ld4.v4f32(i8* %pz2, i32 4) nounwind
974*e1eccf28SAndroid Build Coastguard Worker  %zm2 = load <4 x float>, <4 x float>* %pz2, align 4
975*e1eccf28SAndroid Build Coastguard Worker  %zm = shufflevector <4 x float> %zm2, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 4>
976*e1eccf28SAndroid Build Coastguard Worker
977*e1eccf28SAndroid Build Coastguard Worker  %a1 = fmul <4 x float> %x, %xm
978*e1eccf28SAndroid Build Coastguard Worker  %a2 = fmul <4 x float> %y, %ym
979*e1eccf28SAndroid Build Coastguard Worker  %a3 = fadd <4 x float> %a1, %a2
980*e1eccf28SAndroid Build Coastguard Worker  %a4 = fmul <4 x float> %z, %zm
981*e1eccf28SAndroid Build Coastguard Worker  %a5 = fadd <4 x float> %a4, %a3
982*e1eccf28SAndroid Build Coastguard Worker  %a6 = shufflevector <4 x float> %a5, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2>
983*e1eccf28SAndroid Build Coastguard Worker  ret <3 x float> %a6
984*e1eccf28SAndroid Build Coastguard Worker}
985*e1eccf28SAndroid Build Coastguard Worker
986*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z16rsMatrixMultiplyPK12rs_matrix3x3Dv2_f(%struct.rs_matrix3x3* nocapture %m, <2 x float> %in) nounwind readonly {
987*e1eccf28SAndroid Build Coastguard Worker  %x0 = extractelement <2 x float> %in, i32 0
988*e1eccf28SAndroid Build Coastguard Worker  %x = tail call <4 x float> @smear_f(float %x0) nounwind readnone
989*e1eccf28SAndroid Build Coastguard Worker  %y0 = extractelement <2 x float> %in, i32 1
990*e1eccf28SAndroid Build Coastguard Worker  %y = tail call <4 x float> @smear_f(float %y0) nounwind readnone
991*e1eccf28SAndroid Build Coastguard Worker
992*e1eccf28SAndroid Build Coastguard Worker  %px = getelementptr inbounds %struct.rs_matrix3x3, %struct.rs_matrix3x3* %m, i32 0, i32 0, i32 0
993*e1eccf28SAndroid Build Coastguard Worker  %px2 = bitcast float* %px to <4 x float>*
994*e1eccf28SAndroid Build Coastguard Worker  %xm = load <4 x float>, <4 x float>* %px2, align 4
995*e1eccf28SAndroid Build Coastguard Worker  %py = getelementptr inbounds %struct.rs_matrix3x3, %struct.rs_matrix3x3* %m, i32 0, i32 0, i32 3
996*e1eccf28SAndroid Build Coastguard Worker  %py2 = bitcast float* %py to <4 x float>*
997*e1eccf28SAndroid Build Coastguard Worker  %ym = load <4 x float>, <4 x float>* %py2, align 4
998*e1eccf28SAndroid Build Coastguard Worker
999*e1eccf28SAndroid Build Coastguard Worker  %a1 = fmul <4 x float> %x, %xm
1000*e1eccf28SAndroid Build Coastguard Worker  %a2 = fmul <4 x float> %y, %ym
1001*e1eccf28SAndroid Build Coastguard Worker  %a3 = fadd <4 x float> %a1, %a2
1002*e1eccf28SAndroid Build Coastguard Worker  %a4 = shufflevector <4 x float> %a3, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2>
1003*e1eccf28SAndroid Build Coastguard Worker  ret <3 x float> %a4
1004*e1eccf28SAndroid Build Coastguard Worker}
1005*e1eccf28SAndroid Build Coastguard Worker
1006*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z16rsMatrixMultiplyPK12rs_matrix4x4Dv4_f(%struct.rs_matrix4x4* nocapture %m, <4 x float> %in) nounwind readonly {
1007*e1eccf28SAndroid Build Coastguard Worker  %x0 = extractelement <4 x float> %in, i32 0
1008*e1eccf28SAndroid Build Coastguard Worker  %x = tail call <4 x float> @smear_f(float %x0) nounwind readnone
1009*e1eccf28SAndroid Build Coastguard Worker  %y0 = extractelement <4 x float> %in, i32 1
1010*e1eccf28SAndroid Build Coastguard Worker  %y = tail call <4 x float> @smear_f(float %y0) nounwind readnone
1011*e1eccf28SAndroid Build Coastguard Worker  %z0 = extractelement <4 x float> %in, i32 2
1012*e1eccf28SAndroid Build Coastguard Worker  %z = tail call <4 x float> @smear_f(float %z0) nounwind readnone
1013*e1eccf28SAndroid Build Coastguard Worker  %w0 = extractelement <4 x float> %in, i32 3
1014*e1eccf28SAndroid Build Coastguard Worker  %w = tail call <4 x float> @smear_f(float %w0) nounwind readnone
1015*e1eccf28SAndroid Build Coastguard Worker
1016*e1eccf28SAndroid Build Coastguard Worker  %px = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 0
1017*e1eccf28SAndroid Build Coastguard Worker  %px2 = bitcast float* %px to <4 x float>*
1018*e1eccf28SAndroid Build Coastguard Worker  %xm = load <4 x float>, <4 x float>* %px2, align 4
1019*e1eccf28SAndroid Build Coastguard Worker  %py = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 4
1020*e1eccf28SAndroid Build Coastguard Worker  %py2 = bitcast float* %py to <4 x float>*
1021*e1eccf28SAndroid Build Coastguard Worker  %ym = load <4 x float>, <4 x float>* %py2, align 4
1022*e1eccf28SAndroid Build Coastguard Worker  %pz = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 8
1023*e1eccf28SAndroid Build Coastguard Worker  %pz2 = bitcast float* %pz to <4 x float>*
1024*e1eccf28SAndroid Build Coastguard Worker  %zm = load <4 x float>, <4 x float>* %pz2, align 4
1025*e1eccf28SAndroid Build Coastguard Worker  %pw = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 12
1026*e1eccf28SAndroid Build Coastguard Worker  %pw2 = bitcast float* %pw to <4 x float>*
1027*e1eccf28SAndroid Build Coastguard Worker  %wm = load <4 x float>, <4 x float>* %pw2, align 4
1028*e1eccf28SAndroid Build Coastguard Worker
1029*e1eccf28SAndroid Build Coastguard Worker  %a1 = fmul <4 x float> %x, %xm
1030*e1eccf28SAndroid Build Coastguard Worker  %a2 = fmul <4 x float> %y, %ym
1031*e1eccf28SAndroid Build Coastguard Worker  %a3 = fadd <4 x float> %a1, %a2
1032*e1eccf28SAndroid Build Coastguard Worker  %a4 = fmul <4 x float> %z, %zm
1033*e1eccf28SAndroid Build Coastguard Worker  %a5 = fadd <4 x float> %a3, %a4
1034*e1eccf28SAndroid Build Coastguard Worker  %a6 = fmul <4 x float> %w, %wm
1035*e1eccf28SAndroid Build Coastguard Worker  %a7 = fadd <4 x float> %a5, %a6
1036*e1eccf28SAndroid Build Coastguard Worker  ret <4 x float> %a7
1037*e1eccf28SAndroid Build Coastguard Worker}
1038*e1eccf28SAndroid Build Coastguard Worker
1039*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z16rsMatrixMultiplyPK12rs_matrix4x4Dv3_f(%struct.rs_matrix4x4* nocapture %m, <3 x float> %in) nounwind readonly {
1040*e1eccf28SAndroid Build Coastguard Worker  %x0 = extractelement <3 x float> %in, i32 0
1041*e1eccf28SAndroid Build Coastguard Worker  %x = tail call <4 x float> @smear_f(float %x0) nounwind readnone
1042*e1eccf28SAndroid Build Coastguard Worker  %y0 = extractelement <3 x float> %in, i32 1
1043*e1eccf28SAndroid Build Coastguard Worker  %y = tail call <4 x float> @smear_f(float %y0) nounwind readnone
1044*e1eccf28SAndroid Build Coastguard Worker  %z0 = extractelement <3 x float> %in, i32 2
1045*e1eccf28SAndroid Build Coastguard Worker  %z = tail call <4 x float> @smear_f(float %z0) nounwind readnone
1046*e1eccf28SAndroid Build Coastguard Worker
1047*e1eccf28SAndroid Build Coastguard Worker  %px = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 0
1048*e1eccf28SAndroid Build Coastguard Worker  %px2 = bitcast float* %px to <4 x float>*
1049*e1eccf28SAndroid Build Coastguard Worker  %xm = load <4 x float>, <4 x float>* %px2, align 4
1050*e1eccf28SAndroid Build Coastguard Worker  %py = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 4
1051*e1eccf28SAndroid Build Coastguard Worker  %py2 = bitcast float* %py to <4 x float>*
1052*e1eccf28SAndroid Build Coastguard Worker  %ym = load <4 x float>, <4 x float>* %py2, align 4
1053*e1eccf28SAndroid Build Coastguard Worker  %pz = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 8
1054*e1eccf28SAndroid Build Coastguard Worker  %pz2 = bitcast float* %pz to <4 x float>*
1055*e1eccf28SAndroid Build Coastguard Worker  %zm = load <4 x float>, <4 x float>* %pz2, align 4
1056*e1eccf28SAndroid Build Coastguard Worker  %pw = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 12
1057*e1eccf28SAndroid Build Coastguard Worker  %pw2 = bitcast float* %pw to <4 x float>*
1058*e1eccf28SAndroid Build Coastguard Worker  %wm = load <4 x float>, <4 x float>* %pw2, align 4
1059*e1eccf28SAndroid Build Coastguard Worker
1060*e1eccf28SAndroid Build Coastguard Worker  %a1 = fmul <4 x float> %x, %xm
1061*e1eccf28SAndroid Build Coastguard Worker  %a2 = fadd <4 x float> %wm, %a1
1062*e1eccf28SAndroid Build Coastguard Worker  %a3 = fmul <4 x float> %y, %ym
1063*e1eccf28SAndroid Build Coastguard Worker  %a4 = fadd <4 x float> %a2, %a3
1064*e1eccf28SAndroid Build Coastguard Worker  %a5 = fmul <4 x float> %z, %zm
1065*e1eccf28SAndroid Build Coastguard Worker  %a6 = fadd <4 x float> %a4, %a5
1066*e1eccf28SAndroid Build Coastguard Worker  ret <4 x float> %a6
1067*e1eccf28SAndroid Build Coastguard Worker}
1068*e1eccf28SAndroid Build Coastguard Worker
1069*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z16rsMatrixMultiplyPK12rs_matrix4x4Dv2_f(%struct.rs_matrix4x4* nocapture %m, <2 x float> %in) nounwind readonly {
1070*e1eccf28SAndroid Build Coastguard Worker  %x0 = extractelement <2 x float> %in, i32 0
1071*e1eccf28SAndroid Build Coastguard Worker  %x = tail call <4 x float> @smear_f(float %x0) nounwind readnone
1072*e1eccf28SAndroid Build Coastguard Worker  %y0 = extractelement <2 x float> %in, i32 1
1073*e1eccf28SAndroid Build Coastguard Worker  %y = tail call <4 x float> @smear_f(float %y0) nounwind readnone
1074*e1eccf28SAndroid Build Coastguard Worker
1075*e1eccf28SAndroid Build Coastguard Worker  %px = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 0
1076*e1eccf28SAndroid Build Coastguard Worker  %px2 = bitcast float* %px to <4 x float>*
1077*e1eccf28SAndroid Build Coastguard Worker  %xm = load <4 x float>, <4 x float>* %px2, align 4
1078*e1eccf28SAndroid Build Coastguard Worker  %py = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 4
1079*e1eccf28SAndroid Build Coastguard Worker  %py2 = bitcast float* %py to <4 x float>*
1080*e1eccf28SAndroid Build Coastguard Worker  %ym = load <4 x float>, <4 x float>* %py2, align 4
1081*e1eccf28SAndroid Build Coastguard Worker  %pw = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 12
1082*e1eccf28SAndroid Build Coastguard Worker  %pw2 = bitcast float* %pw to <4 x float>*
1083*e1eccf28SAndroid Build Coastguard Worker  %wm = load <4 x float>, <4 x float>* %pw2, align 4
1084*e1eccf28SAndroid Build Coastguard Worker
1085*e1eccf28SAndroid Build Coastguard Worker  %a1 = fmul <4 x float> %x, %xm
1086*e1eccf28SAndroid Build Coastguard Worker  %a2 = fadd <4 x float> %wm, %a1
1087*e1eccf28SAndroid Build Coastguard Worker  %a3 = fmul <4 x float> %y, %ym
1088*e1eccf28SAndroid Build Coastguard Worker  %a4 = fadd <4 x float> %a2, %a3
1089*e1eccf28SAndroid Build Coastguard Worker  ret <4 x float> %a4
1090*e1eccf28SAndroid Build Coastguard Worker}
1091*e1eccf28SAndroid Build Coastguard Worker
1092*e1eccf28SAndroid Build Coastguard Worker
1093*e1eccf28SAndroid Build Coastguard Worker
1094*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1095*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;              pixel ops                 ;;;;;;;;;;
1096*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1097*e1eccf28SAndroid Build Coastguard Worker
1098*e1eccf28SAndroid Build Coastguard Worker
1099*e1eccf28SAndroid Build Coastguard Worker@fc_255.0 = internal constant <4 x float> <float 255.0, float 255.0, float 255.0, float 255.0>, align 16
1100*e1eccf28SAndroid Build Coastguard Worker@fc_0.5 = internal constant <4 x float> <float 0.5, float 0.5, float 0.5, float 0.5>, align 16
1101*e1eccf28SAndroid Build Coastguard Worker@fc_0 = internal constant <4 x float> <float 0.0, float 0.0, float 0.0, float 0.0>, align 16
1102*e1eccf28SAndroid Build Coastguard Worker
1103*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i8> @_Z14convert_uchar4Dv4_f(<4 x float> %in) nounwind readnone
1104*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x float> @_Z14convert_float4Dv4_h(<4 x i8> %in) nounwind readnone
1105*e1eccf28SAndroid Build Coastguard Worker
1106*e1eccf28SAndroid Build Coastguard Worker; uchar4 __attribute__((overloadable)) rsPackColorTo8888(float4 color)
1107*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z17rsPackColorTo8888Dv4_f(<4 x float> %color) nounwind readnone {
1108*e1eccf28SAndroid Build Coastguard Worker    %f255 = load <4 x float>, <4 x float>* @fc_255.0, align 16
1109*e1eccf28SAndroid Build Coastguard Worker    %f05 = load <4 x float>, <4 x float>* @fc_0.5, align 16
1110*e1eccf28SAndroid Build Coastguard Worker    %f0 = load <4 x float>, <4 x float>* @fc_0, align 16
1111*e1eccf28SAndroid Build Coastguard Worker    %v1 = fmul <4 x float> %f255, %color
1112*e1eccf28SAndroid Build Coastguard Worker    %v2 = fadd <4 x float> %f05, %v1
1113*e1eccf28SAndroid Build Coastguard Worker    %v3 = tail call <4 x float> @_Z5clampDv4_fS_S_(<4 x float> %v2, <4 x float> %f0, <4 x float> %f255) nounwind readnone
1114*e1eccf28SAndroid Build Coastguard Worker    %v4 = tail call <4 x i8> @_Z14convert_uchar4Dv4_f(<4 x float> %v3) nounwind readnone
1115*e1eccf28SAndroid Build Coastguard Worker    ret <4 x i8> %v4
1116*e1eccf28SAndroid Build Coastguard Worker}
1117*e1eccf28SAndroid Build Coastguard Worker
1118*e1eccf28SAndroid Build Coastguard Worker; uchar4 __attribute__((overloadable)) rsPackColorTo8888(float3 color)
1119*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z17rsPackColorTo8888Dv3_f(<4 x i32> %color) nounwind readnone {
1120*e1eccf28SAndroid Build Coastguard Worker    %1 = bitcast <4 x i32> %color to <4 x float>
1121*e1eccf28SAndroid Build Coastguard Worker    %2 = insertelement <4 x float> %1, float 1.0, i32 3
1122*e1eccf28SAndroid Build Coastguard Worker    %3 = tail call <4 x i8> @_Z17rsPackColorTo8888Dv4_f(<4 x float> %2) nounwind readnone
1123*e1eccf28SAndroid Build Coastguard Worker    ret <4 x i8> %3
1124*e1eccf28SAndroid Build Coastguard Worker}
1125*e1eccf28SAndroid Build Coastguard Worker
1126*e1eccf28SAndroid Build Coastguard Worker; uchar4 __attribute__((overloadable)) rsPackColorTo8888(float r, float g, float b)
1127*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z17rsPackColorTo8888fff(float %r, float %g, float %b) nounwind readnone {
1128*e1eccf28SAndroid Build Coastguard Worker    %1 = insertelement <4 x float> undef, float %r, i32 0
1129*e1eccf28SAndroid Build Coastguard Worker    %2 = insertelement <4 x float> %1, float %g, i32 1
1130*e1eccf28SAndroid Build Coastguard Worker    %3 = insertelement <4 x float> %2, float %b, i32 2
1131*e1eccf28SAndroid Build Coastguard Worker    %4 = insertelement <4 x float> %3, float 1.0, i32 3
1132*e1eccf28SAndroid Build Coastguard Worker    %5 = tail call <4 x i8> @_Z17rsPackColorTo8888Dv4_f(<4 x float> %4) nounwind readnone
1133*e1eccf28SAndroid Build Coastguard Worker    ret <4 x i8> %5
1134*e1eccf28SAndroid Build Coastguard Worker}
1135*e1eccf28SAndroid Build Coastguard Worker
1136*e1eccf28SAndroid Build Coastguard Worker; uchar4 __attribute__((overloadable)) rsPackColorTo8888(float r, float g, float b, float a)
1137*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z17rsPackColorTo8888ffff(float %r, float %g, float %b, float %a) nounwind readnone {
1138*e1eccf28SAndroid Build Coastguard Worker    %1 = insertelement <4 x float> undef, float %r, i32 0
1139*e1eccf28SAndroid Build Coastguard Worker    %2 = insertelement <4 x float> %1, float %g, i32 1
1140*e1eccf28SAndroid Build Coastguard Worker    %3 = insertelement <4 x float> %2, float %b, i32 2
1141*e1eccf28SAndroid Build Coastguard Worker    %4 = insertelement <4 x float> %3, float %a, i32 3
1142*e1eccf28SAndroid Build Coastguard Worker    %5 = tail call <4 x i8> @_Z17rsPackColorTo8888Dv4_f(<4 x float> %4) nounwind readnone
1143*e1eccf28SAndroid Build Coastguard Worker    ret <4 x i8> %5
1144*e1eccf28SAndroid Build Coastguard Worker}
1145*e1eccf28SAndroid Build Coastguard Worker
1146