Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
14 | pmbaty | 1 | case ARM::BI__builtin_arm_cde_cx1d: { |
2 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
3 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
4 | Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_cx1d), {Val0, Val1}); |
||
5 | Value *Val3 = Builder.CreateExtractValue(Val2, static_cast<unsigned>(1)); |
||
6 | Value *Val4 = Builder.CreateIntCast(Val3, Int64Ty, false); |
||
7 | Value *Val5 = llvm::ConstantInt::get(Int64Ty, 32); |
||
8 | Value *Val6 = Builder.CreateShl(Val4, Val5); |
||
9 | Value *Val7 = Builder.CreateExtractValue(Val2, static_cast<unsigned>(0)); |
||
10 | Value *Val8 = Builder.CreateIntCast(Val7, Int64Ty, false); |
||
11 | return Builder.CreateOr(Val6, Val8); |
||
12 | } |
||
13 | case ARM::BI__builtin_arm_cde_vcx1d_u64: { |
||
14 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
15 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
16 | Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx1, {DoubleTy}), {Val0, Val1}); |
||
17 | llvm::Type *Val3 = Int64Ty; |
||
18 | return Builder.CreateBitCast(Val2, Val3); |
||
19 | } |
||
20 | case ARM::BI__builtin_arm_cde_vcx1_u32: { |
||
21 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
22 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
23 | Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx1, {FloatTy}), {Val0, Val1}); |
||
24 | llvm::Type *Val3 = Int32Ty; |
||
25 | return Builder.CreateBitCast(Val2, Val3); |
||
26 | } |
||
27 | case ARM::BI__builtin_arm_cde_cx2d: { |
||
28 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
29 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
30 | Value *Val2 = EmitScalarExpr(E->getArg(2)); |
||
31 | Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_cx2d), {Val0, Val1, Val2}); |
||
32 | Value *Val4 = Builder.CreateExtractValue(Val3, static_cast<unsigned>(1)); |
||
33 | Value *Val5 = Builder.CreateIntCast(Val4, Int64Ty, false); |
||
34 | Value *Val6 = llvm::ConstantInt::get(Int64Ty, 32); |
||
35 | Value *Val7 = Builder.CreateShl(Val5, Val6); |
||
36 | Value *Val8 = Builder.CreateExtractValue(Val3, static_cast<unsigned>(0)); |
||
37 | Value *Val9 = Builder.CreateIntCast(Val8, Int64Ty, false); |
||
38 | return Builder.CreateOr(Val7, Val9); |
||
39 | } |
||
40 | case ARM::BI__builtin_arm_cde_cx3d: { |
||
41 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
42 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
43 | Value *Val2 = EmitScalarExpr(E->getArg(2)); |
||
44 | Value *Val3 = EmitScalarExpr(E->getArg(3)); |
||
45 | Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_cx3d), {Val0, Val1, Val2, Val3}); |
||
46 | Value *Val5 = Builder.CreateExtractValue(Val4, static_cast<unsigned>(1)); |
||
47 | Value *Val6 = Builder.CreateIntCast(Val5, Int64Ty, false); |
||
48 | Value *Val7 = llvm::ConstantInt::get(Int64Ty, 32); |
||
49 | Value *Val8 = Builder.CreateShl(Val6, Val7); |
||
50 | Value *Val9 = Builder.CreateExtractValue(Val4, static_cast<unsigned>(0)); |
||
51 | Value *Val10 = Builder.CreateIntCast(Val9, Int64Ty, false); |
||
52 | return Builder.CreateOr(Val8, Val10); |
||
53 | } |
||
54 | case ARM::BI__builtin_arm_cde_vcx1q_m_f16: |
||
55 | case ARM::BI__builtin_arm_cde_vcx1q_m_f32: |
||
56 | case ARM::BI__builtin_arm_cde_vcx1q_m_s16: |
||
57 | case ARM::BI__builtin_arm_cde_vcx1q_m_s32: |
||
58 | case ARM::BI__builtin_arm_cde_vcx1q_m_s64: |
||
59 | case ARM::BI__builtin_arm_cde_vcx1q_m_s8: |
||
60 | case ARM::BI__builtin_arm_cde_vcx1q_m_u16: |
||
61 | case ARM::BI__builtin_arm_cde_vcx1q_m_u32: |
||
62 | case ARM::BI__builtin_arm_cde_vcx1q_m_u64: |
||
63 | case ARM::BI__builtin_arm_cde_vcx1q_m_u8: |
||
64 | case ARM::BI__builtin_arm_cde_vcx1qa_m_f16: |
||
65 | case ARM::BI__builtin_arm_cde_vcx1qa_m_f32: |
||
66 | case ARM::BI__builtin_arm_cde_vcx1qa_m_s16: |
||
67 | case ARM::BI__builtin_arm_cde_vcx1qa_m_s32: |
||
68 | case ARM::BI__builtin_arm_cde_vcx1qa_m_s64: |
||
69 | case ARM::BI__builtin_arm_cde_vcx1qa_m_s8: |
||
70 | case ARM::BI__builtin_arm_cde_vcx1qa_m_u16: |
||
71 | case ARM::BI__builtin_arm_cde_vcx1qa_m_u32: |
||
72 | case ARM::BI__builtin_arm_cde_vcx1qa_m_u64: |
||
73 | case ARM::BI__builtin_arm_cde_vcx1qa_m_u8: { |
||
74 | llvm::Type * Param0; |
||
75 | Intrinsic::ID Param1; |
||
76 | llvm::Type * Param2; |
||
77 | switch (BuiltinID) { |
||
78 | case ARM::BI__builtin_arm_cde_vcx1q_m_f16: |
||
79 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
80 | Param1 = Intrinsic::arm_cde_vcx1q_predicated; |
||
81 | Param2 = llvm::FixedVectorType::get(HalfTy, 8); |
||
82 | break; |
||
83 | case ARM::BI__builtin_arm_cde_vcx1q_m_f32: |
||
84 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
85 | Param1 = Intrinsic::arm_cde_vcx1q_predicated; |
||
86 | Param2 = llvm::FixedVectorType::get(FloatTy, 4); |
||
87 | break; |
||
88 | case ARM::BI__builtin_arm_cde_vcx1q_m_s16: |
||
89 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
90 | Param1 = Intrinsic::arm_cde_vcx1q_predicated; |
||
91 | Param2 = llvm::FixedVectorType::get(Int16Ty, 8); |
||
92 | break; |
||
93 | case ARM::BI__builtin_arm_cde_vcx1q_m_s32: |
||
94 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
95 | Param1 = Intrinsic::arm_cde_vcx1q_predicated; |
||
96 | Param2 = llvm::FixedVectorType::get(Int32Ty, 4); |
||
97 | break; |
||
98 | case ARM::BI__builtin_arm_cde_vcx1q_m_s64: |
||
99 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2); |
||
100 | Param1 = Intrinsic::arm_cde_vcx1q_predicated; |
||
101 | Param2 = llvm::FixedVectorType::get(Int64Ty, 2); |
||
102 | break; |
||
103 | case ARM::BI__builtin_arm_cde_vcx1q_m_s8: |
||
104 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16); |
||
105 | Param1 = Intrinsic::arm_cde_vcx1q_predicated; |
||
106 | Param2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
107 | break; |
||
108 | case ARM::BI__builtin_arm_cde_vcx1q_m_u16: |
||
109 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
110 | Param1 = Intrinsic::arm_cde_vcx1q_predicated; |
||
111 | Param2 = llvm::FixedVectorType::get(Int16Ty, 8); |
||
112 | break; |
||
113 | case ARM::BI__builtin_arm_cde_vcx1q_m_u32: |
||
114 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
115 | Param1 = Intrinsic::arm_cde_vcx1q_predicated; |
||
116 | Param2 = llvm::FixedVectorType::get(Int32Ty, 4); |
||
117 | break; |
||
118 | case ARM::BI__builtin_arm_cde_vcx1q_m_u64: |
||
119 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2); |
||
120 | Param1 = Intrinsic::arm_cde_vcx1q_predicated; |
||
121 | Param2 = llvm::FixedVectorType::get(Int64Ty, 2); |
||
122 | break; |
||
123 | case ARM::BI__builtin_arm_cde_vcx1q_m_u8: |
||
124 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16); |
||
125 | Param1 = Intrinsic::arm_cde_vcx1q_predicated; |
||
126 | Param2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
127 | break; |
||
128 | case ARM::BI__builtin_arm_cde_vcx1qa_m_f16: |
||
129 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
130 | Param1 = Intrinsic::arm_cde_vcx1qa_predicated; |
||
131 | Param2 = llvm::FixedVectorType::get(HalfTy, 8); |
||
132 | break; |
||
133 | case ARM::BI__builtin_arm_cde_vcx1qa_m_f32: |
||
134 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
135 | Param1 = Intrinsic::arm_cde_vcx1qa_predicated; |
||
136 | Param2 = llvm::FixedVectorType::get(FloatTy, 4); |
||
137 | break; |
||
138 | case ARM::BI__builtin_arm_cde_vcx1qa_m_s16: |
||
139 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
140 | Param1 = Intrinsic::arm_cde_vcx1qa_predicated; |
||
141 | Param2 = llvm::FixedVectorType::get(Int16Ty, 8); |
||
142 | break; |
||
143 | case ARM::BI__builtin_arm_cde_vcx1qa_m_s32: |
||
144 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
145 | Param1 = Intrinsic::arm_cde_vcx1qa_predicated; |
||
146 | Param2 = llvm::FixedVectorType::get(Int32Ty, 4); |
||
147 | break; |
||
148 | case ARM::BI__builtin_arm_cde_vcx1qa_m_s64: |
||
149 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2); |
||
150 | Param1 = Intrinsic::arm_cde_vcx1qa_predicated; |
||
151 | Param2 = llvm::FixedVectorType::get(Int64Ty, 2); |
||
152 | break; |
||
153 | case ARM::BI__builtin_arm_cde_vcx1qa_m_s8: |
||
154 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16); |
||
155 | Param1 = Intrinsic::arm_cde_vcx1qa_predicated; |
||
156 | Param2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
157 | break; |
||
158 | case ARM::BI__builtin_arm_cde_vcx1qa_m_u16: |
||
159 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
160 | Param1 = Intrinsic::arm_cde_vcx1qa_predicated; |
||
161 | Param2 = llvm::FixedVectorType::get(Int16Ty, 8); |
||
162 | break; |
||
163 | case ARM::BI__builtin_arm_cde_vcx1qa_m_u32: |
||
164 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
165 | Param1 = Intrinsic::arm_cde_vcx1qa_predicated; |
||
166 | Param2 = llvm::FixedVectorType::get(Int32Ty, 4); |
||
167 | break; |
||
168 | case ARM::BI__builtin_arm_cde_vcx1qa_m_u64: |
||
169 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2); |
||
170 | Param1 = Intrinsic::arm_cde_vcx1qa_predicated; |
||
171 | Param2 = llvm::FixedVectorType::get(Int64Ty, 2); |
||
172 | break; |
||
173 | case ARM::BI__builtin_arm_cde_vcx1qa_m_u8: |
||
174 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16); |
||
175 | Param1 = Intrinsic::arm_cde_vcx1qa_predicated; |
||
176 | Param2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
177 | break; |
||
178 | } |
||
179 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
180 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
181 | Value *Val2 = EmitScalarExpr(E->getArg(2)); |
||
182 | Value *Val3 = EmitScalarExpr(E->getArg(3)); |
||
183 | Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false); |
||
184 | Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val4}); |
||
185 | return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val2, Val5}); |
||
186 | } |
||
187 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_f16: |
||
188 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_f32: |
||
189 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_s16: |
||
190 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_s32: |
||
191 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_s64: |
||
192 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_s8: |
||
193 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_u16: |
||
194 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_u32: |
||
195 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_u64: |
||
196 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_u8: |
||
197 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_f16: |
||
198 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_f32: |
||
199 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_s16: |
||
200 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_s32: |
||
201 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_s64: |
||
202 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_s8: |
||
203 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_u16: |
||
204 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_u32: |
||
205 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_u64: |
||
206 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_u8: { |
||
207 | llvm::Type * Param0; |
||
208 | Intrinsic::ID Param1; |
||
209 | llvm::Type * Param2; |
||
210 | switch (BuiltinID) { |
||
211 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_f16: |
||
212 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
213 | Param1 = Intrinsic::arm_cde_vcx2q_predicated; |
||
214 | Param2 = llvm::FixedVectorType::get(HalfTy, 8); |
||
215 | break; |
||
216 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_f32: |
||
217 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
218 | Param1 = Intrinsic::arm_cde_vcx2q_predicated; |
||
219 | Param2 = llvm::FixedVectorType::get(FloatTy, 4); |
||
220 | break; |
||
221 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_s16: |
||
222 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
223 | Param1 = Intrinsic::arm_cde_vcx2q_predicated; |
||
224 | Param2 = llvm::FixedVectorType::get(Int16Ty, 8); |
||
225 | break; |
||
226 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_s32: |
||
227 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
228 | Param1 = Intrinsic::arm_cde_vcx2q_predicated; |
||
229 | Param2 = llvm::FixedVectorType::get(Int32Ty, 4); |
||
230 | break; |
||
231 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_s64: |
||
232 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2); |
||
233 | Param1 = Intrinsic::arm_cde_vcx2q_predicated; |
||
234 | Param2 = llvm::FixedVectorType::get(Int64Ty, 2); |
||
235 | break; |
||
236 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_s8: |
||
237 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16); |
||
238 | Param1 = Intrinsic::arm_cde_vcx2q_predicated; |
||
239 | Param2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
240 | break; |
||
241 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_u16: |
||
242 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
243 | Param1 = Intrinsic::arm_cde_vcx2q_predicated; |
||
244 | Param2 = llvm::FixedVectorType::get(Int16Ty, 8); |
||
245 | break; |
||
246 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_u32: |
||
247 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
248 | Param1 = Intrinsic::arm_cde_vcx2q_predicated; |
||
249 | Param2 = llvm::FixedVectorType::get(Int32Ty, 4); |
||
250 | break; |
||
251 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_u64: |
||
252 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2); |
||
253 | Param1 = Intrinsic::arm_cde_vcx2q_predicated; |
||
254 | Param2 = llvm::FixedVectorType::get(Int64Ty, 2); |
||
255 | break; |
||
256 | case ARM::BI__builtin_arm_cde_vcx2q_m_impl_u8: |
||
257 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16); |
||
258 | Param1 = Intrinsic::arm_cde_vcx2q_predicated; |
||
259 | Param2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
260 | break; |
||
261 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_f16: |
||
262 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
263 | Param1 = Intrinsic::arm_cde_vcx2qa_predicated; |
||
264 | Param2 = llvm::FixedVectorType::get(HalfTy, 8); |
||
265 | break; |
||
266 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_f32: |
||
267 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
268 | Param1 = Intrinsic::arm_cde_vcx2qa_predicated; |
||
269 | Param2 = llvm::FixedVectorType::get(FloatTy, 4); |
||
270 | break; |
||
271 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_s16: |
||
272 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
273 | Param1 = Intrinsic::arm_cde_vcx2qa_predicated; |
||
274 | Param2 = llvm::FixedVectorType::get(Int16Ty, 8); |
||
275 | break; |
||
276 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_s32: |
||
277 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
278 | Param1 = Intrinsic::arm_cde_vcx2qa_predicated; |
||
279 | Param2 = llvm::FixedVectorType::get(Int32Ty, 4); |
||
280 | break; |
||
281 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_s64: |
||
282 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2); |
||
283 | Param1 = Intrinsic::arm_cde_vcx2qa_predicated; |
||
284 | Param2 = llvm::FixedVectorType::get(Int64Ty, 2); |
||
285 | break; |
||
286 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_s8: |
||
287 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16); |
||
288 | Param1 = Intrinsic::arm_cde_vcx2qa_predicated; |
||
289 | Param2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
290 | break; |
||
291 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_u16: |
||
292 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
293 | Param1 = Intrinsic::arm_cde_vcx2qa_predicated; |
||
294 | Param2 = llvm::FixedVectorType::get(Int16Ty, 8); |
||
295 | break; |
||
296 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_u32: |
||
297 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
298 | Param1 = Intrinsic::arm_cde_vcx2qa_predicated; |
||
299 | Param2 = llvm::FixedVectorType::get(Int32Ty, 4); |
||
300 | break; |
||
301 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_u64: |
||
302 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2); |
||
303 | Param1 = Intrinsic::arm_cde_vcx2qa_predicated; |
||
304 | Param2 = llvm::FixedVectorType::get(Int64Ty, 2); |
||
305 | break; |
||
306 | case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_u8: |
||
307 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16); |
||
308 | Param1 = Intrinsic::arm_cde_vcx2qa_predicated; |
||
309 | Param2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
310 | break; |
||
311 | } |
||
312 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
313 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
314 | Value *Val2 = EmitScalarExpr(E->getArg(2)); |
||
315 | Value *Val3 = EmitScalarExpr(E->getArg(3)); |
||
316 | Value *Val4 = EmitScalarExpr(E->getArg(4)); |
||
317 | Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false); |
||
318 | Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val5}); |
||
319 | return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val2, Val3, Val6}); |
||
320 | } |
||
321 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_f16: |
||
322 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_f32: |
||
323 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_s16: |
||
324 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_s32: |
||
325 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_s64: |
||
326 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_s8: |
||
327 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_u16: |
||
328 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_u32: |
||
329 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_u64: |
||
330 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_u8: |
||
331 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_f16: |
||
332 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_f32: |
||
333 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_s16: |
||
334 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_s32: |
||
335 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_s64: |
||
336 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_s8: |
||
337 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_u16: |
||
338 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_u32: |
||
339 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_u64: |
||
340 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_u8: { |
||
341 | llvm::Type * Param0; |
||
342 | Intrinsic::ID Param1; |
||
343 | llvm::Type * Param2; |
||
344 | switch (BuiltinID) { |
||
345 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_f16: |
||
346 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
347 | Param1 = Intrinsic::arm_cde_vcx3q_predicated; |
||
348 | Param2 = llvm::FixedVectorType::get(HalfTy, 8); |
||
349 | break; |
||
350 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_f32: |
||
351 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
352 | Param1 = Intrinsic::arm_cde_vcx3q_predicated; |
||
353 | Param2 = llvm::FixedVectorType::get(FloatTy, 4); |
||
354 | break; |
||
355 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_s16: |
||
356 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
357 | Param1 = Intrinsic::arm_cde_vcx3q_predicated; |
||
358 | Param2 = llvm::FixedVectorType::get(Int16Ty, 8); |
||
359 | break; |
||
360 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_s32: |
||
361 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
362 | Param1 = Intrinsic::arm_cde_vcx3q_predicated; |
||
363 | Param2 = llvm::FixedVectorType::get(Int32Ty, 4); |
||
364 | break; |
||
365 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_s64: |
||
366 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2); |
||
367 | Param1 = Intrinsic::arm_cde_vcx3q_predicated; |
||
368 | Param2 = llvm::FixedVectorType::get(Int64Ty, 2); |
||
369 | break; |
||
370 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_s8: |
||
371 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16); |
||
372 | Param1 = Intrinsic::arm_cde_vcx3q_predicated; |
||
373 | Param2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
374 | break; |
||
375 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_u16: |
||
376 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
377 | Param1 = Intrinsic::arm_cde_vcx3q_predicated; |
||
378 | Param2 = llvm::FixedVectorType::get(Int16Ty, 8); |
||
379 | break; |
||
380 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_u32: |
||
381 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
382 | Param1 = Intrinsic::arm_cde_vcx3q_predicated; |
||
383 | Param2 = llvm::FixedVectorType::get(Int32Ty, 4); |
||
384 | break; |
||
385 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_u64: |
||
386 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2); |
||
387 | Param1 = Intrinsic::arm_cde_vcx3q_predicated; |
||
388 | Param2 = llvm::FixedVectorType::get(Int64Ty, 2); |
||
389 | break; |
||
390 | case ARM::BI__builtin_arm_cde_vcx3q_m_impl_u8: |
||
391 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16); |
||
392 | Param1 = Intrinsic::arm_cde_vcx3q_predicated; |
||
393 | Param2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
394 | break; |
||
395 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_f16: |
||
396 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
397 | Param1 = Intrinsic::arm_cde_vcx3qa_predicated; |
||
398 | Param2 = llvm::FixedVectorType::get(HalfTy, 8); |
||
399 | break; |
||
400 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_f32: |
||
401 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
402 | Param1 = Intrinsic::arm_cde_vcx3qa_predicated; |
||
403 | Param2 = llvm::FixedVectorType::get(FloatTy, 4); |
||
404 | break; |
||
405 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_s16: |
||
406 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
407 | Param1 = Intrinsic::arm_cde_vcx3qa_predicated; |
||
408 | Param2 = llvm::FixedVectorType::get(Int16Ty, 8); |
||
409 | break; |
||
410 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_s32: |
||
411 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
412 | Param1 = Intrinsic::arm_cde_vcx3qa_predicated; |
||
413 | Param2 = llvm::FixedVectorType::get(Int32Ty, 4); |
||
414 | break; |
||
415 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_s64: |
||
416 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2); |
||
417 | Param1 = Intrinsic::arm_cde_vcx3qa_predicated; |
||
418 | Param2 = llvm::FixedVectorType::get(Int64Ty, 2); |
||
419 | break; |
||
420 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_s8: |
||
421 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16); |
||
422 | Param1 = Intrinsic::arm_cde_vcx3qa_predicated; |
||
423 | Param2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
424 | break; |
||
425 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_u16: |
||
426 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8); |
||
427 | Param1 = Intrinsic::arm_cde_vcx3qa_predicated; |
||
428 | Param2 = llvm::FixedVectorType::get(Int16Ty, 8); |
||
429 | break; |
||
430 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_u32: |
||
431 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4); |
||
432 | Param1 = Intrinsic::arm_cde_vcx3qa_predicated; |
||
433 | Param2 = llvm::FixedVectorType::get(Int32Ty, 4); |
||
434 | break; |
||
435 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_u64: |
||
436 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2); |
||
437 | Param1 = Intrinsic::arm_cde_vcx3qa_predicated; |
||
438 | Param2 = llvm::FixedVectorType::get(Int64Ty, 2); |
||
439 | break; |
||
440 | case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_u8: |
||
441 | Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16); |
||
442 | Param1 = Intrinsic::arm_cde_vcx3qa_predicated; |
||
443 | Param2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
444 | break; |
||
445 | } |
||
446 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
447 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
448 | Value *Val2 = EmitScalarExpr(E->getArg(2)); |
||
449 | Value *Val3 = EmitScalarExpr(E->getArg(3)); |
||
450 | Value *Val4 = EmitScalarExpr(E->getArg(4)); |
||
451 | Value *Val5 = EmitScalarExpr(E->getArg(5)); |
||
452 | Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false); |
||
453 | Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val6}); |
||
454 | return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val2, Val3, Val4, Val7}); |
||
455 | } |
||
456 | case ARM::BI__builtin_arm_cde_cx3a: { |
||
457 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
458 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
459 | Value *Val2 = EmitScalarExpr(E->getArg(2)); |
||
460 | Value *Val3 = EmitScalarExpr(E->getArg(3)); |
||
461 | Value *Val4 = EmitScalarExpr(E->getArg(4)); |
||
462 | return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_cx3a), {Val0, Val1, Val2, Val3, Val4}); |
||
463 | } |
||
464 | case ARM::BI__builtin_arm_cde_cx2a: |
||
465 | case ARM::BI__builtin_arm_cde_cx3: { |
||
466 | Intrinsic::ID Param0; |
||
467 | switch (BuiltinID) { |
||
468 | case ARM::BI__builtin_arm_cde_cx2a: |
||
469 | Param0 = Intrinsic::arm_cde_cx2a; |
||
470 | break; |
||
471 | case ARM::BI__builtin_arm_cde_cx3: |
||
472 | Param0 = Intrinsic::arm_cde_cx3; |
||
473 | break; |
||
474 | } |
||
475 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
476 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
477 | Value *Val2 = EmitScalarExpr(E->getArg(2)); |
||
478 | Value *Val3 = EmitScalarExpr(E->getArg(3)); |
||
479 | return Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val1, Val2, Val3}); |
||
480 | } |
||
481 | case ARM::BI__builtin_arm_cde_cx1a: |
||
482 | case ARM::BI__builtin_arm_cde_cx2: { |
||
483 | Intrinsic::ID Param0; |
||
484 | switch (BuiltinID) { |
||
485 | case ARM::BI__builtin_arm_cde_cx1a: |
||
486 | Param0 = Intrinsic::arm_cde_cx1a; |
||
487 | break; |
||
488 | case ARM::BI__builtin_arm_cde_cx2: |
||
489 | Param0 = Intrinsic::arm_cde_cx2; |
||
490 | break; |
||
491 | } |
||
492 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
493 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
494 | Value *Val2 = EmitScalarExpr(E->getArg(2)); |
||
495 | return Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val1, Val2}); |
||
496 | } |
||
497 | case ARM::BI__builtin_arm_cde_vcx1da_u64: |
||
498 | case ARM::BI__builtin_arm_cde_vcx2d_u64: { |
||
499 | Intrinsic::ID Param0; |
||
500 | switch (BuiltinID) { |
||
501 | case ARM::BI__builtin_arm_cde_vcx1da_u64: |
||
502 | Param0 = Intrinsic::arm_cde_vcx1a; |
||
503 | break; |
||
504 | case ARM::BI__builtin_arm_cde_vcx2d_u64: |
||
505 | Param0 = Intrinsic::arm_cde_vcx2; |
||
506 | break; |
||
507 | } |
||
508 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
509 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
510 | llvm::Type *Val2 = DoubleTy; |
||
511 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
512 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
513 | Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0, {DoubleTy}), {Val0, Val3, Val4}); |
||
514 | llvm::Type *Val6 = Int64Ty; |
||
515 | return Builder.CreateBitCast(Val5, Val6); |
||
516 | } |
||
517 | case ARM::BI__builtin_arm_cde_vcx2da_u64: |
||
518 | case ARM::BI__builtin_arm_cde_vcx3d_u64: { |
||
519 | Intrinsic::ID Param0; |
||
520 | switch (BuiltinID) { |
||
521 | case ARM::BI__builtin_arm_cde_vcx2da_u64: |
||
522 | Param0 = Intrinsic::arm_cde_vcx2a; |
||
523 | break; |
||
524 | case ARM::BI__builtin_arm_cde_vcx3d_u64: |
||
525 | Param0 = Intrinsic::arm_cde_vcx3; |
||
526 | break; |
||
527 | } |
||
528 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
529 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
530 | llvm::Type *Val2 = DoubleTy; |
||
531 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
532 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
533 | llvm::Type *Val5 = DoubleTy; |
||
534 | Value *Val6 = Builder.CreateBitCast(Val4, Val5); |
||
535 | Value *Val7 = EmitScalarExpr(E->getArg(3)); |
||
536 | Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param0, {DoubleTy}), {Val0, Val3, Val6, Val7}); |
||
537 | llvm::Type *Val9 = Int64Ty; |
||
538 | return Builder.CreateBitCast(Val8, Val9); |
||
539 | } |
||
540 | case ARM::BI__builtin_arm_cde_vcx3da_u64: { |
||
541 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
542 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
543 | llvm::Type *Val2 = DoubleTy; |
||
544 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
545 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
546 | llvm::Type *Val5 = DoubleTy; |
||
547 | Value *Val6 = Builder.CreateBitCast(Val4, Val5); |
||
548 | Value *Val7 = EmitScalarExpr(E->getArg(3)); |
||
549 | llvm::Type *Val8 = DoubleTy; |
||
550 | Value *Val9 = Builder.CreateBitCast(Val7, Val8); |
||
551 | Value *Val10 = EmitScalarExpr(E->getArg(4)); |
||
552 | Value *Val11 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx3a, {DoubleTy}), {Val0, Val3, Val6, Val9, Val10}); |
||
553 | llvm::Type *Val12 = Int64Ty; |
||
554 | return Builder.CreateBitCast(Val11, Val12); |
||
555 | } |
||
556 | case ARM::BI__builtin_arm_cde_vcx1a_u32: |
||
557 | case ARM::BI__builtin_arm_cde_vcx2_u32: { |
||
558 | Intrinsic::ID Param0; |
||
559 | switch (BuiltinID) { |
||
560 | case ARM::BI__builtin_arm_cde_vcx1a_u32: |
||
561 | Param0 = Intrinsic::arm_cde_vcx1a; |
||
562 | break; |
||
563 | case ARM::BI__builtin_arm_cde_vcx2_u32: |
||
564 | Param0 = Intrinsic::arm_cde_vcx2; |
||
565 | break; |
||
566 | } |
||
567 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
568 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
569 | llvm::Type *Val2 = FloatTy; |
||
570 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
571 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
572 | Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0, {FloatTy}), {Val0, Val3, Val4}); |
||
573 | llvm::Type *Val6 = Int32Ty; |
||
574 | return Builder.CreateBitCast(Val5, Val6); |
||
575 | } |
||
576 | case ARM::BI__builtin_arm_cde_vcx2a_u32: |
||
577 | case ARM::BI__builtin_arm_cde_vcx3_u32: { |
||
578 | Intrinsic::ID Param0; |
||
579 | switch (BuiltinID) { |
||
580 | case ARM::BI__builtin_arm_cde_vcx2a_u32: |
||
581 | Param0 = Intrinsic::arm_cde_vcx2a; |
||
582 | break; |
||
583 | case ARM::BI__builtin_arm_cde_vcx3_u32: |
||
584 | Param0 = Intrinsic::arm_cde_vcx3; |
||
585 | break; |
||
586 | } |
||
587 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
588 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
589 | llvm::Type *Val2 = FloatTy; |
||
590 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
591 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
592 | llvm::Type *Val5 = FloatTy; |
||
593 | Value *Val6 = Builder.CreateBitCast(Val4, Val5); |
||
594 | Value *Val7 = EmitScalarExpr(E->getArg(3)); |
||
595 | Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param0, {FloatTy}), {Val0, Val3, Val6, Val7}); |
||
596 | llvm::Type *Val9 = Int32Ty; |
||
597 | return Builder.CreateBitCast(Val8, Val9); |
||
598 | } |
||
599 | case ARM::BI__builtin_arm_cde_vcx3a_u32: { |
||
600 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
601 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
602 | llvm::Type *Val2 = FloatTy; |
||
603 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
604 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
605 | llvm::Type *Val5 = FloatTy; |
||
606 | Value *Val6 = Builder.CreateBitCast(Val4, Val5); |
||
607 | Value *Val7 = EmitScalarExpr(E->getArg(3)); |
||
608 | llvm::Type *Val8 = FloatTy; |
||
609 | Value *Val9 = Builder.CreateBitCast(Val7, Val8); |
||
610 | Value *Val10 = EmitScalarExpr(E->getArg(4)); |
||
611 | Value *Val11 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx3a, {FloatTy}), {Val0, Val3, Val6, Val9, Val10}); |
||
612 | llvm::Type *Val12 = Int32Ty; |
||
613 | return Builder.CreateBitCast(Val11, Val12); |
||
614 | } |
||
615 | case ARM::BI__builtin_arm_cde_vcx1qa_f32: |
||
616 | case ARM::BI__builtin_arm_cde_vcx2q_f32: { |
||
617 | Intrinsic::ID Param0; |
||
618 | switch (BuiltinID) { |
||
619 | case ARM::BI__builtin_arm_cde_vcx1qa_f32: |
||
620 | Param0 = Intrinsic::arm_cde_vcx1qa; |
||
621 | break; |
||
622 | case ARM::BI__builtin_arm_cde_vcx2q_f32: |
||
623 | Param0 = Intrinsic::arm_cde_vcx2q; |
||
624 | break; |
||
625 | } |
||
626 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
627 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
628 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
629 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
630 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
631 | Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4}); |
||
632 | llvm::Type *Val6 = llvm::FixedVectorType::get(FloatTy, 4); |
||
633 | return Builder.CreateBitCast(Val5, Val6); |
||
634 | } |
||
635 | case ARM::BI__builtin_arm_cde_vcx1qa_f16: |
||
636 | case ARM::BI__builtin_arm_cde_vcx2q_f16: { |
||
637 | Intrinsic::ID Param0; |
||
638 | switch (BuiltinID) { |
||
639 | case ARM::BI__builtin_arm_cde_vcx1qa_f16: |
||
640 | Param0 = Intrinsic::arm_cde_vcx1qa; |
||
641 | break; |
||
642 | case ARM::BI__builtin_arm_cde_vcx2q_f16: |
||
643 | Param0 = Intrinsic::arm_cde_vcx2q; |
||
644 | break; |
||
645 | } |
||
646 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
647 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
648 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
649 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
650 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
651 | Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4}); |
||
652 | llvm::Type *Val6 = llvm::FixedVectorType::get(HalfTy, 8); |
||
653 | return Builder.CreateBitCast(Val5, Val6); |
||
654 | } |
||
655 | case ARM::BI__builtin_arm_cde_vcx1qa_s16: |
||
656 | case ARM::BI__builtin_arm_cde_vcx1qa_u16: |
||
657 | case ARM::BI__builtin_arm_cde_vcx2q_s16: |
||
658 | case ARM::BI__builtin_arm_cde_vcx2q_u16: { |
||
659 | Intrinsic::ID Param0; |
||
660 | switch (BuiltinID) { |
||
661 | case ARM::BI__builtin_arm_cde_vcx1qa_s16: |
||
662 | Param0 = Intrinsic::arm_cde_vcx1qa; |
||
663 | break; |
||
664 | case ARM::BI__builtin_arm_cde_vcx1qa_u16: |
||
665 | Param0 = Intrinsic::arm_cde_vcx1qa; |
||
666 | break; |
||
667 | case ARM::BI__builtin_arm_cde_vcx2q_s16: |
||
668 | Param0 = Intrinsic::arm_cde_vcx2q; |
||
669 | break; |
||
670 | case ARM::BI__builtin_arm_cde_vcx2q_u16: |
||
671 | Param0 = Intrinsic::arm_cde_vcx2q; |
||
672 | break; |
||
673 | } |
||
674 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
675 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
676 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
677 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
678 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
679 | Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4}); |
||
680 | llvm::Type *Val6 = llvm::FixedVectorType::get(Int16Ty, 8); |
||
681 | return Builder.CreateBitCast(Val5, Val6); |
||
682 | } |
||
683 | case ARM::BI__builtin_arm_cde_vcx1qa_s32: |
||
684 | case ARM::BI__builtin_arm_cde_vcx1qa_u32: |
||
685 | case ARM::BI__builtin_arm_cde_vcx2q_s32: |
||
686 | case ARM::BI__builtin_arm_cde_vcx2q_u32: { |
||
687 | Intrinsic::ID Param0; |
||
688 | switch (BuiltinID) { |
||
689 | case ARM::BI__builtin_arm_cde_vcx1qa_s32: |
||
690 | Param0 = Intrinsic::arm_cde_vcx1qa; |
||
691 | break; |
||
692 | case ARM::BI__builtin_arm_cde_vcx1qa_u32: |
||
693 | Param0 = Intrinsic::arm_cde_vcx1qa; |
||
694 | break; |
||
695 | case ARM::BI__builtin_arm_cde_vcx2q_s32: |
||
696 | Param0 = Intrinsic::arm_cde_vcx2q; |
||
697 | break; |
||
698 | case ARM::BI__builtin_arm_cde_vcx2q_u32: |
||
699 | Param0 = Intrinsic::arm_cde_vcx2q; |
||
700 | break; |
||
701 | } |
||
702 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
703 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
704 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
705 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
706 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
707 | Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4}); |
||
708 | llvm::Type *Val6 = llvm::FixedVectorType::get(Int32Ty, 4); |
||
709 | return Builder.CreateBitCast(Val5, Val6); |
||
710 | } |
||
711 | case ARM::BI__builtin_arm_cde_vcx1qa_s64: |
||
712 | case ARM::BI__builtin_arm_cde_vcx1qa_u64: |
||
713 | case ARM::BI__builtin_arm_cde_vcx2q_s64: |
||
714 | case ARM::BI__builtin_arm_cde_vcx2q_u64: { |
||
715 | Intrinsic::ID Param0; |
||
716 | switch (BuiltinID) { |
||
717 | case ARM::BI__builtin_arm_cde_vcx1qa_s64: |
||
718 | Param0 = Intrinsic::arm_cde_vcx1qa; |
||
719 | break; |
||
720 | case ARM::BI__builtin_arm_cde_vcx1qa_u64: |
||
721 | Param0 = Intrinsic::arm_cde_vcx1qa; |
||
722 | break; |
||
723 | case ARM::BI__builtin_arm_cde_vcx2q_s64: |
||
724 | Param0 = Intrinsic::arm_cde_vcx2q; |
||
725 | break; |
||
726 | case ARM::BI__builtin_arm_cde_vcx2q_u64: |
||
727 | Param0 = Intrinsic::arm_cde_vcx2q; |
||
728 | break; |
||
729 | } |
||
730 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
731 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
732 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
733 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
734 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
735 | Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4}); |
||
736 | llvm::Type *Val6 = llvm::FixedVectorType::get(Int64Ty, 2); |
||
737 | return Builder.CreateBitCast(Val5, Val6); |
||
738 | } |
||
739 | case ARM::BI__builtin_arm_cde_vcx1qa_s8: |
||
740 | case ARM::BI__builtin_arm_cde_vcx1qa_u8: |
||
741 | case ARM::BI__builtin_arm_cde_vcx2q_s8: |
||
742 | case ARM::BI__builtin_arm_cde_vcx2q_u8: { |
||
743 | Intrinsic::ID Param0; |
||
744 | switch (BuiltinID) { |
||
745 | case ARM::BI__builtin_arm_cde_vcx1qa_s8: |
||
746 | Param0 = Intrinsic::arm_cde_vcx1qa; |
||
747 | break; |
||
748 | case ARM::BI__builtin_arm_cde_vcx1qa_u8: |
||
749 | Param0 = Intrinsic::arm_cde_vcx1qa; |
||
750 | break; |
||
751 | case ARM::BI__builtin_arm_cde_vcx2q_s8: |
||
752 | Param0 = Intrinsic::arm_cde_vcx2q; |
||
753 | break; |
||
754 | case ARM::BI__builtin_arm_cde_vcx2q_u8: |
||
755 | Param0 = Intrinsic::arm_cde_vcx2q; |
||
756 | break; |
||
757 | } |
||
758 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
759 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
760 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
761 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
762 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
763 | Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4}); |
||
764 | llvm::Type *Val6 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
765 | return Builder.CreateBitCast(Val5, Val6); |
||
766 | } |
||
767 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_f32: |
||
768 | case ARM::BI__builtin_arm_cde_vcx3q_impl_f32: { |
||
769 | Intrinsic::ID Param0; |
||
770 | switch (BuiltinID) { |
||
771 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_f32: |
||
772 | Param0 = Intrinsic::arm_cde_vcx2qa; |
||
773 | break; |
||
774 | case ARM::BI__builtin_arm_cde_vcx3q_impl_f32: |
||
775 | Param0 = Intrinsic::arm_cde_vcx3q; |
||
776 | break; |
||
777 | } |
||
778 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
779 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
780 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
781 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
782 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
783 | Value *Val5 = EmitScalarExpr(E->getArg(3)); |
||
784 | Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4, Val5}); |
||
785 | llvm::Type *Val7 = llvm::FixedVectorType::get(FloatTy, 4); |
||
786 | return Builder.CreateBitCast(Val6, Val7); |
||
787 | } |
||
788 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_f16: |
||
789 | case ARM::BI__builtin_arm_cde_vcx3q_impl_f16: { |
||
790 | Intrinsic::ID Param0; |
||
791 | switch (BuiltinID) { |
||
792 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_f16: |
||
793 | Param0 = Intrinsic::arm_cde_vcx2qa; |
||
794 | break; |
||
795 | case ARM::BI__builtin_arm_cde_vcx3q_impl_f16: |
||
796 | Param0 = Intrinsic::arm_cde_vcx3q; |
||
797 | break; |
||
798 | } |
||
799 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
800 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
801 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
802 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
803 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
804 | Value *Val5 = EmitScalarExpr(E->getArg(3)); |
||
805 | Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4, Val5}); |
||
806 | llvm::Type *Val7 = llvm::FixedVectorType::get(HalfTy, 8); |
||
807 | return Builder.CreateBitCast(Val6, Val7); |
||
808 | } |
||
809 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_s16: |
||
810 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_u16: |
||
811 | case ARM::BI__builtin_arm_cde_vcx3q_impl_s16: |
||
812 | case ARM::BI__builtin_arm_cde_vcx3q_impl_u16: { |
||
813 | Intrinsic::ID Param0; |
||
814 | switch (BuiltinID) { |
||
815 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_s16: |
||
816 | Param0 = Intrinsic::arm_cde_vcx2qa; |
||
817 | break; |
||
818 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_u16: |
||
819 | Param0 = Intrinsic::arm_cde_vcx2qa; |
||
820 | break; |
||
821 | case ARM::BI__builtin_arm_cde_vcx3q_impl_s16: |
||
822 | Param0 = Intrinsic::arm_cde_vcx3q; |
||
823 | break; |
||
824 | case ARM::BI__builtin_arm_cde_vcx3q_impl_u16: |
||
825 | Param0 = Intrinsic::arm_cde_vcx3q; |
||
826 | break; |
||
827 | } |
||
828 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
829 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
830 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
831 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
832 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
833 | Value *Val5 = EmitScalarExpr(E->getArg(3)); |
||
834 | Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4, Val5}); |
||
835 | llvm::Type *Val7 = llvm::FixedVectorType::get(Int16Ty, 8); |
||
836 | return Builder.CreateBitCast(Val6, Val7); |
||
837 | } |
||
838 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_s32: |
||
839 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_u32: |
||
840 | case ARM::BI__builtin_arm_cde_vcx3q_impl_s32: |
||
841 | case ARM::BI__builtin_arm_cde_vcx3q_impl_u32: { |
||
842 | Intrinsic::ID Param0; |
||
843 | switch (BuiltinID) { |
||
844 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_s32: |
||
845 | Param0 = Intrinsic::arm_cde_vcx2qa; |
||
846 | break; |
||
847 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_u32: |
||
848 | Param0 = Intrinsic::arm_cde_vcx2qa; |
||
849 | break; |
||
850 | case ARM::BI__builtin_arm_cde_vcx3q_impl_s32: |
||
851 | Param0 = Intrinsic::arm_cde_vcx3q; |
||
852 | break; |
||
853 | case ARM::BI__builtin_arm_cde_vcx3q_impl_u32: |
||
854 | Param0 = Intrinsic::arm_cde_vcx3q; |
||
855 | break; |
||
856 | } |
||
857 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
858 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
859 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
860 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
861 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
862 | Value *Val5 = EmitScalarExpr(E->getArg(3)); |
||
863 | Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4, Val5}); |
||
864 | llvm::Type *Val7 = llvm::FixedVectorType::get(Int32Ty, 4); |
||
865 | return Builder.CreateBitCast(Val6, Val7); |
||
866 | } |
||
867 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_s64: |
||
868 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_u64: |
||
869 | case ARM::BI__builtin_arm_cde_vcx3q_impl_s64: |
||
870 | case ARM::BI__builtin_arm_cde_vcx3q_impl_u64: { |
||
871 | Intrinsic::ID Param0; |
||
872 | switch (BuiltinID) { |
||
873 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_s64: |
||
874 | Param0 = Intrinsic::arm_cde_vcx2qa; |
||
875 | break; |
||
876 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_u64: |
||
877 | Param0 = Intrinsic::arm_cde_vcx2qa; |
||
878 | break; |
||
879 | case ARM::BI__builtin_arm_cde_vcx3q_impl_s64: |
||
880 | Param0 = Intrinsic::arm_cde_vcx3q; |
||
881 | break; |
||
882 | case ARM::BI__builtin_arm_cde_vcx3q_impl_u64: |
||
883 | Param0 = Intrinsic::arm_cde_vcx3q; |
||
884 | break; |
||
885 | } |
||
886 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
887 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
888 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
889 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
890 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
891 | Value *Val5 = EmitScalarExpr(E->getArg(3)); |
||
892 | Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4, Val5}); |
||
893 | llvm::Type *Val7 = llvm::FixedVectorType::get(Int64Ty, 2); |
||
894 | return Builder.CreateBitCast(Val6, Val7); |
||
895 | } |
||
896 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_s8: |
||
897 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_u8: |
||
898 | case ARM::BI__builtin_arm_cde_vcx3q_impl_s8: |
||
899 | case ARM::BI__builtin_arm_cde_vcx3q_impl_u8: { |
||
900 | Intrinsic::ID Param0; |
||
901 | switch (BuiltinID) { |
||
902 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_s8: |
||
903 | Param0 = Intrinsic::arm_cde_vcx2qa; |
||
904 | break; |
||
905 | case ARM::BI__builtin_arm_cde_vcx2qa_impl_u8: |
||
906 | Param0 = Intrinsic::arm_cde_vcx2qa; |
||
907 | break; |
||
908 | case ARM::BI__builtin_arm_cde_vcx3q_impl_s8: |
||
909 | Param0 = Intrinsic::arm_cde_vcx3q; |
||
910 | break; |
||
911 | case ARM::BI__builtin_arm_cde_vcx3q_impl_u8: |
||
912 | Param0 = Intrinsic::arm_cde_vcx3q; |
||
913 | break; |
||
914 | } |
||
915 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
916 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
917 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
918 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
919 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
920 | Value *Val5 = EmitScalarExpr(E->getArg(3)); |
||
921 | Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4, Val5}); |
||
922 | llvm::Type *Val7 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
923 | return Builder.CreateBitCast(Val6, Val7); |
||
924 | } |
||
925 | case ARM::BI__builtin_arm_cde_vcx3qa_impl_f32: { |
||
926 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
927 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
928 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
929 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
930 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
931 | Value *Val5 = EmitScalarExpr(E->getArg(3)); |
||
932 | Value *Val6 = EmitScalarExpr(E->getArg(4)); |
||
933 | Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx3qa), {Val0, Val3, Val4, Val5, Val6}); |
||
934 | llvm::Type *Val8 = llvm::FixedVectorType::get(FloatTy, 4); |
||
935 | return Builder.CreateBitCast(Val7, Val8); |
||
936 | } |
||
937 | case ARM::BI__builtin_arm_cde_vcx3qa_impl_f16: { |
||
938 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
939 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
940 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
941 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
942 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
943 | Value *Val5 = EmitScalarExpr(E->getArg(3)); |
||
944 | Value *Val6 = EmitScalarExpr(E->getArg(4)); |
||
945 | Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx3qa), {Val0, Val3, Val4, Val5, Val6}); |
||
946 | llvm::Type *Val8 = llvm::FixedVectorType::get(HalfTy, 8); |
||
947 | return Builder.CreateBitCast(Val7, Val8); |
||
948 | } |
||
949 | case ARM::BI__builtin_arm_cde_vcx3qa_impl_s16: |
||
950 | case ARM::BI__builtin_arm_cde_vcx3qa_impl_u16: { |
||
951 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
952 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
953 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
954 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
955 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
956 | Value *Val5 = EmitScalarExpr(E->getArg(3)); |
||
957 | Value *Val6 = EmitScalarExpr(E->getArg(4)); |
||
958 | Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx3qa), {Val0, Val3, Val4, Val5, Val6}); |
||
959 | llvm::Type *Val8 = llvm::FixedVectorType::get(Int16Ty, 8); |
||
960 | return Builder.CreateBitCast(Val7, Val8); |
||
961 | } |
||
962 | case ARM::BI__builtin_arm_cde_vcx3qa_impl_s32: |
||
963 | case ARM::BI__builtin_arm_cde_vcx3qa_impl_u32: { |
||
964 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
965 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
966 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
967 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
968 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
969 | Value *Val5 = EmitScalarExpr(E->getArg(3)); |
||
970 | Value *Val6 = EmitScalarExpr(E->getArg(4)); |
||
971 | Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx3qa), {Val0, Val3, Val4, Val5, Val6}); |
||
972 | llvm::Type *Val8 = llvm::FixedVectorType::get(Int32Ty, 4); |
||
973 | return Builder.CreateBitCast(Val7, Val8); |
||
974 | } |
||
975 | case ARM::BI__builtin_arm_cde_vcx3qa_impl_s64: |
||
976 | case ARM::BI__builtin_arm_cde_vcx3qa_impl_u64: { |
||
977 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
978 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
979 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
980 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
981 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
982 | Value *Val5 = EmitScalarExpr(E->getArg(3)); |
||
983 | Value *Val6 = EmitScalarExpr(E->getArg(4)); |
||
984 | Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx3qa), {Val0, Val3, Val4, Val5, Val6}); |
||
985 | llvm::Type *Val8 = llvm::FixedVectorType::get(Int64Ty, 2); |
||
986 | return Builder.CreateBitCast(Val7, Val8); |
||
987 | } |
||
988 | case ARM::BI__builtin_arm_cde_vcx3qa_impl_s8: |
||
989 | case ARM::BI__builtin_arm_cde_vcx3qa_impl_u8: { |
||
990 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
991 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
992 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
993 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
994 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
995 | Value *Val5 = EmitScalarExpr(E->getArg(3)); |
||
996 | Value *Val6 = EmitScalarExpr(E->getArg(4)); |
||
997 | Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx3qa), {Val0, Val3, Val4, Val5, Val6}); |
||
998 | llvm::Type *Val8 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
999 | return Builder.CreateBitCast(Val7, Val8); |
||
1000 | } |
||
1001 | case ARM::BI__builtin_arm_cde_vcx3q_u8_impl_f16: |
||
1002 | case ARM::BI__builtin_arm_cde_vcx3q_u8_impl_f32: |
||
1003 | case ARM::BI__builtin_arm_cde_vcx3q_u8_impl_s16: |
||
1004 | case ARM::BI__builtin_arm_cde_vcx3q_u8_impl_s32: |
||
1005 | case ARM::BI__builtin_arm_cde_vcx3q_u8_impl_s64: |
||
1006 | case ARM::BI__builtin_arm_cde_vcx3q_u8_impl_s8: |
||
1007 | case ARM::BI__builtin_arm_cde_vcx3q_u8_impl_u16: |
||
1008 | case ARM::BI__builtin_arm_cde_vcx3q_u8_impl_u32: |
||
1009 | case ARM::BI__builtin_arm_cde_vcx3q_u8_impl_u64: |
||
1010 | case ARM::BI__builtin_arm_cde_vcx3q_u8_impl_u8: { |
||
1011 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
1012 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
1013 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
1014 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
1015 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
1016 | Value *Val5 = EmitScalarExpr(E->getArg(3)); |
||
1017 | return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx3q), {Val0, Val3, Val4, Val5}); |
||
1018 | } |
||
1019 | case ARM::BI__builtin_arm_cde_vcx2q_u8_f16: |
||
1020 | case ARM::BI__builtin_arm_cde_vcx2q_u8_f32: |
||
1021 | case ARM::BI__builtin_arm_cde_vcx2q_u8_s16: |
||
1022 | case ARM::BI__builtin_arm_cde_vcx2q_u8_s32: |
||
1023 | case ARM::BI__builtin_arm_cde_vcx2q_u8_s64: |
||
1024 | case ARM::BI__builtin_arm_cde_vcx2q_u8_s8: |
||
1025 | case ARM::BI__builtin_arm_cde_vcx2q_u8_u16: |
||
1026 | case ARM::BI__builtin_arm_cde_vcx2q_u8_u32: |
||
1027 | case ARM::BI__builtin_arm_cde_vcx2q_u8_u64: |
||
1028 | case ARM::BI__builtin_arm_cde_vcx2q_u8_u8: { |
||
1029 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
1030 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
1031 | llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16); |
||
1032 | Value *Val3 = Builder.CreateBitCast(Val1, Val2); |
||
1033 | Value *Val4 = EmitScalarExpr(E->getArg(2)); |
||
1034 | return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx2q), {Val0, Val3, Val4}); |
||
1035 | } |
||
1036 | case ARM::BI__builtin_arm_cde_cx1: |
||
1037 | case ARM::BI__builtin_arm_cde_vcx1q_u8: { |
||
1038 | Intrinsic::ID Param0; |
||
1039 | switch (BuiltinID) { |
||
1040 | case ARM::BI__builtin_arm_cde_cx1: |
||
1041 | Param0 = Intrinsic::arm_cde_cx1; |
||
1042 | break; |
||
1043 | case ARM::BI__builtin_arm_cde_vcx1q_u8: |
||
1044 | Param0 = Intrinsic::arm_cde_vcx1q; |
||
1045 | break; |
||
1046 | } |
||
1047 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
1048 | Value *Val1 = EmitScalarExpr(E->getArg(1)); |
||
1049 | return Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val1}); |
||
1050 | } |
||
1051 | case ARM::BI__builtin_arm_cde_vreinterpretq_u8_u8: { |
||
1052 | Value *Val0 = EmitScalarExpr(E->getArg(0)); |
||
1053 | return (Val0); |
||
1054 | } |
||
1055 | case ARM::BI__builtin_arm_cde_cx1da: { |
||
1056 | Value *Val0 = EmitScalarExpr(E->getArg(1)); |
||
1057 | Value *Val1 = llvm::ConstantInt::get(Int64Ty, 32); |
||
1058 | Value *Val2 = Builder.CreateLShr(Val0, Val1); |
||
1059 | Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false); |
||
1060 | Value *Val4 = Builder.CreateIntCast(Val0, Int32Ty, false); |
||
1061 | Value *Val5 = EmitScalarExpr(E->getArg(0)); |
||
1062 | Value *Val6 = EmitScalarExpr(E->getArg(2)); |
||
1063 | Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_cx1da), {Val5, Val4, Val3, Val6}); |
||
1064 | Value *Val8 = Builder.CreateExtractValue(Val7, static_cast<unsigned>(1)); |
||
1065 | Value *Val9 = Builder.CreateIntCast(Val8, Int64Ty, false); |
||
1066 | Value *Val10 = llvm::ConstantInt::get(Int64Ty, 32); |
||
1067 | Value *Val11 = Builder.CreateShl(Val9, Val10); |
||
1068 | Value *Val12 = Builder.CreateExtractValue(Val7, static_cast<unsigned>(0)); |
||
1069 | Value *Val13 = Builder.CreateIntCast(Val12, Int64Ty, false); |
||
1070 | return Builder.CreateOr(Val11, Val13); |
||
1071 | } |
||
1072 | case ARM::BI__builtin_arm_cde_cx2da: { |
||
1073 | Value *Val0 = EmitScalarExpr(E->getArg(1)); |
||
1074 | Value *Val1 = llvm::ConstantInt::get(Int64Ty, 32); |
||
1075 | Value *Val2 = Builder.CreateLShr(Val0, Val1); |
||
1076 | Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false); |
||
1077 | Value *Val4 = Builder.CreateIntCast(Val0, Int32Ty, false); |
||
1078 | Value *Val5 = EmitScalarExpr(E->getArg(0)); |
||
1079 | Value *Val6 = EmitScalarExpr(E->getArg(2)); |
||
1080 | Value *Val7 = EmitScalarExpr(E->getArg(3)); |
||
1081 | Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_cx2da), {Val5, Val4, Val3, Val6, Val7}); |
||
1082 | Value *Val9 = Builder.CreateExtractValue(Val8, static_cast<unsigned>(1)); |
||
1083 | Value *Val10 = Builder.CreateIntCast(Val9, Int64Ty, false); |
||
1084 | Value *Val11 = llvm::ConstantInt::get(Int64Ty, 32); |
||
1085 | Value *Val12 = Builder.CreateShl(Val10, Val11); |
||
1086 | Value *Val13 = Builder.CreateExtractValue(Val8, static_cast<unsigned>(0)); |
||
1087 | Value *Val14 = Builder.CreateIntCast(Val13, Int64Ty, false); |
||
1088 | return Builder.CreateOr(Val12, Val14); |
||
1089 | } |
||
1090 | case ARM::BI__builtin_arm_cde_cx3da: { |
||
1091 | Value *Val0 = EmitScalarExpr(E->getArg(1)); |
||
1092 | Value *Val1 = llvm::ConstantInt::get(Int64Ty, 32); |
||
1093 | Value *Val2 = Builder.CreateLShr(Val0, Val1); |
||
1094 | Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false); |
||
1095 | Value *Val4 = Builder.CreateIntCast(Val0, Int32Ty, false); |
||
1096 | Value *Val5 = EmitScalarExpr(E->getArg(0)); |
||
1097 | Value *Val6 = EmitScalarExpr(E->getArg(2)); |
||
1098 | Value *Val7 = EmitScalarExpr(E->getArg(3)); |
||
1099 | Value *Val8 = EmitScalarExpr(E->getArg(4)); |
||
1100 | Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_cx3da), {Val5, Val4, Val3, Val6, Val7, Val8}); |
||
1101 | Value *Val10 = Builder.CreateExtractValue(Val9, static_cast<unsigned>(1)); |
||
1102 | Value *Val11 = Builder.CreateIntCast(Val10, Int64Ty, false); |
||
1103 | Value *Val12 = llvm::ConstantInt::get(Int64Ty, 32); |
||
1104 | Value *Val13 = Builder.CreateShl(Val11, Val12); |
||
1105 | Value *Val14 = Builder.CreateExtractValue(Val9, static_cast<unsigned>(0)); |
||
1106 | Value *Val15 = Builder.CreateIntCast(Val14, Int64Ty, false); |
||
1107 | return Builder.CreateOr(Val13, Val15); |
||
1108 | } |