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