Back to home page

EIC code displayed by LXR

 
 

    


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 }