Warning, /include/clang/Basic/arm_cde_builtin_cg.inc is written in an unsupported language. File is not indexed.
0001 case ARM::BI__builtin_arm_cde_cx1d: {
0002 Value *Val0 = EmitScalarExpr(E->getArg(0));
0003 Value *Val1 = EmitScalarExpr(E->getArg(1));
0004 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_cx1d), {Val0, Val1});
0005 Value *Val3 = Builder.CreateExtractValue(Val2, static_cast<unsigned>(1));
0006 Value *Val4 = Builder.CreateIntCast(Val3, Int64Ty, false);
0007 Value *Val5 = llvm::ConstantInt::get(Int64Ty, 32);
0008 Value *Val6 = Builder.CreateShl(Val4, Val5);
0009 Value *Val7 = Builder.CreateExtractValue(Val2, static_cast<unsigned>(0));
0010 Value *Val8 = Builder.CreateIntCast(Val7, Int64Ty, false);
0011 return Builder.CreateOr(Val6, Val8);
0012 }
0013 case ARM::BI__builtin_arm_cde_vcx1d_u64: {
0014 Value *Val0 = EmitScalarExpr(E->getArg(0));
0015 Value *Val1 = EmitScalarExpr(E->getArg(1));
0016 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx1, {DoubleTy}), {Val0, Val1});
0017 llvm::Type *Val3 = Int64Ty;
0018 return Builder.CreateBitCast(Val2, Val3);
0019 }
0020 case ARM::BI__builtin_arm_cde_vcx1_u32: {
0021 Value *Val0 = EmitScalarExpr(E->getArg(0));
0022 Value *Val1 = EmitScalarExpr(E->getArg(1));
0023 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx1, {FloatTy}), {Val0, Val1});
0024 llvm::Type *Val3 = Int32Ty;
0025 return Builder.CreateBitCast(Val2, Val3);
0026 }
0027 case ARM::BI__builtin_arm_cde_cx2d: {
0028 Value *Val0 = EmitScalarExpr(E->getArg(0));
0029 Value *Val1 = EmitScalarExpr(E->getArg(1));
0030 Value *Val2 = EmitScalarExpr(E->getArg(2));
0031 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_cx2d), {Val0, Val1, Val2});
0032 Value *Val4 = Builder.CreateExtractValue(Val3, static_cast<unsigned>(1));
0033 Value *Val5 = Builder.CreateIntCast(Val4, Int64Ty, false);
0034 Value *Val6 = llvm::ConstantInt::get(Int64Ty, 32);
0035 Value *Val7 = Builder.CreateShl(Val5, Val6);
0036 Value *Val8 = Builder.CreateExtractValue(Val3, static_cast<unsigned>(0));
0037 Value *Val9 = Builder.CreateIntCast(Val8, Int64Ty, false);
0038 return Builder.CreateOr(Val7, Val9);
0039 }
0040 case ARM::BI__builtin_arm_cde_cx3d: {
0041 Value *Val0 = EmitScalarExpr(E->getArg(0));
0042 Value *Val1 = EmitScalarExpr(E->getArg(1));
0043 Value *Val2 = EmitScalarExpr(E->getArg(2));
0044 Value *Val3 = EmitScalarExpr(E->getArg(3));
0045 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_cx3d), {Val0, Val1, Val2, Val3});
0046 Value *Val5 = Builder.CreateExtractValue(Val4, static_cast<unsigned>(1));
0047 Value *Val6 = Builder.CreateIntCast(Val5, Int64Ty, false);
0048 Value *Val7 = llvm::ConstantInt::get(Int64Ty, 32);
0049 Value *Val8 = Builder.CreateShl(Val6, Val7);
0050 Value *Val9 = Builder.CreateExtractValue(Val4, static_cast<unsigned>(0));
0051 Value *Val10 = Builder.CreateIntCast(Val9, Int64Ty, false);
0052 return Builder.CreateOr(Val8, Val10);
0053 }
0054 case ARM::BI__builtin_arm_cde_vcx1q_m_f16:
0055 case ARM::BI__builtin_arm_cde_vcx1q_m_f32:
0056 case ARM::BI__builtin_arm_cde_vcx1q_m_s16:
0057 case ARM::BI__builtin_arm_cde_vcx1q_m_s32:
0058 case ARM::BI__builtin_arm_cde_vcx1q_m_s64:
0059 case ARM::BI__builtin_arm_cde_vcx1q_m_s8:
0060 case ARM::BI__builtin_arm_cde_vcx1q_m_u16:
0061 case ARM::BI__builtin_arm_cde_vcx1q_m_u32:
0062 case ARM::BI__builtin_arm_cde_vcx1q_m_u64:
0063 case ARM::BI__builtin_arm_cde_vcx1q_m_u8:
0064 case ARM::BI__builtin_arm_cde_vcx1qa_m_f16:
0065 case ARM::BI__builtin_arm_cde_vcx1qa_m_f32:
0066 case ARM::BI__builtin_arm_cde_vcx1qa_m_s16:
0067 case ARM::BI__builtin_arm_cde_vcx1qa_m_s32:
0068 case ARM::BI__builtin_arm_cde_vcx1qa_m_s64:
0069 case ARM::BI__builtin_arm_cde_vcx1qa_m_s8:
0070 case ARM::BI__builtin_arm_cde_vcx1qa_m_u16:
0071 case ARM::BI__builtin_arm_cde_vcx1qa_m_u32:
0072 case ARM::BI__builtin_arm_cde_vcx1qa_m_u64:
0073 case ARM::BI__builtin_arm_cde_vcx1qa_m_u8: {
0074 llvm::Type * Param0;
0075 Intrinsic::ID Param1;
0076 llvm::Type * Param2;
0077 switch (BuiltinID) {
0078 case ARM::BI__builtin_arm_cde_vcx1q_m_f16:
0079 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0080 Param1 = Intrinsic::arm_cde_vcx1q_predicated;
0081 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
0082 break;
0083 case ARM::BI__builtin_arm_cde_vcx1q_m_f32:
0084 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0085 Param1 = Intrinsic::arm_cde_vcx1q_predicated;
0086 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
0087 break;
0088 case ARM::BI__builtin_arm_cde_vcx1q_m_s16:
0089 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0090 Param1 = Intrinsic::arm_cde_vcx1q_predicated;
0091 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
0092 break;
0093 case ARM::BI__builtin_arm_cde_vcx1q_m_s32:
0094 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0095 Param1 = Intrinsic::arm_cde_vcx1q_predicated;
0096 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
0097 break;
0098 case ARM::BI__builtin_arm_cde_vcx1q_m_s64:
0099 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
0100 Param1 = Intrinsic::arm_cde_vcx1q_predicated;
0101 Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
0102 break;
0103 case ARM::BI__builtin_arm_cde_vcx1q_m_s8:
0104 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
0105 Param1 = Intrinsic::arm_cde_vcx1q_predicated;
0106 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
0107 break;
0108 case ARM::BI__builtin_arm_cde_vcx1q_m_u16:
0109 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0110 Param1 = Intrinsic::arm_cde_vcx1q_predicated;
0111 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
0112 break;
0113 case ARM::BI__builtin_arm_cde_vcx1q_m_u32:
0114 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0115 Param1 = Intrinsic::arm_cde_vcx1q_predicated;
0116 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
0117 break;
0118 case ARM::BI__builtin_arm_cde_vcx1q_m_u64:
0119 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
0120 Param1 = Intrinsic::arm_cde_vcx1q_predicated;
0121 Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
0122 break;
0123 case ARM::BI__builtin_arm_cde_vcx1q_m_u8:
0124 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
0125 Param1 = Intrinsic::arm_cde_vcx1q_predicated;
0126 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
0127 break;
0128 case ARM::BI__builtin_arm_cde_vcx1qa_m_f16:
0129 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0130 Param1 = Intrinsic::arm_cde_vcx1qa_predicated;
0131 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
0132 break;
0133 case ARM::BI__builtin_arm_cde_vcx1qa_m_f32:
0134 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0135 Param1 = Intrinsic::arm_cde_vcx1qa_predicated;
0136 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
0137 break;
0138 case ARM::BI__builtin_arm_cde_vcx1qa_m_s16:
0139 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0140 Param1 = Intrinsic::arm_cde_vcx1qa_predicated;
0141 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
0142 break;
0143 case ARM::BI__builtin_arm_cde_vcx1qa_m_s32:
0144 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0145 Param1 = Intrinsic::arm_cde_vcx1qa_predicated;
0146 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
0147 break;
0148 case ARM::BI__builtin_arm_cde_vcx1qa_m_s64:
0149 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
0150 Param1 = Intrinsic::arm_cde_vcx1qa_predicated;
0151 Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
0152 break;
0153 case ARM::BI__builtin_arm_cde_vcx1qa_m_s8:
0154 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
0155 Param1 = Intrinsic::arm_cde_vcx1qa_predicated;
0156 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
0157 break;
0158 case ARM::BI__builtin_arm_cde_vcx1qa_m_u16:
0159 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0160 Param1 = Intrinsic::arm_cde_vcx1qa_predicated;
0161 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
0162 break;
0163 case ARM::BI__builtin_arm_cde_vcx1qa_m_u32:
0164 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0165 Param1 = Intrinsic::arm_cde_vcx1qa_predicated;
0166 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
0167 break;
0168 case ARM::BI__builtin_arm_cde_vcx1qa_m_u64:
0169 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
0170 Param1 = Intrinsic::arm_cde_vcx1qa_predicated;
0171 Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
0172 break;
0173 case ARM::BI__builtin_arm_cde_vcx1qa_m_u8:
0174 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
0175 Param1 = Intrinsic::arm_cde_vcx1qa_predicated;
0176 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
0177 break;
0178 }
0179 Value *Val0 = EmitScalarExpr(E->getArg(0));
0180 Value *Val1 = EmitScalarExpr(E->getArg(1));
0181 Value *Val2 = EmitScalarExpr(E->getArg(2));
0182 Value *Val3 = EmitScalarExpr(E->getArg(3));
0183 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
0184 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val4});
0185 return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val2, Val5});
0186 }
0187 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_f16:
0188 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_f32:
0189 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_s16:
0190 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_s32:
0191 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_s64:
0192 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_s8:
0193 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_u16:
0194 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_u32:
0195 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_u64:
0196 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_u8:
0197 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_f16:
0198 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_f32:
0199 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_s16:
0200 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_s32:
0201 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_s64:
0202 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_s8:
0203 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_u16:
0204 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_u32:
0205 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_u64:
0206 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_u8: {
0207 llvm::Type * Param0;
0208 Intrinsic::ID Param1;
0209 llvm::Type * Param2;
0210 switch (BuiltinID) {
0211 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_f16:
0212 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0213 Param1 = Intrinsic::arm_cde_vcx2q_predicated;
0214 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
0215 break;
0216 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_f32:
0217 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0218 Param1 = Intrinsic::arm_cde_vcx2q_predicated;
0219 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
0220 break;
0221 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_s16:
0222 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0223 Param1 = Intrinsic::arm_cde_vcx2q_predicated;
0224 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
0225 break;
0226 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_s32:
0227 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0228 Param1 = Intrinsic::arm_cde_vcx2q_predicated;
0229 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
0230 break;
0231 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_s64:
0232 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
0233 Param1 = Intrinsic::arm_cde_vcx2q_predicated;
0234 Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
0235 break;
0236 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_s8:
0237 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
0238 Param1 = Intrinsic::arm_cde_vcx2q_predicated;
0239 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
0240 break;
0241 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_u16:
0242 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0243 Param1 = Intrinsic::arm_cde_vcx2q_predicated;
0244 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
0245 break;
0246 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_u32:
0247 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0248 Param1 = Intrinsic::arm_cde_vcx2q_predicated;
0249 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
0250 break;
0251 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_u64:
0252 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
0253 Param1 = Intrinsic::arm_cde_vcx2q_predicated;
0254 Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
0255 break;
0256 case ARM::BI__builtin_arm_cde_vcx2q_m_impl_u8:
0257 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
0258 Param1 = Intrinsic::arm_cde_vcx2q_predicated;
0259 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
0260 break;
0261 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_f16:
0262 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0263 Param1 = Intrinsic::arm_cde_vcx2qa_predicated;
0264 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
0265 break;
0266 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_f32:
0267 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0268 Param1 = Intrinsic::arm_cde_vcx2qa_predicated;
0269 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
0270 break;
0271 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_s16:
0272 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0273 Param1 = Intrinsic::arm_cde_vcx2qa_predicated;
0274 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
0275 break;
0276 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_s32:
0277 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0278 Param1 = Intrinsic::arm_cde_vcx2qa_predicated;
0279 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
0280 break;
0281 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_s64:
0282 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
0283 Param1 = Intrinsic::arm_cde_vcx2qa_predicated;
0284 Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
0285 break;
0286 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_s8:
0287 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
0288 Param1 = Intrinsic::arm_cde_vcx2qa_predicated;
0289 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
0290 break;
0291 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_u16:
0292 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0293 Param1 = Intrinsic::arm_cde_vcx2qa_predicated;
0294 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
0295 break;
0296 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_u32:
0297 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0298 Param1 = Intrinsic::arm_cde_vcx2qa_predicated;
0299 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
0300 break;
0301 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_u64:
0302 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
0303 Param1 = Intrinsic::arm_cde_vcx2qa_predicated;
0304 Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
0305 break;
0306 case ARM::BI__builtin_arm_cde_vcx2qa_m_impl_u8:
0307 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
0308 Param1 = Intrinsic::arm_cde_vcx2qa_predicated;
0309 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
0310 break;
0311 }
0312 Value *Val0 = EmitScalarExpr(E->getArg(0));
0313 Value *Val1 = EmitScalarExpr(E->getArg(1));
0314 Value *Val2 = EmitScalarExpr(E->getArg(2));
0315 Value *Val3 = EmitScalarExpr(E->getArg(3));
0316 Value *Val4 = EmitScalarExpr(E->getArg(4));
0317 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
0318 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val5});
0319 return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val2, Val3, Val6});
0320 }
0321 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_f16:
0322 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_f32:
0323 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_s16:
0324 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_s32:
0325 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_s64:
0326 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_s8:
0327 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_u16:
0328 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_u32:
0329 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_u64:
0330 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_u8:
0331 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_f16:
0332 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_f32:
0333 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_s16:
0334 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_s32:
0335 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_s64:
0336 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_s8:
0337 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_u16:
0338 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_u32:
0339 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_u64:
0340 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_u8: {
0341 llvm::Type * Param0;
0342 Intrinsic::ID Param1;
0343 llvm::Type * Param2;
0344 switch (BuiltinID) {
0345 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_f16:
0346 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0347 Param1 = Intrinsic::arm_cde_vcx3q_predicated;
0348 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
0349 break;
0350 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_f32:
0351 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0352 Param1 = Intrinsic::arm_cde_vcx3q_predicated;
0353 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
0354 break;
0355 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_s16:
0356 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0357 Param1 = Intrinsic::arm_cde_vcx3q_predicated;
0358 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
0359 break;
0360 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_s32:
0361 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0362 Param1 = Intrinsic::arm_cde_vcx3q_predicated;
0363 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
0364 break;
0365 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_s64:
0366 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
0367 Param1 = Intrinsic::arm_cde_vcx3q_predicated;
0368 Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
0369 break;
0370 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_s8:
0371 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
0372 Param1 = Intrinsic::arm_cde_vcx3q_predicated;
0373 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
0374 break;
0375 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_u16:
0376 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0377 Param1 = Intrinsic::arm_cde_vcx3q_predicated;
0378 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
0379 break;
0380 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_u32:
0381 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0382 Param1 = Intrinsic::arm_cde_vcx3q_predicated;
0383 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
0384 break;
0385 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_u64:
0386 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
0387 Param1 = Intrinsic::arm_cde_vcx3q_predicated;
0388 Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
0389 break;
0390 case ARM::BI__builtin_arm_cde_vcx3q_m_impl_u8:
0391 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
0392 Param1 = Intrinsic::arm_cde_vcx3q_predicated;
0393 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
0394 break;
0395 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_f16:
0396 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0397 Param1 = Intrinsic::arm_cde_vcx3qa_predicated;
0398 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
0399 break;
0400 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_f32:
0401 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0402 Param1 = Intrinsic::arm_cde_vcx3qa_predicated;
0403 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
0404 break;
0405 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_s16:
0406 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0407 Param1 = Intrinsic::arm_cde_vcx3qa_predicated;
0408 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
0409 break;
0410 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_s32:
0411 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0412 Param1 = Intrinsic::arm_cde_vcx3qa_predicated;
0413 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
0414 break;
0415 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_s64:
0416 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
0417 Param1 = Intrinsic::arm_cde_vcx3qa_predicated;
0418 Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
0419 break;
0420 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_s8:
0421 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
0422 Param1 = Intrinsic::arm_cde_vcx3qa_predicated;
0423 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
0424 break;
0425 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_u16:
0426 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
0427 Param1 = Intrinsic::arm_cde_vcx3qa_predicated;
0428 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
0429 break;
0430 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_u32:
0431 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
0432 Param1 = Intrinsic::arm_cde_vcx3qa_predicated;
0433 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
0434 break;
0435 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_u64:
0436 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
0437 Param1 = Intrinsic::arm_cde_vcx3qa_predicated;
0438 Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
0439 break;
0440 case ARM::BI__builtin_arm_cde_vcx3qa_m_impl_u8:
0441 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
0442 Param1 = Intrinsic::arm_cde_vcx3qa_predicated;
0443 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
0444 break;
0445 }
0446 Value *Val0 = EmitScalarExpr(E->getArg(0));
0447 Value *Val1 = EmitScalarExpr(E->getArg(1));
0448 Value *Val2 = EmitScalarExpr(E->getArg(2));
0449 Value *Val3 = EmitScalarExpr(E->getArg(3));
0450 Value *Val4 = EmitScalarExpr(E->getArg(4));
0451 Value *Val5 = EmitScalarExpr(E->getArg(5));
0452 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
0453 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val6});
0454 return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val2, Val3, Val4, Val7});
0455 }
0456 case ARM::BI__builtin_arm_cde_cx3a: {
0457 Value *Val0 = EmitScalarExpr(E->getArg(0));
0458 Value *Val1 = EmitScalarExpr(E->getArg(1));
0459 Value *Val2 = EmitScalarExpr(E->getArg(2));
0460 Value *Val3 = EmitScalarExpr(E->getArg(3));
0461 Value *Val4 = EmitScalarExpr(E->getArg(4));
0462 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_cx3a), {Val0, Val1, Val2, Val3, Val4});
0463 }
0464 case ARM::BI__builtin_arm_cde_cx2a:
0465 case ARM::BI__builtin_arm_cde_cx3: {
0466 Intrinsic::ID Param0;
0467 switch (BuiltinID) {
0468 case ARM::BI__builtin_arm_cde_cx2a:
0469 Param0 = Intrinsic::arm_cde_cx2a;
0470 break;
0471 case ARM::BI__builtin_arm_cde_cx3:
0472 Param0 = Intrinsic::arm_cde_cx3;
0473 break;
0474 }
0475 Value *Val0 = EmitScalarExpr(E->getArg(0));
0476 Value *Val1 = EmitScalarExpr(E->getArg(1));
0477 Value *Val2 = EmitScalarExpr(E->getArg(2));
0478 Value *Val3 = EmitScalarExpr(E->getArg(3));
0479 return Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val1, Val2, Val3});
0480 }
0481 case ARM::BI__builtin_arm_cde_cx1a:
0482 case ARM::BI__builtin_arm_cde_cx2: {
0483 Intrinsic::ID Param0;
0484 switch (BuiltinID) {
0485 case ARM::BI__builtin_arm_cde_cx1a:
0486 Param0 = Intrinsic::arm_cde_cx1a;
0487 break;
0488 case ARM::BI__builtin_arm_cde_cx2:
0489 Param0 = Intrinsic::arm_cde_cx2;
0490 break;
0491 }
0492 Value *Val0 = EmitScalarExpr(E->getArg(0));
0493 Value *Val1 = EmitScalarExpr(E->getArg(1));
0494 Value *Val2 = EmitScalarExpr(E->getArg(2));
0495 return Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val1, Val2});
0496 }
0497 case ARM::BI__builtin_arm_cde_vcx1da_u64:
0498 case ARM::BI__builtin_arm_cde_vcx2d_u64: {
0499 Intrinsic::ID Param0;
0500 switch (BuiltinID) {
0501 case ARM::BI__builtin_arm_cde_vcx1da_u64:
0502 Param0 = Intrinsic::arm_cde_vcx1a;
0503 break;
0504 case ARM::BI__builtin_arm_cde_vcx2d_u64:
0505 Param0 = Intrinsic::arm_cde_vcx2;
0506 break;
0507 }
0508 Value *Val0 = EmitScalarExpr(E->getArg(0));
0509 Value *Val1 = EmitScalarExpr(E->getArg(1));
0510 llvm::Type *Val2 = DoubleTy;
0511 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0512 Value *Val4 = EmitScalarExpr(E->getArg(2));
0513 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0, {DoubleTy}), {Val0, Val3, Val4});
0514 llvm::Type *Val6 = Int64Ty;
0515 return Builder.CreateBitCast(Val5, Val6);
0516 }
0517 case ARM::BI__builtin_arm_cde_vcx2da_u64:
0518 case ARM::BI__builtin_arm_cde_vcx3d_u64: {
0519 Intrinsic::ID Param0;
0520 switch (BuiltinID) {
0521 case ARM::BI__builtin_arm_cde_vcx2da_u64:
0522 Param0 = Intrinsic::arm_cde_vcx2a;
0523 break;
0524 case ARM::BI__builtin_arm_cde_vcx3d_u64:
0525 Param0 = Intrinsic::arm_cde_vcx3;
0526 break;
0527 }
0528 Value *Val0 = EmitScalarExpr(E->getArg(0));
0529 Value *Val1 = EmitScalarExpr(E->getArg(1));
0530 llvm::Type *Val2 = DoubleTy;
0531 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0532 Value *Val4 = EmitScalarExpr(E->getArg(2));
0533 llvm::Type *Val5 = DoubleTy;
0534 Value *Val6 = Builder.CreateBitCast(Val4, Val5);
0535 Value *Val7 = EmitScalarExpr(E->getArg(3));
0536 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param0, {DoubleTy}), {Val0, Val3, Val6, Val7});
0537 llvm::Type *Val9 = Int64Ty;
0538 return Builder.CreateBitCast(Val8, Val9);
0539 }
0540 case ARM::BI__builtin_arm_cde_vcx3da_u64: {
0541 Value *Val0 = EmitScalarExpr(E->getArg(0));
0542 Value *Val1 = EmitScalarExpr(E->getArg(1));
0543 llvm::Type *Val2 = DoubleTy;
0544 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0545 Value *Val4 = EmitScalarExpr(E->getArg(2));
0546 llvm::Type *Val5 = DoubleTy;
0547 Value *Val6 = Builder.CreateBitCast(Val4, Val5);
0548 Value *Val7 = EmitScalarExpr(E->getArg(3));
0549 llvm::Type *Val8 = DoubleTy;
0550 Value *Val9 = Builder.CreateBitCast(Val7, Val8);
0551 Value *Val10 = EmitScalarExpr(E->getArg(4));
0552 Value *Val11 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx3a, {DoubleTy}), {Val0, Val3, Val6, Val9, Val10});
0553 llvm::Type *Val12 = Int64Ty;
0554 return Builder.CreateBitCast(Val11, Val12);
0555 }
0556 case ARM::BI__builtin_arm_cde_vcx1a_u32:
0557 case ARM::BI__builtin_arm_cde_vcx2_u32: {
0558 Intrinsic::ID Param0;
0559 switch (BuiltinID) {
0560 case ARM::BI__builtin_arm_cde_vcx1a_u32:
0561 Param0 = Intrinsic::arm_cde_vcx1a;
0562 break;
0563 case ARM::BI__builtin_arm_cde_vcx2_u32:
0564 Param0 = Intrinsic::arm_cde_vcx2;
0565 break;
0566 }
0567 Value *Val0 = EmitScalarExpr(E->getArg(0));
0568 Value *Val1 = EmitScalarExpr(E->getArg(1));
0569 llvm::Type *Val2 = FloatTy;
0570 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0571 Value *Val4 = EmitScalarExpr(E->getArg(2));
0572 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0, {FloatTy}), {Val0, Val3, Val4});
0573 llvm::Type *Val6 = Int32Ty;
0574 return Builder.CreateBitCast(Val5, Val6);
0575 }
0576 case ARM::BI__builtin_arm_cde_vcx2a_u32:
0577 case ARM::BI__builtin_arm_cde_vcx3_u32: {
0578 Intrinsic::ID Param0;
0579 switch (BuiltinID) {
0580 case ARM::BI__builtin_arm_cde_vcx2a_u32:
0581 Param0 = Intrinsic::arm_cde_vcx2a;
0582 break;
0583 case ARM::BI__builtin_arm_cde_vcx3_u32:
0584 Param0 = Intrinsic::arm_cde_vcx3;
0585 break;
0586 }
0587 Value *Val0 = EmitScalarExpr(E->getArg(0));
0588 Value *Val1 = EmitScalarExpr(E->getArg(1));
0589 llvm::Type *Val2 = FloatTy;
0590 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0591 Value *Val4 = EmitScalarExpr(E->getArg(2));
0592 llvm::Type *Val5 = FloatTy;
0593 Value *Val6 = Builder.CreateBitCast(Val4, Val5);
0594 Value *Val7 = EmitScalarExpr(E->getArg(3));
0595 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param0, {FloatTy}), {Val0, Val3, Val6, Val7});
0596 llvm::Type *Val9 = Int32Ty;
0597 return Builder.CreateBitCast(Val8, Val9);
0598 }
0599 case ARM::BI__builtin_arm_cde_vcx3a_u32: {
0600 Value *Val0 = EmitScalarExpr(E->getArg(0));
0601 Value *Val1 = EmitScalarExpr(E->getArg(1));
0602 llvm::Type *Val2 = FloatTy;
0603 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0604 Value *Val4 = EmitScalarExpr(E->getArg(2));
0605 llvm::Type *Val5 = FloatTy;
0606 Value *Val6 = Builder.CreateBitCast(Val4, Val5);
0607 Value *Val7 = EmitScalarExpr(E->getArg(3));
0608 llvm::Type *Val8 = FloatTy;
0609 Value *Val9 = Builder.CreateBitCast(Val7, Val8);
0610 Value *Val10 = EmitScalarExpr(E->getArg(4));
0611 Value *Val11 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx3a, {FloatTy}), {Val0, Val3, Val6, Val9, Val10});
0612 llvm::Type *Val12 = Int32Ty;
0613 return Builder.CreateBitCast(Val11, Val12);
0614 }
0615 case ARM::BI__builtin_arm_cde_vcx1qa_f32:
0616 case ARM::BI__builtin_arm_cde_vcx2q_f32: {
0617 Intrinsic::ID Param0;
0618 switch (BuiltinID) {
0619 case ARM::BI__builtin_arm_cde_vcx1qa_f32:
0620 Param0 = Intrinsic::arm_cde_vcx1qa;
0621 break;
0622 case ARM::BI__builtin_arm_cde_vcx2q_f32:
0623 Param0 = Intrinsic::arm_cde_vcx2q;
0624 break;
0625 }
0626 Value *Val0 = EmitScalarExpr(E->getArg(0));
0627 Value *Val1 = EmitScalarExpr(E->getArg(1));
0628 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0629 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0630 Value *Val4 = EmitScalarExpr(E->getArg(2));
0631 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4});
0632 llvm::Type *Val6 = llvm::FixedVectorType::get(FloatTy, 4);
0633 return Builder.CreateBitCast(Val5, Val6);
0634 }
0635 case ARM::BI__builtin_arm_cde_vcx1qa_f16:
0636 case ARM::BI__builtin_arm_cde_vcx2q_f16: {
0637 Intrinsic::ID Param0;
0638 switch (BuiltinID) {
0639 case ARM::BI__builtin_arm_cde_vcx1qa_f16:
0640 Param0 = Intrinsic::arm_cde_vcx1qa;
0641 break;
0642 case ARM::BI__builtin_arm_cde_vcx2q_f16:
0643 Param0 = Intrinsic::arm_cde_vcx2q;
0644 break;
0645 }
0646 Value *Val0 = EmitScalarExpr(E->getArg(0));
0647 Value *Val1 = EmitScalarExpr(E->getArg(1));
0648 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0649 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0650 Value *Val4 = EmitScalarExpr(E->getArg(2));
0651 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4});
0652 llvm::Type *Val6 = llvm::FixedVectorType::get(HalfTy, 8);
0653 return Builder.CreateBitCast(Val5, Val6);
0654 }
0655 case ARM::BI__builtin_arm_cde_vcx1qa_s16:
0656 case ARM::BI__builtin_arm_cde_vcx1qa_u16:
0657 case ARM::BI__builtin_arm_cde_vcx2q_s16:
0658 case ARM::BI__builtin_arm_cde_vcx2q_u16: {
0659 Intrinsic::ID Param0;
0660 switch (BuiltinID) {
0661 case ARM::BI__builtin_arm_cde_vcx1qa_s16:
0662 Param0 = Intrinsic::arm_cde_vcx1qa;
0663 break;
0664 case ARM::BI__builtin_arm_cde_vcx1qa_u16:
0665 Param0 = Intrinsic::arm_cde_vcx1qa;
0666 break;
0667 case ARM::BI__builtin_arm_cde_vcx2q_s16:
0668 Param0 = Intrinsic::arm_cde_vcx2q;
0669 break;
0670 case ARM::BI__builtin_arm_cde_vcx2q_u16:
0671 Param0 = Intrinsic::arm_cde_vcx2q;
0672 break;
0673 }
0674 Value *Val0 = EmitScalarExpr(E->getArg(0));
0675 Value *Val1 = EmitScalarExpr(E->getArg(1));
0676 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0677 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0678 Value *Val4 = EmitScalarExpr(E->getArg(2));
0679 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4});
0680 llvm::Type *Val6 = llvm::FixedVectorType::get(Int16Ty, 8);
0681 return Builder.CreateBitCast(Val5, Val6);
0682 }
0683 case ARM::BI__builtin_arm_cde_vcx1qa_s32:
0684 case ARM::BI__builtin_arm_cde_vcx1qa_u32:
0685 case ARM::BI__builtin_arm_cde_vcx2q_s32:
0686 case ARM::BI__builtin_arm_cde_vcx2q_u32: {
0687 Intrinsic::ID Param0;
0688 switch (BuiltinID) {
0689 case ARM::BI__builtin_arm_cde_vcx1qa_s32:
0690 Param0 = Intrinsic::arm_cde_vcx1qa;
0691 break;
0692 case ARM::BI__builtin_arm_cde_vcx1qa_u32:
0693 Param0 = Intrinsic::arm_cde_vcx1qa;
0694 break;
0695 case ARM::BI__builtin_arm_cde_vcx2q_s32:
0696 Param0 = Intrinsic::arm_cde_vcx2q;
0697 break;
0698 case ARM::BI__builtin_arm_cde_vcx2q_u32:
0699 Param0 = Intrinsic::arm_cde_vcx2q;
0700 break;
0701 }
0702 Value *Val0 = EmitScalarExpr(E->getArg(0));
0703 Value *Val1 = EmitScalarExpr(E->getArg(1));
0704 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0705 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0706 Value *Val4 = EmitScalarExpr(E->getArg(2));
0707 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4});
0708 llvm::Type *Val6 = llvm::FixedVectorType::get(Int32Ty, 4);
0709 return Builder.CreateBitCast(Val5, Val6);
0710 }
0711 case ARM::BI__builtin_arm_cde_vcx1qa_s64:
0712 case ARM::BI__builtin_arm_cde_vcx1qa_u64:
0713 case ARM::BI__builtin_arm_cde_vcx2q_s64:
0714 case ARM::BI__builtin_arm_cde_vcx2q_u64: {
0715 Intrinsic::ID Param0;
0716 switch (BuiltinID) {
0717 case ARM::BI__builtin_arm_cde_vcx1qa_s64:
0718 Param0 = Intrinsic::arm_cde_vcx1qa;
0719 break;
0720 case ARM::BI__builtin_arm_cde_vcx1qa_u64:
0721 Param0 = Intrinsic::arm_cde_vcx1qa;
0722 break;
0723 case ARM::BI__builtin_arm_cde_vcx2q_s64:
0724 Param0 = Intrinsic::arm_cde_vcx2q;
0725 break;
0726 case ARM::BI__builtin_arm_cde_vcx2q_u64:
0727 Param0 = Intrinsic::arm_cde_vcx2q;
0728 break;
0729 }
0730 Value *Val0 = EmitScalarExpr(E->getArg(0));
0731 Value *Val1 = EmitScalarExpr(E->getArg(1));
0732 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0733 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0734 Value *Val4 = EmitScalarExpr(E->getArg(2));
0735 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4});
0736 llvm::Type *Val6 = llvm::FixedVectorType::get(Int64Ty, 2);
0737 return Builder.CreateBitCast(Val5, Val6);
0738 }
0739 case ARM::BI__builtin_arm_cde_vcx1qa_s8:
0740 case ARM::BI__builtin_arm_cde_vcx1qa_u8:
0741 case ARM::BI__builtin_arm_cde_vcx2q_s8:
0742 case ARM::BI__builtin_arm_cde_vcx2q_u8: {
0743 Intrinsic::ID Param0;
0744 switch (BuiltinID) {
0745 case ARM::BI__builtin_arm_cde_vcx1qa_s8:
0746 Param0 = Intrinsic::arm_cde_vcx1qa;
0747 break;
0748 case ARM::BI__builtin_arm_cde_vcx1qa_u8:
0749 Param0 = Intrinsic::arm_cde_vcx1qa;
0750 break;
0751 case ARM::BI__builtin_arm_cde_vcx2q_s8:
0752 Param0 = Intrinsic::arm_cde_vcx2q;
0753 break;
0754 case ARM::BI__builtin_arm_cde_vcx2q_u8:
0755 Param0 = Intrinsic::arm_cde_vcx2q;
0756 break;
0757 }
0758 Value *Val0 = EmitScalarExpr(E->getArg(0));
0759 Value *Val1 = EmitScalarExpr(E->getArg(1));
0760 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0761 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0762 Value *Val4 = EmitScalarExpr(E->getArg(2));
0763 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4});
0764 llvm::Type *Val6 = llvm::FixedVectorType::get(Int8Ty, 16);
0765 return Builder.CreateBitCast(Val5, Val6);
0766 }
0767 case ARM::BI__builtin_arm_cde_vcx2qa_impl_f32:
0768 case ARM::BI__builtin_arm_cde_vcx3q_impl_f32: {
0769 Intrinsic::ID Param0;
0770 switch (BuiltinID) {
0771 case ARM::BI__builtin_arm_cde_vcx2qa_impl_f32:
0772 Param0 = Intrinsic::arm_cde_vcx2qa;
0773 break;
0774 case ARM::BI__builtin_arm_cde_vcx3q_impl_f32:
0775 Param0 = Intrinsic::arm_cde_vcx3q;
0776 break;
0777 }
0778 Value *Val0 = EmitScalarExpr(E->getArg(0));
0779 Value *Val1 = EmitScalarExpr(E->getArg(1));
0780 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0781 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0782 Value *Val4 = EmitScalarExpr(E->getArg(2));
0783 Value *Val5 = EmitScalarExpr(E->getArg(3));
0784 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4, Val5});
0785 llvm::Type *Val7 = llvm::FixedVectorType::get(FloatTy, 4);
0786 return Builder.CreateBitCast(Val6, Val7);
0787 }
0788 case ARM::BI__builtin_arm_cde_vcx2qa_impl_f16:
0789 case ARM::BI__builtin_arm_cde_vcx3q_impl_f16: {
0790 Intrinsic::ID Param0;
0791 switch (BuiltinID) {
0792 case ARM::BI__builtin_arm_cde_vcx2qa_impl_f16:
0793 Param0 = Intrinsic::arm_cde_vcx2qa;
0794 break;
0795 case ARM::BI__builtin_arm_cde_vcx3q_impl_f16:
0796 Param0 = Intrinsic::arm_cde_vcx3q;
0797 break;
0798 }
0799 Value *Val0 = EmitScalarExpr(E->getArg(0));
0800 Value *Val1 = EmitScalarExpr(E->getArg(1));
0801 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0802 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0803 Value *Val4 = EmitScalarExpr(E->getArg(2));
0804 Value *Val5 = EmitScalarExpr(E->getArg(3));
0805 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4, Val5});
0806 llvm::Type *Val7 = llvm::FixedVectorType::get(HalfTy, 8);
0807 return Builder.CreateBitCast(Val6, Val7);
0808 }
0809 case ARM::BI__builtin_arm_cde_vcx2qa_impl_s16:
0810 case ARM::BI__builtin_arm_cde_vcx2qa_impl_u16:
0811 case ARM::BI__builtin_arm_cde_vcx3q_impl_s16:
0812 case ARM::BI__builtin_arm_cde_vcx3q_impl_u16: {
0813 Intrinsic::ID Param0;
0814 switch (BuiltinID) {
0815 case ARM::BI__builtin_arm_cde_vcx2qa_impl_s16:
0816 Param0 = Intrinsic::arm_cde_vcx2qa;
0817 break;
0818 case ARM::BI__builtin_arm_cde_vcx2qa_impl_u16:
0819 Param0 = Intrinsic::arm_cde_vcx2qa;
0820 break;
0821 case ARM::BI__builtin_arm_cde_vcx3q_impl_s16:
0822 Param0 = Intrinsic::arm_cde_vcx3q;
0823 break;
0824 case ARM::BI__builtin_arm_cde_vcx3q_impl_u16:
0825 Param0 = Intrinsic::arm_cde_vcx3q;
0826 break;
0827 }
0828 Value *Val0 = EmitScalarExpr(E->getArg(0));
0829 Value *Val1 = EmitScalarExpr(E->getArg(1));
0830 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0831 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0832 Value *Val4 = EmitScalarExpr(E->getArg(2));
0833 Value *Val5 = EmitScalarExpr(E->getArg(3));
0834 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4, Val5});
0835 llvm::Type *Val7 = llvm::FixedVectorType::get(Int16Ty, 8);
0836 return Builder.CreateBitCast(Val6, Val7);
0837 }
0838 case ARM::BI__builtin_arm_cde_vcx2qa_impl_s32:
0839 case ARM::BI__builtin_arm_cde_vcx2qa_impl_u32:
0840 case ARM::BI__builtin_arm_cde_vcx3q_impl_s32:
0841 case ARM::BI__builtin_arm_cde_vcx3q_impl_u32: {
0842 Intrinsic::ID Param0;
0843 switch (BuiltinID) {
0844 case ARM::BI__builtin_arm_cde_vcx2qa_impl_s32:
0845 Param0 = Intrinsic::arm_cde_vcx2qa;
0846 break;
0847 case ARM::BI__builtin_arm_cde_vcx2qa_impl_u32:
0848 Param0 = Intrinsic::arm_cde_vcx2qa;
0849 break;
0850 case ARM::BI__builtin_arm_cde_vcx3q_impl_s32:
0851 Param0 = Intrinsic::arm_cde_vcx3q;
0852 break;
0853 case ARM::BI__builtin_arm_cde_vcx3q_impl_u32:
0854 Param0 = Intrinsic::arm_cde_vcx3q;
0855 break;
0856 }
0857 Value *Val0 = EmitScalarExpr(E->getArg(0));
0858 Value *Val1 = EmitScalarExpr(E->getArg(1));
0859 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0860 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0861 Value *Val4 = EmitScalarExpr(E->getArg(2));
0862 Value *Val5 = EmitScalarExpr(E->getArg(3));
0863 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4, Val5});
0864 llvm::Type *Val7 = llvm::FixedVectorType::get(Int32Ty, 4);
0865 return Builder.CreateBitCast(Val6, Val7);
0866 }
0867 case ARM::BI__builtin_arm_cde_vcx2qa_impl_s64:
0868 case ARM::BI__builtin_arm_cde_vcx2qa_impl_u64:
0869 case ARM::BI__builtin_arm_cde_vcx3q_impl_s64:
0870 case ARM::BI__builtin_arm_cde_vcx3q_impl_u64: {
0871 Intrinsic::ID Param0;
0872 switch (BuiltinID) {
0873 case ARM::BI__builtin_arm_cde_vcx2qa_impl_s64:
0874 Param0 = Intrinsic::arm_cde_vcx2qa;
0875 break;
0876 case ARM::BI__builtin_arm_cde_vcx2qa_impl_u64:
0877 Param0 = Intrinsic::arm_cde_vcx2qa;
0878 break;
0879 case ARM::BI__builtin_arm_cde_vcx3q_impl_s64:
0880 Param0 = Intrinsic::arm_cde_vcx3q;
0881 break;
0882 case ARM::BI__builtin_arm_cde_vcx3q_impl_u64:
0883 Param0 = Intrinsic::arm_cde_vcx3q;
0884 break;
0885 }
0886 Value *Val0 = EmitScalarExpr(E->getArg(0));
0887 Value *Val1 = EmitScalarExpr(E->getArg(1));
0888 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0889 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0890 Value *Val4 = EmitScalarExpr(E->getArg(2));
0891 Value *Val5 = EmitScalarExpr(E->getArg(3));
0892 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4, Val5});
0893 llvm::Type *Val7 = llvm::FixedVectorType::get(Int64Ty, 2);
0894 return Builder.CreateBitCast(Val6, Val7);
0895 }
0896 case ARM::BI__builtin_arm_cde_vcx2qa_impl_s8:
0897 case ARM::BI__builtin_arm_cde_vcx2qa_impl_u8:
0898 case ARM::BI__builtin_arm_cde_vcx3q_impl_s8:
0899 case ARM::BI__builtin_arm_cde_vcx3q_impl_u8: {
0900 Intrinsic::ID Param0;
0901 switch (BuiltinID) {
0902 case ARM::BI__builtin_arm_cde_vcx2qa_impl_s8:
0903 Param0 = Intrinsic::arm_cde_vcx2qa;
0904 break;
0905 case ARM::BI__builtin_arm_cde_vcx2qa_impl_u8:
0906 Param0 = Intrinsic::arm_cde_vcx2qa;
0907 break;
0908 case ARM::BI__builtin_arm_cde_vcx3q_impl_s8:
0909 Param0 = Intrinsic::arm_cde_vcx3q;
0910 break;
0911 case ARM::BI__builtin_arm_cde_vcx3q_impl_u8:
0912 Param0 = Intrinsic::arm_cde_vcx3q;
0913 break;
0914 }
0915 Value *Val0 = EmitScalarExpr(E->getArg(0));
0916 Value *Val1 = EmitScalarExpr(E->getArg(1));
0917 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0918 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0919 Value *Val4 = EmitScalarExpr(E->getArg(2));
0920 Value *Val5 = EmitScalarExpr(E->getArg(3));
0921 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val3, Val4, Val5});
0922 llvm::Type *Val7 = llvm::FixedVectorType::get(Int8Ty, 16);
0923 return Builder.CreateBitCast(Val6, Val7);
0924 }
0925 case ARM::BI__builtin_arm_cde_vcx3qa_impl_f32: {
0926 Value *Val0 = EmitScalarExpr(E->getArg(0));
0927 Value *Val1 = EmitScalarExpr(E->getArg(1));
0928 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0929 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0930 Value *Val4 = EmitScalarExpr(E->getArg(2));
0931 Value *Val5 = EmitScalarExpr(E->getArg(3));
0932 Value *Val6 = EmitScalarExpr(E->getArg(4));
0933 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx3qa), {Val0, Val3, Val4, Val5, Val6});
0934 llvm::Type *Val8 = llvm::FixedVectorType::get(FloatTy, 4);
0935 return Builder.CreateBitCast(Val7, Val8);
0936 }
0937 case ARM::BI__builtin_arm_cde_vcx3qa_impl_f16: {
0938 Value *Val0 = EmitScalarExpr(E->getArg(0));
0939 Value *Val1 = EmitScalarExpr(E->getArg(1));
0940 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0941 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0942 Value *Val4 = EmitScalarExpr(E->getArg(2));
0943 Value *Val5 = EmitScalarExpr(E->getArg(3));
0944 Value *Val6 = EmitScalarExpr(E->getArg(4));
0945 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx3qa), {Val0, Val3, Val4, Val5, Val6});
0946 llvm::Type *Val8 = llvm::FixedVectorType::get(HalfTy, 8);
0947 return Builder.CreateBitCast(Val7, Val8);
0948 }
0949 case ARM::BI__builtin_arm_cde_vcx3qa_impl_s16:
0950 case ARM::BI__builtin_arm_cde_vcx3qa_impl_u16: {
0951 Value *Val0 = EmitScalarExpr(E->getArg(0));
0952 Value *Val1 = EmitScalarExpr(E->getArg(1));
0953 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0954 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0955 Value *Val4 = EmitScalarExpr(E->getArg(2));
0956 Value *Val5 = EmitScalarExpr(E->getArg(3));
0957 Value *Val6 = EmitScalarExpr(E->getArg(4));
0958 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx3qa), {Val0, Val3, Val4, Val5, Val6});
0959 llvm::Type *Val8 = llvm::FixedVectorType::get(Int16Ty, 8);
0960 return Builder.CreateBitCast(Val7, Val8);
0961 }
0962 case ARM::BI__builtin_arm_cde_vcx3qa_impl_s32:
0963 case ARM::BI__builtin_arm_cde_vcx3qa_impl_u32: {
0964 Value *Val0 = EmitScalarExpr(E->getArg(0));
0965 Value *Val1 = EmitScalarExpr(E->getArg(1));
0966 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0967 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0968 Value *Val4 = EmitScalarExpr(E->getArg(2));
0969 Value *Val5 = EmitScalarExpr(E->getArg(3));
0970 Value *Val6 = EmitScalarExpr(E->getArg(4));
0971 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx3qa), {Val0, Val3, Val4, Val5, Val6});
0972 llvm::Type *Val8 = llvm::FixedVectorType::get(Int32Ty, 4);
0973 return Builder.CreateBitCast(Val7, Val8);
0974 }
0975 case ARM::BI__builtin_arm_cde_vcx3qa_impl_s64:
0976 case ARM::BI__builtin_arm_cde_vcx3qa_impl_u64: {
0977 Value *Val0 = EmitScalarExpr(E->getArg(0));
0978 Value *Val1 = EmitScalarExpr(E->getArg(1));
0979 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0980 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0981 Value *Val4 = EmitScalarExpr(E->getArg(2));
0982 Value *Val5 = EmitScalarExpr(E->getArg(3));
0983 Value *Val6 = EmitScalarExpr(E->getArg(4));
0984 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx3qa), {Val0, Val3, Val4, Val5, Val6});
0985 llvm::Type *Val8 = llvm::FixedVectorType::get(Int64Ty, 2);
0986 return Builder.CreateBitCast(Val7, Val8);
0987 }
0988 case ARM::BI__builtin_arm_cde_vcx3qa_impl_s8:
0989 case ARM::BI__builtin_arm_cde_vcx3qa_impl_u8: {
0990 Value *Val0 = EmitScalarExpr(E->getArg(0));
0991 Value *Val1 = EmitScalarExpr(E->getArg(1));
0992 llvm::Type *Val2 = llvm::FixedVectorType::get(Int8Ty, 16);
0993 Value *Val3 = Builder.CreateBitCast(Val1, Val2);
0994 Value *Val4 = EmitScalarExpr(E->getArg(2));
0995 Value *Val5 = EmitScalarExpr(E->getArg(3));
0996 Value *Val6 = EmitScalarExpr(E->getArg(4));
0997 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_cde_vcx3qa), {Val0, Val3, Val4, Val5, Val6});
0998 llvm::Type *Val8 = llvm::FixedVectorType::get(Int8Ty, 16);
0999 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 }