case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_s64:
case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_u64:
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_f32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_s32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_u32: {
  llvm::Type * Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_s64:
    Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_u64:
    Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_f32:
    Param0 = llvm::FixedVectorType::get(FloatTy, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_s32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_u32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreateLoad(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vldr_gather_base_wb, {Param0, Param1}), {Val1, Val2});
  Value *Val4 = Builder.CreateExtractValue(Val3, static_cast<unsigned>(1));
  Builder.CreateStore(Val4, Val0);
  return Builder.CreateExtractValue(Val3, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vddupq_wb_u16:
case ARM::BI__builtin_arm_mve_vddupq_wb_u32:
case ARM::BI__builtin_arm_mve_vddupq_wb_u8:
case ARM::BI__builtin_arm_mve_vidupq_wb_u16:
case ARM::BI__builtin_arm_mve_vidupq_wb_u32:
case ARM::BI__builtin_arm_mve_vidupq_wb_u8: {
  Intrinsic::ID  Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vddupq_wb_u16:
    Param0 = Intrinsic::arm_mve_vddup;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vddupq_wb_u32:
    Param0 = Intrinsic::arm_mve_vddup;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vddupq_wb_u8:
    Param0 = Intrinsic::arm_mve_vddup;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vidupq_wb_u16:
    Param0 = Intrinsic::arm_mve_vidup;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vidupq_wb_u32:
    Param0 = Intrinsic::arm_mve_vidup;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vidupq_wb_u8:
    Param0 = Intrinsic::arm_mve_vidup;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreateLoad(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val1, Val2});
  Value *Val4 = Builder.CreateExtractValue(Val3, static_cast<unsigned>(1));
  Builder.CreateStore(Val4, Val0);
  return Builder.CreateExtractValue(Val3, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_s64:
case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_u64:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_f32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_s32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_u32: {
  llvm::Type * Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_s64:
    Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_u64:
    Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_f32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_s32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_u32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreateLoad(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vstr_scatter_base_wb, {Param0, Param1}), {Val1, Val2, Val3});
  return Builder.CreateStore(Val4, Val0);
}
case ARM::BI__builtin_arm_mve_vdwdupq_wb_u16:
case ARM::BI__builtin_arm_mve_vdwdupq_wb_u32:
case ARM::BI__builtin_arm_mve_vdwdupq_wb_u8:
case ARM::BI__builtin_arm_mve_viwdupq_wb_u16:
case ARM::BI__builtin_arm_mve_viwdupq_wb_u32:
case ARM::BI__builtin_arm_mve_viwdupq_wb_u8: {
  Intrinsic::ID  Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vdwdupq_wb_u16:
    Param0 = Intrinsic::arm_mve_vdwdup;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vdwdupq_wb_u32:
    Param0 = Intrinsic::arm_mve_vdwdup;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vdwdupq_wb_u8:
    Param0 = Intrinsic::arm_mve_vdwdup;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_wb_u16:
    Param0 = Intrinsic::arm_mve_viwdup;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_wb_u32:
    Param0 = Intrinsic::arm_mve_viwdup;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_wb_u8:
    Param0 = Intrinsic::arm_mve_viwdup;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreateLoad(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val1, Val2, Val3});
  Value *Val5 = Builder.CreateExtractValue(Val4, static_cast<unsigned>(1));
  Builder.CreateStore(Val5, Val0);
  return Builder.CreateExtractValue(Val4, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_z_s64:
case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_z_u64:
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_f32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_s32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_u32: {
  llvm::Type * Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_z_s64:
    Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_z_u64:
    Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_f32:
    Param0 = llvm::FixedVectorType::get(FloatTy, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_s32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_u32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreateLoad(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vldr_gather_base_wb_predicated, {Param0, Param1, llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1, Val2, Val5});
  Value *Val7 = Builder.CreateExtractValue(Val6, static_cast<unsigned>(1));
  Builder.CreateStore(Val7, Val0);
  return Builder.CreateExtractValue(Val6, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_p_s64:
case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_p_u64:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_f32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_s32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_u32: {
  llvm::Type * Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_p_s64:
    Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_p_u64:
    Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_f32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_s32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_u32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreateLoad(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  Value *Val4 = EmitScalarExpr(E->getArg(3));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vstr_scatter_base_wb_predicated, {Param0, Param1, llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1, Val2, Val3, Val6});
  return Builder.CreateStore(Val7, Val0);
}
case ARM::BI__builtin_arm_mve_vld1q_f16:
case ARM::BI__builtin_arm_mve_vld1q_s16:
case ARM::BI__builtin_arm_mve_vld1q_u16:
case ARM::BI__builtin_arm_mve_vldrhq_f16:
case ARM::BI__builtin_arm_mve_vldrhq_s16:
case ARM::BI__builtin_arm_mve_vldrhq_u16: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vld1q_f16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8));
    break;
  case ARM::BI__builtin_arm_mve_vld1q_s16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
    break;
  case ARM::BI__builtin_arm_mve_vld1q_u16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_f16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8));
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_s16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_u16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), Param0);
  Address Val2 = Address(Val1, CharUnits::fromQuantity(2));
  return Builder.CreateLoad(Val2);
}
case ARM::BI__builtin_arm_mve_vld1q_f32:
case ARM::BI__builtin_arm_mve_vld1q_s32:
case ARM::BI__builtin_arm_mve_vld1q_u32:
case ARM::BI__builtin_arm_mve_vldrwq_f32:
case ARM::BI__builtin_arm_mve_vldrwq_s32:
case ARM::BI__builtin_arm_mve_vldrwq_u32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vld1q_f32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4));
    break;
  case ARM::BI__builtin_arm_mve_vld1q_s32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
    break;
  case ARM::BI__builtin_arm_mve_vld1q_u32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_f32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4));
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_s32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_u32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), Param0);
  Address Val2 = Address(Val1, CharUnits::fromQuantity(4));
  return Builder.CreateLoad(Val2);
}
case ARM::BI__builtin_arm_mve_vld1q_z_f32:
case ARM::BI__builtin_arm_mve_vldrwq_z_f32: {
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4)));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, 4);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
  llvm::Type *Val6 = llvm::FixedVectorType::get(FloatTy, 4);
  Value *Val7 = llvm::Constant::getNullValue(Val6);
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_load, {llvm::FixedVectorType::get(FloatTy, 4), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4))}), {Val1, Val2, Val5, Val7});
}
case ARM::BI__builtin_arm_mve_vld1q_z_f16:
case ARM::BI__builtin_arm_mve_vldrhq_z_f16: {
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8)));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, 2);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val4});
  llvm::Type *Val6 = llvm::FixedVectorType::get(HalfTy, 8);
  Value *Val7 = llvm::Constant::getNullValue(Val6);
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_load, {llvm::FixedVectorType::get(HalfTy, 8), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8))}), {Val1, Val2, Val5, Val7});
}
case ARM::BI__builtin_arm_mve_vldrhq_s32:
case ARM::BI__builtin_arm_mve_vldrhq_u32: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vldrhq_s32:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_u32:
    Param0 = 1;
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 4)));
  Address Val2 = Address(Val1, CharUnits::fromQuantity(2));
  Value *Val3 = Builder.CreateLoad(Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
  return SignOrZeroExtend(Builder, Val3, Val4, static_cast<bool>(Param0));
}
case ARM::BI__builtin_arm_mve_vldrhq_z_s32:
case ARM::BI__builtin_arm_mve_vldrhq_z_u32: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vldrhq_z_s32:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_z_u32:
    Param0 = 1;
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 4)));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, 2);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int16Ty, 4);
  Value *Val7 = llvm::Constant::getNullValue(Val6);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_load, {llvm::FixedVectorType::get(Int16Ty, 4), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 4))}), {Val1, Val2, Val5, Val7});
  llvm::Type *Val9 = llvm::FixedVectorType::get(Int32Ty, 4);
  return SignOrZeroExtend(Builder, Val8, Val9, static_cast<bool>(Param0));
}
case ARM::BI__builtin_arm_mve_vld1q_z_s16:
case ARM::BI__builtin_arm_mve_vld1q_z_u16:
case ARM::BI__builtin_arm_mve_vldrhq_z_s16:
case ARM::BI__builtin_arm_mve_vldrhq_z_u16: {
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8)));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, 2);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val4});
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val7 = llvm::Constant::getNullValue(Val6);
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_load, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8))}), {Val1, Val2, Val5, Val7});
}
case ARM::BI__builtin_arm_mve_vld1q_z_s32:
case ARM::BI__builtin_arm_mve_vld1q_z_u32:
case ARM::BI__builtin_arm_mve_vldrwq_z_s32:
case ARM::BI__builtin_arm_mve_vldrwq_z_u32: {
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4)));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, 4);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val7 = llvm::Constant::getNullValue(Val6);
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_load, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4))}), {Val1, Val2, Val5, Val7});
}
case ARM::BI__builtin_arm_mve_vld1q_s8:
case ARM::BI__builtin_arm_mve_vld1q_u8:
case ARM::BI__builtin_arm_mve_vldrbq_s8:
case ARM::BI__builtin_arm_mve_vldrbq_u8: {
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 16)));
  Address Val2 = Address(Val1, CharUnits::fromQuantity(1));
  return Builder.CreateLoad(Val2);
}
case ARM::BI__builtin_arm_mve_vld1q_z_s8:
case ARM::BI__builtin_arm_mve_vld1q_z_u8:
case ARM::BI__builtin_arm_mve_vldrbq_z_s8:
case ARM::BI__builtin_arm_mve_vldrbq_z_u8: {
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 16)));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, 1);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val4});
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val7 = llvm::Constant::getNullValue(Val6);
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_load, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 16))}), {Val1, Val2, Val5, Val7});
}
case ARM::BI__builtin_arm_mve_vldrbq_s32:
case ARM::BI__builtin_arm_mve_vldrbq_u32: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vldrbq_s32:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vldrbq_u32:
    Param0 = 1;
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 4)));
  Address Val2 = Address(Val1, CharUnits::fromQuantity(1));
  Value *Val3 = Builder.CreateLoad(Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
  return SignOrZeroExtend(Builder, Val3, Val4, static_cast<bool>(Param0));
}
case ARM::BI__builtin_arm_mve_vldrbq_z_s32:
case ARM::BI__builtin_arm_mve_vldrbq_z_u32: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vldrbq_z_s32:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vldrbq_z_u32:
    Param0 = 1;
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 4)));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, 1);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int8Ty, 4);
  Value *Val7 = llvm::Constant::getNullValue(Val6);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_load, {llvm::FixedVectorType::get(Int8Ty, 4), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 4))}), {Val1, Val2, Val5, Val7});
  llvm::Type *Val9 = llvm::FixedVectorType::get(Int32Ty, 4);
  return SignOrZeroExtend(Builder, Val8, Val9, static_cast<bool>(Param0));
}
case ARM::BI__builtin_arm_mve_vldrbq_s16:
case ARM::BI__builtin_arm_mve_vldrbq_u16: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vldrbq_s16:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vldrbq_u16:
    Param0 = 1;
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 8)));
  Address Val2 = Address(Val1, CharUnits::fromQuantity(1));
  Value *Val3 = Builder.CreateLoad(Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
  return SignOrZeroExtend(Builder, Val3, Val4, static_cast<bool>(Param0));
}
case ARM::BI__builtin_arm_mve_vldrbq_z_s16:
case ARM::BI__builtin_arm_mve_vldrbq_z_u16: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vldrbq_z_s16:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vldrbq_z_u16:
    Param0 = 1;
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 8)));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, 1);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val4});
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int8Ty, 8);
  Value *Val7 = llvm::Constant::getNullValue(Val6);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_load, {llvm::FixedVectorType::get(Int8Ty, 8), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 8))}), {Val1, Val2, Val5, Val7});
  llvm::Type *Val9 = llvm::FixedVectorType::get(Int16Ty, 8);
  return SignOrZeroExtend(Builder, Val8, Val9, static_cast<bool>(Param0));
}
case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s16:
case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s32:
case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s8:
case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u16:
case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u32:
case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u8:
case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_p_s64:
case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_p_u64:
case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_p_s64:
case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_p_u64:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_f16:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_s16:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_s32:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_u16:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_u32:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_f16:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_s16:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_s32:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_u16:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_u32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_f32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_s32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_u32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_f32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_s32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_u32: {
  uint32_t  Param0;
  uint32_t  Param1;
  llvm::Type * Param2;
  llvm::Type * Param3;
  llvm::Type * Param4;
  llvm::Type * Param5;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s16:
    Param0 = 8;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::PointerType::getUnqual(Int8Ty);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s32:
    Param0 = 8;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::PointerType::getUnqual(Int8Ty);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s8:
    Param0 = 8;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param3 = llvm::PointerType::getUnqual(Int8Ty);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u16:
    Param0 = 8;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::PointerType::getUnqual(Int8Ty);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u32:
    Param0 = 8;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::PointerType::getUnqual(Int8Ty);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u8:
    Param0 = 8;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param3 = llvm::PointerType::getUnqual(Int8Ty);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_p_s64:
    Param0 = 64;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::PointerType::getUnqual(Int64Ty);
    Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param5 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_p_u64:
    Param0 = 64;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::PointerType::getUnqual(Int64Ty);
    Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param5 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_p_s64:
    Param0 = 64;
    Param1 = 3;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::PointerType::getUnqual(Int64Ty);
    Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param5 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_p_u64:
    Param0 = 64;
    Param1 = 3;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::PointerType::getUnqual(Int64Ty);
    Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param5 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_f16:
    Param0 = 16;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::PointerType::getUnqual(HalfTy);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_s16:
    Param0 = 16;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::PointerType::getUnqual(Int16Ty);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_s32:
    Param0 = 16;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::PointerType::getUnqual(Int16Ty);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_u16:
    Param0 = 16;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::PointerType::getUnqual(Int16Ty);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_u32:
    Param0 = 16;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::PointerType::getUnqual(Int16Ty);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_f16:
    Param0 = 16;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::PointerType::getUnqual(HalfTy);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_s16:
    Param0 = 16;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::PointerType::getUnqual(Int16Ty);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_s32:
    Param0 = 16;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::PointerType::getUnqual(Int16Ty);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_u16:
    Param0 = 16;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::PointerType::getUnqual(Int16Ty);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_u32:
    Param0 = 16;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::PointerType::getUnqual(Int16Ty);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_f32:
    Param0 = 32;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::PointerType::getUnqual(FloatTy);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_s32:
    Param0 = 32;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::PointerType::getUnqual(Int32Ty);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_u32:
    Param0 = 32;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::PointerType::getUnqual(Int32Ty);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_f32:
    Param0 = 32;
    Param1 = 2;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::PointerType::getUnqual(FloatTy);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_s32:
    Param0 = 32;
    Param1 = 2;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::PointerType::getUnqual(Int32Ty);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_u32:
    Param0 = 32;
    Param1 = 2;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::PointerType::getUnqual(Int32Ty);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val5 = EmitScalarExpr(E->getArg(3));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param2}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vstr_scatter_offset_predicated, {Param3, Param4, Param5, Param2}), {(Val0.getPointer()), Val1, Val2, Val3, Val4, Val7});
}
case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s16:
case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s32:
case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s8:
case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u16:
case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u32:
case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u8:
case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_s64:
case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_u64:
case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_s64:
case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_u64:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_f16:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_s16:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_s32:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_u16:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_u32:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_f16:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_s16:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_s32:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_u16:
case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_u32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_f32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_s32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_u32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_f32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_s32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_u32: {
  uint32_t  Param0;
  uint32_t  Param1;
  llvm::Type * Param2;
  llvm::Type * Param3;
  llvm::Type * Param4;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s16:
    Param0 = 8;
    Param1 = 0;
    Param2 = llvm::PointerType::getUnqual(Int8Ty);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s32:
    Param0 = 8;
    Param1 = 0;
    Param2 = llvm::PointerType::getUnqual(Int8Ty);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s8:
    Param0 = 8;
    Param1 = 0;
    Param2 = llvm::PointerType::getUnqual(Int8Ty);
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u16:
    Param0 = 8;
    Param1 = 0;
    Param2 = llvm::PointerType::getUnqual(Int8Ty);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u32:
    Param0 = 8;
    Param1 = 0;
    Param2 = llvm::PointerType::getUnqual(Int8Ty);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u8:
    Param0 = 8;
    Param1 = 0;
    Param2 = llvm::PointerType::getUnqual(Int8Ty);
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_s64:
    Param0 = 64;
    Param1 = 0;
    Param2 = llvm::PointerType::getUnqual(Int64Ty);
    Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_u64:
    Param0 = 64;
    Param1 = 0;
    Param2 = llvm::PointerType::getUnqual(Int64Ty);
    Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_s64:
    Param0 = 64;
    Param1 = 3;
    Param2 = llvm::PointerType::getUnqual(Int64Ty);
    Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_u64:
    Param0 = 64;
    Param1 = 3;
    Param2 = llvm::PointerType::getUnqual(Int64Ty);
    Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_f16:
    Param0 = 16;
    Param1 = 0;
    Param2 = llvm::PointerType::getUnqual(HalfTy);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_s16:
    Param0 = 16;
    Param1 = 0;
    Param2 = llvm::PointerType::getUnqual(Int16Ty);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_s32:
    Param0 = 16;
    Param1 = 0;
    Param2 = llvm::PointerType::getUnqual(Int16Ty);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_u16:
    Param0 = 16;
    Param1 = 0;
    Param2 = llvm::PointerType::getUnqual(Int16Ty);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_u32:
    Param0 = 16;
    Param1 = 0;
    Param2 = llvm::PointerType::getUnqual(Int16Ty);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_f16:
    Param0 = 16;
    Param1 = 1;
    Param2 = llvm::PointerType::getUnqual(HalfTy);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_s16:
    Param0 = 16;
    Param1 = 1;
    Param2 = llvm::PointerType::getUnqual(Int16Ty);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_s32:
    Param0 = 16;
    Param1 = 1;
    Param2 = llvm::PointerType::getUnqual(Int16Ty);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_u16:
    Param0 = 16;
    Param1 = 1;
    Param2 = llvm::PointerType::getUnqual(Int16Ty);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_u32:
    Param0 = 16;
    Param1 = 1;
    Param2 = llvm::PointerType::getUnqual(Int16Ty);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_f32:
    Param0 = 32;
    Param1 = 0;
    Param2 = llvm::PointerType::getUnqual(FloatTy);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_s32:
    Param0 = 32;
    Param1 = 0;
    Param2 = llvm::PointerType::getUnqual(Int32Ty);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_u32:
    Param0 = 32;
    Param1 = 0;
    Param2 = llvm::PointerType::getUnqual(Int32Ty);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_f32:
    Param0 = 32;
    Param1 = 2;
    Param2 = llvm::PointerType::getUnqual(FloatTy);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_s32:
    Param0 = 32;
    Param1 = 2;
    Param2 = llvm::PointerType::getUnqual(Int32Ty);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_u32:
    Param0 = 32;
    Param1 = 2;
    Param2 = llvm::PointerType::getUnqual(Int32Ty);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param1);
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vstr_scatter_offset, {Param2, Param3, Param4}), {(Val0.getPointer()), Val1, Val2, Val3, Val4});
}
case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s16:
case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s32:
case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s8:
case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u16:
case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u32:
case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u8:
case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_z_s64:
case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_z_u64:
case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_z_s64:
case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_z_u64:
case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_f16:
case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_s16:
case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_s32:
case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_u16:
case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_u32:
case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_f16:
case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_s16:
case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_s32:
case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_u16:
case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_u32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_f32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_s32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_u32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_f32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_s32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_u32: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  llvm::Type * Param3;
  llvm::Type * Param4;
  llvm::Type * Param5;
  llvm::Type * Param6;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s16:
    Param0 = 8;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::PointerType::getUnqual(Int8Ty);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s32:
    Param0 = 8;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::PointerType::getUnqual(Int8Ty);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s8:
    Param0 = 8;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::PointerType::getUnqual(Int8Ty);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u16:
    Param0 = 8;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::PointerType::getUnqual(Int8Ty);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u32:
    Param0 = 8;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::PointerType::getUnqual(Int8Ty);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u8:
    Param0 = 8;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::PointerType::getUnqual(Int8Ty);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_z_s64:
    Param0 = 64;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param5 = llvm::PointerType::getUnqual(Int64Ty);
    Param6 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_z_u64:
    Param0 = 64;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param5 = llvm::PointerType::getUnqual(Int64Ty);
    Param6 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_z_s64:
    Param0 = 64;
    Param1 = 3;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param5 = llvm::PointerType::getUnqual(Int64Ty);
    Param6 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_z_u64:
    Param0 = 64;
    Param1 = 3;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param5 = llvm::PointerType::getUnqual(Int64Ty);
    Param6 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_f16:
    Param0 = 16;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(HalfTy, 8);
    Param5 = llvm::PointerType::getUnqual(HalfTy);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_s16:
    Param0 = 16;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::PointerType::getUnqual(Int16Ty);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_s32:
    Param0 = 16;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::PointerType::getUnqual(Int16Ty);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_u16:
    Param0 = 16;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::PointerType::getUnqual(Int16Ty);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_u32:
    Param0 = 16;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::PointerType::getUnqual(Int16Ty);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_f16:
    Param0 = 16;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(HalfTy, 8);
    Param5 = llvm::PointerType::getUnqual(HalfTy);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_s16:
    Param0 = 16;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::PointerType::getUnqual(Int16Ty);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_s32:
    Param0 = 16;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::PointerType::getUnqual(Int16Ty);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_u16:
    Param0 = 16;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::PointerType::getUnqual(Int16Ty);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_u32:
    Param0 = 16;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::PointerType::getUnqual(Int16Ty);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_f32:
    Param0 = 32;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(FloatTy, 4);
    Param5 = llvm::PointerType::getUnqual(FloatTy);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_s32:
    Param0 = 32;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::PointerType::getUnqual(Int32Ty);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_u32:
    Param0 = 32;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::PointerType::getUnqual(Int32Ty);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_f32:
    Param0 = 32;
    Param1 = 2;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(FloatTy, 4);
    Param5 = llvm::PointerType::getUnqual(FloatTy);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_s32:
    Param0 = 32;
    Param1 = 2;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::PointerType::getUnqual(Int32Ty);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_u32:
    Param0 = 32;
    Param1 = 2;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::PointerType::getUnqual(Int32Ty);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param2);
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vldr_gather_offset_predicated, {Param4, Param5, Param6, Param3}), {(Val0.getPointer()), Val1, Val2, Val3, Val4, Val7});
}
case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s16:
case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s32:
case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s8:
case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u16:
case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u32:
case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u8:
case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_s64:
case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_u64:
case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_s64:
case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_u64:
case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_f16:
case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_s16:
case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_s32:
case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_u16:
case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_u32:
case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_f16:
case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_s16:
case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_s32:
case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_u16:
case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_u32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_f32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_s32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_u32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_f32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_s32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_u32: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  llvm::Type * Param3;
  llvm::Type * Param4;
  llvm::Type * Param5;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s16:
    Param0 = 8;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::PointerType::getUnqual(Int8Ty);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s32:
    Param0 = 8;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::PointerType::getUnqual(Int8Ty);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s8:
    Param0 = 8;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param4 = llvm::PointerType::getUnqual(Int8Ty);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u16:
    Param0 = 8;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::PointerType::getUnqual(Int8Ty);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u32:
    Param0 = 8;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::PointerType::getUnqual(Int8Ty);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u8:
    Param0 = 8;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param4 = llvm::PointerType::getUnqual(Int8Ty);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_s64:
    Param0 = 64;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param4 = llvm::PointerType::getUnqual(Int64Ty);
    Param5 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_u64:
    Param0 = 64;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param4 = llvm::PointerType::getUnqual(Int64Ty);
    Param5 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_s64:
    Param0 = 64;
    Param1 = 3;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param4 = llvm::PointerType::getUnqual(Int64Ty);
    Param5 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_u64:
    Param0 = 64;
    Param1 = 3;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param4 = llvm::PointerType::getUnqual(Int64Ty);
    Param5 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_f16:
    Param0 = 16;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    Param4 = llvm::PointerType::getUnqual(HalfTy);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_s16:
    Param0 = 16;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::PointerType::getUnqual(Int16Ty);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_s32:
    Param0 = 16;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::PointerType::getUnqual(Int16Ty);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_u16:
    Param0 = 16;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::PointerType::getUnqual(Int16Ty);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_u32:
    Param0 = 16;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::PointerType::getUnqual(Int16Ty);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_f16:
    Param0 = 16;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    Param4 = llvm::PointerType::getUnqual(HalfTy);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_s16:
    Param0 = 16;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::PointerType::getUnqual(Int16Ty);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_s32:
    Param0 = 16;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::PointerType::getUnqual(Int16Ty);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_u16:
    Param0 = 16;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::PointerType::getUnqual(Int16Ty);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_u32:
    Param0 = 16;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::PointerType::getUnqual(Int16Ty);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_f32:
    Param0 = 32;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    Param4 = llvm::PointerType::getUnqual(FloatTy);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_s32:
    Param0 = 32;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::PointerType::getUnqual(Int32Ty);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_u32:
    Param0 = 32;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::PointerType::getUnqual(Int32Ty);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_f32:
    Param0 = 32;
    Param1 = 2;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    Param4 = llvm::PointerType::getUnqual(FloatTy);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_s32:
    Param0 = 32;
    Param1 = 2;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::PointerType::getUnqual(Int32Ty);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_u32:
    Param0 = 32;
    Param1 = 2;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::PointerType::getUnqual(Int32Ty);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param2);
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vldr_gather_offset, {Param3, Param4, Param5}), {(Val0.getPointer()), Val1, Val2, Val3, Val4});
}
case ARM::BI__builtin_arm_mve_vshlcq_s16:
case ARM::BI__builtin_arm_mve_vshlcq_s32:
case ARM::BI__builtin_arm_mve_vshlcq_s8:
case ARM::BI__builtin_arm_mve_vshlcq_u16:
case ARM::BI__builtin_arm_mve_vshlcq_u32:
case ARM::BI__builtin_arm_mve_vshlcq_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vshlcq_s16:
    Param0 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshlcq_s32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshlcq_s8:
    Param0 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshlcq_u16:
    Param0 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshlcq_u32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshlcq_u8:
    Param0 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(1));
  Value *Val1 = Builder.CreateLoad(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshlc, {Param0}), {Val2, Val1, Val3});
  Value *Val5 = Builder.CreateExtractValue(Val4, static_cast<unsigned>(0));
  Builder.CreateStore(Val5, Val0);
  return Builder.CreateExtractValue(Val4, static_cast<unsigned>(1));
}
case ARM::BI__builtin_arm_mve_vddupq_m_wb_u16:
case ARM::BI__builtin_arm_mve_vddupq_m_wb_u32:
case ARM::BI__builtin_arm_mve_vddupq_m_wb_u8:
case ARM::BI__builtin_arm_mve_vidupq_m_wb_u16:
case ARM::BI__builtin_arm_mve_vidupq_m_wb_u32:
case ARM::BI__builtin_arm_mve_vidupq_m_wb_u8:
case ARM::BI__builtin_arm_mve_vshlcq_m_s16:
case ARM::BI__builtin_arm_mve_vshlcq_m_s32:
case ARM::BI__builtin_arm_mve_vshlcq_m_s8:
case ARM::BI__builtin_arm_mve_vshlcq_m_u16:
case ARM::BI__builtin_arm_mve_vshlcq_m_u32:
case ARM::BI__builtin_arm_mve_vshlcq_m_u8: {
  llvm::Type * Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  unsigned  Param3;
  unsigned  Param4;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vddupq_m_wb_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vddup_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = 1;
    Param4 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vddupq_m_wb_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vddup_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = 1;
    Param4 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vddupq_m_wb_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vddup_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param3 = 1;
    Param4 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vidupq_m_wb_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vidup_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = 1;
    Param4 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vidupq_m_wb_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vidup_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = 1;
    Param4 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vidupq_m_wb_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vidup_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param3 = 1;
    Param4 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vshlcq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vshlc_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = 0;
    Param4 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vshlcq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vshlc_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = 0;
    Param4 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vshlcq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vshlc_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param3 = 0;
    Param4 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vshlcq_m_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vshlc_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = 0;
    Param4 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vshlcq_m_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vshlc_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = 0;
    Param4 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vshlcq_m_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vshlc_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param3 = 0;
    Param4 = 1;
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(1));
  Value *Val1 = Builder.CreateLoad(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  Value *Val4 = EmitScalarExpr(E->getArg(3));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val5});
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val2, Val1, Val3, Val6});
  Value *Val8 = Builder.CreateExtractValue(Val7, static_cast<unsigned>(Param3));
  Builder.CreateStore(Val8, Val0);
  return Builder.CreateExtractValue(Val7, static_cast<unsigned>(Param4));
}
case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u16:
case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u32:
case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u8:
case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u16:
case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u32:
case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u8: {
  llvm::Type * Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vdwdup_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vdwdup_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vdwdup_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_viwdup_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_viwdup_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_viwdup_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Address Val0 = EmitPointerWithAlignment(E->getArg(1));
  Value *Val1 = Builder.CreateLoad(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  Value *Val4 = EmitScalarExpr(E->getArg(3));
  Value *Val5 = EmitScalarExpr(E->getArg(4));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val6});
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val2, Val1, Val3, Val4, Val7});
  Value *Val9 = Builder.CreateExtractValue(Val8, static_cast<unsigned>(1));
  Builder.CreateStore(Val9, Val0);
  return Builder.CreateExtractValue(Val8, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vld2q_f16:
case ARM::BI__builtin_arm_mve_vld2q_f32:
case ARM::BI__builtin_arm_mve_vld2q_s16:
case ARM::BI__builtin_arm_mve_vld2q_s32:
case ARM::BI__builtin_arm_mve_vld2q_s8:
case ARM::BI__builtin_arm_mve_vld2q_u16:
case ARM::BI__builtin_arm_mve_vld2q_u32:
case ARM::BI__builtin_arm_mve_vld2q_u8: {
  CustomCodeGenType = CustomCodeGen::VLD24;
  IRIntr = Intrinsic::arm_mve_vld2q;
  NumVectors = 2;
  break; // custom code gen
}
case ARM::BI__builtin_arm_mve_vld4q_f16:
case ARM::BI__builtin_arm_mve_vld4q_f32:
case ARM::BI__builtin_arm_mve_vld4q_s16:
case ARM::BI__builtin_arm_mve_vld4q_s32:
case ARM::BI__builtin_arm_mve_vld4q_s8:
case ARM::BI__builtin_arm_mve_vld4q_u16:
case ARM::BI__builtin_arm_mve_vld4q_u32:
case ARM::BI__builtin_arm_mve_vld4q_u8: {
  CustomCodeGenType = CustomCodeGen::VLD24;
  IRIntr = Intrinsic::arm_mve_vld4q;
  NumVectors = 4;
  break; // custom code gen
}
case ARM::BI__builtin_arm_mve_vst2q_f16:
case ARM::BI__builtin_arm_mve_vst2q_f32:
case ARM::BI__builtin_arm_mve_vst2q_s16:
case ARM::BI__builtin_arm_mve_vst2q_s32:
case ARM::BI__builtin_arm_mve_vst2q_s8:
case ARM::BI__builtin_arm_mve_vst2q_u16:
case ARM::BI__builtin_arm_mve_vst2q_u32:
case ARM::BI__builtin_arm_mve_vst2q_u8: {
  CustomCodeGenType = CustomCodeGen::VST24;
  IRIntr = Intrinsic::arm_mve_vst2q;
  NumVectors = 2;
  break; // custom code gen
}
case ARM::BI__builtin_arm_mve_vst4q_f16:
case ARM::BI__builtin_arm_mve_vst4q_f32:
case ARM::BI__builtin_arm_mve_vst4q_s16:
case ARM::BI__builtin_arm_mve_vst4q_s32:
case ARM::BI__builtin_arm_mve_vst4q_s8:
case ARM::BI__builtin_arm_mve_vst4q_u16:
case ARM::BI__builtin_arm_mve_vst4q_u32:
case ARM::BI__builtin_arm_mve_vst4q_u8: {
  CustomCodeGenType = CustomCodeGen::VST24;
  IRIntr = Intrinsic::arm_mve_vst4q;
  NumVectors = 4;
  break; // custom code gen
}
case ARM::BI__builtin_arm_mve_vmaxnmaq_f16:
case ARM::BI__builtin_arm_mve_vmaxnmaq_f32:
case ARM::BI__builtin_arm_mve_vminnmaq_f16:
case ARM::BI__builtin_arm_mve_vminnmaq_f32: {
  llvm::Type * Param0;
  Intrinsic::ID  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmaxnmaq_f16:
    Param0 = llvm::FixedVectorType::get(HalfTy, 8);
    Param1 = Intrinsic::maxnum;
    break;
  case ARM::BI__builtin_arm_mve_vmaxnmaq_f32:
    Param0 = llvm::FixedVectorType::get(FloatTy, 4);
    Param1 = Intrinsic::maxnum;
    break;
  case ARM::BI__builtin_arm_mve_vminnmaq_f16:
    Param0 = llvm::FixedVectorType::get(HalfTy, 8);
    Param1 = Intrinsic::minnum;
    break;
  case ARM::BI__builtin_arm_mve_vminnmaq_f32:
    Param0 = llvm::FixedVectorType::get(FloatTy, 4);
    Param1 = Intrinsic::minnum;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::fabs, {Param0}), {Val0});
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::fabs, {Param0}), {Val2});
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param0}), {Val1, Val3});
}
case ARM::BI__builtin_arm_mve_vctp16q:
case ARM::BI__builtin_arm_mve_vctp32q:
case ARM::BI__builtin_arm_mve_vctp64q:
case ARM::BI__builtin_arm_mve_vctp8q: {
  Intrinsic::ID  Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vctp16q:
    Param0 = Intrinsic::arm_mve_vctp16;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vctp32q:
    Param0 = Intrinsic::arm_mve_vctp32;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vctp64q:
    Param0 = Intrinsic::arm_mve_vctp64;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vctp8q:
    Param0 = Intrinsic::arm_mve_vctp8;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0});
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param1}), {Val1});
  return Builder.CreateIntCast(Val2, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vmvnq_n_s32:
case ARM::BI__builtin_arm_mve_vmvnq_n_u32: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmvnq_n_s32:
    Param0 = true;
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_n_u32:
    Param0 = false;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, Param0);
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  return Builder.CreateNot(Val2);
}
case ARM::BI__builtin_arm_mve_vmvnq_n_s16:
case ARM::BI__builtin_arm_mve_vmvnq_n_u16: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmvnq_n_s16:
    Param0 = true;
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_n_u16:
    Param0 = false;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateIntCast(Val1, Int16Ty, Param0);
  Value *Val3 = ARMMVEVectorSplat(Builder, Val2);
  return Builder.CreateNot(Val3);
}
case ARM::BI__builtin_arm_mve_vmaxavq_s16:
case ARM::BI__builtin_arm_mve_vmaxavq_s8:
case ARM::BI__builtin_arm_mve_vminavq_s16:
case ARM::BI__builtin_arm_mve_vminavq_s8: {
  Intrinsic::ID  Param0;
  llvm::Type * Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmaxavq_s16:
    Param0 = Intrinsic::arm_mve_maxav;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param2 = Int16Ty;
    break;
  case ARM::BI__builtin_arm_mve_vmaxavq_s8:
    Param0 = Intrinsic::arm_mve_maxav;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param2 = Int8Ty;
    break;
  case ARM::BI__builtin_arm_mve_vminavq_s16:
    Param0 = Intrinsic::arm_mve_minav;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param2 = Int16Ty;
    break;
  case ARM::BI__builtin_arm_mve_vminavq_s8:
    Param0 = Intrinsic::arm_mve_minav;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param2 = Int8Ty;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val1, Val2});
  return Builder.CreateIntCast(Val3, Param2, false);
}
case ARM::BI__builtin_arm_mve_vmaxavq_p_s16:
case ARM::BI__builtin_arm_mve_vmaxavq_p_s8:
case ARM::BI__builtin_arm_mve_vminavq_p_s16:
case ARM::BI__builtin_arm_mve_vminavq_p_s8: {
  llvm::Type * Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmaxavq_p_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_maxav_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = Int16Ty;
    break;
  case ARM::BI__builtin_arm_mve_vmaxavq_p_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_maxav_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param3 = Int8Ty;
    break;
  case ARM::BI__builtin_arm_mve_vminavq_p_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_minav_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = Int16Ty;
    break;
  case ARM::BI__builtin_arm_mve_vminavq_p_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_minav_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param3 = Int8Ty;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val4});
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val1, Val2, Val5});
  return Builder.CreateIntCast(Val6, Param3, false);
}
case ARM::BI__builtin_arm_mve_vmaxvq_s16:
case ARM::BI__builtin_arm_mve_vmaxvq_s8:
case ARM::BI__builtin_arm_mve_vmaxvq_u16:
case ARM::BI__builtin_arm_mve_vmaxvq_u8:
case ARM::BI__builtin_arm_mve_vminvq_s16:
case ARM::BI__builtin_arm_mve_vminvq_s8:
case ARM::BI__builtin_arm_mve_vminvq_u16:
case ARM::BI__builtin_arm_mve_vminvq_u8: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  llvm::Type * Param3;
  bool  Param4;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmaxvq_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_maxv;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = Int16Ty;
    Param4 = true;
    break;
  case ARM::BI__builtin_arm_mve_vmaxvq_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_maxv;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param3 = Int8Ty;
    Param4 = true;
    break;
  case ARM::BI__builtin_arm_mve_vmaxvq_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_maxv;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = Int16Ty;
    Param4 = false;
    break;
  case ARM::BI__builtin_arm_mve_vmaxvq_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_maxv;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param3 = Int8Ty;
    Param4 = false;
    break;
  case ARM::BI__builtin_arm_mve_vminvq_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_minv;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = Int16Ty;
    Param4 = true;
    break;
  case ARM::BI__builtin_arm_mve_vminvq_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_minv;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param3 = Int8Ty;
    Param4 = true;
    break;
  case ARM::BI__builtin_arm_mve_vminvq_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_minv;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = Int16Ty;
    Param4 = false;
    break;
  case ARM::BI__builtin_arm_mve_vminvq_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_minv;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param3 = Int8Ty;
    Param4 = false;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2}), {Val1, Val2, Val3});
  return Builder.CreateIntCast(Val4, Param3, Param4);
}
case ARM::BI__builtin_arm_mve_vmaxvq_p_s16:
case ARM::BI__builtin_arm_mve_vmaxvq_p_s8:
case ARM::BI__builtin_arm_mve_vmaxvq_p_u16:
case ARM::BI__builtin_arm_mve_vmaxvq_p_u8:
case ARM::BI__builtin_arm_mve_vminvq_p_s16:
case ARM::BI__builtin_arm_mve_vminvq_p_s8:
case ARM::BI__builtin_arm_mve_vminvq_p_u16:
case ARM::BI__builtin_arm_mve_vminvq_p_u8: {
  uint32_t  Param0;
  llvm::Type * Param1;
  Intrinsic::ID  Param2;
  llvm::Type * Param3;
  llvm::Type * Param4;
  bool  Param5;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmaxvq_p_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_maxv_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = Int16Ty;
    Param5 = true;
    break;
  case ARM::BI__builtin_arm_mve_vmaxvq_p_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_maxv_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param4 = Int8Ty;
    Param5 = true;
    break;
  case ARM::BI__builtin_arm_mve_vmaxvq_p_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_maxv_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = Int16Ty;
    Param5 = false;
    break;
  case ARM::BI__builtin_arm_mve_vmaxvq_p_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_maxv_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param4 = Int8Ty;
    Param5 = false;
    break;
  case ARM::BI__builtin_arm_mve_vminvq_p_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_minv_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = Int16Ty;
    Param5 = true;
    break;
  case ARM::BI__builtin_arm_mve_vminvq_p_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_minv_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param4 = Int8Ty;
    Param5 = true;
    break;
  case ARM::BI__builtin_arm_mve_vminvq_p_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_minv_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = Int16Ty;
    Param5 = false;
    break;
  case ARM::BI__builtin_arm_mve_vminvq_p_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_minv_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param4 = Int8Ty;
    Param5 = false;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val5});
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param1}), {Val1, Val2, Val3, Val6});
  return Builder.CreateIntCast(Val7, Param4, Param5);
}
case ARM::BI__builtin_arm_mve_vadcq_s32:
case ARM::BI__builtin_arm_mve_vadcq_u32:
case ARM::BI__builtin_arm_mve_vsbcq_s32:
case ARM::BI__builtin_arm_mve_vsbcq_u32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vadcq_s32:
    Param0 = Intrinsic::arm_mve_vadc;
    break;
  case ARM::BI__builtin_arm_mve_vadcq_u32:
    Param0 = Intrinsic::arm_mve_vadc;
    break;
  case ARM::BI__builtin_arm_mve_vsbcq_s32:
    Param0 = Intrinsic::arm_mve_vsbc;
    break;
  case ARM::BI__builtin_arm_mve_vsbcq_u32:
    Param0 = Intrinsic::arm_mve_vsbc;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Address Val2 = EmitPointerWithAlignment(E->getArg(2));
  Value *Val3 = Builder.CreateLoad(Val2);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, 29);
  Value *Val5 = Builder.CreateShl(Val3, Val4);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4)}), {Val0, Val1, Val5});
  Value *Val7 = llvm::ConstantInt::get(Int32Ty, 1);
  Value *Val8 = Builder.CreateExtractValue(Val6, static_cast<unsigned>(1));
  Value *Val9 = llvm::ConstantInt::get(Int32Ty, 29);
  Value *Val10 = Builder.CreateLShr(Val8, Val9);
  Value *Val11 = Builder.CreateAnd(Val7, Val10);
  Builder.CreateStore(Val11, Val2);
  return Builder.CreateExtractValue(Val6, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vcmpeqq_n_f16:
case ARM::BI__builtin_arm_mve_vcmpeqq_n_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpeqq_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = Builder.CreateFCmpOEQ(Val0, Val2);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
  return Builder.CreateIntCast(Val4, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpgeq_n_f16:
case ARM::BI__builtin_arm_mve_vcmpgeq_n_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpgeq_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgeq_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = Builder.CreateFCmpOGE(Val0, Val2);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
  return Builder.CreateIntCast(Val4, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpgtq_n_f16:
case ARM::BI__builtin_arm_mve_vcmpgtq_n_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpgtq_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgtq_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = Builder.CreateFCmpOGT(Val0, Val2);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
  return Builder.CreateIntCast(Val4, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpleq_n_f16:
case ARM::BI__builtin_arm_mve_vcmpleq_n_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpleq_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpleq_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = Builder.CreateFCmpOLE(Val0, Val2);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
  return Builder.CreateIntCast(Val4, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpltq_n_f16:
case ARM::BI__builtin_arm_mve_vcmpltq_n_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpltq_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpltq_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = Builder.CreateFCmpOLT(Val0, Val2);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
  return Builder.CreateIntCast(Val4, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpneq_n_f16:
case ARM::BI__builtin_arm_mve_vcmpneq_n_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpneq_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = Builder.CreateFCmpUNE(Val0, Val2);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
  return Builder.CreateIntCast(Val4, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpeqq_n_s16:
case ARM::BI__builtin_arm_mve_vcmpeqq_n_s32:
case ARM::BI__builtin_arm_mve_vcmpeqq_n_s8:
case ARM::BI__builtin_arm_mve_vcmpeqq_n_u16:
case ARM::BI__builtin_arm_mve_vcmpeqq_n_u32:
case ARM::BI__builtin_arm_mve_vcmpeqq_n_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpeqq_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = Builder.CreateICmpEQ(Val0, Val2);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
  return Builder.CreateIntCast(Val4, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpneq_n_s16:
case ARM::BI__builtin_arm_mve_vcmpneq_n_s32:
case ARM::BI__builtin_arm_mve_vcmpneq_n_s8:
case ARM::BI__builtin_arm_mve_vcmpneq_n_u16:
case ARM::BI__builtin_arm_mve_vcmpneq_n_u32:
case ARM::BI__builtin_arm_mve_vcmpneq_n_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpneq_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = Builder.CreateICmpNE(Val0, Val2);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
  return Builder.CreateIntCast(Val4, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpgeq_n_s16:
case ARM::BI__builtin_arm_mve_vcmpgeq_n_s32:
case ARM::BI__builtin_arm_mve_vcmpgeq_n_s8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpgeq_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgeq_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgeq_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = Builder.CreateICmpSGE(Val0, Val2);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
  return Builder.CreateIntCast(Val4, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpgtq_n_s16:
case ARM::BI__builtin_arm_mve_vcmpgtq_n_s32:
case ARM::BI__builtin_arm_mve_vcmpgtq_n_s8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpgtq_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgtq_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgtq_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = Builder.CreateICmpSGT(Val0, Val2);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
  return Builder.CreateIntCast(Val4, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpleq_n_s16:
case ARM::BI__builtin_arm_mve_vcmpleq_n_s32:
case ARM::BI__builtin_arm_mve_vcmpleq_n_s8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpleq_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpleq_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpleq_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = Builder.CreateICmpSLE(Val0, Val2);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
  return Builder.CreateIntCast(Val4, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpltq_n_s16:
case ARM::BI__builtin_arm_mve_vcmpltq_n_s32:
case ARM::BI__builtin_arm_mve_vcmpltq_n_s8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpltq_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpltq_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpltq_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
  return Builder.CreateIntCast(Val4, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpcsq_n_u16:
case ARM::BI__builtin_arm_mve_vcmpcsq_n_u32:
case ARM::BI__builtin_arm_mve_vcmpcsq_n_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpcsq_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpcsq_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpcsq_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = Builder.CreateICmpUGE(Val0, Val2);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
  return Builder.CreateIntCast(Val4, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmphiq_n_u16:
case ARM::BI__builtin_arm_mve_vcmphiq_n_u32:
case ARM::BI__builtin_arm_mve_vcmphiq_n_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmphiq_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmphiq_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmphiq_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = Builder.CreateICmpUGT(Val0, Val2);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
  return Builder.CreateIntCast(Val4, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vqdmullbq_n_s16:
case ARM::BI__builtin_arm_mve_vqdmullbq_n_s32:
case ARM::BI__builtin_arm_mve_vqdmulltq_n_s16:
case ARM::BI__builtin_arm_mve_vqdmulltq_n_s32: {
  uint32_t  Param0;
  llvm::Type * Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vqdmullbq_n_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmullbq_n_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulltq_n_s16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulltq_n_s32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vqdmull, {Param1, Param2}), {Val0, Val2, Val3});
}
case ARM::BI__builtin_arm_mve_vhaddq_n_s16:
case ARM::BI__builtin_arm_mve_vhaddq_n_s32:
case ARM::BI__builtin_arm_mve_vhaddq_n_s8:
case ARM::BI__builtin_arm_mve_vhaddq_n_u16:
case ARM::BI__builtin_arm_mve_vhaddq_n_u32:
case ARM::BI__builtin_arm_mve_vhaddq_n_u8:
case ARM::BI__builtin_arm_mve_vhsubq_n_s16:
case ARM::BI__builtin_arm_mve_vhsubq_n_s32:
case ARM::BI__builtin_arm_mve_vhsubq_n_s8:
case ARM::BI__builtin_arm_mve_vhsubq_n_u16:
case ARM::BI__builtin_arm_mve_vhsubq_n_u32:
case ARM::BI__builtin_arm_mve_vhsubq_n_u8: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vhaddq_n_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vhadd;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_n_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vhadd;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_n_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vhadd;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_n_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vhadd;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_n_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vhadd;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_n_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vhadd;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_n_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vhsub;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_n_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vhsub;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_n_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vhsub;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_n_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vhsub;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_n_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vhsub;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_n_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vhsub;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2}), {Val0, Val2, Val3});
}
case ARM::BI__builtin_arm_mve_vaddq_n_s16:
case ARM::BI__builtin_arm_mve_vaddq_n_s32:
case ARM::BI__builtin_arm_mve_vaddq_n_s8:
case ARM::BI__builtin_arm_mve_vaddq_n_u16:
case ARM::BI__builtin_arm_mve_vaddq_n_u32:
case ARM::BI__builtin_arm_mve_vaddq_n_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  return Builder.CreateAdd(Val0, Val2);
}
case ARM::BI__builtin_arm_mve_vqaddq_n_s16:
case ARM::BI__builtin_arm_mve_vqaddq_n_s32:
case ARM::BI__builtin_arm_mve_vqaddq_n_s8:
case ARM::BI__builtin_arm_mve_vqaddq_n_u16:
case ARM::BI__builtin_arm_mve_vqaddq_n_u32:
case ARM::BI__builtin_arm_mve_vqaddq_n_u8:
case ARM::BI__builtin_arm_mve_vqdmulhq_n_s16:
case ARM::BI__builtin_arm_mve_vqdmulhq_n_s32:
case ARM::BI__builtin_arm_mve_vqdmulhq_n_s8:
case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s16:
case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s32:
case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s8:
case ARM::BI__builtin_arm_mve_vqsubq_n_s16:
case ARM::BI__builtin_arm_mve_vqsubq_n_s32:
case ARM::BI__builtin_arm_mve_vqsubq_n_s8:
case ARM::BI__builtin_arm_mve_vqsubq_n_u16:
case ARM::BI__builtin_arm_mve_vqsubq_n_u32:
case ARM::BI__builtin_arm_mve_vqsubq_n_u8: {
  Intrinsic::ID  Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vqaddq_n_s16:
    Param0 = Intrinsic::sadd_sat;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_n_s32:
    Param0 = Intrinsic::sadd_sat;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_n_s8:
    Param0 = Intrinsic::sadd_sat;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_n_u16:
    Param0 = Intrinsic::uadd_sat;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_n_u32:
    Param0 = Intrinsic::uadd_sat;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_n_u8:
    Param0 = Intrinsic::uadd_sat;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulhq_n_s16:
    Param0 = Intrinsic::arm_mve_vqdmulh;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulhq_n_s32:
    Param0 = Intrinsic::arm_mve_vqdmulh;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulhq_n_s8:
    Param0 = Intrinsic::arm_mve_vqdmulh;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s16:
    Param0 = Intrinsic::arm_mve_vqrdmulh;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s32:
    Param0 = Intrinsic::arm_mve_vqrdmulh;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s8:
    Param0 = Intrinsic::arm_mve_vqrdmulh;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_n_s16:
    Param0 = Intrinsic::ssub_sat;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_n_s32:
    Param0 = Intrinsic::ssub_sat;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_n_s8:
    Param0 = Intrinsic::ssub_sat;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_n_u16:
    Param0 = Intrinsic::usub_sat;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_n_u32:
    Param0 = Intrinsic::usub_sat;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_n_u8:
    Param0 = Intrinsic::usub_sat;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val0, Val2});
}
case ARM::BI__builtin_arm_mve_vaddq_n_f16:
case ARM::BI__builtin_arm_mve_vaddq_n_f32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  return Builder.CreateFAdd(Val0, Val2);
}
case ARM::BI__builtin_arm_mve_vmulq_n_f16:
case ARM::BI__builtin_arm_mve_vmulq_n_f32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  return Builder.CreateFMul(Val0, Val2);
}
case ARM::BI__builtin_arm_mve_vsubq_n_f16:
case ARM::BI__builtin_arm_mve_vsubq_n_f32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  return Builder.CreateFSub(Val0, Val2);
}
case ARM::BI__builtin_arm_mve_vmulq_n_s16:
case ARM::BI__builtin_arm_mve_vmulq_n_s32:
case ARM::BI__builtin_arm_mve_vmulq_n_s8:
case ARM::BI__builtin_arm_mve_vmulq_n_u16:
case ARM::BI__builtin_arm_mve_vmulq_n_u32:
case ARM::BI__builtin_arm_mve_vmulq_n_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  return Builder.CreateMul(Val0, Val2);
}
case ARM::BI__builtin_arm_mve_vsubq_n_s16:
case ARM::BI__builtin_arm_mve_vsubq_n_s32:
case ARM::BI__builtin_arm_mve_vsubq_n_s8:
case ARM::BI__builtin_arm_mve_vsubq_n_u16:
case ARM::BI__builtin_arm_mve_vsubq_n_u32:
case ARM::BI__builtin_arm_mve_vsubq_n_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  return Builder.CreateSub(Val0, Val2);
}
case ARM::BI__builtin_arm_mve_vmaxnmavq_f16:
case ARM::BI__builtin_arm_mve_vmaxnmavq_f32:
case ARM::BI__builtin_arm_mve_vmaxnmvq_f16:
case ARM::BI__builtin_arm_mve_vmaxnmvq_f32:
case ARM::BI__builtin_arm_mve_vminnmavq_f16:
case ARM::BI__builtin_arm_mve_vminnmavq_f32:
case ARM::BI__builtin_arm_mve_vminnmvq_f16:
case ARM::BI__builtin_arm_mve_vminnmvq_f32: {
  Intrinsic::ID  Param0;
  llvm::Type * Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmaxnmavq_f16:
    Param0 = Intrinsic::arm_mve_maxnmav;
    Param1 = HalfTy;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmaxnmavq_f32:
    Param0 = Intrinsic::arm_mve_maxnmav;
    Param1 = FloatTy;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmaxnmvq_f16:
    Param0 = Intrinsic::arm_mve_maxnmv;
    Param1 = HalfTy;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmaxnmvq_f32:
    Param0 = Intrinsic::arm_mve_maxnmv;
    Param1 = FloatTy;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vminnmavq_f16:
    Param0 = Intrinsic::arm_mve_minnmav;
    Param1 = HalfTy;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vminnmavq_f32:
    Param0 = Intrinsic::arm_mve_minnmav;
    Param1 = FloatTy;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vminnmvq_f16:
    Param0 = Intrinsic::arm_mve_minnmv;
    Param1 = HalfTy;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vminnmvq_f32:
    Param0 = Intrinsic::arm_mve_minnmv;
    Param1 = FloatTy;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1, Param2}), {Val0, Val1});
  return (Val2);
}
case ARM::BI__builtin_arm_mve_vddupq_n_u16:
case ARM::BI__builtin_arm_mve_vddupq_n_u32:
case ARM::BI__builtin_arm_mve_vddupq_n_u8:
case ARM::BI__builtin_arm_mve_vidupq_n_u16:
case ARM::BI__builtin_arm_mve_vidupq_n_u32:
case ARM::BI__builtin_arm_mve_vidupq_n_u8: {
  Intrinsic::ID  Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vddupq_n_u16:
    Param0 = Intrinsic::arm_mve_vddup;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vddupq_n_u32:
    Param0 = Intrinsic::arm_mve_vddup;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vddupq_n_u8:
    Param0 = Intrinsic::arm_mve_vddup;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vidupq_n_u16:
    Param0 = Intrinsic::arm_mve_vidup;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vidupq_n_u32:
    Param0 = Intrinsic::arm_mve_vidup;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vidupq_n_u8:
    Param0 = Intrinsic::arm_mve_vidup;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val0, Val1});
  return Builder.CreateExtractValue(Val2, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vmaxavq_s32:
case ARM::BI__builtin_arm_mve_vminavq_s32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmaxavq_s32:
    Param0 = Intrinsic::arm_mve_maxav;
    break;
  case ARM::BI__builtin_arm_mve_vminavq_s32:
    Param0 = Intrinsic::arm_mve_minav;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4)}), {Val0, Val1});
  return Builder.CreateIntCast(Val2, Int32Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpeqq_f16:
case ARM::BI__builtin_arm_mve_vcmpeqq_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpeqq_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateFCmpOEQ(Val0, Val1);
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
  return Builder.CreateIntCast(Val3, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpgeq_f16:
case ARM::BI__builtin_arm_mve_vcmpgeq_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpgeq_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgeq_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateFCmpOGE(Val0, Val1);
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
  return Builder.CreateIntCast(Val3, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpgtq_f16:
case ARM::BI__builtin_arm_mve_vcmpgtq_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpgtq_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgtq_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateFCmpOGT(Val0, Val1);
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
  return Builder.CreateIntCast(Val3, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpleq_f16:
case ARM::BI__builtin_arm_mve_vcmpleq_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpleq_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpleq_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateFCmpOLE(Val0, Val1);
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
  return Builder.CreateIntCast(Val3, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpltq_f16:
case ARM::BI__builtin_arm_mve_vcmpltq_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpltq_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpltq_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateFCmpOLT(Val0, Val1);
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
  return Builder.CreateIntCast(Val3, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpneq_f16:
case ARM::BI__builtin_arm_mve_vcmpneq_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpneq_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateFCmpUNE(Val0, Val1);
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
  return Builder.CreateIntCast(Val3, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpeqq_s16:
case ARM::BI__builtin_arm_mve_vcmpeqq_s32:
case ARM::BI__builtin_arm_mve_vcmpeqq_s8:
case ARM::BI__builtin_arm_mve_vcmpeqq_u16:
case ARM::BI__builtin_arm_mve_vcmpeqq_u32:
case ARM::BI__builtin_arm_mve_vcmpeqq_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpeqq_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateICmpEQ(Val0, Val1);
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
  return Builder.CreateIntCast(Val3, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpneq_s16:
case ARM::BI__builtin_arm_mve_vcmpneq_s32:
case ARM::BI__builtin_arm_mve_vcmpneq_s8:
case ARM::BI__builtin_arm_mve_vcmpneq_u16:
case ARM::BI__builtin_arm_mve_vcmpneq_u32:
case ARM::BI__builtin_arm_mve_vcmpneq_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpneq_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateICmpNE(Val0, Val1);
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
  return Builder.CreateIntCast(Val3, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpgeq_s16:
case ARM::BI__builtin_arm_mve_vcmpgeq_s32:
case ARM::BI__builtin_arm_mve_vcmpgeq_s8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpgeq_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgeq_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgeq_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateICmpSGE(Val0, Val1);
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
  return Builder.CreateIntCast(Val3, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vmaxq_s16:
case ARM::BI__builtin_arm_mve_vmaxq_s32:
case ARM::BI__builtin_arm_mve_vmaxq_s8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateICmpSGE(Val0, Val1);
  return Builder.CreateSelect(Val2, Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vcmpgtq_s16:
case ARM::BI__builtin_arm_mve_vcmpgtq_s32:
case ARM::BI__builtin_arm_mve_vcmpgtq_s8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpgtq_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgtq_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgtq_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateICmpSGT(Val0, Val1);
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
  return Builder.CreateIntCast(Val3, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpleq_s16:
case ARM::BI__builtin_arm_mve_vcmpleq_s32:
case ARM::BI__builtin_arm_mve_vcmpleq_s8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpleq_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpleq_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpleq_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateICmpSLE(Val0, Val1);
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
  return Builder.CreateIntCast(Val3, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vminq_s16:
case ARM::BI__builtin_arm_mve_vminq_s32:
case ARM::BI__builtin_arm_mve_vminq_s8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateICmpSLE(Val0, Val1);
  return Builder.CreateSelect(Val2, Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vcmpltq_s16:
case ARM::BI__builtin_arm_mve_vcmpltq_s32:
case ARM::BI__builtin_arm_mve_vcmpltq_s8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpltq_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpltq_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpltq_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateICmpSLT(Val0, Val1);
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
  return Builder.CreateIntCast(Val3, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpcsq_u16:
case ARM::BI__builtin_arm_mve_vcmpcsq_u32:
case ARM::BI__builtin_arm_mve_vcmpcsq_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpcsq_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpcsq_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpcsq_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateICmpUGE(Val0, Val1);
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
  return Builder.CreateIntCast(Val3, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vmaxq_u16:
case ARM::BI__builtin_arm_mve_vmaxq_u32:
case ARM::BI__builtin_arm_mve_vmaxq_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateICmpUGE(Val0, Val1);
  return Builder.CreateSelect(Val2, Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vcmphiq_u16:
case ARM::BI__builtin_arm_mve_vcmphiq_u32:
case ARM::BI__builtin_arm_mve_vcmphiq_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmphiq_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmphiq_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmphiq_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateICmpUGT(Val0, Val1);
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
  return Builder.CreateIntCast(Val3, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vminq_u16:
case ARM::BI__builtin_arm_mve_vminq_u32:
case ARM::BI__builtin_arm_mve_vminq_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateICmpULE(Val0, Val1);
  return Builder.CreateSelect(Val2, Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vbicq_n_s32:
case ARM::BI__builtin_arm_mve_vbicq_n_u32: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vbicq_n_s32:
    Param0 = true;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_n_u32:
    Param0 = false;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateIntCast(Val1, Int32Ty, Param0);
  Value *Val3 = ARMMVEVectorSplat(Builder, Val2);
  Value *Val4 = Builder.CreateNot(Val3);
  return Builder.CreateAnd(Val0, Val4);
}
case ARM::BI__builtin_arm_mve_vorrq_n_s32:
case ARM::BI__builtin_arm_mve_vorrq_n_u32: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vorrq_n_s32:
    Param0 = true;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_n_u32:
    Param0 = false;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateIntCast(Val1, Int32Ty, Param0);
  Value *Val3 = ARMMVEVectorSplat(Builder, Val2);
  return Builder.CreateOr(Val0, Val3);
}
case ARM::BI__builtin_arm_mve_vbicq_n_s16:
case ARM::BI__builtin_arm_mve_vbicq_n_u16: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vbicq_n_s16:
    Param0 = true;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_n_u16:
    Param0 = false;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateIntCast(Val1, Int32Ty, false);
  Value *Val3 = Builder.CreateIntCast(Val2, Int16Ty, Param0);
  Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
  Value *Val5 = Builder.CreateNot(Val4);
  return Builder.CreateAnd(Val0, Val5);
}
case ARM::BI__builtin_arm_mve_vorrq_n_s16:
case ARM::BI__builtin_arm_mve_vorrq_n_u16: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vorrq_n_s16:
    Param0 = true;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_n_u16:
    Param0 = false;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateIntCast(Val1, Int32Ty, false);
  Value *Val3 = Builder.CreateIntCast(Val2, Int16Ty, Param0);
  Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
  return Builder.CreateOr(Val0, Val4);
}
case ARM::BI__builtin_arm_mve_vshlq_n_s16:
case ARM::BI__builtin_arm_mve_vshlq_n_s32:
case ARM::BI__builtin_arm_mve_vshlq_n_s8:
case ARM::BI__builtin_arm_mve_vshlq_n_u16:
case ARM::BI__builtin_arm_mve_vshlq_n_u32:
case ARM::BI__builtin_arm_mve_vshlq_n_u8: {
  llvm::Type * Param0;
  bool  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vshlq_n_s16:
    Param0 = Int16Ty;
    Param1 = true;
    break;
  case ARM::BI__builtin_arm_mve_vshlq_n_s32:
    Param0 = Int32Ty;
    Param1 = true;
    break;
  case ARM::BI__builtin_arm_mve_vshlq_n_s8:
    Param0 = Int8Ty;
    Param1 = true;
    break;
  case ARM::BI__builtin_arm_mve_vshlq_n_u16:
    Param0 = Int16Ty;
    Param1 = false;
    break;
  case ARM::BI__builtin_arm_mve_vshlq_n_u32:
    Param0 = Int32Ty;
    Param1 = false;
    break;
  case ARM::BI__builtin_arm_mve_vshlq_n_u8:
    Param0 = Int8Ty;
    Param1 = false;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateIntCast(Val1, Param0, Param1);
  Value *Val3 = ARMMVEVectorSplat(Builder, Val2);
  return Builder.CreateShl(Val0, Val3);
}
case ARM::BI__builtin_arm_mve_vmlasq_n_s16:
case ARM::BI__builtin_arm_mve_vmlasq_n_s32:
case ARM::BI__builtin_arm_mve_vmlasq_n_s8:
case ARM::BI__builtin_arm_mve_vmlasq_n_u16:
case ARM::BI__builtin_arm_mve_vmlasq_n_u32:
case ARM::BI__builtin_arm_mve_vmlasq_n_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateMul(Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
  return Builder.CreateAdd(Val2, Val4);
}
case ARM::BI__builtin_arm_mve_vbicq_s16:
case ARM::BI__builtin_arm_mve_vbicq_s32:
case ARM::BI__builtin_arm_mve_vbicq_s8:
case ARM::BI__builtin_arm_mve_vbicq_u16:
case ARM::BI__builtin_arm_mve_vbicq_u32:
case ARM::BI__builtin_arm_mve_vbicq_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateNot(Val1);
  return Builder.CreateAnd(Val0, Val2);
}
case ARM::BI__builtin_arm_mve_vornq_s16:
case ARM::BI__builtin_arm_mve_vornq_s32:
case ARM::BI__builtin_arm_mve_vornq_s8:
case ARM::BI__builtin_arm_mve_vornq_u16:
case ARM::BI__builtin_arm_mve_vornq_u32:
case ARM::BI__builtin_arm_mve_vornq_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = Builder.CreateNot(Val1);
  return Builder.CreateOr(Val0, Val2);
}
case ARM::BI__builtin_arm_mve_vadcq_m_s32:
case ARM::BI__builtin_arm_mve_vadcq_m_u32:
case ARM::BI__builtin_arm_mve_vsbcq_m_s32:
case ARM::BI__builtin_arm_mve_vsbcq_m_u32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vadcq_m_s32:
    Param0 = Intrinsic::arm_mve_vadc_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vadcq_m_u32:
    Param0 = Intrinsic::arm_mve_vadc_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsbcq_m_s32:
    Param0 = Intrinsic::arm_mve_vsbc_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsbcq_m_u32:
    Param0 = Intrinsic::arm_mve_vsbc_predicated;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Address Val3 = EmitPointerWithAlignment(E->getArg(3));
  Value *Val4 = Builder.CreateLoad(Val3);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, 29);
  Value *Val6 = Builder.CreateShl(Val4, Val5);
  Value *Val7 = EmitScalarExpr(E->getArg(4));
  Value *Val8 = Builder.CreateIntCast(Val7, Int32Ty, false);
  Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val8});
  Value *Val10 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val0, Val1, Val2, Val6, Val9});
  Value *Val11 = llvm::ConstantInt::get(Int32Ty, 1);
  Value *Val12 = Builder.CreateExtractValue(Val10, static_cast<unsigned>(1));
  Value *Val13 = llvm::ConstantInt::get(Int32Ty, 29);
  Value *Val14 = Builder.CreateLShr(Val12, Val13);
  Value *Val15 = Builder.CreateAnd(Val11, Val14);
  Builder.CreateStore(Val15, Val3);
  return Builder.CreateExtractValue(Val10, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vdwdupq_n_u16:
case ARM::BI__builtin_arm_mve_vdwdupq_n_u32:
case ARM::BI__builtin_arm_mve_vdwdupq_n_u8:
case ARM::BI__builtin_arm_mve_viwdupq_n_u16:
case ARM::BI__builtin_arm_mve_viwdupq_n_u32:
case ARM::BI__builtin_arm_mve_viwdupq_n_u8: {
  Intrinsic::ID  Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vdwdupq_n_u16:
    Param0 = Intrinsic::arm_mve_vdwdup;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vdwdupq_n_u32:
    Param0 = Intrinsic::arm_mve_vdwdup;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vdwdupq_n_u8:
    Param0 = Intrinsic::arm_mve_vdwdup;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_n_u16:
    Param0 = Intrinsic::arm_mve_viwdup;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_n_u32:
    Param0 = Intrinsic::arm_mve_viwdup;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_n_u8:
    Param0 = Intrinsic::arm_mve_viwdup;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val0, Val1, Val2});
  return Builder.CreateExtractValue(Val3, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vmaxnmavq_p_f16:
case ARM::BI__builtin_arm_mve_vmaxnmavq_p_f32:
case ARM::BI__builtin_arm_mve_vmaxnmvq_p_f16:
case ARM::BI__builtin_arm_mve_vmaxnmvq_p_f32:
case ARM::BI__builtin_arm_mve_vminnmavq_p_f16:
case ARM::BI__builtin_arm_mve_vminnmavq_p_f32:
case ARM::BI__builtin_arm_mve_vminnmvq_p_f16:
case ARM::BI__builtin_arm_mve_vminnmvq_p_f32: {
  llvm::Type * Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmaxnmavq_p_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_maxnmav_predicated;
    Param2 = HalfTy;
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmaxnmavq_p_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_maxnmav_predicated;
    Param2 = FloatTy;
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmaxnmvq_p_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_maxnmv_predicated;
    Param2 = HalfTy;
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmaxnmvq_p_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_maxnmv_predicated;
    Param2 = FloatTy;
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vminnmavq_p_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_minnmav_predicated;
    Param2 = HalfTy;
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vminnmavq_p_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_minnmav_predicated;
    Param2 = FloatTy;
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vminnmvq_p_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_minnmv_predicated;
    Param2 = HalfTy;
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vminnmvq_p_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_minnmv_predicated;
    Param2 = FloatTy;
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val3});
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param3, Param0}), {Val0, Val1, Val4});
  return (Val5);
}
case ARM::BI__builtin_arm_mve_vmaxaq_m_s16:
case ARM::BI__builtin_arm_mve_vmaxaq_m_s32:
case ARM::BI__builtin_arm_mve_vmaxaq_m_s8:
case ARM::BI__builtin_arm_mve_vmaxnmaq_m_f16:
case ARM::BI__builtin_arm_mve_vmaxnmaq_m_f32:
case ARM::BI__builtin_arm_mve_vminaq_m_s16:
case ARM::BI__builtin_arm_mve_vminaq_m_s32:
case ARM::BI__builtin_arm_mve_vminaq_m_s8:
case ARM::BI__builtin_arm_mve_vminnmaq_m_f16:
case ARM::BI__builtin_arm_mve_vminnmaq_m_f32: {
  llvm::Type * Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmaxaq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vmaxa_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmaxaq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vmaxa_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmaxaq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vmaxa_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmaxnmaq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vmaxnma_predicated;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmaxnmaq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vmaxnma_predicated;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vminaq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vmina_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vminaq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vmina_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vminaq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vmina_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vminnmaq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vminnma_predicated;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vminnmaq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vminnma_predicated;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val3});
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val4});
}
case ARM::BI__builtin_arm_mve_vmaxavq_p_s32:
case ARM::BI__builtin_arm_mve_vminavq_p_s32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmaxavq_p_s32:
    Param0 = Intrinsic::arm_mve_maxav_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vminavq_p_s32:
    Param0 = Intrinsic::arm_mve_minav_predicated;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val3});
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val0, Val1, Val4});
  return Builder.CreateIntCast(Val5, Int32Ty, false);
}
case ARM::BI__builtin_arm_mve_vldrdq_gather_base_z_s64:
case ARM::BI__builtin_arm_mve_vldrdq_gather_base_z_u64:
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_f32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_s32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_u32: {
  llvm::Type * Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vldrdq_gather_base_z_s64:
    Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vldrdq_gather_base_z_u64:
    Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_f32:
    Param0 = llvm::FixedVectorType::get(FloatTy, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_s32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_u32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val3});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vldr_gather_base_predicated, {Param0, Param1, llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val0, Val1, Val4});
}
case ARM::BI__builtin_arm_mve_vmlaq_m_n_s16:
case ARM::BI__builtin_arm_mve_vmlaq_m_n_s8:
case ARM::BI__builtin_arm_mve_vmlaq_m_n_u16:
case ARM::BI__builtin_arm_mve_vmlaq_m_n_u8:
case ARM::BI__builtin_arm_mve_vmlasq_m_n_s16:
case ARM::BI__builtin_arm_mve_vmlasq_m_n_s8:
case ARM::BI__builtin_arm_mve_vmlasq_m_n_u16:
case ARM::BI__builtin_arm_mve_vmlasq_m_n_u8:
case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s8:
case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s8:
case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s8:
case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s8: {
  llvm::Type * Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmlaq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vmla_n_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlaq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vmla_n_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmlaq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vmla_n_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlaq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vmla_n_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmlasq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vmlas_n_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlasq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vmlas_n_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmlasq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vmlas_n_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlasq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vmlas_n_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vqdmlah_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vqdmlah_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vqdmlash_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vqdmlash_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vqrdmlah_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vqrdmlah_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vqrdmlash_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vqrdmlash_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = EmitScalarExpr(E->getArg(3));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val3, Val6});
}
case ARM::BI__builtin_arm_mve_vqdmlahq_n_s16:
case ARM::BI__builtin_arm_mve_vqdmlahq_n_s8:
case ARM::BI__builtin_arm_mve_vqdmlashq_n_s16:
case ARM::BI__builtin_arm_mve_vqdmlashq_n_s8:
case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s16:
case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s8:
case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s16:
case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s8: {
  Intrinsic::ID  Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vqdmlahq_n_s16:
    Param0 = Intrinsic::arm_mve_vqdmlah;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlahq_n_s8:
    Param0 = Intrinsic::arm_mve_vqdmlah;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlashq_n_s16:
    Param0 = Intrinsic::arm_mve_vqdmlash;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlashq_n_s8:
    Param0 = Intrinsic::arm_mve_vqdmlash;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s16:
    Param0 = Intrinsic::arm_mve_vqrdmlah;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s8:
    Param0 = Intrinsic::arm_mve_vqrdmlah;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s16:
    Param0 = Intrinsic::arm_mve_vqrdmlash;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s8:
    Param0 = Intrinsic::arm_mve_vqrdmlash;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val0, Val1, Val3});
}
case ARM::BI__builtin_arm_mve_vddupq_m_n_u16:
case ARM::BI__builtin_arm_mve_vddupq_m_n_u32:
case ARM::BI__builtin_arm_mve_vddupq_m_n_u8:
case ARM::BI__builtin_arm_mve_vidupq_m_n_u16:
case ARM::BI__builtin_arm_mve_vidupq_m_n_u32:
case ARM::BI__builtin_arm_mve_vidupq_m_n_u8: {
  llvm::Type * Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vddupq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vddup_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vddupq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vddup_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vddupq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vddup_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vidupq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vidup_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vidupq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vidup_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vidupq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vidup_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = EmitScalarExpr(E->getArg(3));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val4});
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val2, Val5});
  return Builder.CreateExtractValue(Val6, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vbrsrq_m_n_f16:
case ARM::BI__builtin_arm_mve_vbrsrq_m_n_f32:
case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s16:
case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s32:
case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s8:
case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u16:
case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u32:
case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u8:
case ARM::BI__builtin_arm_mve_vmlaq_m_n_s32:
case ARM::BI__builtin_arm_mve_vmlaq_m_n_u32:
case ARM::BI__builtin_arm_mve_vmlasq_m_n_s32:
case ARM::BI__builtin_arm_mve_vmlasq_m_n_u32:
case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s32:
case ARM::BI__builtin_arm_mve_vsliq_m_n_s16:
case ARM::BI__builtin_arm_mve_vsliq_m_n_s32:
case ARM::BI__builtin_arm_mve_vsliq_m_n_s8:
case ARM::BI__builtin_arm_mve_vsliq_m_n_u16:
case ARM::BI__builtin_arm_mve_vsliq_m_n_u32:
case ARM::BI__builtin_arm_mve_vsliq_m_n_u8:
case ARM::BI__builtin_arm_mve_vsriq_m_n_s16:
case ARM::BI__builtin_arm_mve_vsriq_m_n_s32:
case ARM::BI__builtin_arm_mve_vsriq_m_n_s8:
case ARM::BI__builtin_arm_mve_vsriq_m_n_u16:
case ARM::BI__builtin_arm_mve_vsriq_m_n_u32:
case ARM::BI__builtin_arm_mve_vsriq_m_n_u8: {
  llvm::Type * Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vbrsrq_m_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vbrsr_predicated;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vbrsrq_m_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vbrsr_predicated;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vbrsr_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vbrsr_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vbrsr_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vbrsr_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vbrsr_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vbrsr_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmlaq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vmla_n_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlaq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vmla_n_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlasq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vmlas_n_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlasq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vmlas_n_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vqdmlah_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vqdmlash_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vqrdmlah_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vqrdmlash_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vsliq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vsli_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vsliq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vsli_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vsliq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vsli_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vsliq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vsli_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vsliq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vsli_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vsliq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vsli_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vsriq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vsri_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vsriq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vsri_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vsriq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vsri_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vsriq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vsri_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vsriq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vsri_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vsriq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vsri_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = EmitScalarExpr(E->getArg(3));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val4});
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val2, Val5});
}
case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_p_s64:
case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_p_u64:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_f32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_s32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_u32: {
  llvm::Type * Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_p_s64:
    Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_p_u64:
    Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_f32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_s32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_u32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = EmitScalarExpr(E->getArg(3));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vstr_scatter_base_predicated, {Param0, Param1, llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val0, Val1, Val2, Val5});
}
case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u16:
case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u32:
case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u8:
case ARM::BI__builtin_arm_mve_viwdupq_m_n_u16:
case ARM::BI__builtin_arm_mve_viwdupq_m_n_u32:
case ARM::BI__builtin_arm_mve_viwdupq_m_n_u8: {
  llvm::Type * Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vdwdup_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vdwdup_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vdwdup_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_viwdup_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_viwdup_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_viwdup_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = EmitScalarExpr(E->getArg(3));
  Value *Val4 = EmitScalarExpr(E->getArg(4));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val5});
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val2, Val3, Val6});
  return Builder.CreateExtractValue(Val7, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vadciq_m_s32:
case ARM::BI__builtin_arm_mve_vadciq_m_u32:
case ARM::BI__builtin_arm_mve_vsbciq_m_s32:
case ARM::BI__builtin_arm_mve_vsbciq_m_u32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vadciq_m_s32:
    Param0 = Intrinsic::arm_mve_vadc_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vadciq_m_u32:
    Param0 = Intrinsic::arm_mve_vadc_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsbciq_m_s32:
    Param0 = Intrinsic::arm_mve_vsbc_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsbciq_m_u32:
    Param0 = Intrinsic::arm_mve_vsbc_predicated;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, 0);
  Value *Val4 = EmitScalarExpr(E->getArg(4));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val0, Val1, Val2, Val3, Val6});
  Value *Val8 = llvm::ConstantInt::get(Int32Ty, 1);
  Value *Val9 = Builder.CreateExtractValue(Val7, static_cast<unsigned>(1));
  Value *Val10 = llvm::ConstantInt::get(Int32Ty, 29);
  Value *Val11 = Builder.CreateLShr(Val9, Val10);
  Value *Val12 = Builder.CreateAnd(Val8, Val11);
  Address Val13 = EmitPointerWithAlignment(E->getArg(3));
  Builder.CreateStore(Val12, Val13);
  return Builder.CreateExtractValue(Val7, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vqdmladhq_m_s16:
case ARM::BI__builtin_arm_mve_vqdmladhq_m_s32:
case ARM::BI__builtin_arm_mve_vqdmladhq_m_s8:
case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s16:
case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s32:
case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s8:
case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s16:
case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s32:
case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s8:
case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s16:
case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s32:
case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s8:
case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s16:
case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s32:
case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s8:
case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s16:
case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s32:
case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s8:
case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s16:
case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s32:
case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s8:
case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s16:
case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s32:
case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s8: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  llvm::Type * Param3;
  llvm::Type * Param4;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vqdmladhq_m_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmladhq_m_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmladhq_m_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s8:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s8:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s8:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s8:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param2);
  Value *Val6 = EmitScalarExpr(E->getArg(3));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val7});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vqdmlad_predicated, {Param4, Param3}), {Val0, Val1, Val2, Val3, Val4, Val5, Val8});
}
case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_u16:
case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_u32:
case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_u16:
case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_u32:
case ARM::BI__builtin_arm_mve_vqrshrunbq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqrshrunbq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqrshruntq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqrshruntq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_u16:
case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_u32:
case ARM::BI__builtin_arm_mve_vqshrntq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqshrntq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqshrntq_m_n_u16:
case ARM::BI__builtin_arm_mve_vqshrntq_m_n_u32:
case ARM::BI__builtin_arm_mve_vqshrunbq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqshrunbq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqshruntq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqshruntq_m_n_s32:
case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_s16:
case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_s32:
case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_u16:
case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_u32:
case ARM::BI__builtin_arm_mve_vrshrntq_m_n_s16:
case ARM::BI__builtin_arm_mve_vrshrntq_m_n_s32:
case ARM::BI__builtin_arm_mve_vrshrntq_m_n_u16:
case ARM::BI__builtin_arm_mve_vrshrntq_m_n_u32:
case ARM::BI__builtin_arm_mve_vshrnbq_m_n_s16:
case ARM::BI__builtin_arm_mve_vshrnbq_m_n_s32:
case ARM::BI__builtin_arm_mve_vshrnbq_m_n_u16:
case ARM::BI__builtin_arm_mve_vshrnbq_m_n_u32:
case ARM::BI__builtin_arm_mve_vshrntq_m_n_s16:
case ARM::BI__builtin_arm_mve_vshrntq_m_n_s32:
case ARM::BI__builtin_arm_mve_vshrntq_m_n_u16:
case ARM::BI__builtin_arm_mve_vshrntq_m_n_u32: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  uint32_t  Param3;
  uint32_t  Param4;
  llvm::Type * Param5;
  llvm::Type * Param6;
  llvm::Type * Param7;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = 1;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_u32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = 1;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = 1;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_u32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = 1;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrunbq_m_n_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrunbq_m_n_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshruntq_m_n_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshruntq_m_n_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = 1;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = 1;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshrntq_m_n_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshrntq_m_n_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshrntq_m_n_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = 1;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshrntq_m_n_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = 1;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshrunbq_m_n_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshrunbq_m_n_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshruntq_m_n_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshruntq_m_n_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_u16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = 1;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_u32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = 1;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshrntq_m_n_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshrntq_m_n_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshrntq_m_n_u16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = 1;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshrntq_m_n_u32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = 1;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshrnbq_m_n_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshrnbq_m_n_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshrnbq_m_n_u16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = 1;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshrnbq_m_n_u32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = 1;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshrntq_m_n_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshrntq_m_n_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshrntq_m_n_u16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = 1;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshrntq_m_n_u32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = 1;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param2);
  Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param3);
  Value *Val7 = llvm::ConstantInt::get(Int32Ty, Param4);
  Value *Val8 = EmitScalarExpr(E->getArg(3));
  Value *Val9 = Builder.CreateIntCast(Val8, Int32Ty, false);
  Value *Val10 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param5}), {Val9});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshrn_predicated, {Param6, Param7, Param5}), {Val0, Val1, Val2, Val3, Val4, Val5, Val6, Val7, Val10});
}
case ARM::BI__builtin_arm_mve_vqrshrnbq_n_s16:
case ARM::BI__builtin_arm_mve_vqrshrnbq_n_s32:
case ARM::BI__builtin_arm_mve_vqrshrnbq_n_u16:
case ARM::BI__builtin_arm_mve_vqrshrnbq_n_u32:
case ARM::BI__builtin_arm_mve_vqrshrntq_n_s16:
case ARM::BI__builtin_arm_mve_vqrshrntq_n_s32:
case ARM::BI__builtin_arm_mve_vqrshrntq_n_u16:
case ARM::BI__builtin_arm_mve_vqrshrntq_n_u32:
case ARM::BI__builtin_arm_mve_vqrshrunbq_n_s16:
case ARM::BI__builtin_arm_mve_vqrshrunbq_n_s32:
case ARM::BI__builtin_arm_mve_vqrshruntq_n_s16:
case ARM::BI__builtin_arm_mve_vqrshruntq_n_s32:
case ARM::BI__builtin_arm_mve_vqshrnbq_n_s16:
case ARM::BI__builtin_arm_mve_vqshrnbq_n_s32:
case ARM::BI__builtin_arm_mve_vqshrnbq_n_u16:
case ARM::BI__builtin_arm_mve_vqshrnbq_n_u32:
case ARM::BI__builtin_arm_mve_vqshrntq_n_s16:
case ARM::BI__builtin_arm_mve_vqshrntq_n_s32:
case ARM::BI__builtin_arm_mve_vqshrntq_n_u16:
case ARM::BI__builtin_arm_mve_vqshrntq_n_u32:
case ARM::BI__builtin_arm_mve_vqshrunbq_n_s16:
case ARM::BI__builtin_arm_mve_vqshrunbq_n_s32:
case ARM::BI__builtin_arm_mve_vqshruntq_n_s16:
case ARM::BI__builtin_arm_mve_vqshruntq_n_s32:
case ARM::BI__builtin_arm_mve_vrshrnbq_n_s16:
case ARM::BI__builtin_arm_mve_vrshrnbq_n_s32:
case ARM::BI__builtin_arm_mve_vrshrnbq_n_u16:
case ARM::BI__builtin_arm_mve_vrshrnbq_n_u32:
case ARM::BI__builtin_arm_mve_vrshrntq_n_s16:
case ARM::BI__builtin_arm_mve_vrshrntq_n_s32:
case ARM::BI__builtin_arm_mve_vrshrntq_n_u16:
case ARM::BI__builtin_arm_mve_vrshrntq_n_u32:
case ARM::BI__builtin_arm_mve_vshrnbq_n_s16:
case ARM::BI__builtin_arm_mve_vshrnbq_n_s32:
case ARM::BI__builtin_arm_mve_vshrnbq_n_u16:
case ARM::BI__builtin_arm_mve_vshrnbq_n_u32:
case ARM::BI__builtin_arm_mve_vshrntq_n_s16:
case ARM::BI__builtin_arm_mve_vshrntq_n_s32:
case ARM::BI__builtin_arm_mve_vshrntq_n_u16:
case ARM::BI__builtin_arm_mve_vshrntq_n_u32: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  uint32_t  Param3;
  uint32_t  Param4;
  llvm::Type * Param5;
  llvm::Type * Param6;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vqrshrnbq_n_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrnbq_n_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrnbq_n_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = 1;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrnbq_n_u32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = 1;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrntq_n_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrntq_n_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrntq_n_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = 1;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrntq_n_u32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = 1;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrunbq_n_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshrunbq_n_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshruntq_n_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshruntq_n_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshrnbq_n_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshrnbq_n_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshrnbq_n_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = 1;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshrnbq_n_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = 1;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshrntq_n_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshrntq_n_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshrntq_n_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = 1;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshrntq_n_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = 1;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshrunbq_n_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshrunbq_n_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshruntq_n_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshruntq_n_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshrnbq_n_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshrnbq_n_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshrnbq_n_u16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = 1;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshrnbq_n_u32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = 1;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshrntq_n_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshrntq_n_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshrntq_n_u16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = 1;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshrntq_n_u32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = 1;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshrnbq_n_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshrnbq_n_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = 0;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshrnbq_n_u16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = 1;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshrnbq_n_u32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = 1;
    Param4 = 0;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshrntq_n_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshrntq_n_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = 0;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshrntq_n_u16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = 1;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshrntq_n_u32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = 1;
    Param4 = 1;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param2);
  Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param3);
  Value *Val7 = llvm::ConstantInt::get(Int32Ty, Param4);
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshrn, {Param5, Param6}), {Val0, Val1, Val2, Val3, Val4, Val5, Val6, Val7});
}
case ARM::BI__builtin_arm_mve_vqdmladhq_s16:
case ARM::BI__builtin_arm_mve_vqdmladhq_s32:
case ARM::BI__builtin_arm_mve_vqdmladhq_s8:
case ARM::BI__builtin_arm_mve_vqdmladhxq_s16:
case ARM::BI__builtin_arm_mve_vqdmladhxq_s32:
case ARM::BI__builtin_arm_mve_vqdmladhxq_s8:
case ARM::BI__builtin_arm_mve_vqdmlsdhq_s16:
case ARM::BI__builtin_arm_mve_vqdmlsdhq_s32:
case ARM::BI__builtin_arm_mve_vqdmlsdhq_s8:
case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s16:
case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s32:
case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s8:
case ARM::BI__builtin_arm_mve_vqrdmladhq_s16:
case ARM::BI__builtin_arm_mve_vqrdmladhq_s32:
case ARM::BI__builtin_arm_mve_vqrdmladhq_s8:
case ARM::BI__builtin_arm_mve_vqrdmladhxq_s16:
case ARM::BI__builtin_arm_mve_vqrdmladhxq_s32:
case ARM::BI__builtin_arm_mve_vqrdmladhxq_s8:
case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s16:
case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s32:
case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s8:
case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s16:
case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s32:
case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s8: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vqdmladhq_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmladhq_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmladhq_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqdmladhxq_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmladhxq_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmladhxq_s8:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlsdhq_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlsdhq_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlsdhq_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s8:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmladhq_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmladhq_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmladhq_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmladhxq_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmladhxq_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmladhxq_s8:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s8:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param2);
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vqdmlad, {Param3}), {Val0, Val1, Val2, Val3, Val4, Val5});
}
case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_s64:
case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_u64:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_f32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_s32:
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_u32: {
  llvm::Type * Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_s64:
    Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_u64:
    Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_f32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_s32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_u32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vstr_scatter_base, {Param0, Param1}), {Val0, Val1, Val2});
}
case ARM::BI__builtin_arm_mve_vqdmlahq_n_s32:
case ARM::BI__builtin_arm_mve_vqdmlashq_n_s32:
case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s32:
case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s32:
case ARM::BI__builtin_arm_mve_vsliq_n_s16:
case ARM::BI__builtin_arm_mve_vsliq_n_s32:
case ARM::BI__builtin_arm_mve_vsliq_n_s8:
case ARM::BI__builtin_arm_mve_vsliq_n_u16:
case ARM::BI__builtin_arm_mve_vsliq_n_u32:
case ARM::BI__builtin_arm_mve_vsliq_n_u8:
case ARM::BI__builtin_arm_mve_vsriq_n_s16:
case ARM::BI__builtin_arm_mve_vsriq_n_s32:
case ARM::BI__builtin_arm_mve_vsriq_n_s8:
case ARM::BI__builtin_arm_mve_vsriq_n_u16:
case ARM::BI__builtin_arm_mve_vsriq_n_u32:
case ARM::BI__builtin_arm_mve_vsriq_n_u8: {
  Intrinsic::ID  Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vqdmlahq_n_s32:
    Param0 = Intrinsic::arm_mve_vqdmlah;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmlashq_n_s32:
    Param0 = Intrinsic::arm_mve_vqdmlash;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s32:
    Param0 = Intrinsic::arm_mve_vqrdmlah;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s32:
    Param0 = Intrinsic::arm_mve_vqrdmlash;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vsliq_n_s16:
    Param0 = Intrinsic::arm_mve_vsli;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vsliq_n_s32:
    Param0 = Intrinsic::arm_mve_vsli;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vsliq_n_s8:
    Param0 = Intrinsic::arm_mve_vsli;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vsliq_n_u16:
    Param0 = Intrinsic::arm_mve_vsli;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vsliq_n_u32:
    Param0 = Intrinsic::arm_mve_vsli;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vsliq_n_u8:
    Param0 = Intrinsic::arm_mve_vsli;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vsriq_n_s16:
    Param0 = Intrinsic::arm_mve_vsri;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vsriq_n_s32:
    Param0 = Intrinsic::arm_mve_vsri;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vsriq_n_s8:
    Param0 = Intrinsic::arm_mve_vsri;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vsriq_n_u16:
    Param0 = Intrinsic::arm_mve_vsri;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vsriq_n_u32:
    Param0 = Intrinsic::arm_mve_vsri;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vsriq_n_u8:
    Param0 = Intrinsic::arm_mve_vsri;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val0, Val1, Val2});
}
case ARM::BI__builtin_arm_mve_vadciq_s32:
case ARM::BI__builtin_arm_mve_vadciq_u32:
case ARM::BI__builtin_arm_mve_vsbciq_s32:
case ARM::BI__builtin_arm_mve_vsbciq_u32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vadciq_s32:
    Param0 = Intrinsic::arm_mve_vadc;
    break;
  case ARM::BI__builtin_arm_mve_vadciq_u32:
    Param0 = Intrinsic::arm_mve_vadc;
    break;
  case ARM::BI__builtin_arm_mve_vsbciq_s32:
    Param0 = Intrinsic::arm_mve_vsbc;
    break;
  case ARM::BI__builtin_arm_mve_vsbciq_u32:
    Param0 = Intrinsic::arm_mve_vsbc;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, 0);
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4)}), {Val0, Val1, Val2});
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, 1);
  Value *Val5 = Builder.CreateExtractValue(Val3, static_cast<unsigned>(1));
  Value *Val6 = llvm::ConstantInt::get(Int32Ty, 29);
  Value *Val7 = Builder.CreateLShr(Val5, Val6);
  Value *Val8 = Builder.CreateAnd(Val4, Val7);
  Address Val9 = EmitPointerWithAlignment(E->getArg(2));
  Builder.CreateStore(Val8, Val9);
  return Builder.CreateExtractValue(Val3, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vmaxvq_s32:
case ARM::BI__builtin_arm_mve_vmaxvq_u32:
case ARM::BI__builtin_arm_mve_vminvq_s32:
case ARM::BI__builtin_arm_mve_vminvq_u32: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  bool  Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmaxvq_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_maxv;
    Param2 = true;
    break;
  case ARM::BI__builtin_arm_mve_vmaxvq_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_maxv;
    Param2 = false;
    break;
  case ARM::BI__builtin_arm_mve_vminvq_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_minv;
    Param2 = true;
    break;
  case ARM::BI__builtin_arm_mve_vminvq_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_minv;
    Param2 = false;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int32Ty, 4)}), {Val0, Val1, Val2});
  return Builder.CreateIntCast(Val3, Int32Ty, Param2);
}
case ARM::BI__builtin_arm_mve_vmovnbq_m_s16:
case ARM::BI__builtin_arm_mve_vmovnbq_m_s32:
case ARM::BI__builtin_arm_mve_vmovnbq_m_u16:
case ARM::BI__builtin_arm_mve_vmovnbq_m_u32:
case ARM::BI__builtin_arm_mve_vmovntq_m_s16:
case ARM::BI__builtin_arm_mve_vmovntq_m_s32:
case ARM::BI__builtin_arm_mve_vmovntq_m_u16:
case ARM::BI__builtin_arm_mve_vmovntq_m_u32: {
  uint32_t  Param0;
  llvm::Type * Param1;
  llvm::Type * Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmovnbq_m_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmovnbq_m_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmovnbq_m_u16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmovnbq_m_u32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmovntq_m_s16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmovntq_m_s32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmovntq_m_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmovntq_m_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val4});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vmovn_predicated, {Param2, Param3, Param1}), {Val0, Val1, Val2, Val5});
}
case ARM::BI__builtin_arm_mve_vmaxvq_p_s32:
case ARM::BI__builtin_arm_mve_vmaxvq_p_u32:
case ARM::BI__builtin_arm_mve_vminvq_p_s32:
case ARM::BI__builtin_arm_mve_vminvq_p_u32: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  bool  Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmaxvq_p_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_maxv_predicated;
    Param2 = true;
    break;
  case ARM::BI__builtin_arm_mve_vmaxvq_p_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_maxv_predicated;
    Param2 = false;
    break;
  case ARM::BI__builtin_arm_mve_vminvq_p_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_minv_predicated;
    Param2 = true;
    break;
  case ARM::BI__builtin_arm_mve_vminvq_p_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_minv_predicated;
    Param2 = false;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val0, Val1, Val2, Val5});
  return Builder.CreateIntCast(Val6, Int32Ty, Param2);
}
case ARM::BI__builtin_arm_mve_vcvtbq_m_f16_f32:
case ARM::BI__builtin_arm_mve_vcvtbq_m_f32_f16:
case ARM::BI__builtin_arm_mve_vcvttq_m_f16_f32:
case ARM::BI__builtin_arm_mve_vcvttq_m_f32_f16: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtbq_m_f16_f32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvt_narrow_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vcvtbq_m_f32_f16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvt_widen_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vcvttq_m_f16_f32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvt_narrow_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vcvttq_m_f32_f16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvt_widen_predicated;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
  return Builder.CreateCall(CGM.getIntrinsic(Param1), {Val0, Val1, Val2, Val5});
}
case ARM::BI__builtin_arm_mve_vqmovnbq_m_s16:
case ARM::BI__builtin_arm_mve_vqmovnbq_m_s32:
case ARM::BI__builtin_arm_mve_vqmovnbq_m_u16:
case ARM::BI__builtin_arm_mve_vqmovnbq_m_u32:
case ARM::BI__builtin_arm_mve_vqmovntq_m_s16:
case ARM::BI__builtin_arm_mve_vqmovntq_m_s32:
case ARM::BI__builtin_arm_mve_vqmovntq_m_u16:
case ARM::BI__builtin_arm_mve_vqmovntq_m_u32:
case ARM::BI__builtin_arm_mve_vqmovunbq_m_s16:
case ARM::BI__builtin_arm_mve_vqmovunbq_m_s32:
case ARM::BI__builtin_arm_mve_vqmovuntq_m_s16:
case ARM::BI__builtin_arm_mve_vqmovuntq_m_s32: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  llvm::Type * Param3;
  llvm::Type * Param4;
  llvm::Type * Param5;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vqmovnbq_m_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqmovnbq_m_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqmovnbq_m_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqmovnbq_m_u32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqmovntq_m_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqmovntq_m_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqmovntq_m_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqmovntq_m_u32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqmovunbq_m_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqmovunbq_m_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqmovuntq_m_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqmovuntq_m_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param2);
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vqmovn_predicated, {Param4, Param5, Param3}), {Val0, Val1, Val2, Val3, Val4, Val7});
}
case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s8:
case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u16:
case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u32:
case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u8:
case ARM::BI__builtin_arm_mve_vqshlq_m_r_s16:
case ARM::BI__builtin_arm_mve_vqshlq_m_r_s32:
case ARM::BI__builtin_arm_mve_vqshlq_m_r_s8:
case ARM::BI__builtin_arm_mve_vqshlq_m_r_u16:
case ARM::BI__builtin_arm_mve_vqshlq_m_r_u32:
case ARM::BI__builtin_arm_mve_vqshlq_m_r_u8:
case ARM::BI__builtin_arm_mve_vrshlq_m_n_s16:
case ARM::BI__builtin_arm_mve_vrshlq_m_n_s32:
case ARM::BI__builtin_arm_mve_vrshlq_m_n_s8:
case ARM::BI__builtin_arm_mve_vrshlq_m_n_u16:
case ARM::BI__builtin_arm_mve_vrshlq_m_n_u32:
case ARM::BI__builtin_arm_mve_vrshlq_m_n_u8:
case ARM::BI__builtin_arm_mve_vshlq_m_r_s16:
case ARM::BI__builtin_arm_mve_vshlq_m_r_s32:
case ARM::BI__builtin_arm_mve_vshlq_m_r_s8:
case ARM::BI__builtin_arm_mve_vshlq_m_r_u16:
case ARM::BI__builtin_arm_mve_vshlq_m_r_u32:
case ARM::BI__builtin_arm_mve_vshlq_m_r_u8: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  llvm::Type * Param3;
  llvm::Type * Param4;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s8:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u8:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_r_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_r_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_r_s8:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_r_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_r_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_r_u8:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_m_n_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_m_n_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_m_n_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_m_n_u16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_m_n_u32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_m_n_u8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_r_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_r_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_r_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_r_u16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_r_u32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_r_u8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param2);
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshl_scalar_predicated, {Param4, Param3}), {Val0, Val1, Val2, Val3, Val4, Val7});
}
case ARM::BI__builtin_arm_mve_vqrshlq_n_s16:
case ARM::BI__builtin_arm_mve_vqrshlq_n_s32:
case ARM::BI__builtin_arm_mve_vqrshlq_n_s8:
case ARM::BI__builtin_arm_mve_vqrshlq_n_u16:
case ARM::BI__builtin_arm_mve_vqrshlq_n_u32:
case ARM::BI__builtin_arm_mve_vqrshlq_n_u8:
case ARM::BI__builtin_arm_mve_vqshlq_r_s16:
case ARM::BI__builtin_arm_mve_vqshlq_r_s32:
case ARM::BI__builtin_arm_mve_vqshlq_r_s8:
case ARM::BI__builtin_arm_mve_vqshlq_r_u16:
case ARM::BI__builtin_arm_mve_vqshlq_r_u32:
case ARM::BI__builtin_arm_mve_vqshlq_r_u8:
case ARM::BI__builtin_arm_mve_vrshlq_n_s16:
case ARM::BI__builtin_arm_mve_vrshlq_n_s32:
case ARM::BI__builtin_arm_mve_vrshlq_n_s8:
case ARM::BI__builtin_arm_mve_vrshlq_n_u16:
case ARM::BI__builtin_arm_mve_vrshlq_n_u32:
case ARM::BI__builtin_arm_mve_vrshlq_n_u8:
case ARM::BI__builtin_arm_mve_vshlq_r_s16:
case ARM::BI__builtin_arm_mve_vshlq_r_s32:
case ARM::BI__builtin_arm_mve_vshlq_r_s8:
case ARM::BI__builtin_arm_mve_vshlq_r_u16:
case ARM::BI__builtin_arm_mve_vshlq_r_u32:
case ARM::BI__builtin_arm_mve_vshlq_r_u8: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vqrshlq_n_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_n_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_n_s8:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_n_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_n_u32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_n_u8:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_r_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_r_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_r_s8:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_r_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_r_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_r_u8:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_n_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_n_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_n_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_n_u16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_n_u32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_n_u8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_r_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_r_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_r_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_r_u16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_r_u32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_r_u8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param2);
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshl_scalar, {Param3}), {Val0, Val1, Val2, Val3, Val4});
}
case ARM::BI__builtin_arm_mve_vqmovnbq_s16:
case ARM::BI__builtin_arm_mve_vqmovnbq_s32:
case ARM::BI__builtin_arm_mve_vqmovnbq_u16:
case ARM::BI__builtin_arm_mve_vqmovnbq_u32:
case ARM::BI__builtin_arm_mve_vqmovntq_s16:
case ARM::BI__builtin_arm_mve_vqmovntq_s32:
case ARM::BI__builtin_arm_mve_vqmovntq_u16:
case ARM::BI__builtin_arm_mve_vqmovntq_u32:
case ARM::BI__builtin_arm_mve_vqmovunbq_s16:
case ARM::BI__builtin_arm_mve_vqmovunbq_s32:
case ARM::BI__builtin_arm_mve_vqmovuntq_s16:
case ARM::BI__builtin_arm_mve_vqmovuntq_s32:
case ARM::BI__builtin_arm_mve_vqrshlq_s16:
case ARM::BI__builtin_arm_mve_vqrshlq_s32:
case ARM::BI__builtin_arm_mve_vqrshlq_s8:
case ARM::BI__builtin_arm_mve_vqrshlq_u16:
case ARM::BI__builtin_arm_mve_vqrshlq_u32:
case ARM::BI__builtin_arm_mve_vqrshlq_u8:
case ARM::BI__builtin_arm_mve_vqshlq_s16:
case ARM::BI__builtin_arm_mve_vqshlq_s32:
case ARM::BI__builtin_arm_mve_vqshlq_s8:
case ARM::BI__builtin_arm_mve_vqshlq_u16:
case ARM::BI__builtin_arm_mve_vqshlq_u32:
case ARM::BI__builtin_arm_mve_vqshlq_u8:
case ARM::BI__builtin_arm_mve_vrshlq_s16:
case ARM::BI__builtin_arm_mve_vrshlq_s32:
case ARM::BI__builtin_arm_mve_vrshlq_s8:
case ARM::BI__builtin_arm_mve_vrshlq_u16:
case ARM::BI__builtin_arm_mve_vrshlq_u32:
case ARM::BI__builtin_arm_mve_vrshlq_u8:
case ARM::BI__builtin_arm_mve_vshlq_s16:
case ARM::BI__builtin_arm_mve_vshlq_s32:
case ARM::BI__builtin_arm_mve_vshlq_s8:
case ARM::BI__builtin_arm_mve_vshlq_u16:
case ARM::BI__builtin_arm_mve_vshlq_u32:
case ARM::BI__builtin_arm_mve_vshlq_u8: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  Intrinsic::ID  Param3;
  llvm::Type * Param4;
  llvm::Type * Param5;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vqmovnbq_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vqmovn;
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqmovnbq_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vqmovn;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqmovnbq_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vqmovn;
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqmovnbq_u32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vqmovn;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqmovntq_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vqmovn;
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqmovntq_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vqmovn;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqmovntq_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vqmovn;
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqmovntq_u32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vqmovn;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqmovunbq_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vqmovn;
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqmovunbq_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vqmovn;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqmovuntq_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vqmovn;
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqmovuntq_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vqmovn;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_s8:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_u32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_u8:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_s8:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_u8:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_u16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_u32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_u8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_u16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_u32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_u8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vshl_vector;
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param2);
  return Builder.CreateCall(CGM.getIntrinsic(Param3, {Param4, Param5}), {Val0, Val1, Val2, Val3, Val4});
}
case ARM::BI__builtin_arm_mve_vmullbq_int_s16:
case ARM::BI__builtin_arm_mve_vmullbq_int_s32:
case ARM::BI__builtin_arm_mve_vmullbq_int_s8:
case ARM::BI__builtin_arm_mve_vmullbq_int_u16:
case ARM::BI__builtin_arm_mve_vmullbq_int_u32:
case ARM::BI__builtin_arm_mve_vmullbq_int_u8:
case ARM::BI__builtin_arm_mve_vmulltq_int_s16:
case ARM::BI__builtin_arm_mve_vmulltq_int_s32:
case ARM::BI__builtin_arm_mve_vmulltq_int_s8:
case ARM::BI__builtin_arm_mve_vmulltq_int_u16:
case ARM::BI__builtin_arm_mve_vmulltq_int_u32:
case ARM::BI__builtin_arm_mve_vmulltq_int_u8:
case ARM::BI__builtin_arm_mve_vshllbq_n_s16:
case ARM::BI__builtin_arm_mve_vshllbq_n_s8:
case ARM::BI__builtin_arm_mve_vshllbq_n_u16:
case ARM::BI__builtin_arm_mve_vshllbq_n_u8:
case ARM::BI__builtin_arm_mve_vshlltq_n_s16:
case ARM::BI__builtin_arm_mve_vshlltq_n_s8:
case ARM::BI__builtin_arm_mve_vshlltq_n_u16:
case ARM::BI__builtin_arm_mve_vshlltq_n_u8: {
  uint32_t  Param0;
  uint32_t  Param1;
  Intrinsic::ID  Param2;
  llvm::Type * Param3;
  llvm::Type * Param4;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmullbq_int_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_vmull;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmullbq_int_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_vmull;
    Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmullbq_int_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_vmull;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmullbq_int_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_vmull;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmullbq_int_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_vmull;
    Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmullbq_int_u8:
    Param0 = 1;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_vmull;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_vmull;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_vmull;
    Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_vmull;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_vmull;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_u32:
    Param0 = 1;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_vmull;
    Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_u8:
    Param0 = 1;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_vmull;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshllbq_n_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_vshll_imm;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshllbq_n_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_vshll_imm;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshllbq_n_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_vshll_imm;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshllbq_n_u8:
    Param0 = 1;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_vshll_imm;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshlltq_n_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_vshll_imm;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshlltq_n_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_vshll_imm;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshlltq_n_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_vshll_imm;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshlltq_n_u8:
    Param0 = 1;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_vshll_imm;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
  return Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param4}), {Val0, Val1, Val2, Val3});
}
case ARM::BI__builtin_arm_mve_vcvtbq_f16_f32:
case ARM::BI__builtin_arm_mve_vcvttq_f16_f32: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtbq_f16_f32:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vcvttq_f16_f32:
    Param0 = 1;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_narrow), {Val0, Val1, Val2});
}
case ARM::BI__builtin_arm_mve_vmullbq_poly_p16:
case ARM::BI__builtin_arm_mve_vmullbq_poly_p8:
case ARM::BI__builtin_arm_mve_vmulltq_poly_p16:
case ARM::BI__builtin_arm_mve_vmulltq_poly_p8:
case ARM::BI__builtin_arm_mve_vqdmullbq_s16:
case ARM::BI__builtin_arm_mve_vqdmullbq_s32:
case ARM::BI__builtin_arm_mve_vqdmulltq_s16:
case ARM::BI__builtin_arm_mve_vqdmulltq_s32: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmullbq_poly_p16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vmull_poly;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmullbq_poly_p8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vmull_poly;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_poly_p16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vmull_poly;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_poly_p8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vmull_poly;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqdmullbq_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vqdmull;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmullbq_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vqdmull;
    Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulltq_s16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vqdmull;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulltq_s32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vqdmull;
    Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param3}), {Val0, Val1, Val2});
}
case ARM::BI__builtin_arm_mve_vabdq_f16:
case ARM::BI__builtin_arm_mve_vabdq_f32:
case ARM::BI__builtin_arm_mve_vabdq_s16:
case ARM::BI__builtin_arm_mve_vabdq_s32:
case ARM::BI__builtin_arm_mve_vabdq_s8:
case ARM::BI__builtin_arm_mve_vabdq_u16:
case ARM::BI__builtin_arm_mve_vabdq_u32:
case ARM::BI__builtin_arm_mve_vabdq_u8:
case ARM::BI__builtin_arm_mve_vhaddq_s16:
case ARM::BI__builtin_arm_mve_vhaddq_s32:
case ARM::BI__builtin_arm_mve_vhaddq_s8:
case ARM::BI__builtin_arm_mve_vhaddq_u16:
case ARM::BI__builtin_arm_mve_vhaddq_u32:
case ARM::BI__builtin_arm_mve_vhaddq_u8:
case ARM::BI__builtin_arm_mve_vhsubq_s16:
case ARM::BI__builtin_arm_mve_vhsubq_s32:
case ARM::BI__builtin_arm_mve_vhsubq_s8:
case ARM::BI__builtin_arm_mve_vhsubq_u16:
case ARM::BI__builtin_arm_mve_vhsubq_u32:
case ARM::BI__builtin_arm_mve_vhsubq_u8:
case ARM::BI__builtin_arm_mve_vmulhq_s16:
case ARM::BI__builtin_arm_mve_vmulhq_s32:
case ARM::BI__builtin_arm_mve_vmulhq_s8:
case ARM::BI__builtin_arm_mve_vmulhq_u16:
case ARM::BI__builtin_arm_mve_vmulhq_u32:
case ARM::BI__builtin_arm_mve_vmulhq_u8:
case ARM::BI__builtin_arm_mve_vqshlq_n_s16:
case ARM::BI__builtin_arm_mve_vqshlq_n_s32:
case ARM::BI__builtin_arm_mve_vqshlq_n_s8:
case ARM::BI__builtin_arm_mve_vqshlq_n_u16:
case ARM::BI__builtin_arm_mve_vqshlq_n_u32:
case ARM::BI__builtin_arm_mve_vqshlq_n_u8:
case ARM::BI__builtin_arm_mve_vrhaddq_s16:
case ARM::BI__builtin_arm_mve_vrhaddq_s32:
case ARM::BI__builtin_arm_mve_vrhaddq_s8:
case ARM::BI__builtin_arm_mve_vrhaddq_u16:
case ARM::BI__builtin_arm_mve_vrhaddq_u32:
case ARM::BI__builtin_arm_mve_vrhaddq_u8:
case ARM::BI__builtin_arm_mve_vrmulhq_s16:
case ARM::BI__builtin_arm_mve_vrmulhq_s32:
case ARM::BI__builtin_arm_mve_vrmulhq_s8:
case ARM::BI__builtin_arm_mve_vrmulhq_u16:
case ARM::BI__builtin_arm_mve_vrmulhq_u32:
case ARM::BI__builtin_arm_mve_vrmulhq_u8:
case ARM::BI__builtin_arm_mve_vrshrq_n_s16:
case ARM::BI__builtin_arm_mve_vrshrq_n_s32:
case ARM::BI__builtin_arm_mve_vrshrq_n_s8:
case ARM::BI__builtin_arm_mve_vrshrq_n_u16:
case ARM::BI__builtin_arm_mve_vrshrq_n_u32:
case ARM::BI__builtin_arm_mve_vrshrq_n_u8: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vabdq_f16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vabd;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vabdq_f32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vabd;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vabdq_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vabd;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vabdq_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vabd;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vabdq_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vabd;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vabdq_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vabd;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vabdq_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vabd;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vabdq_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vabd;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vhadd;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vhadd;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vhadd;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vhadd;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vhadd;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vhadd;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vhsub;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vhsub;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vhsub;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vhsub;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vhsub;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vhsub;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vmulh;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vmulh;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vmulh;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vmulh;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vmulh;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vmulh;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_n_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vqshl_imm;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_n_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vqshl_imm;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_n_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vqshl_imm;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_n_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vqshl_imm;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_n_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vqshl_imm;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_n_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vqshl_imm;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vrhadd;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vrhadd;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vrhadd;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vrhadd;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vrhadd;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vrhadd;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vrmulh;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vrmulh;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vrmulh;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vrmulh;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vrmulh;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vrmulh;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_n_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vrshr_imm;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_n_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vrshr_imm;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_n_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vrshr_imm;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_n_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vrshr_imm;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_n_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vrshr_imm;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_n_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vrshr_imm;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2}), {Val0, Val1, Val2});
}
case ARM::BI__builtin_arm_mve_vaddq_s16:
case ARM::BI__builtin_arm_mve_vaddq_s32:
case ARM::BI__builtin_arm_mve_vaddq_s8:
case ARM::BI__builtin_arm_mve_vaddq_u16:
case ARM::BI__builtin_arm_mve_vaddq_u32:
case ARM::BI__builtin_arm_mve_vaddq_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateAdd(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vandq_s16:
case ARM::BI__builtin_arm_mve_vandq_s32:
case ARM::BI__builtin_arm_mve_vandq_s8:
case ARM::BI__builtin_arm_mve_vandq_u16:
case ARM::BI__builtin_arm_mve_vandq_u32:
case ARM::BI__builtin_arm_mve_vandq_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateAnd(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vldrdq_gather_base_s64:
case ARM::BI__builtin_arm_mve_vldrdq_gather_base_u64:
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_f32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_s32:
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_u32: {
  llvm::Type * Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vldrdq_gather_base_s64:
    Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vldrdq_gather_base_u64:
    Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_base_f32:
    Param0 = llvm::FixedVectorType::get(FloatTy, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_base_s32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vldrwq_gather_base_u32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vldr_gather_base, {Param0, Param1}), {Val0, Val1});
}
case ARM::BI__builtin_arm_mve_sqrshr:
case ARM::BI__builtin_arm_mve_sqshl:
case ARM::BI__builtin_arm_mve_srshr:
case ARM::BI__builtin_arm_mve_uqrshl:
case ARM::BI__builtin_arm_mve_uqshl:
case ARM::BI__builtin_arm_mve_urshr: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_sqrshr:
    Param0 = Intrinsic::arm_mve_sqrshr;
    break;
  case ARM::BI__builtin_arm_mve_sqshl:
    Param0 = Intrinsic::arm_mve_sqshl;
    break;
  case ARM::BI__builtin_arm_mve_srshr:
    Param0 = Intrinsic::arm_mve_srshr;
    break;
  case ARM::BI__builtin_arm_mve_uqrshl:
    Param0 = Intrinsic::arm_mve_uqrshl;
    break;
  case ARM::BI__builtin_arm_mve_uqshl:
    Param0 = Intrinsic::arm_mve_uqshl;
    break;
  case ARM::BI__builtin_arm_mve_urshr:
    Param0 = Intrinsic::arm_mve_urshr;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val1});
}
case ARM::BI__builtin_arm_mve_vbrsrq_n_f16:
case ARM::BI__builtin_arm_mve_vbrsrq_n_f32:
case ARM::BI__builtin_arm_mve_vbrsrq_n_s16:
case ARM::BI__builtin_arm_mve_vbrsrq_n_s32:
case ARM::BI__builtin_arm_mve_vbrsrq_n_s8:
case ARM::BI__builtin_arm_mve_vbrsrq_n_u16:
case ARM::BI__builtin_arm_mve_vbrsrq_n_u32:
case ARM::BI__builtin_arm_mve_vbrsrq_n_u8:
case ARM::BI__builtin_arm_mve_vmaxnmq_f16:
case ARM::BI__builtin_arm_mve_vmaxnmq_f32:
case ARM::BI__builtin_arm_mve_vminnmq_f16:
case ARM::BI__builtin_arm_mve_vminnmq_f32:
case ARM::BI__builtin_arm_mve_vqaddq_s16:
case ARM::BI__builtin_arm_mve_vqaddq_s32:
case ARM::BI__builtin_arm_mve_vqaddq_s8:
case ARM::BI__builtin_arm_mve_vqaddq_u16:
case ARM::BI__builtin_arm_mve_vqaddq_u32:
case ARM::BI__builtin_arm_mve_vqaddq_u8:
case ARM::BI__builtin_arm_mve_vqdmulhq_s16:
case ARM::BI__builtin_arm_mve_vqdmulhq_s32:
case ARM::BI__builtin_arm_mve_vqdmulhq_s8:
case ARM::BI__builtin_arm_mve_vqrdmulhq_s16:
case ARM::BI__builtin_arm_mve_vqrdmulhq_s32:
case ARM::BI__builtin_arm_mve_vqrdmulhq_s8:
case ARM::BI__builtin_arm_mve_vqshluq_n_s16:
case ARM::BI__builtin_arm_mve_vqshluq_n_s32:
case ARM::BI__builtin_arm_mve_vqshluq_n_s8:
case ARM::BI__builtin_arm_mve_vqsubq_s16:
case ARM::BI__builtin_arm_mve_vqsubq_s32:
case ARM::BI__builtin_arm_mve_vqsubq_s8:
case ARM::BI__builtin_arm_mve_vqsubq_u16:
case ARM::BI__builtin_arm_mve_vqsubq_u32:
case ARM::BI__builtin_arm_mve_vqsubq_u8: {
  Intrinsic::ID  Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vbrsrq_n_f16:
    Param0 = Intrinsic::arm_mve_vbrsr;
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vbrsrq_n_f32:
    Param0 = Intrinsic::arm_mve_vbrsr;
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vbrsrq_n_s16:
    Param0 = Intrinsic::arm_mve_vbrsr;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vbrsrq_n_s32:
    Param0 = Intrinsic::arm_mve_vbrsr;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vbrsrq_n_s8:
    Param0 = Intrinsic::arm_mve_vbrsr;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vbrsrq_n_u16:
    Param0 = Intrinsic::arm_mve_vbrsr;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vbrsrq_n_u32:
    Param0 = Intrinsic::arm_mve_vbrsr;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vbrsrq_n_u8:
    Param0 = Intrinsic::arm_mve_vbrsr;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmaxnmq_f16:
    Param0 = Intrinsic::maxnum;
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmaxnmq_f32:
    Param0 = Intrinsic::maxnum;
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vminnmq_f16:
    Param0 = Intrinsic::minnum;
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vminnmq_f32:
    Param0 = Intrinsic::minnum;
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_s16:
    Param0 = Intrinsic::sadd_sat;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_s32:
    Param0 = Intrinsic::sadd_sat;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_s8:
    Param0 = Intrinsic::sadd_sat;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_u16:
    Param0 = Intrinsic::uadd_sat;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_u32:
    Param0 = Intrinsic::uadd_sat;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_u8:
    Param0 = Intrinsic::uadd_sat;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulhq_s16:
    Param0 = Intrinsic::arm_mve_vqdmulh;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulhq_s32:
    Param0 = Intrinsic::arm_mve_vqdmulh;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulhq_s8:
    Param0 = Intrinsic::arm_mve_vqdmulh;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmulhq_s16:
    Param0 = Intrinsic::arm_mve_vqrdmulh;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmulhq_s32:
    Param0 = Intrinsic::arm_mve_vqrdmulh;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmulhq_s8:
    Param0 = Intrinsic::arm_mve_vqrdmulh;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqshluq_n_s16:
    Param0 = Intrinsic::arm_mve_vqshlu_imm;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshluq_n_s32:
    Param0 = Intrinsic::arm_mve_vqshlu_imm;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshluq_n_s8:
    Param0 = Intrinsic::arm_mve_vqshlu_imm;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_s16:
    Param0 = Intrinsic::ssub_sat;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_s32:
    Param0 = Intrinsic::ssub_sat;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_s8:
    Param0 = Intrinsic::ssub_sat;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_u16:
    Param0 = Intrinsic::usub_sat;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_u32:
    Param0 = Intrinsic::usub_sat;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_u8:
    Param0 = Intrinsic::usub_sat;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val0, Val1});
}
case ARM::BI__builtin_arm_mve_vgetq_lane_f16:
case ARM::BI__builtin_arm_mve_vgetq_lane_f32:
case ARM::BI__builtin_arm_mve_vgetq_lane_s16:
case ARM::BI__builtin_arm_mve_vgetq_lane_s32:
case ARM::BI__builtin_arm_mve_vgetq_lane_s64:
case ARM::BI__builtin_arm_mve_vgetq_lane_s8:
case ARM::BI__builtin_arm_mve_vgetq_lane_u16:
case ARM::BI__builtin_arm_mve_vgetq_lane_u32:
case ARM::BI__builtin_arm_mve_vgetq_lane_u64:
case ARM::BI__builtin_arm_mve_vgetq_lane_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateExtractElement(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vaddq_f16:
case ARM::BI__builtin_arm_mve_vaddq_f32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateFAdd(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vmulq_f16:
case ARM::BI__builtin_arm_mve_vmulq_f32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateFMul(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vsubq_f16:
case ARM::BI__builtin_arm_mve_vsubq_f32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateFSub(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vmulq_s16:
case ARM::BI__builtin_arm_mve_vmulq_s32:
case ARM::BI__builtin_arm_mve_vmulq_s8:
case ARM::BI__builtin_arm_mve_vmulq_u16:
case ARM::BI__builtin_arm_mve_vmulq_u32:
case ARM::BI__builtin_arm_mve_vmulq_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateMul(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vorrq_s16:
case ARM::BI__builtin_arm_mve_vorrq_s32:
case ARM::BI__builtin_arm_mve_vorrq_s8:
case ARM::BI__builtin_arm_mve_vorrq_u16:
case ARM::BI__builtin_arm_mve_vorrq_u32:
case ARM::BI__builtin_arm_mve_vorrq_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateOr(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vsubq_s16:
case ARM::BI__builtin_arm_mve_vsubq_s32:
case ARM::BI__builtin_arm_mve_vsubq_s8:
case ARM::BI__builtin_arm_mve_vsubq_u16:
case ARM::BI__builtin_arm_mve_vsubq_u32:
case ARM::BI__builtin_arm_mve_vsubq_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateSub(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_veorq_s16:
case ARM::BI__builtin_arm_mve_veorq_s32:
case ARM::BI__builtin_arm_mve_veorq_s8:
case ARM::BI__builtin_arm_mve_veorq_u16:
case ARM::BI__builtin_arm_mve_veorq_u32:
case ARM::BI__builtin_arm_mve_veorq_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateXor(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vmovlbq_s8:
case ARM::BI__builtin_arm_mve_vmovlbq_u8:
case ARM::BI__builtin_arm_mve_vmovltq_s8:
case ARM::BI__builtin_arm_mve_vmovltq_u8: {
  bool  Param0;
  bool  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmovlbq_s8:
    Param0 = 0;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vmovlbq_u8:
    Param0 = 0;
    Param1 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vmovltq_s8:
    Param0 = 1;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vmovltq_u8:
    Param0 = 1;
    Param1 = 1;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = VectorUnzip(Builder, Val0, static_cast<bool>(Param0));
  llvm::Type *Val2 = llvm::FixedVectorType::get(Int16Ty, 8);
  return SignOrZeroExtend(Builder, Val1, Val2, static_cast<bool>(Param1));
}
case ARM::BI__builtin_arm_mve_vmovlbq_s16:
case ARM::BI__builtin_arm_mve_vmovlbq_u16:
case ARM::BI__builtin_arm_mve_vmovltq_s16:
case ARM::BI__builtin_arm_mve_vmovltq_u16: {
  bool  Param0;
  bool  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmovlbq_s16:
    Param0 = 0;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vmovlbq_u16:
    Param0 = 0;
    Param1 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vmovltq_s16:
    Param0 = 1;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vmovltq_u16:
    Param0 = 1;
    Param1 = 1;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = VectorUnzip(Builder, Val0, static_cast<bool>(Param0));
  llvm::Type *Val2 = llvm::FixedVectorType::get(Int32Ty, 4);
  return SignOrZeroExtend(Builder, Val1, Val2, static_cast<bool>(Param1));
}
case ARM::BI__builtin_arm_mve_vclzq_s16:
case ARM::BI__builtin_arm_mve_vclzq_s32:
case ARM::BI__builtin_arm_mve_vclzq_s8:
case ARM::BI__builtin_arm_mve_vclzq_u16:
case ARM::BI__builtin_arm_mve_vclzq_u32:
case ARM::BI__builtin_arm_mve_vclzq_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vclzq_s16:
    Param0 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vclzq_s32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vclzq_s8:
    Param0 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vclzq_u16:
    Param0 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vclzq_u32:
    Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vclzq_u8:
    Param0 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = llvm::ConstantInt::get(Builder.getInt1Ty(), static_cast<bool>(0));
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::ctlz, {Param0}), {Val0, Val1});
}
case ARM::BI__builtin_arm_mve_vpnot: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = llvm::ConstantInt::get(Int16Ty, 65535);
  return Builder.CreateXor(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vaddlvq_p_s32:
case ARM::BI__builtin_arm_mve_vaddlvq_p_u32:
case ARM::BI__builtin_arm_mve_vaddvq_p_s16:
case ARM::BI__builtin_arm_mve_vaddvq_p_s32:
case ARM::BI__builtin_arm_mve_vaddvq_p_s8:
case ARM::BI__builtin_arm_mve_vaddvq_p_u16:
case ARM::BI__builtin_arm_mve_vaddvq_p_u32:
case ARM::BI__builtin_arm_mve_vaddvq_p_u8: {
  uint32_t  Param0;
  llvm::Type * Param1;
  Intrinsic::ID  Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vaddlvq_p_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_addlv_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddlvq_p_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_addlv_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddvq_p_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_addv_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vaddvq_p_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_addv_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddvq_p_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_addv_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vaddvq_p_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_addv_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vaddvq_p_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_addv_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddvq_p_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_addv_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val3});
  return Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param1}), {Val0, Val1, Val4});
}
case ARM::BI__builtin_arm_mve_vcvtbq_f32_f16:
case ARM::BI__builtin_arm_mve_vcvttq_f32_f16: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtbq_f32_f16:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vcvttq_f32_f16:
    Param0 = 1;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param0);
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_widen), {Val0, Val1});
}
case ARM::BI__builtin_arm_mve_vaddlvq_s32:
case ARM::BI__builtin_arm_mve_vaddlvq_u32:
case ARM::BI__builtin_arm_mve_vaddvq_s16:
case ARM::BI__builtin_arm_mve_vaddvq_s32:
case ARM::BI__builtin_arm_mve_vaddvq_s8:
case ARM::BI__builtin_arm_mve_vaddvq_u16:
case ARM::BI__builtin_arm_mve_vaddvq_u32:
case ARM::BI__builtin_arm_mve_vaddvq_u8: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vaddlvq_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_addlv;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddlvq_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_addlv;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddvq_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_addv;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vaddvq_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_addv;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddvq_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_addv;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vaddvq_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_addv;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vaddvq_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_addv;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddvq_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_addv;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param0);
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2}), {Val0, Val1});
}
case ARM::BI__builtin_arm_mve_asrl:
case ARM::BI__builtin_arm_mve_lsll:
case ARM::BI__builtin_arm_mve_sqshll:
case ARM::BI__builtin_arm_mve_srshrl:
case ARM::BI__builtin_arm_mve_uqshll:
case ARM::BI__builtin_arm_mve_urshrl: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_asrl:
    Param0 = Intrinsic::arm_mve_asrl;
    break;
  case ARM::BI__builtin_arm_mve_lsll:
    Param0 = Intrinsic::arm_mve_lsll;
    break;
  case ARM::BI__builtin_arm_mve_sqshll:
    Param0 = Intrinsic::arm_mve_sqshll;
    break;
  case ARM::BI__builtin_arm_mve_srshrl:
    Param0 = Intrinsic::arm_mve_srshrl;
    break;
  case ARM::BI__builtin_arm_mve_uqshll:
    Param0 = Intrinsic::arm_mve_uqshll;
    break;
  case ARM::BI__builtin_arm_mve_urshrl:
    Param0 = Intrinsic::arm_mve_urshrl;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = llvm::ConstantInt::get(Int64Ty, 32);
  Value *Val2 = Builder.CreateLShr(Val0, Val1);
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val5 = EmitScalarExpr(E->getArg(1));
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val4, Val3, Val5});
  Value *Val7 = Builder.CreateExtractValue(Val6, static_cast<unsigned>(1));
  Value *Val8 = Builder.CreateIntCast(Val7, Int64Ty, false);
  Value *Val9 = llvm::ConstantInt::get(Int64Ty, 32);
  Value *Val10 = Builder.CreateShl(Val8, Val9);
  Value *Val11 = Builder.CreateExtractValue(Val6, static_cast<unsigned>(0));
  Value *Val12 = Builder.CreateIntCast(Val11, Int64Ty, false);
  return Builder.CreateOr(Val10, Val12);
}
case ARM::BI__builtin_arm_mve_sqrshrl:
case ARM::BI__builtin_arm_mve_sqrshrl_sat48: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_sqrshrl:
    Param0 = 64;
    break;
  case ARM::BI__builtin_arm_mve_sqrshrl_sat48:
    Param0 = 48;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = llvm::ConstantInt::get(Int64Ty, 32);
  Value *Val2 = Builder.CreateLShr(Val0, Val1);
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val5 = EmitScalarExpr(E->getArg(1));
  Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_sqrshrl), {Val4, Val3, Val5, Val6});
  Value *Val8 = Builder.CreateExtractValue(Val7, static_cast<unsigned>(1));
  Value *Val9 = Builder.CreateIntCast(Val8, Int64Ty, false);
  Value *Val10 = llvm::ConstantInt::get(Int64Ty, 32);
  Value *Val11 = Builder.CreateShl(Val9, Val10);
  Value *Val12 = Builder.CreateExtractValue(Val7, static_cast<unsigned>(0));
  Value *Val13 = Builder.CreateIntCast(Val12, Int64Ty, false);
  return Builder.CreateOr(Val11, Val13);
}
case ARM::BI__builtin_arm_mve_uqrshll:
case ARM::BI__builtin_arm_mve_uqrshll_sat48: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_uqrshll:
    Param0 = 64;
    break;
  case ARM::BI__builtin_arm_mve_uqrshll_sat48:
    Param0 = 48;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = llvm::ConstantInt::get(Int64Ty, 32);
  Value *Val2 = Builder.CreateLShr(Val0, Val1);
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val5 = EmitScalarExpr(E->getArg(1));
  Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_uqrshll), {Val4, Val3, Val5, Val6});
  Value *Val8 = Builder.CreateExtractValue(Val7, static_cast<unsigned>(1));
  Value *Val9 = Builder.CreateIntCast(Val8, Int64Ty, false);
  Value *Val10 = llvm::ConstantInt::get(Int64Ty, 32);
  Value *Val11 = Builder.CreateShl(Val9, Val10);
  Value *Val12 = Builder.CreateExtractValue(Val7, static_cast<unsigned>(0));
  Value *Val13 = Builder.CreateIntCast(Val12, Int64Ty, false);
  return Builder.CreateOr(Val11, Val13);
}
case ARM::BI__builtin_arm_mve_vmlaldavaq_s16:
case ARM::BI__builtin_arm_mve_vmlaldavaq_s32:
case ARM::BI__builtin_arm_mve_vmlaldavaq_u16:
case ARM::BI__builtin_arm_mve_vmlaldavaq_u32:
case ARM::BI__builtin_arm_mve_vmlaldavaxq_s16:
case ARM::BI__builtin_arm_mve_vmlaldavaxq_s32:
case ARM::BI__builtin_arm_mve_vmlsldavaq_s16:
case ARM::BI__builtin_arm_mve_vmlsldavaq_s32:
case ARM::BI__builtin_arm_mve_vmlsldavaxq_s16:
case ARM::BI__builtin_arm_mve_vmlsldavaxq_s32:
case ARM::BI__builtin_arm_mve_vrmlaldavhaq_s32:
case ARM::BI__builtin_arm_mve_vrmlaldavhaq_u32:
case ARM::BI__builtin_arm_mve_vrmlaldavhaxq_s32:
case ARM::BI__builtin_arm_mve_vrmlsldavhaq_s32:
case ARM::BI__builtin_arm_mve_vrmlsldavhaxq_s32: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  Intrinsic::ID  Param3;
  llvm::Type * Param4;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmlaldavaq_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavaq_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavaq_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavaq_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavaxq_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavaxq_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlsldavaq_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlsldavaq_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlsldavaxq_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlsldavaxq_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlaldavhaq_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vrmlldavha;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlaldavhaq_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vrmlldavha;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlaldavhaxq_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vrmlldavha;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlsldavhaq_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vrmlldavha;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlsldavhaxq_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vrmlldavha;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = llvm::ConstantInt::get(Int64Ty, 32);
  Value *Val2 = Builder.CreateLShr(Val0, Val1);
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val7 = llvm::ConstantInt::get(Int32Ty, Param2);
  Value *Val8 = EmitScalarExpr(E->getArg(1));
  Value *Val9 = EmitScalarExpr(E->getArg(2));
  Value *Val10 = Builder.CreateCall(CGM.getIntrinsic(Param3, {Param4}), {Val5, Val6, Val7, Val4, Val3, Val8, Val9});
  Value *Val11 = Builder.CreateExtractValue(Val10, static_cast<unsigned>(1));
  Value *Val12 = Builder.CreateIntCast(Val11, Int64Ty, false);
  Value *Val13 = llvm::ConstantInt::get(Int64Ty, 32);
  Value *Val14 = Builder.CreateShl(Val12, Val13);
  Value *Val15 = Builder.CreateExtractValue(Val10, static_cast<unsigned>(0));
  Value *Val16 = Builder.CreateIntCast(Val15, Int64Ty, false);
  return Builder.CreateOr(Val14, Val16);
}
case ARM::BI__builtin_arm_mve_vmlaldavaq_p_s16:
case ARM::BI__builtin_arm_mve_vmlaldavaq_p_s32:
case ARM::BI__builtin_arm_mve_vmlaldavaq_p_u16:
case ARM::BI__builtin_arm_mve_vmlaldavaq_p_u32:
case ARM::BI__builtin_arm_mve_vmlaldavaxq_p_s16:
case ARM::BI__builtin_arm_mve_vmlaldavaxq_p_s32:
case ARM::BI__builtin_arm_mve_vmlsldavaq_p_s16:
case ARM::BI__builtin_arm_mve_vmlsldavaq_p_s32:
case ARM::BI__builtin_arm_mve_vmlsldavaxq_p_s16:
case ARM::BI__builtin_arm_mve_vmlsldavaxq_p_s32:
case ARM::BI__builtin_arm_mve_vrmlaldavhaq_p_s32:
case ARM::BI__builtin_arm_mve_vrmlaldavhaq_p_u32:
case ARM::BI__builtin_arm_mve_vrmlaldavhaxq_p_s32:
case ARM::BI__builtin_arm_mve_vrmlsldavhaq_p_s32:
case ARM::BI__builtin_arm_mve_vrmlsldavhaxq_p_s32: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  llvm::Type * Param3;
  Intrinsic::ID  Param4;
  llvm::Type * Param5;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmlaldavaq_p_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavaq_p_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavaq_p_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavaq_p_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavaxq_p_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavaxq_p_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlsldavaq_p_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlsldavaq_p_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlsldavaxq_p_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlsldavaxq_p_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlaldavhaq_p_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlaldavhaq_p_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlaldavhaxq_p_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlsldavhaq_p_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlsldavhaxq_p_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  Value *Val1 = llvm::ConstantInt::get(Int64Ty, 32);
  Value *Val2 = Builder.CreateLShr(Val0, Val1);
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val7 = llvm::ConstantInt::get(Int32Ty, Param2);
  Value *Val8 = EmitScalarExpr(E->getArg(1));
  Value *Val9 = EmitScalarExpr(E->getArg(2));
  Value *Val10 = EmitScalarExpr(E->getArg(3));
  Value *Val11 = Builder.CreateIntCast(Val10, Int32Ty, false);
  Value *Val12 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val11});
  Value *Val13 = Builder.CreateCall(CGM.getIntrinsic(Param4, {Param5, Param3}), {Val5, Val6, Val7, Val4, Val3, Val8, Val9, Val12});
  Value *Val14 = Builder.CreateExtractValue(Val13, static_cast<unsigned>(1));
  Value *Val15 = Builder.CreateIntCast(Val14, Int64Ty, false);
  Value *Val16 = llvm::ConstantInt::get(Int64Ty, 32);
  Value *Val17 = Builder.CreateShl(Val15, Val16);
  Value *Val18 = Builder.CreateExtractValue(Val13, static_cast<unsigned>(0));
  Value *Val19 = Builder.CreateIntCast(Val18, Int64Ty, false);
  return Builder.CreateOr(Val17, Val19);
}
case ARM::BI__builtin_arm_mve_vreinterpretq_f32_f16:
case ARM::BI__builtin_arm_mve_vreinterpretq_f32_s16:
case ARM::BI__builtin_arm_mve_vreinterpretq_f32_s32:
case ARM::BI__builtin_arm_mve_vreinterpretq_f32_s64:
case ARM::BI__builtin_arm_mve_vreinterpretq_f32_s8:
case ARM::BI__builtin_arm_mve_vreinterpretq_f32_u16:
case ARM::BI__builtin_arm_mve_vreinterpretq_f32_u32:
case ARM::BI__builtin_arm_mve_vreinterpretq_f32_u64:
case ARM::BI__builtin_arm_mve_vreinterpretq_f32_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(FloatTy, 4);
  return ARMMVEVectorReinterpret(Builder, this, Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vcvtq_f32_s32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(FloatTy, 4);
  return Builder.CreateSIToFP(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vcvtq_f32_u32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(FloatTy, 4);
  return Builder.CreateUIToFP(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vreinterpretq_f16_f32:
case ARM::BI__builtin_arm_mve_vreinterpretq_f16_s16:
case ARM::BI__builtin_arm_mve_vreinterpretq_f16_s32:
case ARM::BI__builtin_arm_mve_vreinterpretq_f16_s64:
case ARM::BI__builtin_arm_mve_vreinterpretq_f16_s8:
case ARM::BI__builtin_arm_mve_vreinterpretq_f16_u16:
case ARM::BI__builtin_arm_mve_vreinterpretq_f16_u32:
case ARM::BI__builtin_arm_mve_vreinterpretq_f16_u64:
case ARM::BI__builtin_arm_mve_vreinterpretq_f16_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(HalfTy, 8);
  return ARMMVEVectorReinterpret(Builder, this, Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vcvtq_f16_s16: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(HalfTy, 8);
  return Builder.CreateSIToFP(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vcvtq_f16_u16: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(HalfTy, 8);
  return Builder.CreateUIToFP(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vqnegq_s16: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val2 = ARMMVEConstantSplat<1,0>(Builder, Val1);
  Value *Val3 = Builder.CreateICmpEQ(Val0, Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val5 = ARMMVEConstantSplat<0,1>(Builder, Val4);
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val7 = llvm::Constant::getNullValue(Val6);
  Value *Val8 = Builder.CreateSub(Val7, Val0);
  return Builder.CreateSelect(Val3, Val5, Val8);
}
case ARM::BI__builtin_arm_mve_vmvnq_s16:
case ARM::BI__builtin_arm_mve_vmvnq_u16: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val2 = ARMMVEConstantSplat<1,1>(Builder, Val1);
  return Builder.CreateXor(Val0, Val2);
}
case ARM::BI__builtin_arm_mve_vmovntq_s16:
case ARM::BI__builtin_arm_mve_vmovntq_u16: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val2 = ARMMVEVectorReinterpret(Builder, this, Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = VectorZip(Builder, Val2, Val3);
  llvm::Type *Val5 = llvm::FixedVectorType::get(Int8Ty, 16);
  return Builder.CreateTrunc(Val4, Val5);
}
case ARM::BI__builtin_arm_mve_vandq_f16: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val2 = Builder.CreateBitCast(Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val5 = Builder.CreateBitCast(Val3, Val4);
  Value *Val6 = Builder.CreateAnd(Val2, Val5);
  llvm::Type *Val7 = llvm::FixedVectorType::get(HalfTy, 8);
  return Builder.CreateBitCast(Val6, Val7);
}
case ARM::BI__builtin_arm_mve_vbicq_f16: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val2 = Builder.CreateBitCast(Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val5 = Builder.CreateBitCast(Val3, Val4);
  Value *Val6 = Builder.CreateNot(Val5);
  Value *Val7 = Builder.CreateAnd(Val2, Val6);
  llvm::Type *Val8 = llvm::FixedVectorType::get(HalfTy, 8);
  return Builder.CreateBitCast(Val7, Val8);
}
case ARM::BI__builtin_arm_mve_vornq_f16: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val2 = Builder.CreateBitCast(Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val5 = Builder.CreateBitCast(Val3, Val4);
  Value *Val6 = Builder.CreateNot(Val5);
  Value *Val7 = Builder.CreateOr(Val2, Val6);
  llvm::Type *Val8 = llvm::FixedVectorType::get(HalfTy, 8);
  return Builder.CreateBitCast(Val7, Val8);
}
case ARM::BI__builtin_arm_mve_vorrq_f16: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val2 = Builder.CreateBitCast(Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val5 = Builder.CreateBitCast(Val3, Val4);
  Value *Val6 = Builder.CreateOr(Val2, Val5);
  llvm::Type *Val7 = llvm::FixedVectorType::get(HalfTy, 8);
  return Builder.CreateBitCast(Val6, Val7);
}
case ARM::BI__builtin_arm_mve_veorq_f16: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val2 = Builder.CreateBitCast(Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val5 = Builder.CreateBitCast(Val3, Val4);
  Value *Val6 = Builder.CreateXor(Val2, Val5);
  llvm::Type *Val7 = llvm::FixedVectorType::get(HalfTy, 8);
  return Builder.CreateBitCast(Val6, Val7);
}
case ARM::BI__builtin_arm_mve_vqabsq_s16: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val2 = llvm::Constant::getNullValue(Val1);
  Value *Val3 = Builder.CreateICmpSGT(Val0, Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val5 = ARMMVEConstantSplat<1,0>(Builder, Val4);
  Value *Val6 = Builder.CreateICmpEQ(Val0, Val5);
  llvm::Type *Val7 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val8 = ARMMVEConstantSplat<0,1>(Builder, Val7);
  llvm::Type *Val9 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val10 = llvm::Constant::getNullValue(Val9);
  Value *Val11 = Builder.CreateSub(Val10, Val0);
  Value *Val12 = Builder.CreateSelect(Val6, Val8, Val11);
  return Builder.CreateSelect(Val3, Val0, Val12);
}
case ARM::BI__builtin_arm_mve_vabsq_s16: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val2 = llvm::Constant::getNullValue(Val1);
  Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val5 = llvm::Constant::getNullValue(Val4);
  Value *Val6 = Builder.CreateSub(Val5, Val0);
  return Builder.CreateSelect(Val3, Val6, Val0);
}
case ARM::BI__builtin_arm_mve_vreinterpretq_s16_f16:
case ARM::BI__builtin_arm_mve_vreinterpretq_s16_f32:
case ARM::BI__builtin_arm_mve_vreinterpretq_s16_s32:
case ARM::BI__builtin_arm_mve_vreinterpretq_s16_s64:
case ARM::BI__builtin_arm_mve_vreinterpretq_s16_s8:
case ARM::BI__builtin_arm_mve_vreinterpretq_s16_u16:
case ARM::BI__builtin_arm_mve_vreinterpretq_s16_u32:
case ARM::BI__builtin_arm_mve_vreinterpretq_s16_u64:
case ARM::BI__builtin_arm_mve_vreinterpretq_s16_u8:
case ARM::BI__builtin_arm_mve_vreinterpretq_u16_f16:
case ARM::BI__builtin_arm_mve_vreinterpretq_u16_f32:
case ARM::BI__builtin_arm_mve_vreinterpretq_u16_s16:
case ARM::BI__builtin_arm_mve_vreinterpretq_u16_s32:
case ARM::BI__builtin_arm_mve_vreinterpretq_u16_s64:
case ARM::BI__builtin_arm_mve_vreinterpretq_u16_s8:
case ARM::BI__builtin_arm_mve_vreinterpretq_u16_u32:
case ARM::BI__builtin_arm_mve_vreinterpretq_u16_u64:
case ARM::BI__builtin_arm_mve_vreinterpretq_u16_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
  return ARMMVEVectorReinterpret(Builder, this, Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vcvtq_s16_f16: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
  return Builder.CreateFPToSI(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vcvtq_u16_f16: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
  return Builder.CreateFPToUI(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vqnegq_s32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val2 = ARMMVEConstantSplat<1,0>(Builder, Val1);
  Value *Val3 = Builder.CreateICmpEQ(Val0, Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val5 = ARMMVEConstantSplat<0,1>(Builder, Val4);
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val7 = llvm::Constant::getNullValue(Val6);
  Value *Val8 = Builder.CreateSub(Val7, Val0);
  return Builder.CreateSelect(Val3, Val5, Val8);
}
case ARM::BI__builtin_arm_mve_vmvnq_s32:
case ARM::BI__builtin_arm_mve_vmvnq_u32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val2 = ARMMVEConstantSplat<1,1>(Builder, Val1);
  return Builder.CreateXor(Val0, Val2);
}
case ARM::BI__builtin_arm_mve_vmovntq_s32:
case ARM::BI__builtin_arm_mve_vmovntq_u32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val2 = ARMMVEVectorReinterpret(Builder, this, Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = VectorZip(Builder, Val2, Val3);
  llvm::Type *Val5 = llvm::FixedVectorType::get(Int16Ty, 8);
  return Builder.CreateTrunc(Val4, Val5);
}
case ARM::BI__builtin_arm_mve_vandq_f32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val2 = Builder.CreateBitCast(Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val5 = Builder.CreateBitCast(Val3, Val4);
  Value *Val6 = Builder.CreateAnd(Val2, Val5);
  llvm::Type *Val7 = llvm::FixedVectorType::get(FloatTy, 4);
  return Builder.CreateBitCast(Val6, Val7);
}
case ARM::BI__builtin_arm_mve_vbicq_f32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val2 = Builder.CreateBitCast(Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val5 = Builder.CreateBitCast(Val3, Val4);
  Value *Val6 = Builder.CreateNot(Val5);
  Value *Val7 = Builder.CreateAnd(Val2, Val6);
  llvm::Type *Val8 = llvm::FixedVectorType::get(FloatTy, 4);
  return Builder.CreateBitCast(Val7, Val8);
}
case ARM::BI__builtin_arm_mve_vornq_f32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val2 = Builder.CreateBitCast(Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val5 = Builder.CreateBitCast(Val3, Val4);
  Value *Val6 = Builder.CreateNot(Val5);
  Value *Val7 = Builder.CreateOr(Val2, Val6);
  llvm::Type *Val8 = llvm::FixedVectorType::get(FloatTy, 4);
  return Builder.CreateBitCast(Val7, Val8);
}
case ARM::BI__builtin_arm_mve_vorrq_f32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val2 = Builder.CreateBitCast(Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val5 = Builder.CreateBitCast(Val3, Val4);
  Value *Val6 = Builder.CreateOr(Val2, Val5);
  llvm::Type *Val7 = llvm::FixedVectorType::get(FloatTy, 4);
  return Builder.CreateBitCast(Val6, Val7);
}
case ARM::BI__builtin_arm_mve_veorq_f32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val2 = Builder.CreateBitCast(Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val5 = Builder.CreateBitCast(Val3, Val4);
  Value *Val6 = Builder.CreateXor(Val2, Val5);
  llvm::Type *Val7 = llvm::FixedVectorType::get(FloatTy, 4);
  return Builder.CreateBitCast(Val6, Val7);
}
case ARM::BI__builtin_arm_mve_vqabsq_s32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val2 = llvm::Constant::getNullValue(Val1);
  Value *Val3 = Builder.CreateICmpSGT(Val0, Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val5 = ARMMVEConstantSplat<1,0>(Builder, Val4);
  Value *Val6 = Builder.CreateICmpEQ(Val0, Val5);
  llvm::Type *Val7 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val8 = ARMMVEConstantSplat<0,1>(Builder, Val7);
  llvm::Type *Val9 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val10 = llvm::Constant::getNullValue(Val9);
  Value *Val11 = Builder.CreateSub(Val10, Val0);
  Value *Val12 = Builder.CreateSelect(Val6, Val8, Val11);
  return Builder.CreateSelect(Val3, Val0, Val12);
}
case ARM::BI__builtin_arm_mve_vabsq_s32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val2 = llvm::Constant::getNullValue(Val1);
  Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val5 = llvm::Constant::getNullValue(Val4);
  Value *Val6 = Builder.CreateSub(Val5, Val0);
  return Builder.CreateSelect(Val3, Val6, Val0);
}
case ARM::BI__builtin_arm_mve_vreinterpretq_s32_f16:
case ARM::BI__builtin_arm_mve_vreinterpretq_s32_f32:
case ARM::BI__builtin_arm_mve_vreinterpretq_s32_s16:
case ARM::BI__builtin_arm_mve_vreinterpretq_s32_s64:
case ARM::BI__builtin_arm_mve_vreinterpretq_s32_s8:
case ARM::BI__builtin_arm_mve_vreinterpretq_s32_u16:
case ARM::BI__builtin_arm_mve_vreinterpretq_s32_u32:
case ARM::BI__builtin_arm_mve_vreinterpretq_s32_u64:
case ARM::BI__builtin_arm_mve_vreinterpretq_s32_u8:
case ARM::BI__builtin_arm_mve_vreinterpretq_u32_f16:
case ARM::BI__builtin_arm_mve_vreinterpretq_u32_f32:
case ARM::BI__builtin_arm_mve_vreinterpretq_u32_s16:
case ARM::BI__builtin_arm_mve_vreinterpretq_u32_s32:
case ARM::BI__builtin_arm_mve_vreinterpretq_u32_s64:
case ARM::BI__builtin_arm_mve_vreinterpretq_u32_s8:
case ARM::BI__builtin_arm_mve_vreinterpretq_u32_u16:
case ARM::BI__builtin_arm_mve_vreinterpretq_u32_u64:
case ARM::BI__builtin_arm_mve_vreinterpretq_u32_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
  return ARMMVEVectorReinterpret(Builder, this, Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vcvtq_s32_f32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
  return Builder.CreateFPToSI(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vcvtq_u32_f32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
  return Builder.CreateFPToUI(Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vreinterpretq_s64_f16:
case ARM::BI__builtin_arm_mve_vreinterpretq_s64_f32:
case ARM::BI__builtin_arm_mve_vreinterpretq_s64_s16:
case ARM::BI__builtin_arm_mve_vreinterpretq_s64_s32:
case ARM::BI__builtin_arm_mve_vreinterpretq_s64_s8:
case ARM::BI__builtin_arm_mve_vreinterpretq_s64_u16:
case ARM::BI__builtin_arm_mve_vreinterpretq_s64_u32:
case ARM::BI__builtin_arm_mve_vreinterpretq_s64_u64:
case ARM::BI__builtin_arm_mve_vreinterpretq_s64_u8:
case ARM::BI__builtin_arm_mve_vreinterpretq_u64_f16:
case ARM::BI__builtin_arm_mve_vreinterpretq_u64_f32:
case ARM::BI__builtin_arm_mve_vreinterpretq_u64_s16:
case ARM::BI__builtin_arm_mve_vreinterpretq_u64_s32:
case ARM::BI__builtin_arm_mve_vreinterpretq_u64_s64:
case ARM::BI__builtin_arm_mve_vreinterpretq_u64_s8:
case ARM::BI__builtin_arm_mve_vreinterpretq_u64_u16:
case ARM::BI__builtin_arm_mve_vreinterpretq_u64_u32:
case ARM::BI__builtin_arm_mve_vreinterpretq_u64_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int64Ty, 2);
  return ARMMVEVectorReinterpret(Builder, this, Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vqnegq_s8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val2 = ARMMVEConstantSplat<1,0>(Builder, Val1);
  Value *Val3 = Builder.CreateICmpEQ(Val0, Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val5 = ARMMVEConstantSplat<0,1>(Builder, Val4);
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val7 = llvm::Constant::getNullValue(Val6);
  Value *Val8 = Builder.CreateSub(Val7, Val0);
  return Builder.CreateSelect(Val3, Val5, Val8);
}
case ARM::BI__builtin_arm_mve_vmvnq_s8:
case ARM::BI__builtin_arm_mve_vmvnq_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val2 = ARMMVEConstantSplat<1,1>(Builder, Val1);
  return Builder.CreateXor(Val0, Val2);
}
case ARM::BI__builtin_arm_mve_vqabsq_s8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val2 = llvm::Constant::getNullValue(Val1);
  Value *Val3 = Builder.CreateICmpSGT(Val0, Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val5 = ARMMVEConstantSplat<1,0>(Builder, Val4);
  Value *Val6 = Builder.CreateICmpEQ(Val0, Val5);
  llvm::Type *Val7 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val8 = ARMMVEConstantSplat<0,1>(Builder, Val7);
  llvm::Type *Val9 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val10 = llvm::Constant::getNullValue(Val9);
  Value *Val11 = Builder.CreateSub(Val10, Val0);
  Value *Val12 = Builder.CreateSelect(Val6, Val8, Val11);
  return Builder.CreateSelect(Val3, Val0, Val12);
}
case ARM::BI__builtin_arm_mve_vabsq_s8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val2 = llvm::Constant::getNullValue(Val1);
  Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val5 = llvm::Constant::getNullValue(Val4);
  Value *Val6 = Builder.CreateSub(Val5, Val0);
  return Builder.CreateSelect(Val3, Val6, Val0);
}
case ARM::BI__builtin_arm_mve_vreinterpretq_s8_f16:
case ARM::BI__builtin_arm_mve_vreinterpretq_s8_f32:
case ARM::BI__builtin_arm_mve_vreinterpretq_s8_s16:
case ARM::BI__builtin_arm_mve_vreinterpretq_s8_s32:
case ARM::BI__builtin_arm_mve_vreinterpretq_s8_s64:
case ARM::BI__builtin_arm_mve_vreinterpretq_s8_u16:
case ARM::BI__builtin_arm_mve_vreinterpretq_s8_u32:
case ARM::BI__builtin_arm_mve_vreinterpretq_s8_u64:
case ARM::BI__builtin_arm_mve_vreinterpretq_s8_u8:
case ARM::BI__builtin_arm_mve_vreinterpretq_u8_f16:
case ARM::BI__builtin_arm_mve_vreinterpretq_u8_f32:
case ARM::BI__builtin_arm_mve_vreinterpretq_u8_s16:
case ARM::BI__builtin_arm_mve_vreinterpretq_u8_s32:
case ARM::BI__builtin_arm_mve_vreinterpretq_u8_s64:
case ARM::BI__builtin_arm_mve_vreinterpretq_u8_s8:
case ARM::BI__builtin_arm_mve_vreinterpretq_u8_u16:
case ARM::BI__builtin_arm_mve_vreinterpretq_u8_u32:
case ARM::BI__builtin_arm_mve_vreinterpretq_u8_u64: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 16);
  return ARMMVEVectorReinterpret(Builder, this, Val0, Val1);
}
case ARM::BI__builtin_arm_mve_vrev16q_s8:
case ARM::BI__builtin_arm_mve_vrev16q_u8:
case ARM::BI__builtin_arm_mve_vrev32q_f16:
case ARM::BI__builtin_arm_mve_vrev32q_s16:
case ARM::BI__builtin_arm_mve_vrev32q_s8:
case ARM::BI__builtin_arm_mve_vrev32q_u16:
case ARM::BI__builtin_arm_mve_vrev32q_u8:
case ARM::BI__builtin_arm_mve_vrev64q_f16:
case ARM::BI__builtin_arm_mve_vrev64q_f32:
case ARM::BI__builtin_arm_mve_vrev64q_s16:
case ARM::BI__builtin_arm_mve_vrev64q_s32:
case ARM::BI__builtin_arm_mve_vrev64q_s8:
case ARM::BI__builtin_arm_mve_vrev64q_u16:
case ARM::BI__builtin_arm_mve_vrev64q_u32:
case ARM::BI__builtin_arm_mve_vrev64q_u8: {
  unsigned  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vrev16q_s8:
    Param0 = 16;
    break;
  case ARM::BI__builtin_arm_mve_vrev16q_u8:
    Param0 = 16;
    break;
  case ARM::BI__builtin_arm_mve_vrev32q_f16:
    Param0 = 32;
    break;
  case ARM::BI__builtin_arm_mve_vrev32q_s16:
    Param0 = 32;
    break;
  case ARM::BI__builtin_arm_mve_vrev32q_s8:
    Param0 = 32;
    break;
  case ARM::BI__builtin_arm_mve_vrev32q_u16:
    Param0 = 32;
    break;
  case ARM::BI__builtin_arm_mve_vrev32q_u8:
    Param0 = 32;
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_f16:
    Param0 = 64;
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_f32:
    Param0 = 64;
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_s16:
    Param0 = 64;
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_s32:
    Param0 = 64;
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_s8:
    Param0 = 64;
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_u16:
    Param0 = 64;
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_u32:
    Param0 = 64;
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_u8:
    Param0 = 64;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  return ARMMVEVectorElementReverse(Builder, Val0, static_cast<unsigned>(Param0));
}
case ARM::BI__builtin_arm_mve_vdupq_n_f16:
case ARM::BI__builtin_arm_mve_vdupq_n_f32:
case ARM::BI__builtin_arm_mve_vdupq_n_s16:
case ARM::BI__builtin_arm_mve_vdupq_n_s32:
case ARM::BI__builtin_arm_mve_vdupq_n_s8:
case ARM::BI__builtin_arm_mve_vdupq_n_u16:
case ARM::BI__builtin_arm_mve_vdupq_n_u32:
case ARM::BI__builtin_arm_mve_vdupq_n_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  return ARMMVEVectorSplat(Builder, Val0);
}
case ARM::BI__builtin_arm_mve_vabsq_f16:
case ARM::BI__builtin_arm_mve_vabsq_f32:
case ARM::BI__builtin_arm_mve_vclsq_s16:
case ARM::BI__builtin_arm_mve_vclsq_s32:
case ARM::BI__builtin_arm_mve_vclsq_s8:
case ARM::BI__builtin_arm_mve_vrndaq_f16:
case ARM::BI__builtin_arm_mve_vrndaq_f32:
case ARM::BI__builtin_arm_mve_vrndmq_f16:
case ARM::BI__builtin_arm_mve_vrndmq_f32:
case ARM::BI__builtin_arm_mve_vrndnq_f16:
case ARM::BI__builtin_arm_mve_vrndnq_f32:
case ARM::BI__builtin_arm_mve_vrndpq_f16:
case ARM::BI__builtin_arm_mve_vrndpq_f32:
case ARM::BI__builtin_arm_mve_vrndq_f16:
case ARM::BI__builtin_arm_mve_vrndq_f32:
case ARM::BI__builtin_arm_mve_vrndxq_f16:
case ARM::BI__builtin_arm_mve_vrndxq_f32: {
  Intrinsic::ID  Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vabsq_f16:
    Param0 = Intrinsic::fabs;
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vabsq_f32:
    Param0 = Intrinsic::fabs;
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vclsq_s16:
    Param0 = Intrinsic::arm_mve_vcls;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vclsq_s32:
    Param0 = Intrinsic::arm_mve_vcls;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vclsq_s8:
    Param0 = Intrinsic::arm_mve_vcls;
    Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrndaq_f16:
    Param0 = Intrinsic::round;
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrndaq_f32:
    Param0 = Intrinsic::round;
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrndmq_f16:
    Param0 = Intrinsic::floor;
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrndmq_f32:
    Param0 = Intrinsic::floor;
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrndnq_f16:
    Param0 = Intrinsic::arm_mve_vrintn;
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrndnq_f32:
    Param0 = Intrinsic::arm_mve_vrintn;
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrndpq_f16:
    Param0 = Intrinsic::ceil;
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrndpq_f32:
    Param0 = Intrinsic::ceil;
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrndq_f16:
    Param0 = Intrinsic::trunc;
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrndq_f32:
    Param0 = Intrinsic::trunc;
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrndxq_f16:
    Param0 = Intrinsic::rint;
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrndxq_f32:
    Param0 = Intrinsic::rint;
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val0});
}
case ARM::BI__builtin_arm_mve_vnegq_f16:
case ARM::BI__builtin_arm_mve_vnegq_f32: {
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateFNeg(Val0);
}
case ARM::BI__builtin_arm_mve_vshrq_n_s16:
case ARM::BI__builtin_arm_mve_vshrq_n_s32:
case ARM::BI__builtin_arm_mve_vshrq_n_s8:
case ARM::BI__builtin_arm_mve_vshrq_n_u16:
case ARM::BI__builtin_arm_mve_vshrq_n_u32:
case ARM::BI__builtin_arm_mve_vshrq_n_u8: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vshrq_n_s16:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vshrq_n_s32:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vshrq_n_s8:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vshrq_n_u16:
    Param0 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vshrq_n_u32:
    Param0 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vshrq_n_u8:
    Param0 = 1;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(0));
  return MVEImmediateShr(Builder, Val0, GetIntegerConstantValue<unsigned>(E->getArg(1), getContext()), static_cast<bool>(Param0));
}
case ARM::BI__builtin_arm_mve_vst1q_f16:
case ARM::BI__builtin_arm_mve_vst1q_s16:
case ARM::BI__builtin_arm_mve_vst1q_u16:
case ARM::BI__builtin_arm_mve_vstrhq_f16:
case ARM::BI__builtin_arm_mve_vstrhq_s16:
case ARM::BI__builtin_arm_mve_vstrhq_u16: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vst1q_f16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8));
    break;
  case ARM::BI__builtin_arm_mve_vst1q_s16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
    break;
  case ARM::BI__builtin_arm_mve_vst1q_u16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_f16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8));
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_s16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_u16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Address Val1 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val2 = Builder.CreatePointerCast((Val1.getPointer()), Param0);
  Address Val3 = Address(Val2, CharUnits::fromQuantity(2));
  return Builder.CreateStore(Val0, Val3);
}
case ARM::BI__builtin_arm_mve_vst1q_f32:
case ARM::BI__builtin_arm_mve_vst1q_s32:
case ARM::BI__builtin_arm_mve_vst1q_u32:
case ARM::BI__builtin_arm_mve_vstrwq_f32:
case ARM::BI__builtin_arm_mve_vstrwq_s32:
case ARM::BI__builtin_arm_mve_vstrwq_u32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vst1q_f32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4));
    break;
  case ARM::BI__builtin_arm_mve_vst1q_s32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
    break;
  case ARM::BI__builtin_arm_mve_vst1q_u32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_f32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4));
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_s32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_u32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Address Val1 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val2 = Builder.CreatePointerCast((Val1.getPointer()), Param0);
  Address Val3 = Address(Val2, CharUnits::fromQuantity(4));
  return Builder.CreateStore(Val0, Val3);
}
case ARM::BI__builtin_arm_mve_vst1q_p_f16:
case ARM::BI__builtin_arm_mve_vst1q_p_f32:
case ARM::BI__builtin_arm_mve_vst1q_p_s16:
case ARM::BI__builtin_arm_mve_vst1q_p_s32:
case ARM::BI__builtin_arm_mve_vst1q_p_s8:
case ARM::BI__builtin_arm_mve_vst1q_p_u16:
case ARM::BI__builtin_arm_mve_vst1q_p_u32:
case ARM::BI__builtin_arm_mve_vst1q_p_u8:
case ARM::BI__builtin_arm_mve_vstrbq_p_s8:
case ARM::BI__builtin_arm_mve_vstrbq_p_u8:
case ARM::BI__builtin_arm_mve_vstrhq_p_f16:
case ARM::BI__builtin_arm_mve_vstrhq_p_s16:
case ARM::BI__builtin_arm_mve_vstrhq_p_u16:
case ARM::BI__builtin_arm_mve_vstrwq_p_f32:
case ARM::BI__builtin_arm_mve_vstrwq_p_s32:
case ARM::BI__builtin_arm_mve_vstrwq_p_u32: {
  llvm::Type * Param0;
  uint32_t  Param1;
  llvm::Type * Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vst1q_p_f16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8));
    Param1 = 2;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vst1q_p_f32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4));
    Param1 = 4;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vst1q_p_s16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
    Param1 = 2;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vst1q_p_s32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
    Param1 = 4;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vst1q_p_s8:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 16));
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vst1q_p_u16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
    Param1 = 2;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vst1q_p_u32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
    Param1 = 4;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vst1q_p_u8:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 16));
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vstrbq_p_s8:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 16));
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vstrbq_p_u8:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 16));
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_p_f16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8));
    Param1 = 2;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_p_s16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
    Param1 = 2;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrhq_p_u16:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
    Param1 = 2;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_p_f32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4));
    Param1 = 4;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_p_s32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
    Param1 = 4;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vstrwq_p_u32:
    Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
    Param1 = 4;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Address Val1 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val2 = Builder.CreatePointerCast((Val1.getPointer()), Param0);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param2}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_store, {Param3, Param0}), {Val0, Val2, Val3, Val6});
}
case ARM::BI__builtin_arm_mve_vst1q_s8:
case ARM::BI__builtin_arm_mve_vst1q_u8:
case ARM::BI__builtin_arm_mve_vstrbq_s8:
case ARM::BI__builtin_arm_mve_vstrbq_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Address Val1 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val2 = Builder.CreatePointerCast((Val1.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 16)));
  Address Val3 = Address(Val2, CharUnits::fromQuantity(1));
  return Builder.CreateStore(Val0, Val3);
}
case ARM::BI__builtin_arm_mve_vctp16q_m:
case ARM::BI__builtin_arm_mve_vctp32q_m:
case ARM::BI__builtin_arm_mve_vctp64q_m:
case ARM::BI__builtin_arm_mve_vctp8q_m: {
  llvm::Type * Param0;
  Intrinsic::ID  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vctp16q_m:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vctp16;
    break;
  case ARM::BI__builtin_arm_mve_vctp32q_m:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vctp32;
    break;
  case ARM::BI__builtin_arm_mve_vctp64q_m:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vctp64;
    break;
  case ARM::BI__builtin_arm_mve_vctp8q_m:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vctp8;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Param1), {Val3});
  Value *Val5 = Builder.CreateAnd(Val2, Val4);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val5});
  return Builder.CreateIntCast(Val6, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vmovnbq_s16:
case ARM::BI__builtin_arm_mve_vmovnbq_u16: {
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = EmitScalarExpr(E->getArg(0));
  Value *Val2 = ARMMVEVectorElementReverse(Builder, Val1, static_cast<unsigned>(16));
  llvm::Type *Val3 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val4 = ARMMVEVectorReinterpret(Builder, this, Val2, Val3);
  Value *Val5 = VectorZip(Builder, Val0, Val4);
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int8Ty, 16);
  return Builder.CreateTrunc(Val5, Val6);
}
case ARM::BI__builtin_arm_mve_vmovnbq_s32:
case ARM::BI__builtin_arm_mve_vmovnbq_u32: {
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = EmitScalarExpr(E->getArg(0));
  Value *Val2 = ARMMVEVectorElementReverse(Builder, Val1, static_cast<unsigned>(32));
  llvm::Type *Val3 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val4 = ARMMVEVectorReinterpret(Builder, this, Val2, Val3);
  Value *Val5 = VectorZip(Builder, Val0, Val4);
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int16Ty, 8);
  return Builder.CreateTrunc(Val5, Val6);
}
case ARM::BI__builtin_arm_mve_vsetq_lane_f16:
case ARM::BI__builtin_arm_mve_vsetq_lane_f32:
case ARM::BI__builtin_arm_mve_vsetq_lane_s16:
case ARM::BI__builtin_arm_mve_vsetq_lane_s32:
case ARM::BI__builtin_arm_mve_vsetq_lane_s64:
case ARM::BI__builtin_arm_mve_vsetq_lane_s8:
case ARM::BI__builtin_arm_mve_vsetq_lane_u16:
case ARM::BI__builtin_arm_mve_vsetq_lane_u32:
case ARM::BI__builtin_arm_mve_vsetq_lane_u64:
case ARM::BI__builtin_arm_mve_vsetq_lane_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = EmitScalarExpr(E->getArg(0));
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  return Builder.CreateInsertElement(Val0, Val1, Val2);
}
case ARM::BI__builtin_arm_mve_vfmaq_m_f16:
case ARM::BI__builtin_arm_mve_vfmaq_m_f32: {
  llvm::Type * Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vfmaq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vfmaq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = EmitScalarExpr(E->getArg(2));
  Value *Val2 = (Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(3));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_fma_predicated, {Param1, Param0}), {Val0, Val2, Val3, Val6});
}
case ARM::BI__builtin_arm_mve_vfmaq_f16:
case ARM::BI__builtin_arm_mve_vfmaq_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vfmaq_f16:
    Param0 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vfmaq_f32:
    Param0 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = EmitScalarExpr(E->getArg(2));
  Value *Val2 = (Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::fma, {Param0}), {Val0, Val2, Val3});
}
case ARM::BI__builtin_arm_mve_vmlaq_n_s16:
case ARM::BI__builtin_arm_mve_vmlaq_n_s32:
case ARM::BI__builtin_arm_mve_vmlaq_n_s8:
case ARM::BI__builtin_arm_mve_vmlaq_n_u16:
case ARM::BI__builtin_arm_mve_vmlaq_n_u32:
case ARM::BI__builtin_arm_mve_vmlaq_n_u8: {
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = EmitScalarExpr(E->getArg(2));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = Builder.CreateMul(Val0, Val2);
  Value *Val4 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateAdd(Val3, Val4);
}
case ARM::BI__builtin_arm_mve_vaddq_m_n_f16:
case ARM::BI__builtin_arm_mve_vaddq_m_n_f32:
case ARM::BI__builtin_arm_mve_vaddq_m_n_s16:
case ARM::BI__builtin_arm_mve_vaddq_m_n_s32:
case ARM::BI__builtin_arm_mve_vaddq_m_n_s8:
case ARM::BI__builtin_arm_mve_vaddq_m_n_u16:
case ARM::BI__builtin_arm_mve_vaddq_m_n_u32:
case ARM::BI__builtin_arm_mve_vaddq_m_n_u8:
case ARM::BI__builtin_arm_mve_vmulq_m_n_f16:
case ARM::BI__builtin_arm_mve_vmulq_m_n_f32:
case ARM::BI__builtin_arm_mve_vmulq_m_n_s16:
case ARM::BI__builtin_arm_mve_vmulq_m_n_s32:
case ARM::BI__builtin_arm_mve_vmulq_m_n_s8:
case ARM::BI__builtin_arm_mve_vmulq_m_n_u16:
case ARM::BI__builtin_arm_mve_vmulq_m_n_u32:
case ARM::BI__builtin_arm_mve_vmulq_m_n_u8:
case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s8:
case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s8:
case ARM::BI__builtin_arm_mve_vsubq_m_n_f16:
case ARM::BI__builtin_arm_mve_vsubq_m_n_f32:
case ARM::BI__builtin_arm_mve_vsubq_m_n_s16:
case ARM::BI__builtin_arm_mve_vsubq_m_n_s32:
case ARM::BI__builtin_arm_mve_vsubq_m_n_s8:
case ARM::BI__builtin_arm_mve_vsubq_m_n_u16:
case ARM::BI__builtin_arm_mve_vsubq_m_n_u32:
case ARM::BI__builtin_arm_mve_vsubq_m_n_u8: {
  llvm::Type * Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vaddq_m_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_add_predicated;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vaddq_m_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_add_predicated;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_add_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vaddq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_add_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_add_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vaddq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_add_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vaddq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_add_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_add_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmulq_m_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_mul_predicated;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmulq_m_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_mul_predicated;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmulq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_mul_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmulq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_mul_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmulq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_mul_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmulq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_mul_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmulq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_mul_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmulq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_mul_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_qdmulh_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_qdmulh_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_qdmulh_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_qrdmulh_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_qrdmulh_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_qrdmulh_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vsubq_m_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_sub_predicated;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vsubq_m_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_sub_predicated;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vsubq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_sub_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vsubq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_sub_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vsubq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_sub_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vsubq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_sub_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vsubq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_sub_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vsubq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_sub_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = EmitScalarExpr(E->getArg(2));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(3));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val4});
  Value *Val6 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val2, Val5, Val6});
}
case ARM::BI__builtin_arm_mve_vhaddq_m_n_s16:
case ARM::BI__builtin_arm_mve_vhaddq_m_n_s32:
case ARM::BI__builtin_arm_mve_vhaddq_m_n_s8:
case ARM::BI__builtin_arm_mve_vhaddq_m_n_u16:
case ARM::BI__builtin_arm_mve_vhaddq_m_n_u32:
case ARM::BI__builtin_arm_mve_vhaddq_m_n_u8:
case ARM::BI__builtin_arm_mve_vhsubq_m_n_s16:
case ARM::BI__builtin_arm_mve_vhsubq_m_n_s32:
case ARM::BI__builtin_arm_mve_vhsubq_m_n_s8:
case ARM::BI__builtin_arm_mve_vhsubq_m_n_u16:
case ARM::BI__builtin_arm_mve_vhsubq_m_n_u32:
case ARM::BI__builtin_arm_mve_vhsubq_m_n_u8:
case ARM::BI__builtin_arm_mve_vqaddq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqaddq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqaddq_m_n_s8:
case ARM::BI__builtin_arm_mve_vqaddq_m_n_u16:
case ARM::BI__builtin_arm_mve_vqaddq_m_n_u32:
case ARM::BI__builtin_arm_mve_vqaddq_m_n_u8:
case ARM::BI__builtin_arm_mve_vqsubq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqsubq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqsubq_m_n_s8:
case ARM::BI__builtin_arm_mve_vqsubq_m_n_u16:
case ARM::BI__builtin_arm_mve_vqsubq_m_n_u32:
case ARM::BI__builtin_arm_mve_vqsubq_m_n_u8: {
  uint32_t  Param0;
  llvm::Type * Param1;
  Intrinsic::ID  Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vhaddq_m_n_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_hadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_m_n_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_hadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_m_n_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_hadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_m_n_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_hadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_m_n_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_hadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_m_n_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_hadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_m_n_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_hsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_m_n_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_hsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_m_n_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_hsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_m_n_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_hsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_m_n_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_hsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_m_n_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_hsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_m_n_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_qadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_m_n_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_qadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_m_n_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_qadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_m_n_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_qadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_m_n_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_qadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_m_n_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_qadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_m_n_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_qsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_m_n_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_qsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_m_n_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_qsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_m_n_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_qsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_m_n_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_qsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_m_n_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_qsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = EmitScalarExpr(E->getArg(2));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = EmitScalarExpr(E->getArg(3));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val5});
  Value *Val7 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param1}), {Val0, Val2, Val3, Val6, Val7});
}
case ARM::BI__builtin_arm_mve_vqdmullbq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqdmullbq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqdmulltq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqdmulltq_m_n_s32: {
  uint32_t  Param0;
  llvm::Type * Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vqdmullbq_m_n_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmullbq_m_n_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulltq_m_n_s16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulltq_m_n_s32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = EmitScalarExpr(E->getArg(2));
  Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = EmitScalarExpr(E->getArg(3));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
  Value *Val7 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vqdmull_predicated, {Param1, Param2, llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val0, Val2, Val3, Val6, Val7});
}
case ARM::BI__builtin_arm_mve_vfmsq_m_f16:
case ARM::BI__builtin_arm_mve_vfmsq_m_f32: {
  llvm::Type * Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vfmsq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vfmsq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = EmitScalarExpr(E->getArg(2));
  Value *Val2 = Builder.CreateFNeg(Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(3));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_fma_predicated, {Param1, Param0}), {Val0, Val2, Val3, Val6});
}
case ARM::BI__builtin_arm_mve_vfmsq_f16:
case ARM::BI__builtin_arm_mve_vfmsq_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vfmsq_f16:
    Param0 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vfmsq_f32:
    Param0 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = EmitScalarExpr(E->getArg(2));
  Value *Val2 = Builder.CreateFNeg(Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::fma, {Param0}), {Val0, Val2, Val3});
}
case ARM::BI__builtin_arm_mve_vabsq_m_f16:
case ARM::BI__builtin_arm_mve_vabsq_m_f32:
case ARM::BI__builtin_arm_mve_vabsq_m_s16:
case ARM::BI__builtin_arm_mve_vabsq_m_s32:
case ARM::BI__builtin_arm_mve_vabsq_m_s8:
case ARM::BI__builtin_arm_mve_vclsq_m_s16:
case ARM::BI__builtin_arm_mve_vclsq_m_s32:
case ARM::BI__builtin_arm_mve_vclsq_m_s8:
case ARM::BI__builtin_arm_mve_vclzq_m_s16:
case ARM::BI__builtin_arm_mve_vclzq_m_s32:
case ARM::BI__builtin_arm_mve_vclzq_m_s8:
case ARM::BI__builtin_arm_mve_vclzq_m_u16:
case ARM::BI__builtin_arm_mve_vclzq_m_u32:
case ARM::BI__builtin_arm_mve_vclzq_m_u8:
case ARM::BI__builtin_arm_mve_vmvnq_m_s16:
case ARM::BI__builtin_arm_mve_vmvnq_m_s32:
case ARM::BI__builtin_arm_mve_vmvnq_m_s8:
case ARM::BI__builtin_arm_mve_vmvnq_m_u16:
case ARM::BI__builtin_arm_mve_vmvnq_m_u32:
case ARM::BI__builtin_arm_mve_vmvnq_m_u8:
case ARM::BI__builtin_arm_mve_vnegq_m_f16:
case ARM::BI__builtin_arm_mve_vnegq_m_f32:
case ARM::BI__builtin_arm_mve_vnegq_m_s16:
case ARM::BI__builtin_arm_mve_vnegq_m_s32:
case ARM::BI__builtin_arm_mve_vnegq_m_s8:
case ARM::BI__builtin_arm_mve_vqabsq_m_s16:
case ARM::BI__builtin_arm_mve_vqabsq_m_s32:
case ARM::BI__builtin_arm_mve_vqabsq_m_s8:
case ARM::BI__builtin_arm_mve_vqnegq_m_s16:
case ARM::BI__builtin_arm_mve_vqnegq_m_s32:
case ARM::BI__builtin_arm_mve_vqnegq_m_s8:
case ARM::BI__builtin_arm_mve_vrndaq_m_f16:
case ARM::BI__builtin_arm_mve_vrndaq_m_f32:
case ARM::BI__builtin_arm_mve_vrndmq_m_f16:
case ARM::BI__builtin_arm_mve_vrndmq_m_f32:
case ARM::BI__builtin_arm_mve_vrndnq_m_f16:
case ARM::BI__builtin_arm_mve_vrndnq_m_f32:
case ARM::BI__builtin_arm_mve_vrndpq_m_f16:
case ARM::BI__builtin_arm_mve_vrndpq_m_f32:
case ARM::BI__builtin_arm_mve_vrndq_m_f16:
case ARM::BI__builtin_arm_mve_vrndq_m_f32:
case ARM::BI__builtin_arm_mve_vrndxq_m_f16:
case ARM::BI__builtin_arm_mve_vrndxq_m_f32: {
  llvm::Type * Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vabsq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_abs_predicated;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vabsq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_abs_predicated;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vabsq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_abs_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vabsq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_abs_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vabsq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_abs_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vclsq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_cls_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vclsq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_cls_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vclsq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_cls_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vclzq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_clz_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vclzq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_clz_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vclzq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_clz_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vclzq_m_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_clz_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vclzq_m_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_clz_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vclzq_m_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_clz_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_mvn_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_mvn_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_mvn_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_m_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_mvn_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_m_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_mvn_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_m_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_mvn_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vnegq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_neg_predicated;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vnegq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_neg_predicated;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vnegq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_neg_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vnegq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_neg_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vnegq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_neg_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqabsq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_qabs_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqabsq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_qabs_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqabsq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_qabs_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqnegq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_qneg_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqnegq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_qneg_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqnegq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_qneg_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrndaq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vrinta_predicated;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrndaq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vrinta_predicated;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrndmq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vrintm_predicated;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrndmq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vrintm_predicated;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrndnq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vrintn_predicated;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrndnq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vrintn_predicated;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrndpq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vrintp_predicated;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrndpq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vrintp_predicated;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrndq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vrintz_predicated;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrndq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vrintz_predicated;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrndxq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vrintx_predicated;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrndxq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vrintx_predicated;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = EmitScalarExpr(E->getArg(2));
  Value *Val2 = Builder.CreateIntCast(Val1, Int32Ty, false);
  Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val2});
  Value *Val4 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val3, Val4});
}
case ARM::BI__builtin_arm_mve_vaddq_m_f16:
case ARM::BI__builtin_arm_mve_vaddq_m_f32:
case ARM::BI__builtin_arm_mve_vaddq_m_s16:
case ARM::BI__builtin_arm_mve_vaddq_m_s32:
case ARM::BI__builtin_arm_mve_vaddq_m_s8:
case ARM::BI__builtin_arm_mve_vaddq_m_u16:
case ARM::BI__builtin_arm_mve_vaddq_m_u32:
case ARM::BI__builtin_arm_mve_vaddq_m_u8:
case ARM::BI__builtin_arm_mve_vmulq_m_f16:
case ARM::BI__builtin_arm_mve_vmulq_m_f32:
case ARM::BI__builtin_arm_mve_vmulq_m_s16:
case ARM::BI__builtin_arm_mve_vmulq_m_s32:
case ARM::BI__builtin_arm_mve_vmulq_m_s8:
case ARM::BI__builtin_arm_mve_vmulq_m_u16:
case ARM::BI__builtin_arm_mve_vmulq_m_u32:
case ARM::BI__builtin_arm_mve_vmulq_m_u8:
case ARM::BI__builtin_arm_mve_vqdmulhq_m_s16:
case ARM::BI__builtin_arm_mve_vqdmulhq_m_s32:
case ARM::BI__builtin_arm_mve_vqdmulhq_m_s8:
case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s16:
case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s32:
case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s8:
case ARM::BI__builtin_arm_mve_vqshluq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqshluq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqshluq_m_n_s8:
case ARM::BI__builtin_arm_mve_vshlq_m_n_s16:
case ARM::BI__builtin_arm_mve_vshlq_m_n_s32:
case ARM::BI__builtin_arm_mve_vshlq_m_n_s8:
case ARM::BI__builtin_arm_mve_vshlq_m_n_u16:
case ARM::BI__builtin_arm_mve_vshlq_m_n_u32:
case ARM::BI__builtin_arm_mve_vshlq_m_n_u8:
case ARM::BI__builtin_arm_mve_vsubq_m_f16:
case ARM::BI__builtin_arm_mve_vsubq_m_f32:
case ARM::BI__builtin_arm_mve_vsubq_m_s16:
case ARM::BI__builtin_arm_mve_vsubq_m_s32:
case ARM::BI__builtin_arm_mve_vsubq_m_s8:
case ARM::BI__builtin_arm_mve_vsubq_m_u16:
case ARM::BI__builtin_arm_mve_vsubq_m_u32:
case ARM::BI__builtin_arm_mve_vsubq_m_u8: {
  llvm::Type * Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vaddq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_add_predicated;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vaddq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_add_predicated;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_add_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vaddq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_add_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_add_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vaddq_m_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_add_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vaddq_m_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_add_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddq_m_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_add_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmulq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_mul_predicated;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmulq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_mul_predicated;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmulq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_mul_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmulq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_mul_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmulq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_mul_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmulq_m_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_mul_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmulq_m_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_mul_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmulq_m_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_mul_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulhq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_qdmulh_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulhq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_qdmulh_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulhq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_qdmulh_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_qrdmulh_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_qrdmulh_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_qrdmulh_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqshluq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_vqshlu_imm_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshluq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_vqshlu_imm_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshluq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_vqshlu_imm_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_shl_imm_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_shl_imm_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_shl_imm_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_shl_imm_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_shl_imm_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_shl_imm_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vsubq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_sub_predicated;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vsubq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_sub_predicated;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vsubq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_sub_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vsubq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_sub_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vsubq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_sub_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vsubq_m_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = Intrinsic::arm_mve_sub_predicated;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vsubq_m_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = Intrinsic::arm_mve_sub_predicated;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vsubq_m_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param1 = Intrinsic::arm_mve_sub_predicated;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = EmitScalarExpr(E->getArg(2));
  Value *Val2 = EmitScalarExpr(E->getArg(3));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val3});
  Value *Val5 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val4, Val5});
}
case ARM::BI__builtin_arm_mve_vabdq_m_f16:
case ARM::BI__builtin_arm_mve_vabdq_m_f32:
case ARM::BI__builtin_arm_mve_vabdq_m_s16:
case ARM::BI__builtin_arm_mve_vabdq_m_s32:
case ARM::BI__builtin_arm_mve_vabdq_m_s8:
case ARM::BI__builtin_arm_mve_vabdq_m_u16:
case ARM::BI__builtin_arm_mve_vabdq_m_u32:
case ARM::BI__builtin_arm_mve_vabdq_m_u8:
case ARM::BI__builtin_arm_mve_vhaddq_m_s16:
case ARM::BI__builtin_arm_mve_vhaddq_m_s32:
case ARM::BI__builtin_arm_mve_vhaddq_m_s8:
case ARM::BI__builtin_arm_mve_vhaddq_m_u16:
case ARM::BI__builtin_arm_mve_vhaddq_m_u32:
case ARM::BI__builtin_arm_mve_vhaddq_m_u8:
case ARM::BI__builtin_arm_mve_vhsubq_m_s16:
case ARM::BI__builtin_arm_mve_vhsubq_m_s32:
case ARM::BI__builtin_arm_mve_vhsubq_m_s8:
case ARM::BI__builtin_arm_mve_vhsubq_m_u16:
case ARM::BI__builtin_arm_mve_vhsubq_m_u32:
case ARM::BI__builtin_arm_mve_vhsubq_m_u8:
case ARM::BI__builtin_arm_mve_vmaxnmq_m_f16:
case ARM::BI__builtin_arm_mve_vmaxnmq_m_f32:
case ARM::BI__builtin_arm_mve_vmaxq_m_s16:
case ARM::BI__builtin_arm_mve_vmaxq_m_s32:
case ARM::BI__builtin_arm_mve_vmaxq_m_s8:
case ARM::BI__builtin_arm_mve_vmaxq_m_u16:
case ARM::BI__builtin_arm_mve_vmaxq_m_u32:
case ARM::BI__builtin_arm_mve_vmaxq_m_u8:
case ARM::BI__builtin_arm_mve_vminnmq_m_f16:
case ARM::BI__builtin_arm_mve_vminnmq_m_f32:
case ARM::BI__builtin_arm_mve_vminq_m_s16:
case ARM::BI__builtin_arm_mve_vminq_m_s32:
case ARM::BI__builtin_arm_mve_vminq_m_s8:
case ARM::BI__builtin_arm_mve_vminq_m_u16:
case ARM::BI__builtin_arm_mve_vminq_m_u32:
case ARM::BI__builtin_arm_mve_vminq_m_u8:
case ARM::BI__builtin_arm_mve_vmulhq_m_s16:
case ARM::BI__builtin_arm_mve_vmulhq_m_s32:
case ARM::BI__builtin_arm_mve_vmulhq_m_s8:
case ARM::BI__builtin_arm_mve_vmulhq_m_u16:
case ARM::BI__builtin_arm_mve_vmulhq_m_u32:
case ARM::BI__builtin_arm_mve_vmulhq_m_u8:
case ARM::BI__builtin_arm_mve_vqaddq_m_s16:
case ARM::BI__builtin_arm_mve_vqaddq_m_s32:
case ARM::BI__builtin_arm_mve_vqaddq_m_s8:
case ARM::BI__builtin_arm_mve_vqaddq_m_u16:
case ARM::BI__builtin_arm_mve_vqaddq_m_u32:
case ARM::BI__builtin_arm_mve_vqaddq_m_u8:
case ARM::BI__builtin_arm_mve_vqshlq_m_n_s16:
case ARM::BI__builtin_arm_mve_vqshlq_m_n_s32:
case ARM::BI__builtin_arm_mve_vqshlq_m_n_s8:
case ARM::BI__builtin_arm_mve_vqshlq_m_n_u16:
case ARM::BI__builtin_arm_mve_vqshlq_m_n_u32:
case ARM::BI__builtin_arm_mve_vqshlq_m_n_u8:
case ARM::BI__builtin_arm_mve_vqsubq_m_s16:
case ARM::BI__builtin_arm_mve_vqsubq_m_s32:
case ARM::BI__builtin_arm_mve_vqsubq_m_s8:
case ARM::BI__builtin_arm_mve_vqsubq_m_u16:
case ARM::BI__builtin_arm_mve_vqsubq_m_u32:
case ARM::BI__builtin_arm_mve_vqsubq_m_u8:
case ARM::BI__builtin_arm_mve_vrhaddq_m_s16:
case ARM::BI__builtin_arm_mve_vrhaddq_m_s32:
case ARM::BI__builtin_arm_mve_vrhaddq_m_s8:
case ARM::BI__builtin_arm_mve_vrhaddq_m_u16:
case ARM::BI__builtin_arm_mve_vrhaddq_m_u32:
case ARM::BI__builtin_arm_mve_vrhaddq_m_u8:
case ARM::BI__builtin_arm_mve_vrmulhq_m_s16:
case ARM::BI__builtin_arm_mve_vrmulhq_m_s32:
case ARM::BI__builtin_arm_mve_vrmulhq_m_s8:
case ARM::BI__builtin_arm_mve_vrmulhq_m_u16:
case ARM::BI__builtin_arm_mve_vrmulhq_m_u32:
case ARM::BI__builtin_arm_mve_vrmulhq_m_u8:
case ARM::BI__builtin_arm_mve_vrshrq_m_n_s16:
case ARM::BI__builtin_arm_mve_vrshrq_m_n_s32:
case ARM::BI__builtin_arm_mve_vrshrq_m_n_s8:
case ARM::BI__builtin_arm_mve_vrshrq_m_n_u16:
case ARM::BI__builtin_arm_mve_vrshrq_m_n_u32:
case ARM::BI__builtin_arm_mve_vrshrq_m_n_u8:
case ARM::BI__builtin_arm_mve_vshrq_m_n_s16:
case ARM::BI__builtin_arm_mve_vshrq_m_n_s32:
case ARM::BI__builtin_arm_mve_vshrq_m_n_s8:
case ARM::BI__builtin_arm_mve_vshrq_m_n_u16:
case ARM::BI__builtin_arm_mve_vshrq_m_n_u32:
case ARM::BI__builtin_arm_mve_vshrq_m_n_u8: {
  uint32_t  Param0;
  llvm::Type * Param1;
  Intrinsic::ID  Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vabdq_m_f16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_abd_predicated;
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vabdq_m_f32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_abd_predicated;
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vabdq_m_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_abd_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vabdq_m_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_abd_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vabdq_m_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_abd_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vabdq_m_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_abd_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vabdq_m_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_abd_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vabdq_m_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_abd_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_m_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_hadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_m_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_hadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_m_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_hadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_m_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_hadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_m_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_hadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_m_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_hadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_m_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_hsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_m_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_hsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_m_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_hsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_m_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_hsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_m_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_hsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_m_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_hsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmaxnmq_m_f16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_max_predicated;
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmaxnmq_m_f32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_max_predicated;
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmaxq_m_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_max_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmaxq_m_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_max_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmaxq_m_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_max_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmaxq_m_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_max_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmaxq_m_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_max_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmaxq_m_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_max_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vminnmq_m_f16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_min_predicated;
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vminnmq_m_f32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_min_predicated;
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vminq_m_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_min_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vminq_m_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_min_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vminq_m_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_min_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vminq_m_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_min_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vminq_m_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_min_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vminq_m_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_min_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_m_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_mulh_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_m_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_mulh_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_m_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_mulh_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_m_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_mulh_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_m_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_mulh_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_m_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_mulh_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_m_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_qadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_m_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_qadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_m_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_qadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_m_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_qadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_m_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_qadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqaddq_m_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_qadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_n_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vqshl_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_n_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vqshl_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_n_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_vqshl_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_n_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vqshl_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_n_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vqshl_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_n_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_vqshl_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_m_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_qsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_m_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_qsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_m_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_qsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_m_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_qsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_m_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_qsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqsubq_m_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_qsub_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_m_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_rhadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_m_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_rhadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_m_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_rhadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_m_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_rhadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_m_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_rhadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_m_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_rhadd_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_m_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_rmulh_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_m_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_rmulh_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_m_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_rmulh_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_m_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_rmulh_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_m_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_rmulh_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_m_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_rmulh_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_m_n_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vrshr_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_m_n_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vrshr_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_m_n_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_vrshr_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_m_n_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vrshr_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_m_n_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vrshr_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_m_n_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_vrshr_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshrq_m_n_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_shr_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshrq_m_n_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_shr_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshrq_m_n_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_shr_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshrq_m_n_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_shr_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshrq_m_n_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_shr_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshrq_m_n_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_shr_imm_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = EmitScalarExpr(E->getArg(2));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = EmitScalarExpr(E->getArg(3));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val4});
  Value *Val6 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param1}), {Val0, Val1, Val2, Val5, Val6});
}
case ARM::BI__builtin_arm_mve_vmullbq_poly_m_p16:
case ARM::BI__builtin_arm_mve_vmullbq_poly_m_p8:
case ARM::BI__builtin_arm_mve_vmulltq_poly_m_p16:
case ARM::BI__builtin_arm_mve_vmulltq_poly_m_p8:
case ARM::BI__builtin_arm_mve_vqdmullbq_m_s16:
case ARM::BI__builtin_arm_mve_vqdmullbq_m_s32:
case ARM::BI__builtin_arm_mve_vqdmulltq_m_s16:
case ARM::BI__builtin_arm_mve_vqdmulltq_m_s32: {
  uint32_t  Param0;
  llvm::Type * Param1;
  Intrinsic::ID  Param2;
  llvm::Type * Param3;
  llvm::Type * Param4;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmullbq_poly_m_p16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_mull_poly_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmullbq_poly_m_p8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_mull_poly_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_poly_m_p16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_mull_poly_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_poly_m_p8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_mull_poly_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqdmullbq_m_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vqdmull_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmullbq_m_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vqdmull_predicated;
    Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulltq_m_s16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vqdmull_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqdmulltq_m_s32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vqdmull_predicated;
    Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = EmitScalarExpr(E->getArg(2));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = EmitScalarExpr(E->getArg(3));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val4});
  Value *Val6 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param4, Param1}), {Val0, Val1, Val2, Val5, Val6});
}
case ARM::BI__builtin_arm_mve_vmullbq_int_m_s16:
case ARM::BI__builtin_arm_mve_vmullbq_int_m_s32:
case ARM::BI__builtin_arm_mve_vmullbq_int_m_s8:
case ARM::BI__builtin_arm_mve_vmullbq_int_m_u16:
case ARM::BI__builtin_arm_mve_vmullbq_int_m_u32:
case ARM::BI__builtin_arm_mve_vmullbq_int_m_u8:
case ARM::BI__builtin_arm_mve_vmulltq_int_m_s16:
case ARM::BI__builtin_arm_mve_vmulltq_int_m_s32:
case ARM::BI__builtin_arm_mve_vmulltq_int_m_s8:
case ARM::BI__builtin_arm_mve_vmulltq_int_m_u16:
case ARM::BI__builtin_arm_mve_vmulltq_int_m_u32:
case ARM::BI__builtin_arm_mve_vmulltq_int_m_u8:
case ARM::BI__builtin_arm_mve_vshllbq_m_n_s16:
case ARM::BI__builtin_arm_mve_vshllbq_m_n_s8:
case ARM::BI__builtin_arm_mve_vshllbq_m_n_u16:
case ARM::BI__builtin_arm_mve_vshllbq_m_n_u8:
case ARM::BI__builtin_arm_mve_vshlltq_m_n_s16:
case ARM::BI__builtin_arm_mve_vshlltq_m_n_s8:
case ARM::BI__builtin_arm_mve_vshlltq_m_n_u16:
case ARM::BI__builtin_arm_mve_vshlltq_m_n_u8: {
  uint32_t  Param0;
  uint32_t  Param1;
  llvm::Type * Param2;
  Intrinsic::ID  Param3;
  llvm::Type * Param4;
  llvm::Type * Param5;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmullbq_int_m_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = Intrinsic::arm_mve_mull_int_predicated;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmullbq_int_m_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = Intrinsic::arm_mve_mull_int_predicated;
    Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmullbq_int_m_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = Intrinsic::arm_mve_mull_int_predicated;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmullbq_int_m_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = Intrinsic::arm_mve_mull_int_predicated;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmullbq_int_m_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = Intrinsic::arm_mve_mull_int_predicated;
    Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmullbq_int_m_u8:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = Intrinsic::arm_mve_mull_int_predicated;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_m_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = Intrinsic::arm_mve_mull_int_predicated;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_m_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = Intrinsic::arm_mve_mull_int_predicated;
    Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_m_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = Intrinsic::arm_mve_mull_int_predicated;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_m_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = Intrinsic::arm_mve_mull_int_predicated;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_m_u32:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = Intrinsic::arm_mve_mull_int_predicated;
    Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_m_u8:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = Intrinsic::arm_mve_mull_int_predicated;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshllbq_m_n_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = Intrinsic::arm_mve_vshll_imm_predicated;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshllbq_m_n_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = Intrinsic::arm_mve_vshll_imm_predicated;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshllbq_m_n_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = Intrinsic::arm_mve_vshll_imm_predicated;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshllbq_m_n_u8:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = Intrinsic::arm_mve_vshll_imm_predicated;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshlltq_m_n_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = Intrinsic::arm_mve_vshll_imm_predicated;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshlltq_m_n_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = Intrinsic::arm_mve_vshll_imm_predicated;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshlltq_m_n_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = Intrinsic::arm_mve_vshll_imm_predicated;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshlltq_m_n_u8:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = Intrinsic::arm_mve_vshll_imm_predicated;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = EmitScalarExpr(E->getArg(2));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val4 = EmitScalarExpr(E->getArg(3));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param2}), {Val5});
  Value *Val7 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateCall(CGM.getIntrinsic(Param3, {Param4, Param5, Param2}), {Val0, Val1, Val2, Val3, Val6, Val7});
}
case ARM::BI__builtin_arm_mve_vqrshlq_m_s16:
case ARM::BI__builtin_arm_mve_vqrshlq_m_s32:
case ARM::BI__builtin_arm_mve_vqrshlq_m_s8:
case ARM::BI__builtin_arm_mve_vqrshlq_m_u16:
case ARM::BI__builtin_arm_mve_vqrshlq_m_u32:
case ARM::BI__builtin_arm_mve_vqrshlq_m_u8:
case ARM::BI__builtin_arm_mve_vqshlq_m_s16:
case ARM::BI__builtin_arm_mve_vqshlq_m_s32:
case ARM::BI__builtin_arm_mve_vqshlq_m_s8:
case ARM::BI__builtin_arm_mve_vqshlq_m_u16:
case ARM::BI__builtin_arm_mve_vqshlq_m_u32:
case ARM::BI__builtin_arm_mve_vqshlq_m_u8:
case ARM::BI__builtin_arm_mve_vrshlq_m_s16:
case ARM::BI__builtin_arm_mve_vrshlq_m_s32:
case ARM::BI__builtin_arm_mve_vrshlq_m_s8:
case ARM::BI__builtin_arm_mve_vrshlq_m_u16:
case ARM::BI__builtin_arm_mve_vrshlq_m_u32:
case ARM::BI__builtin_arm_mve_vrshlq_m_u8:
case ARM::BI__builtin_arm_mve_vshlq_m_s16:
case ARM::BI__builtin_arm_mve_vshlq_m_s32:
case ARM::BI__builtin_arm_mve_vshlq_m_s8:
case ARM::BI__builtin_arm_mve_vshlq_m_u16:
case ARM::BI__builtin_arm_mve_vshlq_m_u32:
case ARM::BI__builtin_arm_mve_vshlq_m_u8: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  llvm::Type * Param3;
  llvm::Type * Param4;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vqrshlq_m_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_m_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_m_s8:
    Param0 = 1;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_m_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_m_u32:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqrshlq_m_u8:
    Param0 = 1;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_s8:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vqshlq_m_u8:
    Param0 = 1;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_m_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_m_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_m_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_m_u16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_m_u32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_m_u8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_u16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_u32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vshlq_m_u8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = EmitScalarExpr(E->getArg(2));
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param2);
  Value *Val5 = EmitScalarExpr(E->getArg(3));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val6});
  Value *Val8 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshl_vector_predicated, {Param4, Param4, Param3}), {Val0, Val1, Val2, Val3, Val4, Val7, Val8});
}
case ARM::BI__builtin_arm_mve_vaddlvaq_s32:
case ARM::BI__builtin_arm_mve_vaddlvaq_u32:
case ARM::BI__builtin_arm_mve_vaddvaq_s16:
case ARM::BI__builtin_arm_mve_vaddvaq_s32:
case ARM::BI__builtin_arm_mve_vaddvaq_s8:
case ARM::BI__builtin_arm_mve_vaddvaq_u16:
case ARM::BI__builtin_arm_mve_vaddvaq_u32:
case ARM::BI__builtin_arm_mve_vaddvaq_u8: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vaddlvaq_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_addlv;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddlvaq_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_addlv;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddvaq_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_addv;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vaddvaq_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_addv;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddvaq_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_addv;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vaddvaq_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_addv;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vaddvaq_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_addv;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddvaq_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_addv;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2}), {Val0, Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateAdd(Val2, Val3);
}
case ARM::BI__builtin_arm_mve_vaddlvaq_p_s32:
case ARM::BI__builtin_arm_mve_vaddlvaq_p_u32:
case ARM::BI__builtin_arm_mve_vaddvaq_p_s16:
case ARM::BI__builtin_arm_mve_vaddvaq_p_s32:
case ARM::BI__builtin_arm_mve_vaddvaq_p_s8:
case ARM::BI__builtin_arm_mve_vaddvaq_p_u16:
case ARM::BI__builtin_arm_mve_vaddvaq_p_u32:
case ARM::BI__builtin_arm_mve_vaddvaq_p_u8: {
  uint32_t  Param0;
  llvm::Type * Param1;
  Intrinsic::ID  Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vaddlvaq_p_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_addlv_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddlvaq_p_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_addlv_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddvaq_p_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_addv_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vaddvaq_p_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_addv_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddvaq_p_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_addv_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vaddvaq_p_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_addv_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vaddvaq_p_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_addv_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vaddvaq_p_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_addv_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val3});
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param1}), {Val0, Val1, Val4});
  Value *Val6 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateAdd(Val5, Val6);
}
case ARM::BI__builtin_arm_mve_vcvtq_m_f16_s16:
case ARM::BI__builtin_arm_mve_vcvtq_m_f16_u16:
case ARM::BI__builtin_arm_mve_vcvtq_m_f32_s32:
case ARM::BI__builtin_arm_mve_vcvtq_m_f32_u32:
case ARM::BI__builtin_arm_mve_vcvtq_m_s16_f16:
case ARM::BI__builtin_arm_mve_vcvtq_m_s32_f32:
case ARM::BI__builtin_arm_mve_vcvtq_m_u16_f16:
case ARM::BI__builtin_arm_mve_vcvtq_m_u32_f32: {
  uint32_t  Param0;
  llvm::Type * Param1;
  llvm::Type * Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtq_m_f16_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_m_f16_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_m_f32_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_m_f32_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_m_s16_f16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_m_s32_f32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_m_u16_f16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_m_u32_f32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val3});
  Value *Val5 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fp_int_predicated, {Param2, Param3, Param1}), {Val0, Val1, Val4, Val5});
}
case ARM::BI__builtin_arm_mve_vrev16q_m_s8:
case ARM::BI__builtin_arm_mve_vrev16q_m_u8:
case ARM::BI__builtin_arm_mve_vrev32q_m_f16:
case ARM::BI__builtin_arm_mve_vrev32q_m_s16:
case ARM::BI__builtin_arm_mve_vrev32q_m_s8:
case ARM::BI__builtin_arm_mve_vrev32q_m_u16:
case ARM::BI__builtin_arm_mve_vrev32q_m_u8:
case ARM::BI__builtin_arm_mve_vrev64q_m_f16:
case ARM::BI__builtin_arm_mve_vrev64q_m_f32:
case ARM::BI__builtin_arm_mve_vrev64q_m_s16:
case ARM::BI__builtin_arm_mve_vrev64q_m_s32:
case ARM::BI__builtin_arm_mve_vrev64q_m_s8:
case ARM::BI__builtin_arm_mve_vrev64q_m_u16:
case ARM::BI__builtin_arm_mve_vrev64q_m_u32:
case ARM::BI__builtin_arm_mve_vrev64q_m_u8: {
  uint32_t  Param0;
  llvm::Type * Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vrev16q_m_s8:
    Param0 = 16;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrev16q_m_u8:
    Param0 = 16;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrev32q_m_f16:
    Param0 = 32;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrev32q_m_s16:
    Param0 = 32;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrev32q_m_s8:
    Param0 = 32;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrev32q_m_u16:
    Param0 = 32;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrev32q_m_u8:
    Param0 = 32;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_m_f16:
    Param0 = 64;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_m_f32:
    Param0 = 64;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_m_s16:
    Param0 = 64;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_m_s32:
    Param0 = 64;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_m_s8:
    Param0 = 64;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_m_u16:
    Param0 = 64;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_m_u32:
    Param0 = 64;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_m_u8:
    Param0 = 64;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val2 = EmitScalarExpr(E->getArg(2));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val3});
  Value *Val5 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vrev_predicated, {Param2, Param1}), {Val0, Val1, Val4, Val5});
}
case ARM::BI__builtin_arm_mve_vmovlbq_m_s16:
case ARM::BI__builtin_arm_mve_vmovlbq_m_s8:
case ARM::BI__builtin_arm_mve_vmovlbq_m_u16:
case ARM::BI__builtin_arm_mve_vmovlbq_m_u8:
case ARM::BI__builtin_arm_mve_vmovltq_m_s16:
case ARM::BI__builtin_arm_mve_vmovltq_m_s8:
case ARM::BI__builtin_arm_mve_vmovltq_m_u16:
case ARM::BI__builtin_arm_mve_vmovltq_m_u8: {
  uint32_t  Param0;
  uint32_t  Param1;
  llvm::Type * Param2;
  llvm::Type * Param3;
  llvm::Type * Param4;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmovlbq_m_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmovlbq_m_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmovlbq_m_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmovlbq_m_u8:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmovltq_m_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmovltq_m_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmovltq_m_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmovltq_m_u8:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param2}), {Val4});
  Value *Val6 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vmovl_predicated, {Param3, Param4, Param2}), {Val0, Val1, Val2, Val5, Val6});
}
case ARM::BI__builtin_arm_mve_vstrhq_s32:
case ARM::BI__builtin_arm_mve_vstrhq_u32: {
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 4);
  Value *Val2 = Builder.CreateTrunc(Val0, Val1);
  Address Val3 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val4 = Builder.CreatePointerCast((Val3.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 4)));
  Address Val5 = Address(Val4, CharUnits::fromQuantity(2));
  return Builder.CreateStore(Val2, Val5);
}
case ARM::BI__builtin_arm_mve_vstrhq_p_s32:
case ARM::BI__builtin_arm_mve_vstrhq_p_u32: {
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 4);
  Value *Val2 = Builder.CreateTrunc(Val0, Val1);
  Address Val3 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val4 = Builder.CreatePointerCast((Val3.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 4)));
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, 2);
  Value *Val6 = EmitScalarExpr(E->getArg(2));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_store, {llvm::FixedVectorType::get(Int16Ty, 4), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 4))}), {Val2, Val4, Val5, Val8});
}
case ARM::BI__builtin_arm_mve_vandq_m_f16:
case ARM::BI__builtin_arm_mve_vbicq_m_f16:
case ARM::BI__builtin_arm_mve_veorq_m_f16:
case ARM::BI__builtin_arm_mve_vornq_m_f16:
case ARM::BI__builtin_arm_mve_vorrq_m_f16: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vandq_m_f16:
    Param0 = Intrinsic::arm_mve_and_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_m_f16:
    Param0 = Intrinsic::arm_mve_bic_predicated;
    break;
  case ARM::BI__builtin_arm_mve_veorq_m_f16:
    Param0 = Intrinsic::arm_mve_eor_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vornq_m_f16:
    Param0 = Intrinsic::arm_mve_orn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_m_f16:
    Param0 = Intrinsic::arm_mve_orr_predicated;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val2 = Builder.CreateBitCast(Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val5 = Builder.CreateBitCast(Val3, Val4);
  Value *Val6 = EmitScalarExpr(E->getArg(3));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val7});
  Value *Val9 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val10 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val11 = Builder.CreateBitCast(Val9, Val10);
  Value *Val12 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val5, Val8, Val11});
  llvm::Type *Val13 = llvm::FixedVectorType::get(HalfTy, 8);
  return Builder.CreateBitCast(Val12, Val13);
}
case ARM::BI__builtin_arm_mve_vandq_m_s16:
case ARM::BI__builtin_arm_mve_vandq_m_u16:
case ARM::BI__builtin_arm_mve_vbicq_m_s16:
case ARM::BI__builtin_arm_mve_vbicq_m_u16:
case ARM::BI__builtin_arm_mve_veorq_m_s16:
case ARM::BI__builtin_arm_mve_veorq_m_u16:
case ARM::BI__builtin_arm_mve_vornq_m_s16:
case ARM::BI__builtin_arm_mve_vornq_m_u16:
case ARM::BI__builtin_arm_mve_vorrq_m_s16:
case ARM::BI__builtin_arm_mve_vorrq_m_u16: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vandq_m_s16:
    Param0 = Intrinsic::arm_mve_and_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vandq_m_u16:
    Param0 = Intrinsic::arm_mve_and_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_m_s16:
    Param0 = Intrinsic::arm_mve_bic_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_m_u16:
    Param0 = Intrinsic::arm_mve_bic_predicated;
    break;
  case ARM::BI__builtin_arm_mve_veorq_m_s16:
    Param0 = Intrinsic::arm_mve_eor_predicated;
    break;
  case ARM::BI__builtin_arm_mve_veorq_m_u16:
    Param0 = Intrinsic::arm_mve_eor_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vornq_m_s16:
    Param0 = Intrinsic::arm_mve_orn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vornq_m_u16:
    Param0 = Intrinsic::arm_mve_orn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_m_s16:
    Param0 = Intrinsic::arm_mve_orr_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_m_u16:
    Param0 = Intrinsic::arm_mve_orr_predicated;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val2 = Builder.CreateBitCast(Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val5 = Builder.CreateBitCast(Val3, Val4);
  Value *Val6 = EmitScalarExpr(E->getArg(3));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val7});
  Value *Val9 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val10 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val11 = Builder.CreateBitCast(Val9, Val10);
  Value *Val12 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val5, Val8, Val11});
  llvm::Type *Val13 = llvm::FixedVectorType::get(Int16Ty, 8);
  return Builder.CreateBitCast(Val12, Val13);
}
case ARM::BI__builtin_arm_mve_vmaxaq_s16: {
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val2 = llvm::Constant::getNullValue(Val1);
  Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val5 = llvm::Constant::getNullValue(Val4);
  Value *Val6 = Builder.CreateSub(Val5, Val0);
  Value *Val7 = Builder.CreateSelect(Val3, Val6, Val0);
  Value *Val8 = EmitScalarExpr(E->getArg(0));
  Value *Val9 = Builder.CreateICmpUGE(Val8, Val7);
  return Builder.CreateSelect(Val9, Val8, Val7);
}
case ARM::BI__builtin_arm_mve_vminaq_s16: {
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val2 = llvm::Constant::getNullValue(Val1);
  Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val5 = llvm::Constant::getNullValue(Val4);
  Value *Val6 = Builder.CreateSub(Val5, Val0);
  Value *Val7 = Builder.CreateSelect(Val3, Val6, Val0);
  Value *Val8 = EmitScalarExpr(E->getArg(0));
  Value *Val9 = Builder.CreateICmpULE(Val8, Val7);
  return Builder.CreateSelect(Val9, Val8, Val7);
}
case ARM::BI__builtin_arm_mve_vandq_m_f32:
case ARM::BI__builtin_arm_mve_vbicq_m_f32:
case ARM::BI__builtin_arm_mve_veorq_m_f32:
case ARM::BI__builtin_arm_mve_vornq_m_f32:
case ARM::BI__builtin_arm_mve_vorrq_m_f32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vandq_m_f32:
    Param0 = Intrinsic::arm_mve_and_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_m_f32:
    Param0 = Intrinsic::arm_mve_bic_predicated;
    break;
  case ARM::BI__builtin_arm_mve_veorq_m_f32:
    Param0 = Intrinsic::arm_mve_eor_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vornq_m_f32:
    Param0 = Intrinsic::arm_mve_orn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_m_f32:
    Param0 = Intrinsic::arm_mve_orr_predicated;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val2 = Builder.CreateBitCast(Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val5 = Builder.CreateBitCast(Val3, Val4);
  Value *Val6 = EmitScalarExpr(E->getArg(3));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
  Value *Val9 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val10 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val11 = Builder.CreateBitCast(Val9, Val10);
  Value *Val12 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val5, Val8, Val11});
  llvm::Type *Val13 = llvm::FixedVectorType::get(FloatTy, 4);
  return Builder.CreateBitCast(Val12, Val13);
}
case ARM::BI__builtin_arm_mve_vandq_m_s32:
case ARM::BI__builtin_arm_mve_vandq_m_u32:
case ARM::BI__builtin_arm_mve_vbicq_m_s32:
case ARM::BI__builtin_arm_mve_vbicq_m_u32:
case ARM::BI__builtin_arm_mve_veorq_m_s32:
case ARM::BI__builtin_arm_mve_veorq_m_u32:
case ARM::BI__builtin_arm_mve_vornq_m_s32:
case ARM::BI__builtin_arm_mve_vornq_m_u32:
case ARM::BI__builtin_arm_mve_vorrq_m_s32:
case ARM::BI__builtin_arm_mve_vorrq_m_u32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vandq_m_s32:
    Param0 = Intrinsic::arm_mve_and_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vandq_m_u32:
    Param0 = Intrinsic::arm_mve_and_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_m_s32:
    Param0 = Intrinsic::arm_mve_bic_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_m_u32:
    Param0 = Intrinsic::arm_mve_bic_predicated;
    break;
  case ARM::BI__builtin_arm_mve_veorq_m_s32:
    Param0 = Intrinsic::arm_mve_eor_predicated;
    break;
  case ARM::BI__builtin_arm_mve_veorq_m_u32:
    Param0 = Intrinsic::arm_mve_eor_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vornq_m_s32:
    Param0 = Intrinsic::arm_mve_orn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vornq_m_u32:
    Param0 = Intrinsic::arm_mve_orn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_m_s32:
    Param0 = Intrinsic::arm_mve_orr_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_m_u32:
    Param0 = Intrinsic::arm_mve_orr_predicated;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val2 = Builder.CreateBitCast(Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val5 = Builder.CreateBitCast(Val3, Val4);
  Value *Val6 = EmitScalarExpr(E->getArg(3));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
  Value *Val9 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val10 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val11 = Builder.CreateBitCast(Val9, Val10);
  Value *Val12 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val5, Val8, Val11});
  llvm::Type *Val13 = llvm::FixedVectorType::get(Int32Ty, 4);
  return Builder.CreateBitCast(Val12, Val13);
}
case ARM::BI__builtin_arm_mve_vmaxaq_s32: {
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val2 = llvm::Constant::getNullValue(Val1);
  Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val5 = llvm::Constant::getNullValue(Val4);
  Value *Val6 = Builder.CreateSub(Val5, Val0);
  Value *Val7 = Builder.CreateSelect(Val3, Val6, Val0);
  Value *Val8 = EmitScalarExpr(E->getArg(0));
  Value *Val9 = Builder.CreateICmpUGE(Val8, Val7);
  return Builder.CreateSelect(Val9, Val8, Val7);
}
case ARM::BI__builtin_arm_mve_vminaq_s32: {
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val2 = llvm::Constant::getNullValue(Val1);
  Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val5 = llvm::Constant::getNullValue(Val4);
  Value *Val6 = Builder.CreateSub(Val5, Val0);
  Value *Val7 = Builder.CreateSelect(Val3, Val6, Val0);
  Value *Val8 = EmitScalarExpr(E->getArg(0));
  Value *Val9 = Builder.CreateICmpULE(Val8, Val7);
  return Builder.CreateSelect(Val9, Val8, Val7);
}
case ARM::BI__builtin_arm_mve_vandq_m_s8:
case ARM::BI__builtin_arm_mve_vandq_m_u8:
case ARM::BI__builtin_arm_mve_vbicq_m_s8:
case ARM::BI__builtin_arm_mve_vbicq_m_u8:
case ARM::BI__builtin_arm_mve_veorq_m_s8:
case ARM::BI__builtin_arm_mve_veorq_m_u8:
case ARM::BI__builtin_arm_mve_vornq_m_s8:
case ARM::BI__builtin_arm_mve_vornq_m_u8:
case ARM::BI__builtin_arm_mve_vorrq_m_s8:
case ARM::BI__builtin_arm_mve_vorrq_m_u8: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vandq_m_s8:
    Param0 = Intrinsic::arm_mve_and_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vandq_m_u8:
    Param0 = Intrinsic::arm_mve_and_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_m_s8:
    Param0 = Intrinsic::arm_mve_bic_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_m_u8:
    Param0 = Intrinsic::arm_mve_bic_predicated;
    break;
  case ARM::BI__builtin_arm_mve_veorq_m_s8:
    Param0 = Intrinsic::arm_mve_eor_predicated;
    break;
  case ARM::BI__builtin_arm_mve_veorq_m_u8:
    Param0 = Intrinsic::arm_mve_eor_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vornq_m_s8:
    Param0 = Intrinsic::arm_mve_orn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vornq_m_u8:
    Param0 = Intrinsic::arm_mve_orn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_m_s8:
    Param0 = Intrinsic::arm_mve_orr_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_m_u8:
    Param0 = Intrinsic::arm_mve_orr_predicated;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val2 = Builder.CreateBitCast(Val0, Val1);
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val5 = Builder.CreateBitCast(Val3, Val4);
  Value *Val6 = EmitScalarExpr(E->getArg(3));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val7});
  Value *Val9 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val10 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val11 = Builder.CreateBitCast(Val9, Val10);
  Value *Val12 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val5, Val8, Val11});
  llvm::Type *Val13 = llvm::FixedVectorType::get(Int8Ty, 16);
  return Builder.CreateBitCast(Val12, Val13);
}
case ARM::BI__builtin_arm_mve_vmaxaq_s8: {
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val2 = llvm::Constant::getNullValue(Val1);
  Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val5 = llvm::Constant::getNullValue(Val4);
  Value *Val6 = Builder.CreateSub(Val5, Val0);
  Value *Val7 = Builder.CreateSelect(Val3, Val6, Val0);
  Value *Val8 = EmitScalarExpr(E->getArg(0));
  Value *Val9 = Builder.CreateICmpUGE(Val8, Val7);
  return Builder.CreateSelect(Val9, Val8, Val7);
}
case ARM::BI__builtin_arm_mve_vminaq_s8: {
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val2 = llvm::Constant::getNullValue(Val1);
  Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val5 = llvm::Constant::getNullValue(Val4);
  Value *Val6 = Builder.CreateSub(Val5, Val0);
  Value *Val7 = Builder.CreateSelect(Val3, Val6, Val0);
  Value *Val8 = EmitScalarExpr(E->getArg(0));
  Value *Val9 = Builder.CreateICmpULE(Val8, Val7);
  return Builder.CreateSelect(Val9, Val8, Val7);
}
case ARM::BI__builtin_arm_mve_vstrbq_s32:
case ARM::BI__builtin_arm_mve_vstrbq_u32: {
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 4);
  Value *Val2 = Builder.CreateTrunc(Val0, Val1);
  Address Val3 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val4 = Builder.CreatePointerCast((Val3.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 4)));
  Address Val5 = Address(Val4, CharUnits::fromQuantity(1));
  return Builder.CreateStore(Val2, Val5);
}
case ARM::BI__builtin_arm_mve_vstrbq_p_s32:
case ARM::BI__builtin_arm_mve_vstrbq_p_u32: {
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 4);
  Value *Val2 = Builder.CreateTrunc(Val0, Val1);
  Address Val3 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val4 = Builder.CreatePointerCast((Val3.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 4)));
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, 1);
  Value *Val6 = EmitScalarExpr(E->getArg(2));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_store, {llvm::FixedVectorType::get(Int8Ty, 4), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 4))}), {Val2, Val4, Val5, Val8});
}
case ARM::BI__builtin_arm_mve_vstrbq_s16:
case ARM::BI__builtin_arm_mve_vstrbq_u16: {
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 8);
  Value *Val2 = Builder.CreateTrunc(Val0, Val1);
  Address Val3 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val4 = Builder.CreatePointerCast((Val3.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 8)));
  Address Val5 = Address(Val4, CharUnits::fromQuantity(1));
  return Builder.CreateStore(Val2, Val5);
}
case ARM::BI__builtin_arm_mve_vstrbq_p_s16:
case ARM::BI__builtin_arm_mve_vstrbq_p_u16: {
  Value *Val0 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 8);
  Value *Val2 = Builder.CreateTrunc(Val0, Val1);
  Address Val3 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val4 = Builder.CreatePointerCast((Val3.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 8)));
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, 1);
  Value *Val6 = EmitScalarExpr(E->getArg(2));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val7});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_store, {llvm::FixedVectorType::get(Int8Ty, 8), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 8))}), {Val2, Val4, Val5, Val8});
}
case ARM::BI__builtin_arm_mve_vfmasq_m_n_f16:
case ARM::BI__builtin_arm_mve_vfmasq_m_n_f32: {
  llvm::Type * Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vfmasq_m_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vfmasq_m_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = ARMMVEVectorSplat(Builder, Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = (Val3);
  Value *Val5 = EmitScalarExpr(E->getArg(3));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_fma_predicated, {Param1, Param0}), {Val2, Val4, Val1, Val7});
}
case ARM::BI__builtin_arm_mve_vfmasq_n_f16:
case ARM::BI__builtin_arm_mve_vfmasq_n_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vfmasq_n_f16:
    Param0 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vfmasq_n_f32:
    Param0 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = ARMMVEVectorSplat(Builder, Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = (Val3);
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::fma, {Param0}), {Val2, Val4, Val1});
}
case ARM::BI__builtin_arm_mve_vfmaq_m_n_f16:
case ARM::BI__builtin_arm_mve_vfmaq_m_n_f32: {
  llvm::Type * Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vfmaq_m_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vfmaq_m_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = ARMMVEVectorSplat(Builder, Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = (Val1);
  Value *Val4 = EmitScalarExpr(E->getArg(0));
  Value *Val5 = EmitScalarExpr(E->getArg(3));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_fma_predicated, {Param1, Param0}), {Val2, Val3, Val4, Val7});
}
case ARM::BI__builtin_arm_mve_vfmaq_n_f16:
case ARM::BI__builtin_arm_mve_vfmaq_n_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vfmaq_n_f16:
    Param0 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vfmaq_n_f32:
    Param0 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = ARMMVEVectorSplat(Builder, Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = (Val1);
  Value *Val4 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::fma, {Param0}), {Val2, Val3, Val4});
}
case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_f16:
case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
  Value *Val6 = Builder.CreateFCmpOEQ(Val3, Val5);
  Value *Val7 = Builder.CreateAnd(Val2, Val6);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
  return Builder.CreateIntCast(Val8, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_f16:
case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
  Value *Val6 = Builder.CreateFCmpOGE(Val3, Val5);
  Value *Val7 = Builder.CreateAnd(Val2, Val6);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
  return Builder.CreateIntCast(Val8, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_f16:
case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
  Value *Val6 = Builder.CreateFCmpOGT(Val3, Val5);
  Value *Val7 = Builder.CreateAnd(Val2, Val6);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
  return Builder.CreateIntCast(Val8, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpleq_m_n_f16:
case ARM::BI__builtin_arm_mve_vcmpleq_m_n_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpleq_m_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpleq_m_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
  Value *Val6 = Builder.CreateFCmpOLE(Val3, Val5);
  Value *Val7 = Builder.CreateAnd(Val2, Val6);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
  return Builder.CreateIntCast(Val8, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpltq_m_n_f16:
case ARM::BI__builtin_arm_mve_vcmpltq_m_n_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpltq_m_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpltq_m_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
  Value *Val6 = Builder.CreateFCmpOLT(Val3, Val5);
  Value *Val7 = Builder.CreateAnd(Val2, Val6);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
  return Builder.CreateIntCast(Val8, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpneq_m_n_f16:
case ARM::BI__builtin_arm_mve_vcmpneq_m_n_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpneq_m_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_m_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
  Value *Val6 = Builder.CreateFCmpUNE(Val3, Val5);
  Value *Val7 = Builder.CreateAnd(Val2, Val6);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
  return Builder.CreateIntCast(Val8, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s16:
case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s32:
case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s8:
case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u16:
case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u32:
case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
  Value *Val6 = Builder.CreateICmpEQ(Val3, Val5);
  Value *Val7 = Builder.CreateAnd(Val2, Val6);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
  return Builder.CreateIntCast(Val8, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s16:
case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s32:
case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s8:
case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u16:
case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u32:
case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
  Value *Val6 = Builder.CreateICmpNE(Val3, Val5);
  Value *Val7 = Builder.CreateAnd(Val2, Val6);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
  return Builder.CreateIntCast(Val8, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s16:
case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s32:
case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
  Value *Val6 = Builder.CreateICmpSGE(Val3, Val5);
  Value *Val7 = Builder.CreateAnd(Val2, Val6);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
  return Builder.CreateIntCast(Val8, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s16:
case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s32:
case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
  Value *Val6 = Builder.CreateICmpSGT(Val3, Val5);
  Value *Val7 = Builder.CreateAnd(Val2, Val6);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
  return Builder.CreateIntCast(Val8, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s16:
case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s32:
case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
  Value *Val6 = Builder.CreateICmpSLE(Val3, Val5);
  Value *Val7 = Builder.CreateAnd(Val2, Val6);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
  return Builder.CreateIntCast(Val8, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s16:
case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s32:
case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
  Value *Val6 = Builder.CreateICmpSLT(Val3, Val5);
  Value *Val7 = Builder.CreateAnd(Val2, Val6);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
  return Builder.CreateIntCast(Val8, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u16:
case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u32:
case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
  Value *Val6 = Builder.CreateICmpUGE(Val3, Val5);
  Value *Val7 = Builder.CreateAnd(Val2, Val6);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
  return Builder.CreateIntCast(Val8, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u16:
case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u32:
case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
  Value *Val6 = Builder.CreateICmpUGT(Val3, Val5);
  Value *Val7 = Builder.CreateAnd(Val2, Val6);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
  return Builder.CreateIntCast(Val8, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpeqq_m_f16:
case ARM::BI__builtin_arm_mve_vcmpeqq_m_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpeqq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateFCmpOEQ(Val3, Val4);
  Value *Val6 = Builder.CreateAnd(Val2, Val5);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
  return Builder.CreateIntCast(Val7, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpgeq_m_f16:
case ARM::BI__builtin_arm_mve_vcmpgeq_m_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpgeq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgeq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateFCmpOGE(Val3, Val4);
  Value *Val6 = Builder.CreateAnd(Val2, Val5);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
  return Builder.CreateIntCast(Val7, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpgtq_m_f16:
case ARM::BI__builtin_arm_mve_vcmpgtq_m_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpgtq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgtq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateFCmpOGT(Val3, Val4);
  Value *Val6 = Builder.CreateAnd(Val2, Val5);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
  return Builder.CreateIntCast(Val7, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpleq_m_f16:
case ARM::BI__builtin_arm_mve_vcmpleq_m_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpleq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpleq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateFCmpOLE(Val3, Val4);
  Value *Val6 = Builder.CreateAnd(Val2, Val5);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
  return Builder.CreateIntCast(Val7, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpltq_m_f16:
case ARM::BI__builtin_arm_mve_vcmpltq_m_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpltq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpltq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateFCmpOLT(Val3, Val4);
  Value *Val6 = Builder.CreateAnd(Val2, Val5);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
  return Builder.CreateIntCast(Val7, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpneq_m_f16:
case ARM::BI__builtin_arm_mve_vcmpneq_m_f32: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpneq_m_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_m_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateFCmpUNE(Val3, Val4);
  Value *Val6 = Builder.CreateAnd(Val2, Val5);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
  return Builder.CreateIntCast(Val7, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpeqq_m_s16:
case ARM::BI__builtin_arm_mve_vcmpeqq_m_s32:
case ARM::BI__builtin_arm_mve_vcmpeqq_m_s8:
case ARM::BI__builtin_arm_mve_vcmpeqq_m_u16:
case ARM::BI__builtin_arm_mve_vcmpeqq_m_u32:
case ARM::BI__builtin_arm_mve_vcmpeqq_m_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpeqq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_m_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_m_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpeqq_m_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateICmpEQ(Val3, Val4);
  Value *Val6 = Builder.CreateAnd(Val2, Val5);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
  return Builder.CreateIntCast(Val7, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpneq_m_s16:
case ARM::BI__builtin_arm_mve_vcmpneq_m_s32:
case ARM::BI__builtin_arm_mve_vcmpneq_m_s8:
case ARM::BI__builtin_arm_mve_vcmpneq_m_u16:
case ARM::BI__builtin_arm_mve_vcmpneq_m_u32:
case ARM::BI__builtin_arm_mve_vcmpneq_m_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpneq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_m_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_m_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpneq_m_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateICmpNE(Val3, Val4);
  Value *Val6 = Builder.CreateAnd(Val2, Val5);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
  return Builder.CreateIntCast(Val7, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpgeq_m_s16:
case ARM::BI__builtin_arm_mve_vcmpgeq_m_s32:
case ARM::BI__builtin_arm_mve_vcmpgeq_m_s8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpgeq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgeq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgeq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateICmpSGE(Val3, Val4);
  Value *Val6 = Builder.CreateAnd(Val2, Val5);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
  return Builder.CreateIntCast(Val7, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpgtq_m_s16:
case ARM::BI__builtin_arm_mve_vcmpgtq_m_s32:
case ARM::BI__builtin_arm_mve_vcmpgtq_m_s8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpgtq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgtq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpgtq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateICmpSGT(Val3, Val4);
  Value *Val6 = Builder.CreateAnd(Val2, Val5);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
  return Builder.CreateIntCast(Val7, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpleq_m_s16:
case ARM::BI__builtin_arm_mve_vcmpleq_m_s32:
case ARM::BI__builtin_arm_mve_vcmpleq_m_s8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpleq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpleq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpleq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateICmpSLE(Val3, Val4);
  Value *Val6 = Builder.CreateAnd(Val2, Val5);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
  return Builder.CreateIntCast(Val7, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpltq_m_s16:
case ARM::BI__builtin_arm_mve_vcmpltq_m_s32:
case ARM::BI__builtin_arm_mve_vcmpltq_m_s8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpltq_m_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpltq_m_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpltq_m_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateICmpSLT(Val3, Val4);
  Value *Val6 = Builder.CreateAnd(Val2, Val5);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
  return Builder.CreateIntCast(Val7, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmpcsq_m_u16:
case ARM::BI__builtin_arm_mve_vcmpcsq_m_u32:
case ARM::BI__builtin_arm_mve_vcmpcsq_m_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmpcsq_m_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmpcsq_m_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmpcsq_m_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateICmpUGE(Val3, Val4);
  Value *Val6 = Builder.CreateAnd(Val2, Val5);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
  return Builder.CreateIntCast(Val7, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vcmphiq_m_u16:
case ARM::BI__builtin_arm_mve_vcmphiq_m_u32:
case ARM::BI__builtin_arm_mve_vcmphiq_m_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmphiq_m_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmphiq_m_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmphiq_m_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateICmpUGT(Val3, Val4);
  Value *Val6 = Builder.CreateAnd(Val2, Val5);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
  return Builder.CreateIntCast(Val7, Int16Ty, false);
}
case ARM::BI__builtin_arm_mve_vpselq_f16:
case ARM::BI__builtin_arm_mve_vpselq_f32:
case ARM::BI__builtin_arm_mve_vpselq_s16:
case ARM::BI__builtin_arm_mve_vpselq_s32:
case ARM::BI__builtin_arm_mve_vpselq_s8:
case ARM::BI__builtin_arm_mve_vpselq_u16:
case ARM::BI__builtin_arm_mve_vpselq_u32:
case ARM::BI__builtin_arm_mve_vpselq_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vpselq_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vpselq_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vpselq_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vpselq_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vpselq_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  case ARM::BI__builtin_arm_mve_vpselq_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vpselq_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vpselq_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateSelect(Val2, Val3, Val4);
}
case ARM::BI__builtin_arm_mve_vdupq_m_n_f16:
case ARM::BI__builtin_arm_mve_vdupq_m_n_f32:
case ARM::BI__builtin_arm_mve_vdupq_m_n_s16:
case ARM::BI__builtin_arm_mve_vdupq_m_n_s32:
case ARM::BI__builtin_arm_mve_vdupq_m_n_s8:
case ARM::BI__builtin_arm_mve_vdupq_m_n_u16:
case ARM::BI__builtin_arm_mve_vdupq_m_n_u32:
case ARM::BI__builtin_arm_mve_vdupq_m_n_u8: {
  llvm::Type * Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vdupq_m_n_f16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vdupq_m_n_f32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vdupq_m_n_s16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vdupq_m_n_s32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vdupq_m_n_s8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  case ARM::BI__builtin_arm_mve_vdupq_m_n_u16:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    break;
  case ARM::BI__builtin_arm_mve_vdupq_m_n_u32:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    break;
  case ARM::BI__builtin_arm_mve_vdupq_m_n_u8:
    Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
  Value *Val5 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateSelect(Val2, Val4, Val5);
}
case ARM::BI__builtin_arm_mve_vbicq_m_n_s32:
case ARM::BI__builtin_arm_mve_vbicq_m_n_u32: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vbicq_m_n_s32:
    Param0 = true;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_m_n_u32:
    Param0 = false;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, Param0);
  Value *Val6 = ARMMVEVectorSplat(Builder, Val5);
  Value *Val7 = Builder.CreateNot(Val6);
  Value *Val8 = Builder.CreateAnd(Val3, Val7);
  return Builder.CreateSelect(Val2, Val8, Val3);
}
case ARM::BI__builtin_arm_mve_vorrq_m_n_s32:
case ARM::BI__builtin_arm_mve_vorrq_m_n_u32: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vorrq_m_n_s32:
    Param0 = true;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_m_n_u32:
    Param0 = false;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, Param0);
  Value *Val6 = ARMMVEVectorSplat(Builder, Val5);
  Value *Val7 = Builder.CreateOr(Val3, Val6);
  return Builder.CreateSelect(Val2, Val7, Val3);
}
case ARM::BI__builtin_arm_mve_vpselq_s64:
case ARM::BI__builtin_arm_mve_vpselq_u64: {
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val5 = Builder.CreateBitCast(Val3, Val4);
  Value *Val6 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val7 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val8 = Builder.CreateBitCast(Val6, Val7);
  Value *Val9 = Builder.CreateSelect(Val2, Val5, Val8);
  llvm::Type *Val10 = llvm::FixedVectorType::get(Int64Ty, 2);
  return Builder.CreateBitCast(Val9, Val10);
}
case ARM::BI__builtin_arm_mve_vmvnq_m_n_s32:
case ARM::BI__builtin_arm_mve_vmvnq_m_n_u32: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmvnq_m_n_s32:
    Param0 = true;
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_m_n_u32:
    Param0 = false;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, Param0);
  Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
  Value *Val6 = Builder.CreateNot(Val5);
  Value *Val7 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateSelect(Val2, Val6, Val7);
}
case ARM::BI__builtin_arm_mve_vbicq_m_n_s16:
case ARM::BI__builtin_arm_mve_vbicq_m_n_u16: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vbicq_m_n_s16:
    Param0 = true;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_m_n_u16:
    Param0 = false;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateIntCast(Val5, Int16Ty, Param0);
  Value *Val7 = ARMMVEVectorSplat(Builder, Val6);
  Value *Val8 = Builder.CreateNot(Val7);
  Value *Val9 = Builder.CreateAnd(Val3, Val8);
  return Builder.CreateSelect(Val2, Val9, Val3);
}
case ARM::BI__builtin_arm_mve_vorrq_m_n_s16:
case ARM::BI__builtin_arm_mve_vorrq_m_n_u16: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vorrq_m_n_s16:
    Param0 = true;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_m_n_u16:
    Param0 = false;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateIntCast(Val5, Int16Ty, Param0);
  Value *Val7 = ARMMVEVectorSplat(Builder, Val6);
  Value *Val8 = Builder.CreateOr(Val3, Val7);
  return Builder.CreateSelect(Val2, Val8, Val3);
}
case ARM::BI__builtin_arm_mve_vmvnq_m_n_s16:
case ARM::BI__builtin_arm_mve_vmvnq_m_n_u16: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmvnq_m_n_s16:
    Param0 = true;
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_m_n_u16:
    Param0 = false;
    break;
  }
  Value *Val0 = EmitScalarExpr(E->getArg(2));
  Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
  Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1});
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateIntCast(Val4, Int16Ty, Param0);
  Value *Val6 = ARMMVEVectorSplat(Builder, Val5);
  Value *Val7 = Builder.CreateNot(Val6);
  Value *Val8 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateSelect(Val2, Val7, Val8);
}
case ARM::BI__builtin_arm_mve_vcvtaq_m_s16_f16:
case ARM::BI__builtin_arm_mve_vcvtaq_m_s32_f32:
case ARM::BI__builtin_arm_mve_vcvtaq_m_u16_f16:
case ARM::BI__builtin_arm_mve_vcvtaq_m_u32_f32:
case ARM::BI__builtin_arm_mve_vcvtmq_m_s16_f16:
case ARM::BI__builtin_arm_mve_vcvtmq_m_s32_f32:
case ARM::BI__builtin_arm_mve_vcvtmq_m_u16_f16:
case ARM::BI__builtin_arm_mve_vcvtmq_m_u32_f32:
case ARM::BI__builtin_arm_mve_vcvtnq_m_s16_f16:
case ARM::BI__builtin_arm_mve_vcvtnq_m_s32_f32:
case ARM::BI__builtin_arm_mve_vcvtnq_m_u16_f16:
case ARM::BI__builtin_arm_mve_vcvtnq_m_u32_f32:
case ARM::BI__builtin_arm_mve_vcvtpq_m_s16_f16:
case ARM::BI__builtin_arm_mve_vcvtpq_m_s32_f32:
case ARM::BI__builtin_arm_mve_vcvtpq_m_u16_f16:
case ARM::BI__builtin_arm_mve_vcvtpq_m_u32_f32: {
  uint32_t  Param0;
  llvm::Type * Param1;
  Intrinsic::ID  Param2;
  llvm::Type * Param3;
  llvm::Type * Param4;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtaq_m_s16_f16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vcvta_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtaq_m_s32_f32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vcvta_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtaq_m_u16_f16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vcvta_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtaq_m_u32_f32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vcvta_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtmq_m_s16_f16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vcvtm_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtmq_m_s32_f32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vcvtm_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtmq_m_u16_f16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vcvtm_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtmq_m_u32_f32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vcvtm_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtnq_m_s16_f16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vcvtn_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtnq_m_s32_f32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vcvtn_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtnq_m_u16_f16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vcvtn_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtnq_m_u32_f32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vcvtn_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtpq_m_s16_f16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vcvtp_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtpq_m_s32_f32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vcvtp_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtpq_m_u16_f16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vcvtp_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param4 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtpq_m_u32_f32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vcvtp_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param4 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val1 = EmitScalarExpr(E->getArg(0));
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val4});
  return Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param4, Param1}), {Val0, Val1, Val2, Val5});
}
case ARM::BI__builtin_arm_mve_vcvtq_m_n_f16_s16:
case ARM::BI__builtin_arm_mve_vcvtq_m_n_f16_u16:
case ARM::BI__builtin_arm_mve_vcvtq_m_n_f32_s32:
case ARM::BI__builtin_arm_mve_vcvtq_m_n_f32_u32:
case ARM::BI__builtin_arm_mve_vcvtq_m_n_s16_f16:
case ARM::BI__builtin_arm_mve_vcvtq_m_n_s32_f32:
case ARM::BI__builtin_arm_mve_vcvtq_m_n_u16_f16:
case ARM::BI__builtin_arm_mve_vcvtq_m_n_u32_f32: {
  uint32_t  Param0;
  llvm::Type * Param1;
  llvm::Type * Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtq_m_n_f16_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_m_n_f16_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_m_n_f32_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_m_n_f32_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_m_n_s16_f16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_m_n_s32_f32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_m_n_u16_f16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_m_n_u32_f32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val1 = EmitScalarExpr(E->getArg(0));
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  Value *Val4 = EmitScalarExpr(E->getArg(3));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fix_predicated, {Param2, Param3, Param1}), {Val0, Val1, Val2, Val3, Val6});
}
case ARM::BI__builtin_arm_mve_vabavq_p_s16:
case ARM::BI__builtin_arm_mve_vabavq_p_s32:
case ARM::BI__builtin_arm_mve_vabavq_p_s8:
case ARM::BI__builtin_arm_mve_vabavq_p_u16:
case ARM::BI__builtin_arm_mve_vabavq_p_u32:
case ARM::BI__builtin_arm_mve_vabavq_p_u8:
case ARM::BI__builtin_arm_mve_vcmlaq_m_f16:
case ARM::BI__builtin_arm_mve_vcmlaq_m_f32:
case ARM::BI__builtin_arm_mve_vcmlaq_rot180_m_f16:
case ARM::BI__builtin_arm_mve_vcmlaq_rot180_m_f32:
case ARM::BI__builtin_arm_mve_vcmlaq_rot270_m_f16:
case ARM::BI__builtin_arm_mve_vcmlaq_rot270_m_f32:
case ARM::BI__builtin_arm_mve_vcmlaq_rot90_m_f16:
case ARM::BI__builtin_arm_mve_vcmlaq_rot90_m_f32:
case ARM::BI__builtin_arm_mve_vcmulq_m_f16:
case ARM::BI__builtin_arm_mve_vcmulq_m_f32:
case ARM::BI__builtin_arm_mve_vcmulq_rot180_m_f16:
case ARM::BI__builtin_arm_mve_vcmulq_rot180_m_f32:
case ARM::BI__builtin_arm_mve_vcmulq_rot270_m_f16:
case ARM::BI__builtin_arm_mve_vcmulq_rot270_m_f32:
case ARM::BI__builtin_arm_mve_vcmulq_rot90_m_f16:
case ARM::BI__builtin_arm_mve_vcmulq_rot90_m_f32: {
  uint32_t  Param0;
  llvm::Type * Param1;
  Intrinsic::ID  Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vabavq_p_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vabav_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vabavq_p_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vabav_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vabavq_p_s8:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_vabav_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vabavq_p_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vabav_predicated;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vabavq_p_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vabav_predicated;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vabavq_p_u8:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param2 = Intrinsic::arm_mve_vabav_predicated;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vcmlaq_m_f16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vcmlaq_predicated;
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmlaq_m_f32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vcmlaq_predicated;
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmlaq_rot180_m_f16:
    Param0 = 2;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vcmlaq_predicated;
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmlaq_rot180_m_f32:
    Param0 = 2;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vcmlaq_predicated;
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmlaq_rot270_m_f16:
    Param0 = 3;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vcmlaq_predicated;
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmlaq_rot270_m_f32:
    Param0 = 3;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vcmlaq_predicated;
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmlaq_rot90_m_f16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vcmlaq_predicated;
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmlaq_rot90_m_f32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vcmlaq_predicated;
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_m_f16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vcmulq_predicated;
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_m_f32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vcmulq_predicated;
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_rot180_m_f16:
    Param0 = 2;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vcmulq_predicated;
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_rot180_m_f32:
    Param0 = 2;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vcmulq_predicated;
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_rot270_m_f16:
    Param0 = 3;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vcmulq_predicated;
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_rot270_m_f32:
    Param0 = 3;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vcmulq_predicated;
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_rot90_m_f16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param2 = Intrinsic::arm_mve_vcmulq_predicated;
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_rot90_m_f32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param2 = Intrinsic::arm_mve_vcmulq_predicated;
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val1 = EmitScalarExpr(E->getArg(0));
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  Value *Val4 = EmitScalarExpr(E->getArg(3));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param1}), {Val0, Val1, Val2, Val3, Val6});
}
case ARM::BI__builtin_arm_mve_vabavq_s16:
case ARM::BI__builtin_arm_mve_vabavq_s32:
case ARM::BI__builtin_arm_mve_vabavq_s8:
case ARM::BI__builtin_arm_mve_vabavq_u16:
case ARM::BI__builtin_arm_mve_vabavq_u32:
case ARM::BI__builtin_arm_mve_vabavq_u8:
case ARM::BI__builtin_arm_mve_vcmlaq_f16:
case ARM::BI__builtin_arm_mve_vcmlaq_f32:
case ARM::BI__builtin_arm_mve_vcmlaq_rot180_f16:
case ARM::BI__builtin_arm_mve_vcmlaq_rot180_f32:
case ARM::BI__builtin_arm_mve_vcmlaq_rot270_f16:
case ARM::BI__builtin_arm_mve_vcmlaq_rot270_f32:
case ARM::BI__builtin_arm_mve_vcmlaq_rot90_f16:
case ARM::BI__builtin_arm_mve_vcmlaq_rot90_f32: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vabavq_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vabav;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vabavq_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vabav;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vabavq_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vabav;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vabavq_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vabav;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vabavq_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vabav;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vabavq_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vabav;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vcmlaq_f16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcmlaq;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmlaq_f32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcmlaq;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmlaq_rot180_f16:
    Param0 = 2;
    Param1 = Intrinsic::arm_mve_vcmlaq;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmlaq_rot180_f32:
    Param0 = 2;
    Param1 = Intrinsic::arm_mve_vcmlaq;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmlaq_rot270_f16:
    Param0 = 3;
    Param1 = Intrinsic::arm_mve_vcmlaq;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmlaq_rot270_f32:
    Param0 = 3;
    Param1 = Intrinsic::arm_mve_vcmlaq;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmlaq_rot90_f16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcmlaq;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmlaq_rot90_f32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcmlaq;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val1 = EmitScalarExpr(E->getArg(0));
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = EmitScalarExpr(E->getArg(2));
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2}), {Val0, Val1, Val2, Val3});
}
case ARM::BI__builtin_arm_mve_vcmulq_f16:
case ARM::BI__builtin_arm_mve_vcmulq_f32:
case ARM::BI__builtin_arm_mve_vcmulq_rot180_f16:
case ARM::BI__builtin_arm_mve_vcmulq_rot180_f32:
case ARM::BI__builtin_arm_mve_vcmulq_rot270_f16:
case ARM::BI__builtin_arm_mve_vcmulq_rot270_f32:
case ARM::BI__builtin_arm_mve_vcmulq_rot90_f16:
case ARM::BI__builtin_arm_mve_vcmulq_rot90_f32: {
  uint32_t  Param0;
  llvm::Type * Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmulq_f16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_f32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_rot180_f16:
    Param0 = 2;
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_rot180_f32:
    Param0 = 2;
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_rot270_f16:
    Param0 = 3;
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_rot270_f32:
    Param0 = 3;
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_rot90_f16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_rot90_f32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val1 = EmitScalarExpr(E->getArg(0));
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcmulq, {Param1}), {Val0, Val1, Val2});
}
case ARM::BI__builtin_arm_mve_vcvtq_n_f16_s16:
case ARM::BI__builtin_arm_mve_vcvtq_n_f16_u16:
case ARM::BI__builtin_arm_mve_vcvtq_n_f32_s32:
case ARM::BI__builtin_arm_mve_vcvtq_n_f32_u32:
case ARM::BI__builtin_arm_mve_vcvtq_n_s16_f16:
case ARM::BI__builtin_arm_mve_vcvtq_n_s32_f32:
case ARM::BI__builtin_arm_mve_vcvtq_n_u16_f16:
case ARM::BI__builtin_arm_mve_vcvtq_n_u32_f32: {
  uint32_t  Param0;
  llvm::Type * Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtq_n_f16_s16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_n_f16_u16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(HalfTy, 8);
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_n_f32_s32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_n_f32_u32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(FloatTy, 4);
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_n_s16_f16:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_n_s32_f32:
    Param0 = 0;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_n_u16_f16:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_n_u32_f32:
    Param0 = 1;
    Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val1 = EmitScalarExpr(E->getArg(0));
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fix, {Param1, Param2}), {Val0, Val1, Val2});
}
case ARM::BI__builtin_arm_mve_vcvtaq_s16_f16:
case ARM::BI__builtin_arm_mve_vcvtaq_s32_f32:
case ARM::BI__builtin_arm_mve_vcvtaq_u16_f16:
case ARM::BI__builtin_arm_mve_vcvtaq_u32_f32:
case ARM::BI__builtin_arm_mve_vcvtmq_s16_f16:
case ARM::BI__builtin_arm_mve_vcvtmq_s32_f32:
case ARM::BI__builtin_arm_mve_vcvtmq_u16_f16:
case ARM::BI__builtin_arm_mve_vcvtmq_u32_f32:
case ARM::BI__builtin_arm_mve_vcvtnq_s16_f16:
case ARM::BI__builtin_arm_mve_vcvtnq_s32_f32:
case ARM::BI__builtin_arm_mve_vcvtnq_u16_f16:
case ARM::BI__builtin_arm_mve_vcvtnq_u32_f32:
case ARM::BI__builtin_arm_mve_vcvtpq_s16_f16:
case ARM::BI__builtin_arm_mve_vcvtpq_s32_f32:
case ARM::BI__builtin_arm_mve_vcvtpq_u16_f16:
case ARM::BI__builtin_arm_mve_vcvtpq_u32_f32: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  llvm::Type * Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtaq_s16_f16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvta;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtaq_s32_f32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvta;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtaq_u16_f16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvta;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtaq_u32_f32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvta;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtmq_s16_f16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvtm;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtmq_s32_f32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvtm;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtmq_u16_f16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvtm;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtmq_u32_f32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvtm;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtnq_s16_f16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvtn;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtnq_s32_f32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvtn;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtnq_u16_f16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvtn;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtnq_u32_f32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvtn;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtpq_s16_f16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvtp;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtpq_s32_f32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvtp;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcvtpq_u16_f16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvtp;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcvtpq_u32_f32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvtp;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  }
  Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val1 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param3}), {Val0, Val1});
}
case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_f16:
case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_f32:
case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s16:
case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s32:
case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s8:
case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u16:
case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u32:
case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u8:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_f16:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_f32:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s16:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s32:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s8:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u16:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u32:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u8:
case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s16:
case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s32:
case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s8:
case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s16:
case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s32:
case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s8: {
  uint32_t  Param0;
  uint32_t  Param1;
  llvm::Type * Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_f16:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_f32:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s8:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u32:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u8:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_f16:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_f32:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s8:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u8:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = EmitScalarExpr(E->getArg(3));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param2}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcaddq_predicated, {Param3, Param2}), {Val0, Val1, Val2, Val3, Val4, Val7});
}
case ARM::BI__builtin_arm_mve_vcaddq_rot270_f16:
case ARM::BI__builtin_arm_mve_vcaddq_rot270_f32:
case ARM::BI__builtin_arm_mve_vcaddq_rot270_s16:
case ARM::BI__builtin_arm_mve_vcaddq_rot270_s32:
case ARM::BI__builtin_arm_mve_vcaddq_rot270_s8:
case ARM::BI__builtin_arm_mve_vcaddq_rot270_u16:
case ARM::BI__builtin_arm_mve_vcaddq_rot270_u32:
case ARM::BI__builtin_arm_mve_vcaddq_rot270_u8:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_f16:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_f32:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_s16:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_s32:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_s8:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_u16:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_u32:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_u8:
case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s16:
case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s32:
case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s8:
case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s16:
case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s32:
case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s8: {
  uint32_t  Param0;
  uint32_t  Param1;
  llvm::Type * Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_f16:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_f32:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_s16:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_s32:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_s8:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_u32:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_u8:
    Param0 = 1;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_f16:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(HalfTy, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_f32:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(FloatTy, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_s16:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_s32:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_s8:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_u8:
    Param0 = 1;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcaddq, {Param2}), {Val0, Val1, Val2, Val3});
}
case ARM::BI__builtin_arm_mve_vmladavaq_p_s16:
case ARM::BI__builtin_arm_mve_vmladavaq_p_s32:
case ARM::BI__builtin_arm_mve_vmladavaq_p_s8:
case ARM::BI__builtin_arm_mve_vmladavaq_p_u16:
case ARM::BI__builtin_arm_mve_vmladavaq_p_u32:
case ARM::BI__builtin_arm_mve_vmladavaq_p_u8:
case ARM::BI__builtin_arm_mve_vmladavaxq_p_s16:
case ARM::BI__builtin_arm_mve_vmladavaxq_p_s32:
case ARM::BI__builtin_arm_mve_vmladavaxq_p_s8:
case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s16:
case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s32:
case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s8:
case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s16:
case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s32:
case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s8: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  llvm::Type * Param3;
  llvm::Type * Param4;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmladavaq_p_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmladavaq_p_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmladavaq_p_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmladavaq_p_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmladavaq_p_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmladavaq_p_u8:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmladavaxq_p_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmladavaxq_p_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmladavaxq_p_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param2);
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = EmitScalarExpr(E->getArg(3));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val7});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vmldava_predicated, {Param4, Param3}), {Val0, Val1, Val2, Val3, Val4, Val5, Val8});
}
case ARM::BI__builtin_arm_mve_vmladavaq_s16:
case ARM::BI__builtin_arm_mve_vmladavaq_s32:
case ARM::BI__builtin_arm_mve_vmladavaq_s8:
case ARM::BI__builtin_arm_mve_vmladavaq_u16:
case ARM::BI__builtin_arm_mve_vmladavaq_u32:
case ARM::BI__builtin_arm_mve_vmladavaq_u8:
case ARM::BI__builtin_arm_mve_vmladavaxq_s16:
case ARM::BI__builtin_arm_mve_vmladavaxq_s32:
case ARM::BI__builtin_arm_mve_vmladavaxq_s8:
case ARM::BI__builtin_arm_mve_vmlsdavaq_s16:
case ARM::BI__builtin_arm_mve_vmlsdavaq_s32:
case ARM::BI__builtin_arm_mve_vmlsdavaq_s8:
case ARM::BI__builtin_arm_mve_vmlsdavaxq_s16:
case ARM::BI__builtin_arm_mve_vmlsdavaxq_s32:
case ARM::BI__builtin_arm_mve_vmlsdavaxq_s8: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmladavaq_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmladavaq_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmladavaq_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmladavaq_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmladavaq_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmladavaq_u8:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmladavaxq_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmladavaxq_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmladavaxq_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavaq_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavaq_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavaq_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavaxq_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavaxq_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavaxq_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param2);
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vmldava, {Param3}), {Val0, Val1, Val2, Val3, Val4, Val5});
}
case ARM::BI__builtin_arm_mve_vmladavq_p_s16:
case ARM::BI__builtin_arm_mve_vmladavq_p_s32:
case ARM::BI__builtin_arm_mve_vmladavq_p_s8:
case ARM::BI__builtin_arm_mve_vmladavq_p_u16:
case ARM::BI__builtin_arm_mve_vmladavq_p_u32:
case ARM::BI__builtin_arm_mve_vmladavq_p_u8:
case ARM::BI__builtin_arm_mve_vmladavxq_p_s16:
case ARM::BI__builtin_arm_mve_vmladavxq_p_s32:
case ARM::BI__builtin_arm_mve_vmladavxq_p_s8:
case ARM::BI__builtin_arm_mve_vmlsdavq_p_s16:
case ARM::BI__builtin_arm_mve_vmlsdavq_p_s32:
case ARM::BI__builtin_arm_mve_vmlsdavq_p_s8:
case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s16:
case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s32:
case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s8: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  llvm::Type * Param3;
  llvm::Type * Param4;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmladavq_p_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmladavq_p_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmladavq_p_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmladavq_p_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmladavq_p_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmladavq_p_u8:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmladavxq_p_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmladavxq_p_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmladavxq_p_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavq_p_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavq_p_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavq_p_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
    Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param2);
  llvm::Type *Val3 = Int32Ty;
  Value *Val4 = llvm::Constant::getNullValue(Val3);
  Value *Val5 = EmitScalarExpr(E->getArg(0));
  Value *Val6 = EmitScalarExpr(E->getArg(1));
  Value *Val7 = EmitScalarExpr(E->getArg(2));
  Value *Val8 = Builder.CreateIntCast(Val7, Int32Ty, false);
  Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val8});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vmldava_predicated, {Param4, Param3}), {Val0, Val1, Val2, Val4, Val5, Val6, Val9});
}
case ARM::BI__builtin_arm_mve_vmladavq_s16:
case ARM::BI__builtin_arm_mve_vmladavq_s32:
case ARM::BI__builtin_arm_mve_vmladavq_s8:
case ARM::BI__builtin_arm_mve_vmladavq_u16:
case ARM::BI__builtin_arm_mve_vmladavq_u32:
case ARM::BI__builtin_arm_mve_vmladavq_u8:
case ARM::BI__builtin_arm_mve_vmladavxq_s16:
case ARM::BI__builtin_arm_mve_vmladavxq_s32:
case ARM::BI__builtin_arm_mve_vmladavxq_s8:
case ARM::BI__builtin_arm_mve_vmlsdavq_s16:
case ARM::BI__builtin_arm_mve_vmlsdavq_s32:
case ARM::BI__builtin_arm_mve_vmlsdavq_s8:
case ARM::BI__builtin_arm_mve_vmlsdavxq_s16:
case ARM::BI__builtin_arm_mve_vmlsdavxq_s32:
case ARM::BI__builtin_arm_mve_vmlsdavxq_s8: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  llvm::Type * Param3;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmladavq_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmladavq_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmladavq_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmladavq_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmladavq_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmladavq_u8:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmladavxq_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmladavxq_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmladavxq_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavq_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavq_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavq_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavxq_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavxq_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlsdavxq_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
    break;
  }
  Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param2);
  llvm::Type *Val3 = Int32Ty;
  Value *Val4 = llvm::Constant::getNullValue(Val3);
  Value *Val5 = EmitScalarExpr(E->getArg(0));
  Value *Val6 = EmitScalarExpr(E->getArg(1));
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vmldava, {Param3}), {Val0, Val1, Val2, Val4, Val5, Val6});
}
case ARM::BI__builtin_arm_mve_vmlaldavq_s16:
case ARM::BI__builtin_arm_mve_vmlaldavq_s32:
case ARM::BI__builtin_arm_mve_vmlaldavq_u16:
case ARM::BI__builtin_arm_mve_vmlaldavq_u32:
case ARM::BI__builtin_arm_mve_vmlaldavxq_s16:
case ARM::BI__builtin_arm_mve_vmlaldavxq_s32:
case ARM::BI__builtin_arm_mve_vmlsldavq_s16:
case ARM::BI__builtin_arm_mve_vmlsldavq_s32:
case ARM::BI__builtin_arm_mve_vmlsldavxq_s16:
case ARM::BI__builtin_arm_mve_vmlsldavxq_s32:
case ARM::BI__builtin_arm_mve_vrmlaldavhq_s32:
case ARM::BI__builtin_arm_mve_vrmlaldavhq_u32:
case ARM::BI__builtin_arm_mve_vrmlaldavhxq_s32:
case ARM::BI__builtin_arm_mve_vrmlsldavhq_s32:
case ARM::BI__builtin_arm_mve_vrmlsldavhxq_s32: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  Intrinsic::ID  Param3;
  llvm::Type * Param4;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmlaldavq_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavq_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavq_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavq_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavxq_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavxq_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlsldavq_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlsldavq_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlsldavxq_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlsldavxq_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vmlldava;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlaldavhq_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vrmlldavha;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlaldavhq_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vrmlldavha;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlaldavhxq_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vrmlldavha;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlsldavhq_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = Intrinsic::arm_mve_vrmlldavha;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlsldavhxq_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = Intrinsic::arm_mve_vrmlldavha;
    Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  llvm::Type *Val0 = Int32Ty;
  Value *Val1 = llvm::Constant::getNullValue(Val0);
  llvm::Type *Val2 = Int32Ty;
  Value *Val3 = llvm::Constant::getNullValue(Val2);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param2);
  Value *Val7 = EmitScalarExpr(E->getArg(0));
  Value *Val8 = EmitScalarExpr(E->getArg(1));
  Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Param3, {Param4}), {Val4, Val5, Val6, Val3, Val1, Val7, Val8});
  Value *Val10 = Builder.CreateExtractValue(Val9, static_cast<unsigned>(1));
  Value *Val11 = Builder.CreateIntCast(Val10, Int64Ty, false);
  Value *Val12 = llvm::ConstantInt::get(Int64Ty, 32);
  Value *Val13 = Builder.CreateShl(Val11, Val12);
  Value *Val14 = Builder.CreateExtractValue(Val9, static_cast<unsigned>(0));
  Value *Val15 = Builder.CreateIntCast(Val14, Int64Ty, false);
  return Builder.CreateOr(Val13, Val15);
}
case ARM::BI__builtin_arm_mve_vmlaldavq_p_s16:
case ARM::BI__builtin_arm_mve_vmlaldavq_p_s32:
case ARM::BI__builtin_arm_mve_vmlaldavq_p_u16:
case ARM::BI__builtin_arm_mve_vmlaldavq_p_u32:
case ARM::BI__builtin_arm_mve_vmlaldavxq_p_s16:
case ARM::BI__builtin_arm_mve_vmlaldavxq_p_s32:
case ARM::BI__builtin_arm_mve_vmlsldavq_p_s16:
case ARM::BI__builtin_arm_mve_vmlsldavq_p_s32:
case ARM::BI__builtin_arm_mve_vmlsldavxq_p_s16:
case ARM::BI__builtin_arm_mve_vmlsldavxq_p_s32:
case ARM::BI__builtin_arm_mve_vrmlaldavhq_p_s32:
case ARM::BI__builtin_arm_mve_vrmlaldavhq_p_u32:
case ARM::BI__builtin_arm_mve_vrmlaldavhxq_p_s32:
case ARM::BI__builtin_arm_mve_vrmlsldavhq_p_s32:
case ARM::BI__builtin_arm_mve_vrmlsldavhxq_p_s32: {
  uint32_t  Param0;
  uint32_t  Param1;
  uint32_t  Param2;
  llvm::Type * Param3;
  Intrinsic::ID  Param4;
  llvm::Type * Param5;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmlaldavq_p_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavq_p_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavq_p_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavq_p_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavxq_p_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlaldavxq_p_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlsldavq_p_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlsldavq_p_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vmlsldavxq_p_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
    break;
  case ARM::BI__builtin_arm_mve_vmlsldavxq_p_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vmlldava_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlaldavhq_p_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlaldavhq_p_u32:
    Param0 = 1;
    Param1 = 0;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlaldavhxq_p_s32:
    Param0 = 0;
    Param1 = 0;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlsldavhq_p_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 0;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  case ARM::BI__builtin_arm_mve_vrmlsldavhxq_p_s32:
    Param0 = 0;
    Param1 = 1;
    Param2 = 1;
    Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
    Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
    Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
    break;
  }
  llvm::Type *Val0 = Int32Ty;
  Value *Val1 = llvm::Constant::getNullValue(Val0);
  llvm::Type *Val2 = Int32Ty;
  Value *Val3 = llvm::Constant::getNullValue(Val2);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param2);
  Value *Val7 = EmitScalarExpr(E->getArg(0));
  Value *Val8 = EmitScalarExpr(E->getArg(1));
  Value *Val9 = EmitScalarExpr(E->getArg(2));
  Value *Val10 = Builder.CreateIntCast(Val9, Int32Ty, false);
  Value *Val11 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val10});
  Value *Val12 = Builder.CreateCall(CGM.getIntrinsic(Param4, {Param5, Param3}), {Val4, Val5, Val6, Val3, Val1, Val7, Val8, Val11});
  Value *Val13 = Builder.CreateExtractValue(Val12, static_cast<unsigned>(1));
  Value *Val14 = Builder.CreateIntCast(Val13, Int64Ty, false);
  Value *Val15 = llvm::ConstantInt::get(Int64Ty, 32);
  Value *Val16 = Builder.CreateShl(Val14, Val15);
  Value *Val17 = Builder.CreateExtractValue(Val12, static_cast<unsigned>(0));
  Value *Val18 = Builder.CreateIntCast(Val17, Int64Ty, false);
  return Builder.CreateOr(Val16, Val18);
}
case ARM::BI__builtin_arm_mve_vaddq_x_n_f32:
case ARM::BI__builtin_arm_mve_vmulq_x_n_f32:
case ARM::BI__builtin_arm_mve_vsubq_x_n_f32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vaddq_x_n_f32:
    Param0 = Intrinsic::arm_mve_add_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulq_x_n_f32:
    Param0 = Intrinsic::arm_mve_mul_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsubq_x_n_f32:
    Param0 = Intrinsic::arm_mve_sub_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val4, Val7, Val1});
}
case ARM::BI__builtin_arm_mve_vabsq_x_f32:
case ARM::BI__builtin_arm_mve_vnegq_x_f32:
case ARM::BI__builtin_arm_mve_vrndaq_x_f32:
case ARM::BI__builtin_arm_mve_vrndmq_x_f32:
case ARM::BI__builtin_arm_mve_vrndnq_x_f32:
case ARM::BI__builtin_arm_mve_vrndpq_x_f32:
case ARM::BI__builtin_arm_mve_vrndq_x_f32:
case ARM::BI__builtin_arm_mve_vrndxq_x_f32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vabsq_x_f32:
    Param0 = Intrinsic::arm_mve_abs_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vnegq_x_f32:
    Param0 = Intrinsic::arm_mve_neg_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrndaq_x_f32:
    Param0 = Intrinsic::arm_mve_vrinta_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrndmq_x_f32:
    Param0 = Intrinsic::arm_mve_vrintm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrndnq_x_f32:
    Param0 = Intrinsic::arm_mve_vrintn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrndpq_x_f32:
    Param0 = Intrinsic::arm_mve_vrintp_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrndq_x_f32:
    Param0 = Intrinsic::arm_mve_vrintz_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrndxq_x_f32:
    Param0 = Intrinsic::arm_mve_vrintx_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val5, Val1});
}
case ARM::BI__builtin_arm_mve_vbrsrq_x_n_f32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vbrsrq_x_n_f32:
    Param0 = Intrinsic::arm_mve_vbrsr_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1, Val2, Val3, Val6});
}
case ARM::BI__builtin_arm_mve_vaddq_x_f32:
case ARM::BI__builtin_arm_mve_vmulq_x_f32:
case ARM::BI__builtin_arm_mve_vsubq_x_f32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vaddq_x_f32:
    Param0 = Intrinsic::arm_mve_add_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulq_x_f32:
    Param0 = Intrinsic::arm_mve_mul_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsubq_x_f32:
    Param0 = Intrinsic::arm_mve_sub_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val6, Val1});
}
case ARM::BI__builtin_arm_mve_vabdq_x_f32:
case ARM::BI__builtin_arm_mve_vmaxnmq_x_f32:
case ARM::BI__builtin_arm_mve_vminnmq_x_f32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vabdq_x_f32:
    Param0 = Intrinsic::arm_mve_abd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmaxnmq_x_f32:
    Param0 = Intrinsic::arm_mve_max_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vminnmq_x_f32:
    Param0 = Intrinsic::arm_mve_min_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, 0);
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val4, Val7, Val1});
}
case ARM::BI__builtin_arm_mve_vrev64q_x_f32: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, 64);
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vrev_predicated, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val6, Val1});
}
case ARM::BI__builtin_arm_mve_vcvtq_x_f32_s32:
case ARM::BI__builtin_arm_mve_vcvtq_x_f32_u32: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtq_x_f32_s32:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_x_f32_u32:
    Param0 = 1;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fp_int_predicated, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val6, Val1});
}
case ARM::BI__builtin_arm_mve_vcvtbq_x_f32_f16:
case ARM::BI__builtin_arm_mve_vcvttq_x_f32_f16: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtbq_x_f32_f16:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vcvttq_x_f32_f16:
    Param0 = 1;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_widen_predicated), {Val1, Val2, Val3, Val6});
}
case ARM::BI__builtin_arm_mve_vandq_x_f32:
case ARM::BI__builtin_arm_mve_vbicq_x_f32:
case ARM::BI__builtin_arm_mve_veorq_x_f32:
case ARM::BI__builtin_arm_mve_vornq_x_f32:
case ARM::BI__builtin_arm_mve_vorrq_x_f32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vandq_x_f32:
    Param0 = Intrinsic::arm_mve_and_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_x_f32:
    Param0 = Intrinsic::arm_mve_bic_predicated;
    break;
  case ARM::BI__builtin_arm_mve_veorq_x_f32:
    Param0 = Intrinsic::arm_mve_eor_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vornq_x_f32:
    Param0 = Intrinsic::arm_mve_orn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_x_f32:
    Param0 = Intrinsic::arm_mve_orr_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val3 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val4 = Builder.CreateBitCast(Val2, Val3);
  Value *Val5 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val7 = Builder.CreateBitCast(Val5, Val6);
  Value *Val8 = EmitScalarExpr(E->getArg(2));
  Value *Val9 = Builder.CreateIntCast(Val8, Int32Ty, false);
  Value *Val10 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val9});
  llvm::Type *Val11 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val12 = Builder.CreateBitCast(Val1, Val11);
  Value *Val13 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4, Val7, Val10, Val12});
  llvm::Type *Val14 = llvm::FixedVectorType::get(FloatTy, 4);
  return Builder.CreateBitCast(Val13, Val14);
}
case ARM::BI__builtin_arm_mve_vdupq_x_n_f32: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val3});
  Value *Val5 = EmitScalarExpr(E->getArg(0));
  Value *Val6 = ARMMVEVectorSplat(Builder, Val5);
  return Builder.CreateSelect(Val4, Val6, Val1);
}
case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_f32:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_f32: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_f32:
    Param0 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_f32:
    Param0 = 0;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, 1);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = EmitScalarExpr(E->getArg(0));
  Value *Val5 = EmitScalarExpr(E->getArg(1));
  Value *Val6 = EmitScalarExpr(E->getArg(2));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcaddq_predicated, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val1, Val4, Val5, Val8});
}
case ARM::BI__builtin_arm_mve_vcmulq_rot180_x_f32:
case ARM::BI__builtin_arm_mve_vcmulq_rot270_x_f32:
case ARM::BI__builtin_arm_mve_vcmulq_rot90_x_f32:
case ARM::BI__builtin_arm_mve_vcmulq_x_f32: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmulq_rot180_x_f32:
    Param0 = 2;
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_rot270_x_f32:
    Param0 = 3;
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_rot90_x_f32:
    Param0 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_x_f32:
    Param0 = 0;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcmulq_predicated, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val1, Val3, Val4, Val7});
}
case ARM::BI__builtin_arm_mve_vcvtq_x_n_f32_s32:
case ARM::BI__builtin_arm_mve_vcvtq_x_n_f32_u32: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtq_x_n_f32_s32:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_x_n_f32_u32:
    Param0 = 1;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fix_predicated, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val1, Val3, Val4, Val7});
}
case ARM::BI__builtin_arm_mve_vuninitializedq_f32:
case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_f32: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
  return UndefValue::get(Val0);
}
case ARM::BI__builtin_arm_mve_vaddq_x_n_f16:
case ARM::BI__builtin_arm_mve_vmulq_x_n_f16:
case ARM::BI__builtin_arm_mve_vsubq_x_n_f16: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vaddq_x_n_f16:
    Param0 = Intrinsic::arm_mve_add_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulq_x_n_f16:
    Param0 = Intrinsic::arm_mve_mul_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsubq_x_n_f16:
    Param0 = Intrinsic::arm_mve_sub_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val4, Val7, Val1});
}
case ARM::BI__builtin_arm_mve_vabsq_x_f16:
case ARM::BI__builtin_arm_mve_vnegq_x_f16:
case ARM::BI__builtin_arm_mve_vrndaq_x_f16:
case ARM::BI__builtin_arm_mve_vrndmq_x_f16:
case ARM::BI__builtin_arm_mve_vrndnq_x_f16:
case ARM::BI__builtin_arm_mve_vrndpq_x_f16:
case ARM::BI__builtin_arm_mve_vrndq_x_f16:
case ARM::BI__builtin_arm_mve_vrndxq_x_f16: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vabsq_x_f16:
    Param0 = Intrinsic::arm_mve_abs_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vnegq_x_f16:
    Param0 = Intrinsic::arm_mve_neg_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrndaq_x_f16:
    Param0 = Intrinsic::arm_mve_vrinta_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrndmq_x_f16:
    Param0 = Intrinsic::arm_mve_vrintm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrndnq_x_f16:
    Param0 = Intrinsic::arm_mve_vrintn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrndpq_x_f16:
    Param0 = Intrinsic::arm_mve_vrintp_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrndq_x_f16:
    Param0 = Intrinsic::arm_mve_vrintz_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrndxq_x_f16:
    Param0 = Intrinsic::arm_mve_vrintx_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val4});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val5, Val1});
}
case ARM::BI__builtin_arm_mve_vbrsrq_x_n_f16: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vbrsrq_x_n_f16:
    Param0 = Intrinsic::arm_mve_vbrsr_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1, Val2, Val3, Val6});
}
case ARM::BI__builtin_arm_mve_vaddq_x_f16:
case ARM::BI__builtin_arm_mve_vmulq_x_f16:
case ARM::BI__builtin_arm_mve_vsubq_x_f16: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vaddq_x_f16:
    Param0 = Intrinsic::arm_mve_add_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulq_x_f16:
    Param0 = Intrinsic::arm_mve_mul_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsubq_x_f16:
    Param0 = Intrinsic::arm_mve_sub_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val6, Val1});
}
case ARM::BI__builtin_arm_mve_vabdq_x_f16:
case ARM::BI__builtin_arm_mve_vmaxnmq_x_f16:
case ARM::BI__builtin_arm_mve_vminnmq_x_f16: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vabdq_x_f16:
    Param0 = Intrinsic::arm_mve_abd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmaxnmq_x_f16:
    Param0 = Intrinsic::arm_mve_max_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vminnmq_x_f16:
    Param0 = Intrinsic::arm_mve_min_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, 0);
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val4, Val7, Val1});
}
case ARM::BI__builtin_arm_mve_vcvtq_x_f16_s16:
case ARM::BI__builtin_arm_mve_vcvtq_x_f16_u16: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtq_x_f16_s16:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_x_f16_u16:
    Param0 = 1;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fp_int_predicated, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val6, Val1});
}
case ARM::BI__builtin_arm_mve_vrev32q_x_f16:
case ARM::BI__builtin_arm_mve_vrev64q_x_f16: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vrev32q_x_f16:
    Param0 = 32;
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_x_f16:
    Param0 = 64;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vrev_predicated, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val6, Val1});
}
case ARM::BI__builtin_arm_mve_vandq_x_f16:
case ARM::BI__builtin_arm_mve_vbicq_x_f16:
case ARM::BI__builtin_arm_mve_veorq_x_f16:
case ARM::BI__builtin_arm_mve_vornq_x_f16:
case ARM::BI__builtin_arm_mve_vorrq_x_f16: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vandq_x_f16:
    Param0 = Intrinsic::arm_mve_and_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_x_f16:
    Param0 = Intrinsic::arm_mve_bic_predicated;
    break;
  case ARM::BI__builtin_arm_mve_veorq_x_f16:
    Param0 = Intrinsic::arm_mve_eor_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vornq_x_f16:
    Param0 = Intrinsic::arm_mve_orn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_x_f16:
    Param0 = Intrinsic::arm_mve_orr_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val3 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val4 = Builder.CreateBitCast(Val2, Val3);
  Value *Val5 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val7 = Builder.CreateBitCast(Val5, Val6);
  Value *Val8 = EmitScalarExpr(E->getArg(2));
  Value *Val9 = Builder.CreateIntCast(Val8, Int32Ty, false);
  Value *Val10 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val9});
  llvm::Type *Val11 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val12 = Builder.CreateBitCast(Val1, Val11);
  Value *Val13 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val4, Val7, Val10, Val12});
  llvm::Type *Val14 = llvm::FixedVectorType::get(HalfTy, 8);
  return Builder.CreateBitCast(Val13, Val14);
}
case ARM::BI__builtin_arm_mve_vdupq_x_n_f16: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val3});
  Value *Val5 = EmitScalarExpr(E->getArg(0));
  Value *Val6 = ARMMVEVectorSplat(Builder, Val5);
  return Builder.CreateSelect(Val4, Val6, Val1);
}
case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_f16:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_f16: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_f16:
    Param0 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_f16:
    Param0 = 0;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, 1);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = EmitScalarExpr(E->getArg(0));
  Value *Val5 = EmitScalarExpr(E->getArg(1));
  Value *Val6 = EmitScalarExpr(E->getArg(2));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val7});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcaddq_predicated, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val1, Val4, Val5, Val8});
}
case ARM::BI__builtin_arm_mve_vcmulq_rot180_x_f16:
case ARM::BI__builtin_arm_mve_vcmulq_rot270_x_f16:
case ARM::BI__builtin_arm_mve_vcmulq_rot90_x_f16:
case ARM::BI__builtin_arm_mve_vcmulq_x_f16: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcmulq_rot180_x_f16:
    Param0 = 2;
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_rot270_x_f16:
    Param0 = 3;
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_rot90_x_f16:
    Param0 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vcmulq_x_f16:
    Param0 = 0;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcmulq_predicated, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val1, Val3, Val4, Val7});
}
case ARM::BI__builtin_arm_mve_vcvtq_x_n_f16_s16:
case ARM::BI__builtin_arm_mve_vcvtq_x_n_f16_u16: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtq_x_n_f16_s16:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_x_n_f16_u16:
    Param0 = 1;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fix_predicated, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val1, Val3, Val4, Val7});
}
case ARM::BI__builtin_arm_mve_vuninitializedq_f16:
case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_f16: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
  return UndefValue::get(Val0);
}
case ARM::BI__builtin_arm_mve_vddupq_x_wb_u16:
case ARM::BI__builtin_arm_mve_vidupq_x_wb_u16: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vddupq_x_wb_u16:
    Param0 = Intrinsic::arm_mve_vddup_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vidupq_x_wb_u16:
    Param0 = Intrinsic::arm_mve_vidup_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Address Val2 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val3 = Builder.CreateLoad(Val2);
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1, Val3, Val4, Val7});
  Value *Val9 = Builder.CreateExtractValue(Val8, static_cast<unsigned>(1));
  Builder.CreateStore(Val9, Val2);
  return Builder.CreateExtractValue(Val8, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u16:
case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u16: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u16:
    Param0 = Intrinsic::arm_mve_vdwdup_predicated;
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u16:
    Param0 = Intrinsic::arm_mve_viwdup_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Address Val2 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val3 = Builder.CreateLoad(Val2);
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = EmitScalarExpr(E->getArg(3));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val7});
  Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1, Val3, Val4, Val5, Val8});
  Value *Val10 = Builder.CreateExtractValue(Val9, static_cast<unsigned>(1));
  Builder.CreateStore(Val10, Val2);
  return Builder.CreateExtractValue(Val9, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vaddq_x_n_s16:
case ARM::BI__builtin_arm_mve_vaddq_x_n_u16:
case ARM::BI__builtin_arm_mve_vmulq_x_n_s16:
case ARM::BI__builtin_arm_mve_vmulq_x_n_u16:
case ARM::BI__builtin_arm_mve_vsubq_x_n_s16:
case ARM::BI__builtin_arm_mve_vsubq_x_n_u16: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vaddq_x_n_s16:
    Param0 = Intrinsic::arm_mve_add_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vaddq_x_n_u16:
    Param0 = Intrinsic::arm_mve_add_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulq_x_n_s16:
    Param0 = Intrinsic::arm_mve_mul_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulq_x_n_u16:
    Param0 = Intrinsic::arm_mve_mul_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsubq_x_n_s16:
    Param0 = Intrinsic::arm_mve_sub_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsubq_x_n_u16:
    Param0 = Intrinsic::arm_mve_sub_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val4, Val7, Val1});
}
case ARM::BI__builtin_arm_mve_vhaddq_x_n_s16:
case ARM::BI__builtin_arm_mve_vhaddq_x_n_u16:
case ARM::BI__builtin_arm_mve_vhsubq_x_n_s16:
case ARM::BI__builtin_arm_mve_vhsubq_x_n_u16: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vhaddq_x_n_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_hadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_x_n_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_hadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_x_n_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_hsub_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_x_n_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_hsub_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val6 = EmitScalarExpr(E->getArg(2));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val7});
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val4, Val5, Val8, Val1});
}
case ARM::BI__builtin_arm_mve_vabsq_x_s16:
case ARM::BI__builtin_arm_mve_vclsq_x_s16:
case ARM::BI__builtin_arm_mve_vclzq_x_s16:
case ARM::BI__builtin_arm_mve_vclzq_x_u16:
case ARM::BI__builtin_arm_mve_vmvnq_x_s16:
case ARM::BI__builtin_arm_mve_vmvnq_x_u16:
case ARM::BI__builtin_arm_mve_vnegq_x_s16: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vabsq_x_s16:
    Param0 = Intrinsic::arm_mve_abs_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vclsq_x_s16:
    Param0 = Intrinsic::arm_mve_cls_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vclzq_x_s16:
    Param0 = Intrinsic::arm_mve_clz_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vclzq_x_u16:
    Param0 = Intrinsic::arm_mve_clz_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_x_s16:
    Param0 = Intrinsic::arm_mve_mvn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_x_u16:
    Param0 = Intrinsic::arm_mve_mvn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vnegq_x_s16:
    Param0 = Intrinsic::arm_mve_neg_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val4});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val5, Val1});
}
case ARM::BI__builtin_arm_mve_vddupq_x_n_u16:
case ARM::BI__builtin_arm_mve_vidupq_x_n_u16: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vddupq_x_n_u16:
    Param0 = Intrinsic::arm_mve_vddup_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vidupq_x_n_u16:
    Param0 = Intrinsic::arm_mve_vidup_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1, Val2, Val3, Val6});
  return Builder.CreateExtractValue(Val7, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s16:
case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u16: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s16:
    Param0 = Intrinsic::arm_mve_vbrsr_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u16:
    Param0 = Intrinsic::arm_mve_vbrsr_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1, Val2, Val3, Val6});
}
case ARM::BI__builtin_arm_mve_vaddq_x_s16:
case ARM::BI__builtin_arm_mve_vaddq_x_u16:
case ARM::BI__builtin_arm_mve_vmulq_x_s16:
case ARM::BI__builtin_arm_mve_vmulq_x_u16:
case ARM::BI__builtin_arm_mve_vshlq_x_n_s16:
case ARM::BI__builtin_arm_mve_vshlq_x_n_u16:
case ARM::BI__builtin_arm_mve_vsubq_x_s16:
case ARM::BI__builtin_arm_mve_vsubq_x_u16: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vaddq_x_s16:
    Param0 = Intrinsic::arm_mve_add_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vaddq_x_u16:
    Param0 = Intrinsic::arm_mve_add_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulq_x_s16:
    Param0 = Intrinsic::arm_mve_mul_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulq_x_u16:
    Param0 = Intrinsic::arm_mve_mul_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshlq_x_n_s16:
    Param0 = Intrinsic::arm_mve_shl_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshlq_x_n_u16:
    Param0 = Intrinsic::arm_mve_shl_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsubq_x_s16:
    Param0 = Intrinsic::arm_mve_sub_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsubq_x_u16:
    Param0 = Intrinsic::arm_mve_sub_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val6, Val1});
}
case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u16:
case ARM::BI__builtin_arm_mve_viwdupq_x_n_u16: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u16:
    Param0 = Intrinsic::arm_mve_vdwdup_predicated;
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_x_n_u16:
    Param0 = Intrinsic::arm_mve_viwdup_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = EmitScalarExpr(E->getArg(3));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1, Val2, Val3, Val4, Val7});
  return Builder.CreateExtractValue(Val8, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vrshlq_x_s16:
case ARM::BI__builtin_arm_mve_vrshlq_x_u16:
case ARM::BI__builtin_arm_mve_vshlq_x_s16:
case ARM::BI__builtin_arm_mve_vshlq_x_u16: {
  uint32_t  Param0;
  uint32_t  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vrshlq_x_s16:
    Param0 = 1;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_x_u16:
    Param0 = 1;
    Param1 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vshlq_x_s16:
    Param0 = 0;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vshlq_x_u16:
    Param0 = 0;
    Param1 = 1;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, 0);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val7 = EmitScalarExpr(E->getArg(2));
  Value *Val8 = Builder.CreateIntCast(Val7, Int32Ty, false);
  Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val8});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshl_vector_predicated, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val4, Val5, Val6, Val9, Val1});
}
case ARM::BI__builtin_arm_mve_vmullbq_poly_x_p8:
case ARM::BI__builtin_arm_mve_vmulltq_poly_x_p8: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmullbq_poly_x_p8:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_poly_x_p8:
    Param0 = 1;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_mull_poly_predicated, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val4, Val7, Val1});
}
case ARM::BI__builtin_arm_mve_vabdq_x_s16:
case ARM::BI__builtin_arm_mve_vabdq_x_u16:
case ARM::BI__builtin_arm_mve_vhaddq_x_s16:
case ARM::BI__builtin_arm_mve_vhaddq_x_u16:
case ARM::BI__builtin_arm_mve_vhsubq_x_s16:
case ARM::BI__builtin_arm_mve_vhsubq_x_u16:
case ARM::BI__builtin_arm_mve_vmaxq_x_s16:
case ARM::BI__builtin_arm_mve_vmaxq_x_u16:
case ARM::BI__builtin_arm_mve_vminq_x_s16:
case ARM::BI__builtin_arm_mve_vminq_x_u16:
case ARM::BI__builtin_arm_mve_vmulhq_x_s16:
case ARM::BI__builtin_arm_mve_vmulhq_x_u16:
case ARM::BI__builtin_arm_mve_vrhaddq_x_s16:
case ARM::BI__builtin_arm_mve_vrhaddq_x_u16:
case ARM::BI__builtin_arm_mve_vrmulhq_x_s16:
case ARM::BI__builtin_arm_mve_vrmulhq_x_u16:
case ARM::BI__builtin_arm_mve_vrshrq_x_n_s16:
case ARM::BI__builtin_arm_mve_vrshrq_x_n_u16:
case ARM::BI__builtin_arm_mve_vshrq_x_n_s16:
case ARM::BI__builtin_arm_mve_vshrq_x_n_u16: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vabdq_x_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_abd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vabdq_x_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_abd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_x_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_hadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_x_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_hadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_x_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_hsub_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_x_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_hsub_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmaxq_x_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_max_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmaxq_x_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_max_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vminq_x_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_min_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vminq_x_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_min_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_x_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_mulh_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_x_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_mulh_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_x_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_rhadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_x_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_rhadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_x_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_rmulh_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_x_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_rmulh_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_x_n_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vrshr_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_x_n_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vrshr_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshrq_x_n_s16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_shr_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshrq_x_n_u16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_shr_imm_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val4, Val7, Val1});
}
case ARM::BI__builtin_arm_mve_vmullbq_int_x_s8:
case ARM::BI__builtin_arm_mve_vmullbq_int_x_u8:
case ARM::BI__builtin_arm_mve_vmulltq_int_x_s8:
case ARM::BI__builtin_arm_mve_vmulltq_int_x_u8:
case ARM::BI__builtin_arm_mve_vshllbq_x_n_s8:
case ARM::BI__builtin_arm_mve_vshllbq_x_n_u8:
case ARM::BI__builtin_arm_mve_vshlltq_x_n_s8:
case ARM::BI__builtin_arm_mve_vshlltq_x_n_u8: {
  uint32_t  Param0;
  uint32_t  Param1;
  Intrinsic::ID  Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmullbq_int_x_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_mull_int_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmullbq_int_x_u8:
    Param0 = 1;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_mull_int_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_x_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_mull_int_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_x_u8:
    Param0 = 1;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_mull_int_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshllbq_x_n_s8:
    Param0 = 0;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_vshll_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshllbq_x_n_u8:
    Param0 = 1;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_vshll_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshlltq_x_n_s8:
    Param0 = 0;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_vshll_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshlltq_x_n_u8:
    Param0 = 1;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_vshll_imm_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val6 = EmitScalarExpr(E->getArg(2));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val7});
  return Builder.CreateCall(CGM.getIntrinsic(Param2, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val4, Val5, Val8, Val1});
}
case ARM::BI__builtin_arm_mve_vcvtq_x_s16_f16:
case ARM::BI__builtin_arm_mve_vcvtq_x_u16_f16: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtq_x_s16_f16:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_x_u16_f16:
    Param0 = 1;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fp_int_predicated, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val6, Val1});
}
case ARM::BI__builtin_arm_mve_vrev32q_x_s16:
case ARM::BI__builtin_arm_mve_vrev32q_x_u16:
case ARM::BI__builtin_arm_mve_vrev64q_x_s16:
case ARM::BI__builtin_arm_mve_vrev64q_x_u16: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vrev32q_x_s16:
    Param0 = 32;
    break;
  case ARM::BI__builtin_arm_mve_vrev32q_x_u16:
    Param0 = 32;
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_x_s16:
    Param0 = 64;
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_x_u16:
    Param0 = 64;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vrev_predicated, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val6, Val1});
}
case ARM::BI__builtin_arm_mve_vmovlbq_x_s8:
case ARM::BI__builtin_arm_mve_vmovlbq_x_u8:
case ARM::BI__builtin_arm_mve_vmovltq_x_s8:
case ARM::BI__builtin_arm_mve_vmovltq_x_u8: {
  uint32_t  Param0;
  uint32_t  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmovlbq_x_s8:
    Param0 = 0;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vmovlbq_x_u8:
    Param0 = 1;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vmovltq_x_s8:
    Param0 = 0;
    Param1 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vmovltq_x_u8:
    Param0 = 1;
    Param1 = 1;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val5 = EmitScalarExpr(E->getArg(1));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vmovl_predicated, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val4, Val7, Val1});
}
case ARM::BI__builtin_arm_mve_vandq_x_s16:
case ARM::BI__builtin_arm_mve_vandq_x_u16:
case ARM::BI__builtin_arm_mve_vbicq_x_s16:
case ARM::BI__builtin_arm_mve_vbicq_x_u16:
case ARM::BI__builtin_arm_mve_veorq_x_s16:
case ARM::BI__builtin_arm_mve_veorq_x_u16:
case ARM::BI__builtin_arm_mve_vornq_x_s16:
case ARM::BI__builtin_arm_mve_vornq_x_u16:
case ARM::BI__builtin_arm_mve_vorrq_x_s16:
case ARM::BI__builtin_arm_mve_vorrq_x_u16: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vandq_x_s16:
    Param0 = Intrinsic::arm_mve_and_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vandq_x_u16:
    Param0 = Intrinsic::arm_mve_and_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_x_s16:
    Param0 = Intrinsic::arm_mve_bic_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_x_u16:
    Param0 = Intrinsic::arm_mve_bic_predicated;
    break;
  case ARM::BI__builtin_arm_mve_veorq_x_s16:
    Param0 = Intrinsic::arm_mve_eor_predicated;
    break;
  case ARM::BI__builtin_arm_mve_veorq_x_u16:
    Param0 = Intrinsic::arm_mve_eor_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vornq_x_s16:
    Param0 = Intrinsic::arm_mve_orn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vornq_x_u16:
    Param0 = Intrinsic::arm_mve_orn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_x_s16:
    Param0 = Intrinsic::arm_mve_orr_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_x_u16:
    Param0 = Intrinsic::arm_mve_orr_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val3 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val4 = Builder.CreateBitCast(Val2, Val3);
  Value *Val5 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val7 = Builder.CreateBitCast(Val5, Val6);
  Value *Val8 = EmitScalarExpr(E->getArg(2));
  Value *Val9 = Builder.CreateIntCast(Val8, Int32Ty, false);
  Value *Val10 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val9});
  llvm::Type *Val11 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val12 = Builder.CreateBitCast(Val1, Val11);
  Value *Val13 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val4, Val7, Val10, Val12});
  llvm::Type *Val14 = llvm::FixedVectorType::get(Int16Ty, 8);
  return Builder.CreateBitCast(Val13, Val14);
}
case ARM::BI__builtin_arm_mve_vdupq_x_n_s16:
case ARM::BI__builtin_arm_mve_vdupq_x_n_u16: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val3});
  Value *Val5 = EmitScalarExpr(E->getArg(0));
  Value *Val6 = ARMMVEVectorSplat(Builder, Val5);
  return Builder.CreateSelect(Val4, Val6, Val1);
}
case ARM::BI__builtin_arm_mve_vmvnq_x_n_s16:
case ARM::BI__builtin_arm_mve_vmvnq_x_n_u16: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmvnq_x_n_s16:
    Param0 = true;
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_x_n_u16:
    Param0 = false;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val3});
  Value *Val5 = EmitScalarExpr(E->getArg(0));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateIntCast(Val6, Int16Ty, Param0);
  Value *Val8 = ARMMVEVectorSplat(Builder, Val7);
  Value *Val9 = Builder.CreateNot(Val8);
  return Builder.CreateSelect(Val4, Val9, Val1);
}
case ARM::BI__builtin_arm_mve_vcvtaq_x_s16_f16:
case ARM::BI__builtin_arm_mve_vcvtaq_x_u16_f16:
case ARM::BI__builtin_arm_mve_vcvtmq_x_s16_f16:
case ARM::BI__builtin_arm_mve_vcvtmq_x_u16_f16:
case ARM::BI__builtin_arm_mve_vcvtnq_x_s16_f16:
case ARM::BI__builtin_arm_mve_vcvtnq_x_u16_f16:
case ARM::BI__builtin_arm_mve_vcvtpq_x_s16_f16:
case ARM::BI__builtin_arm_mve_vcvtpq_x_u16_f16: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtaq_x_s16_f16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvta_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vcvtaq_x_u16_f16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvta_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vcvtmq_x_s16_f16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvtm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vcvtmq_x_u16_f16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvtm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vcvtnq_x_s16_f16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvtn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vcvtnq_x_u16_f16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvtn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vcvtpq_x_s16_f16:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvtp_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vcvtpq_x_u16_f16:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvtp_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val1, Val3, Val6});
}
case ARM::BI__builtin_arm_mve_vcvtq_x_n_s16_f16:
case ARM::BI__builtin_arm_mve_vcvtq_x_n_u16_f16: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtq_x_n_s16_f16:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_x_n_u16_f16:
    Param0 = 1;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fix_predicated, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val1, Val3, Val4, Val7});
}
case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s16:
case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u16:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s16:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u16:
case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s16:
case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s16: {
  uint32_t  Param0;
  uint32_t  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s16:
    Param0 = 1;
    Param1 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u16:
    Param0 = 1;
    Param1 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s16:
    Param0 = 1;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u16:
    Param0 = 1;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s16:
    Param0 = 0;
    Param1 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s16:
    Param0 = 0;
    Param1 = 0;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val4 = EmitScalarExpr(E->getArg(0));
  Value *Val5 = EmitScalarExpr(E->getArg(1));
  Value *Val6 = EmitScalarExpr(E->getArg(2));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val7});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcaddq_predicated, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val1, Val4, Val5, Val8});
}
case ARM::BI__builtin_arm_mve_vnegq_s16: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  Value *Val1 = llvm::Constant::getNullValue(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateSub(Val1, Val2);
}
case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_s16:
case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_u16:
case ARM::BI__builtin_arm_mve_vuninitializedq_s16:
case ARM::BI__builtin_arm_mve_vuninitializedq_u16: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
  return UndefValue::get(Val0);
}
case ARM::BI__builtin_arm_mve_vddupq_x_wb_u32:
case ARM::BI__builtin_arm_mve_vidupq_x_wb_u32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vddupq_x_wb_u32:
    Param0 = Intrinsic::arm_mve_vddup_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vidupq_x_wb_u32:
    Param0 = Intrinsic::arm_mve_vidup_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Address Val2 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val3 = Builder.CreateLoad(Val2);
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1, Val3, Val4, Val7});
  Value *Val9 = Builder.CreateExtractValue(Val8, static_cast<unsigned>(1));
  Builder.CreateStore(Val9, Val2);
  return Builder.CreateExtractValue(Val8, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u32:
case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u32:
    Param0 = Intrinsic::arm_mve_vdwdup_predicated;
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u32:
    Param0 = Intrinsic::arm_mve_viwdup_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Address Val2 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val3 = Builder.CreateLoad(Val2);
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = EmitScalarExpr(E->getArg(3));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
  Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1, Val3, Val4, Val5, Val8});
  Value *Val10 = Builder.CreateExtractValue(Val9, static_cast<unsigned>(1));
  Builder.CreateStore(Val10, Val2);
  return Builder.CreateExtractValue(Val9, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vaddq_x_n_s32:
case ARM::BI__builtin_arm_mve_vaddq_x_n_u32:
case ARM::BI__builtin_arm_mve_vmulq_x_n_s32:
case ARM::BI__builtin_arm_mve_vmulq_x_n_u32:
case ARM::BI__builtin_arm_mve_vsubq_x_n_s32:
case ARM::BI__builtin_arm_mve_vsubq_x_n_u32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vaddq_x_n_s32:
    Param0 = Intrinsic::arm_mve_add_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vaddq_x_n_u32:
    Param0 = Intrinsic::arm_mve_add_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulq_x_n_s32:
    Param0 = Intrinsic::arm_mve_mul_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulq_x_n_u32:
    Param0 = Intrinsic::arm_mve_mul_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsubq_x_n_s32:
    Param0 = Intrinsic::arm_mve_sub_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsubq_x_n_u32:
    Param0 = Intrinsic::arm_mve_sub_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val4, Val7, Val1});
}
case ARM::BI__builtin_arm_mve_vhaddq_x_n_s32:
case ARM::BI__builtin_arm_mve_vhaddq_x_n_u32:
case ARM::BI__builtin_arm_mve_vhsubq_x_n_s32:
case ARM::BI__builtin_arm_mve_vhsubq_x_n_u32: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vhaddq_x_n_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_hadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_x_n_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_hadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_x_n_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_hsub_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_x_n_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_hsub_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val6 = EmitScalarExpr(E->getArg(2));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val4, Val5, Val8, Val1});
}
case ARM::BI__builtin_arm_mve_vabsq_x_s32:
case ARM::BI__builtin_arm_mve_vclsq_x_s32:
case ARM::BI__builtin_arm_mve_vclzq_x_s32:
case ARM::BI__builtin_arm_mve_vclzq_x_u32:
case ARM::BI__builtin_arm_mve_vmvnq_x_s32:
case ARM::BI__builtin_arm_mve_vmvnq_x_u32:
case ARM::BI__builtin_arm_mve_vnegq_x_s32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vabsq_x_s32:
    Param0 = Intrinsic::arm_mve_abs_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vclsq_x_s32:
    Param0 = Intrinsic::arm_mve_cls_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vclzq_x_s32:
    Param0 = Intrinsic::arm_mve_clz_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vclzq_x_u32:
    Param0 = Intrinsic::arm_mve_clz_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_x_s32:
    Param0 = Intrinsic::arm_mve_mvn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_x_u32:
    Param0 = Intrinsic::arm_mve_mvn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vnegq_x_s32:
    Param0 = Intrinsic::arm_mve_neg_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val5, Val1});
}
case ARM::BI__builtin_arm_mve_vddupq_x_n_u32:
case ARM::BI__builtin_arm_mve_vidupq_x_n_u32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vddupq_x_n_u32:
    Param0 = Intrinsic::arm_mve_vddup_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vidupq_x_n_u32:
    Param0 = Intrinsic::arm_mve_vidup_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1, Val2, Val3, Val6});
  return Builder.CreateExtractValue(Val7, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s32:
case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s32:
    Param0 = Intrinsic::arm_mve_vbrsr_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u32:
    Param0 = Intrinsic::arm_mve_vbrsr_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1, Val2, Val3, Val6});
}
case ARM::BI__builtin_arm_mve_vaddq_x_s32:
case ARM::BI__builtin_arm_mve_vaddq_x_u32:
case ARM::BI__builtin_arm_mve_vmulq_x_s32:
case ARM::BI__builtin_arm_mve_vmulq_x_u32:
case ARM::BI__builtin_arm_mve_vshlq_x_n_s32:
case ARM::BI__builtin_arm_mve_vshlq_x_n_u32:
case ARM::BI__builtin_arm_mve_vsubq_x_s32:
case ARM::BI__builtin_arm_mve_vsubq_x_u32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vaddq_x_s32:
    Param0 = Intrinsic::arm_mve_add_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vaddq_x_u32:
    Param0 = Intrinsic::arm_mve_add_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulq_x_s32:
    Param0 = Intrinsic::arm_mve_mul_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulq_x_u32:
    Param0 = Intrinsic::arm_mve_mul_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshlq_x_n_s32:
    Param0 = Intrinsic::arm_mve_shl_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshlq_x_n_u32:
    Param0 = Intrinsic::arm_mve_shl_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsubq_x_s32:
    Param0 = Intrinsic::arm_mve_sub_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsubq_x_u32:
    Param0 = Intrinsic::arm_mve_sub_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val6, Val1});
}
case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u32:
case ARM::BI__builtin_arm_mve_viwdupq_x_n_u32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u32:
    Param0 = Intrinsic::arm_mve_vdwdup_predicated;
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_x_n_u32:
    Param0 = Intrinsic::arm_mve_viwdup_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = EmitScalarExpr(E->getArg(3));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1, Val2, Val3, Val4, Val7});
  return Builder.CreateExtractValue(Val8, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vrshlq_x_s32:
case ARM::BI__builtin_arm_mve_vrshlq_x_u32:
case ARM::BI__builtin_arm_mve_vshlq_x_s32:
case ARM::BI__builtin_arm_mve_vshlq_x_u32: {
  uint32_t  Param0;
  uint32_t  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vrshlq_x_s32:
    Param0 = 1;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_x_u32:
    Param0 = 1;
    Param1 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vshlq_x_s32:
    Param0 = 0;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vshlq_x_u32:
    Param0 = 0;
    Param1 = 1;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, 0);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val7 = EmitScalarExpr(E->getArg(2));
  Value *Val8 = Builder.CreateIntCast(Val7, Int32Ty, false);
  Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val8});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshl_vector_predicated, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val4, Val5, Val6, Val9, Val1});
}
case ARM::BI__builtin_arm_mve_vmullbq_poly_x_p16:
case ARM::BI__builtin_arm_mve_vmulltq_poly_x_p16: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmullbq_poly_x_p16:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_poly_x_p16:
    Param0 = 1;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_mull_poly_predicated, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val4, Val7, Val1});
}
case ARM::BI__builtin_arm_mve_vabdq_x_s32:
case ARM::BI__builtin_arm_mve_vabdq_x_u32:
case ARM::BI__builtin_arm_mve_vhaddq_x_s32:
case ARM::BI__builtin_arm_mve_vhaddq_x_u32:
case ARM::BI__builtin_arm_mve_vhsubq_x_s32:
case ARM::BI__builtin_arm_mve_vhsubq_x_u32:
case ARM::BI__builtin_arm_mve_vmaxq_x_s32:
case ARM::BI__builtin_arm_mve_vmaxq_x_u32:
case ARM::BI__builtin_arm_mve_vminq_x_s32:
case ARM::BI__builtin_arm_mve_vminq_x_u32:
case ARM::BI__builtin_arm_mve_vmulhq_x_s32:
case ARM::BI__builtin_arm_mve_vmulhq_x_u32:
case ARM::BI__builtin_arm_mve_vrhaddq_x_s32:
case ARM::BI__builtin_arm_mve_vrhaddq_x_u32:
case ARM::BI__builtin_arm_mve_vrmulhq_x_s32:
case ARM::BI__builtin_arm_mve_vrmulhq_x_u32:
case ARM::BI__builtin_arm_mve_vrshrq_x_n_s32:
case ARM::BI__builtin_arm_mve_vrshrq_x_n_u32:
case ARM::BI__builtin_arm_mve_vshrq_x_n_s32:
case ARM::BI__builtin_arm_mve_vshrq_x_n_u32: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vabdq_x_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_abd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vabdq_x_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_abd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_x_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_hadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_x_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_hadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_x_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_hsub_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_x_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_hsub_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmaxq_x_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_max_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmaxq_x_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_max_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vminq_x_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_min_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vminq_x_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_min_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_x_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_mulh_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_x_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_mulh_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_x_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_rhadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_x_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_rhadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_x_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_rmulh_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_x_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_rmulh_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_x_n_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vrshr_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_x_n_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vrshr_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshrq_x_n_s32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_shr_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshrq_x_n_u32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_shr_imm_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val4, Val7, Val1});
}
case ARM::BI__builtin_arm_mve_vmullbq_int_x_s16:
case ARM::BI__builtin_arm_mve_vmullbq_int_x_u16:
case ARM::BI__builtin_arm_mve_vmulltq_int_x_s16:
case ARM::BI__builtin_arm_mve_vmulltq_int_x_u16:
case ARM::BI__builtin_arm_mve_vshllbq_x_n_s16:
case ARM::BI__builtin_arm_mve_vshllbq_x_n_u16:
case ARM::BI__builtin_arm_mve_vshlltq_x_n_s16:
case ARM::BI__builtin_arm_mve_vshlltq_x_n_u16: {
  uint32_t  Param0;
  uint32_t  Param1;
  Intrinsic::ID  Param2;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmullbq_int_x_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_mull_int_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmullbq_int_x_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_mull_int_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_x_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_mull_int_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_x_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_mull_int_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshllbq_x_n_s16:
    Param0 = 0;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_vshll_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshllbq_x_n_u16:
    Param0 = 1;
    Param1 = 0;
    Param2 = Intrinsic::arm_mve_vshll_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshlltq_x_n_s16:
    Param0 = 0;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_vshll_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshlltq_x_n_u16:
    Param0 = 1;
    Param1 = 1;
    Param2 = Intrinsic::arm_mve_vshll_imm_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val6 = EmitScalarExpr(E->getArg(2));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
  return Builder.CreateCall(CGM.getIntrinsic(Param2, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val4, Val5, Val8, Val1});
}
case ARM::BI__builtin_arm_mve_vrev64q_x_s32:
case ARM::BI__builtin_arm_mve_vrev64q_x_u32: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, 64);
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vrev_predicated, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val6, Val1});
}
case ARM::BI__builtin_arm_mve_vcvtq_x_s32_f32:
case ARM::BI__builtin_arm_mve_vcvtq_x_u32_f32: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtq_x_s32_f32:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_x_u32_f32:
    Param0 = 1;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fp_int_predicated, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val6, Val1});
}
case ARM::BI__builtin_arm_mve_vmovlbq_x_s16:
case ARM::BI__builtin_arm_mve_vmovlbq_x_u16:
case ARM::BI__builtin_arm_mve_vmovltq_x_s16:
case ARM::BI__builtin_arm_mve_vmovltq_x_u16: {
  uint32_t  Param0;
  uint32_t  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmovlbq_x_s16:
    Param0 = 0;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vmovlbq_x_u16:
    Param0 = 1;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vmovltq_x_s16:
    Param0 = 0;
    Param1 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vmovltq_x_u16:
    Param0 = 1;
    Param1 = 1;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val5 = EmitScalarExpr(E->getArg(1));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vmovl_predicated, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val4, Val7, Val1});
}
case ARM::BI__builtin_arm_mve_vandq_x_s32:
case ARM::BI__builtin_arm_mve_vandq_x_u32:
case ARM::BI__builtin_arm_mve_vbicq_x_s32:
case ARM::BI__builtin_arm_mve_vbicq_x_u32:
case ARM::BI__builtin_arm_mve_veorq_x_s32:
case ARM::BI__builtin_arm_mve_veorq_x_u32:
case ARM::BI__builtin_arm_mve_vornq_x_s32:
case ARM::BI__builtin_arm_mve_vornq_x_u32:
case ARM::BI__builtin_arm_mve_vorrq_x_s32:
case ARM::BI__builtin_arm_mve_vorrq_x_u32: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vandq_x_s32:
    Param0 = Intrinsic::arm_mve_and_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vandq_x_u32:
    Param0 = Intrinsic::arm_mve_and_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_x_s32:
    Param0 = Intrinsic::arm_mve_bic_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_x_u32:
    Param0 = Intrinsic::arm_mve_bic_predicated;
    break;
  case ARM::BI__builtin_arm_mve_veorq_x_s32:
    Param0 = Intrinsic::arm_mve_eor_predicated;
    break;
  case ARM::BI__builtin_arm_mve_veorq_x_u32:
    Param0 = Intrinsic::arm_mve_eor_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vornq_x_s32:
    Param0 = Intrinsic::arm_mve_orn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vornq_x_u32:
    Param0 = Intrinsic::arm_mve_orn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_x_s32:
    Param0 = Intrinsic::arm_mve_orr_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_x_u32:
    Param0 = Intrinsic::arm_mve_orr_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val3 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val4 = Builder.CreateBitCast(Val2, Val3);
  Value *Val5 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val7 = Builder.CreateBitCast(Val5, Val6);
  Value *Val8 = EmitScalarExpr(E->getArg(2));
  Value *Val9 = Builder.CreateIntCast(Val8, Int32Ty, false);
  Value *Val10 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val9});
  llvm::Type *Val11 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val12 = Builder.CreateBitCast(Val1, Val11);
  Value *Val13 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4, Val7, Val10, Val12});
  llvm::Type *Val14 = llvm::FixedVectorType::get(Int32Ty, 4);
  return Builder.CreateBitCast(Val13, Val14);
}
case ARM::BI__builtin_arm_mve_vdupq_x_n_s32:
case ARM::BI__builtin_arm_mve_vdupq_x_n_u32: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val3});
  Value *Val5 = EmitScalarExpr(E->getArg(0));
  Value *Val6 = ARMMVEVectorSplat(Builder, Val5);
  return Builder.CreateSelect(Val4, Val6, Val1);
}
case ARM::BI__builtin_arm_mve_vmvnq_x_n_s32:
case ARM::BI__builtin_arm_mve_vmvnq_x_n_u32: {
  bool  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmvnq_x_n_s32:
    Param0 = true;
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_x_n_u32:
    Param0 = false;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val3});
  Value *Val5 = EmitScalarExpr(E->getArg(0));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, Param0);
  Value *Val7 = ARMMVEVectorSplat(Builder, Val6);
  Value *Val8 = Builder.CreateNot(Val7);
  return Builder.CreateSelect(Val4, Val8, Val1);
}
case ARM::BI__builtin_arm_mve_vcvtaq_x_s32_f32:
case ARM::BI__builtin_arm_mve_vcvtaq_x_u32_f32:
case ARM::BI__builtin_arm_mve_vcvtmq_x_s32_f32:
case ARM::BI__builtin_arm_mve_vcvtmq_x_u32_f32:
case ARM::BI__builtin_arm_mve_vcvtnq_x_s32_f32:
case ARM::BI__builtin_arm_mve_vcvtnq_x_u32_f32:
case ARM::BI__builtin_arm_mve_vcvtpq_x_s32_f32:
case ARM::BI__builtin_arm_mve_vcvtpq_x_u32_f32: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtaq_x_s32_f32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvta_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vcvtaq_x_u32_f32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvta_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vcvtmq_x_s32_f32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvtm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vcvtmq_x_u32_f32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvtm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vcvtnq_x_s32_f32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvtn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vcvtnq_x_u32_f32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvtn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vcvtpq_x_s32_f32:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vcvtp_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vcvtpq_x_u32_f32:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vcvtp_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val1, Val3, Val6});
}
case ARM::BI__builtin_arm_mve_vcvtq_x_n_s32_f32:
case ARM::BI__builtin_arm_mve_vcvtq_x_n_u32_f32: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcvtq_x_n_s32_f32:
    Param0 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vcvtq_x_n_u32_f32:
    Param0 = 1;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = EmitScalarExpr(E->getArg(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fix_predicated, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val1, Val3, Val4, Val7});
}
case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s32:
case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u32:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s32:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u32:
case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s32:
case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s32: {
  uint32_t  Param0;
  uint32_t  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s32:
    Param0 = 1;
    Param1 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u32:
    Param0 = 1;
    Param1 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s32:
    Param0 = 1;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u32:
    Param0 = 1;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s32:
    Param0 = 0;
    Param1 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s32:
    Param0 = 0;
    Param1 = 0;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val4 = EmitScalarExpr(E->getArg(0));
  Value *Val5 = EmitScalarExpr(E->getArg(1));
  Value *Val6 = EmitScalarExpr(E->getArg(2));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcaddq_predicated, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val1, Val4, Val5, Val8});
}
case ARM::BI__builtin_arm_mve_vnegq_s32: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  Value *Val1 = llvm::Constant::getNullValue(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateSub(Val1, Val2);
}
case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_s32:
case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_u32:
case ARM::BI__builtin_arm_mve_vuninitializedq_s32:
case ARM::BI__builtin_arm_mve_vuninitializedq_u32: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
  return UndefValue::get(Val0);
}
case ARM::BI__builtin_arm_mve_vcreateq_f32: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int64Ty, 2);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = Builder.CreateInsertElement(Val1, Val2, static_cast<uint64_t>(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateInsertElement(Val3, Val4, static_cast<uint64_t>(1));
  llvm::Type *Val6 = llvm::FixedVectorType::get(FloatTy, 4);
  return Builder.CreateBitCast(Val5, Val6);
}
case ARM::BI__builtin_arm_mve_vcreateq_f16: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int64Ty, 2);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = Builder.CreateInsertElement(Val1, Val2, static_cast<uint64_t>(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateInsertElement(Val3, Val4, static_cast<uint64_t>(1));
  llvm::Type *Val6 = llvm::FixedVectorType::get(HalfTy, 8);
  return Builder.CreateBitCast(Val5, Val6);
}
case ARM::BI__builtin_arm_mve_vcreateq_s16:
case ARM::BI__builtin_arm_mve_vcreateq_u16: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int64Ty, 2);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = Builder.CreateInsertElement(Val1, Val2, static_cast<uint64_t>(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateInsertElement(Val3, Val4, static_cast<uint64_t>(1));
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int16Ty, 8);
  return Builder.CreateBitCast(Val5, Val6);
}
case ARM::BI__builtin_arm_mve_vcreateq_s32:
case ARM::BI__builtin_arm_mve_vcreateq_u32: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int64Ty, 2);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = Builder.CreateInsertElement(Val1, Val2, static_cast<uint64_t>(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateInsertElement(Val3, Val4, static_cast<uint64_t>(1));
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int32Ty, 4);
  return Builder.CreateBitCast(Val5, Val6);
}
case ARM::BI__builtin_arm_mve_vcreateq_s64:
case ARM::BI__builtin_arm_mve_vcreateq_u64: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int64Ty, 2);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = Builder.CreateInsertElement(Val1, Val2, static_cast<uint64_t>(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateInsertElement(Val3, Val4, static_cast<uint64_t>(1));
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int64Ty, 2);
  return Builder.CreateBitCast(Val5, Val6);
}
case ARM::BI__builtin_arm_mve_vcreateq_s8:
case ARM::BI__builtin_arm_mve_vcreateq_u8: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int64Ty, 2);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = Builder.CreateInsertElement(Val1, Val2, static_cast<uint64_t>(0));
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateInsertElement(Val3, Val4, static_cast<uint64_t>(1));
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int8Ty, 16);
  return Builder.CreateBitCast(Val5, Val6);
}
case ARM::BI__builtin_arm_mve_vmullbq_int_x_s32:
case ARM::BI__builtin_arm_mve_vmullbq_int_x_u32:
case ARM::BI__builtin_arm_mve_vmulltq_int_x_s32:
case ARM::BI__builtin_arm_mve_vmulltq_int_x_u32: {
  uint32_t  Param0;
  uint32_t  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vmullbq_int_x_s32:
    Param0 = 0;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vmullbq_int_x_u32:
    Param0 = 1;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_x_s32:
    Param0 = 0;
    Param1 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vmulltq_int_x_u32:
    Param0 = 1;
    Param1 = 1;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int64Ty, 2);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val6 = EmitScalarExpr(E->getArg(2));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_mull_int_predicated, {llvm::FixedVectorType::get(Int64Ty, 2), llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val4, Val5, Val8, Val1});
}
case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_s64:
case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_u64:
case ARM::BI__builtin_arm_mve_vuninitializedq_s64:
case ARM::BI__builtin_arm_mve_vuninitializedq_u64: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int64Ty, 2);
  return UndefValue::get(Val0);
}
case ARM::BI__builtin_arm_mve_vddupq_x_wb_u8:
case ARM::BI__builtin_arm_mve_vidupq_x_wb_u8: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vddupq_x_wb_u8:
    Param0 = Intrinsic::arm_mve_vddup_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vidupq_x_wb_u8:
    Param0 = Intrinsic::arm_mve_vidup_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val1 = UndefValue::get(Val0);
  Address Val2 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val3 = Builder.CreateLoad(Val2);
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val6});
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val1, Val3, Val4, Val7});
  Value *Val9 = Builder.CreateExtractValue(Val8, static_cast<unsigned>(1));
  Builder.CreateStore(Val9, Val2);
  return Builder.CreateExtractValue(Val8, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u8:
case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u8: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u8:
    Param0 = Intrinsic::arm_mve_vdwdup_predicated;
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u8:
    Param0 = Intrinsic::arm_mve_viwdup_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val1 = UndefValue::get(Val0);
  Address Val2 = EmitPointerWithAlignment(E->getArg(0));
  Value *Val3 = Builder.CreateLoad(Val2);
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = EmitScalarExpr(E->getArg(3));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val7});
  Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val1, Val3, Val4, Val5, Val8});
  Value *Val10 = Builder.CreateExtractValue(Val9, static_cast<unsigned>(1));
  Builder.CreateStore(Val10, Val2);
  return Builder.CreateExtractValue(Val9, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vaddq_x_n_s8:
case ARM::BI__builtin_arm_mve_vaddq_x_n_u8:
case ARM::BI__builtin_arm_mve_vmulq_x_n_s8:
case ARM::BI__builtin_arm_mve_vmulq_x_n_u8:
case ARM::BI__builtin_arm_mve_vsubq_x_n_s8:
case ARM::BI__builtin_arm_mve_vsubq_x_n_u8: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vaddq_x_n_s8:
    Param0 = Intrinsic::arm_mve_add_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vaddq_x_n_u8:
    Param0 = Intrinsic::arm_mve_add_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulq_x_n_s8:
    Param0 = Intrinsic::arm_mve_mul_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulq_x_n_u8:
    Param0 = Intrinsic::arm_mve_mul_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsubq_x_n_s8:
    Param0 = Intrinsic::arm_mve_sub_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsubq_x_n_u8:
    Param0 = Intrinsic::arm_mve_sub_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val4, Val7, Val1});
}
case ARM::BI__builtin_arm_mve_vhaddq_x_n_s8:
case ARM::BI__builtin_arm_mve_vhaddq_x_n_u8:
case ARM::BI__builtin_arm_mve_vhsubq_x_n_s8:
case ARM::BI__builtin_arm_mve_vhsubq_x_n_u8: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vhaddq_x_n_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_hadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_x_n_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_hadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_x_n_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_hsub_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_x_n_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_hsub_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val6 = EmitScalarExpr(E->getArg(2));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val7});
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val4, Val5, Val8, Val1});
}
case ARM::BI__builtin_arm_mve_vabsq_x_s8:
case ARM::BI__builtin_arm_mve_vclsq_x_s8:
case ARM::BI__builtin_arm_mve_vclzq_x_s8:
case ARM::BI__builtin_arm_mve_vclzq_x_u8:
case ARM::BI__builtin_arm_mve_vmvnq_x_s8:
case ARM::BI__builtin_arm_mve_vmvnq_x_u8:
case ARM::BI__builtin_arm_mve_vnegq_x_s8: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vabsq_x_s8:
    Param0 = Intrinsic::arm_mve_abs_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vclsq_x_s8:
    Param0 = Intrinsic::arm_mve_cls_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vclzq_x_s8:
    Param0 = Intrinsic::arm_mve_clz_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vclzq_x_u8:
    Param0 = Intrinsic::arm_mve_clz_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_x_s8:
    Param0 = Intrinsic::arm_mve_mvn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmvnq_x_u8:
    Param0 = Intrinsic::arm_mve_mvn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vnegq_x_s8:
    Param0 = Intrinsic::arm_mve_neg_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
  Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val4});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val5, Val1});
}
case ARM::BI__builtin_arm_mve_vddupq_x_n_u8:
case ARM::BI__builtin_arm_mve_vidupq_x_n_u8: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vddupq_x_n_u8:
    Param0 = Intrinsic::arm_mve_vddup_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vidupq_x_n_u8:
    Param0 = Intrinsic::arm_mve_vidup_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val5});
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val1, Val2, Val3, Val6});
  return Builder.CreateExtractValue(Val7, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s8:
case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u8: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s8:
    Param0 = Intrinsic::arm_mve_vbrsr_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u8:
    Param0 = Intrinsic::arm_mve_vbrsr_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val1, Val2, Val3, Val6});
}
case ARM::BI__builtin_arm_mve_vaddq_x_s8:
case ARM::BI__builtin_arm_mve_vaddq_x_u8:
case ARM::BI__builtin_arm_mve_vmulq_x_s8:
case ARM::BI__builtin_arm_mve_vmulq_x_u8:
case ARM::BI__builtin_arm_mve_vshlq_x_n_s8:
case ARM::BI__builtin_arm_mve_vshlq_x_n_u8:
case ARM::BI__builtin_arm_mve_vsubq_x_s8:
case ARM::BI__builtin_arm_mve_vsubq_x_u8: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vaddq_x_s8:
    Param0 = Intrinsic::arm_mve_add_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vaddq_x_u8:
    Param0 = Intrinsic::arm_mve_add_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulq_x_s8:
    Param0 = Intrinsic::arm_mve_mul_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulq_x_u8:
    Param0 = Intrinsic::arm_mve_mul_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshlq_x_n_s8:
    Param0 = Intrinsic::arm_mve_shl_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshlq_x_n_u8:
    Param0 = Intrinsic::arm_mve_shl_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsubq_x_s8:
    Param0 = Intrinsic::arm_mve_sub_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vsubq_x_u8:
    Param0 = Intrinsic::arm_mve_sub_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val3, Val6, Val1});
}
case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u8:
case ARM::BI__builtin_arm_mve_viwdupq_x_n_u8: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u8:
    Param0 = Intrinsic::arm_mve_vdwdup_predicated;
    break;
  case ARM::BI__builtin_arm_mve_viwdupq_x_n_u8:
    Param0 = Intrinsic::arm_mve_viwdup_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = EmitScalarExpr(E->getArg(2));
  Value *Val5 = EmitScalarExpr(E->getArg(3));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val6});
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val1, Val2, Val3, Val4, Val7});
  return Builder.CreateExtractValue(Val8, static_cast<unsigned>(0));
}
case ARM::BI__builtin_arm_mve_vrshlq_x_s8:
case ARM::BI__builtin_arm_mve_vrshlq_x_u8:
case ARM::BI__builtin_arm_mve_vshlq_x_s8:
case ARM::BI__builtin_arm_mve_vshlq_x_u8: {
  uint32_t  Param0;
  uint32_t  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vrshlq_x_s8:
    Param0 = 1;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vrshlq_x_u8:
    Param0 = 1;
    Param1 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vshlq_x_s8:
    Param0 = 0;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vshlq_x_u8:
    Param0 = 0;
    Param1 = 1;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, 0);
  Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val7 = EmitScalarExpr(E->getArg(2));
  Value *Val8 = Builder.CreateIntCast(Val7, Int32Ty, false);
  Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val8});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshl_vector_predicated, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val3, Val4, Val5, Val6, Val9, Val1});
}
case ARM::BI__builtin_arm_mve_vabdq_x_s8:
case ARM::BI__builtin_arm_mve_vabdq_x_u8:
case ARM::BI__builtin_arm_mve_vhaddq_x_s8:
case ARM::BI__builtin_arm_mve_vhaddq_x_u8:
case ARM::BI__builtin_arm_mve_vhsubq_x_s8:
case ARM::BI__builtin_arm_mve_vhsubq_x_u8:
case ARM::BI__builtin_arm_mve_vmaxq_x_s8:
case ARM::BI__builtin_arm_mve_vmaxq_x_u8:
case ARM::BI__builtin_arm_mve_vminq_x_s8:
case ARM::BI__builtin_arm_mve_vminq_x_u8:
case ARM::BI__builtin_arm_mve_vmulhq_x_s8:
case ARM::BI__builtin_arm_mve_vmulhq_x_u8:
case ARM::BI__builtin_arm_mve_vrhaddq_x_s8:
case ARM::BI__builtin_arm_mve_vrhaddq_x_u8:
case ARM::BI__builtin_arm_mve_vrmulhq_x_s8:
case ARM::BI__builtin_arm_mve_vrmulhq_x_u8:
case ARM::BI__builtin_arm_mve_vrshrq_x_n_s8:
case ARM::BI__builtin_arm_mve_vrshrq_x_n_u8:
case ARM::BI__builtin_arm_mve_vshrq_x_n_s8:
case ARM::BI__builtin_arm_mve_vshrq_x_n_u8: {
  uint32_t  Param0;
  Intrinsic::ID  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vabdq_x_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_abd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vabdq_x_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_abd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_x_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_hadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhaddq_x_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_hadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_x_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_hsub_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vhsubq_x_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_hsub_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmaxq_x_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_max_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmaxq_x_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_max_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vminq_x_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_min_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vminq_x_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_min_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_x_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_mulh_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vmulhq_x_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_mulh_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_x_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_rhadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrhaddq_x_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_rhadd_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_x_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_rmulh_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrmulhq_x_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_rmulh_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_x_n_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_vrshr_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vrshrq_x_n_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_vrshr_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshrq_x_n_s8:
    Param0 = 0;
    Param1 = Intrinsic::arm_mve_shr_imm_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vshrq_x_n_u8:
    Param0 = 1;
    Param1 = Intrinsic::arm_mve_shr_imm_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = EmitScalarExpr(E->getArg(1));
  Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val5 = EmitScalarExpr(E->getArg(2));
  Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
  Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val6});
  return Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val3, Val4, Val7, Val1});
}
case ARM::BI__builtin_arm_mve_vrev16q_x_s8:
case ARM::BI__builtin_arm_mve_vrev16q_x_u8:
case ARM::BI__builtin_arm_mve_vrev32q_x_s8:
case ARM::BI__builtin_arm_mve_vrev32q_x_u8:
case ARM::BI__builtin_arm_mve_vrev64q_x_s8:
case ARM::BI__builtin_arm_mve_vrev64q_x_u8: {
  uint32_t  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vrev16q_x_s8:
    Param0 = 16;
    break;
  case ARM::BI__builtin_arm_mve_vrev16q_x_u8:
    Param0 = 16;
    break;
  case ARM::BI__builtin_arm_mve_vrev32q_x_s8:
    Param0 = 32;
    break;
  case ARM::BI__builtin_arm_mve_vrev32q_x_u8:
    Param0 = 32;
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_x_s8:
    Param0 = 64;
    break;
  case ARM::BI__builtin_arm_mve_vrev64q_x_u8:
    Param0 = 64;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val4 = EmitScalarExpr(E->getArg(1));
  Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
  Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val5});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vrev_predicated, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val3, Val6, Val1});
}
case ARM::BI__builtin_arm_mve_vandq_x_s8:
case ARM::BI__builtin_arm_mve_vandq_x_u8:
case ARM::BI__builtin_arm_mve_vbicq_x_s8:
case ARM::BI__builtin_arm_mve_vbicq_x_u8:
case ARM::BI__builtin_arm_mve_veorq_x_s8:
case ARM::BI__builtin_arm_mve_veorq_x_u8:
case ARM::BI__builtin_arm_mve_vornq_x_s8:
case ARM::BI__builtin_arm_mve_vornq_x_u8:
case ARM::BI__builtin_arm_mve_vorrq_x_s8:
case ARM::BI__builtin_arm_mve_vorrq_x_u8: {
  Intrinsic::ID  Param0;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vandq_x_s8:
    Param0 = Intrinsic::arm_mve_and_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vandq_x_u8:
    Param0 = Intrinsic::arm_mve_and_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_x_s8:
    Param0 = Intrinsic::arm_mve_bic_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vbicq_x_u8:
    Param0 = Intrinsic::arm_mve_bic_predicated;
    break;
  case ARM::BI__builtin_arm_mve_veorq_x_s8:
    Param0 = Intrinsic::arm_mve_eor_predicated;
    break;
  case ARM::BI__builtin_arm_mve_veorq_x_u8:
    Param0 = Intrinsic::arm_mve_eor_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vornq_x_s8:
    Param0 = Intrinsic::arm_mve_orn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vornq_x_u8:
    Param0 = Intrinsic::arm_mve_orn_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_x_s8:
    Param0 = Intrinsic::arm_mve_orr_predicated;
    break;
  case ARM::BI__builtin_arm_mve_vorrq_x_u8:
    Param0 = Intrinsic::arm_mve_orr_predicated;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  llvm::Type *Val3 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val4 = Builder.CreateBitCast(Val2, Val3);
  Value *Val5 = EmitScalarExpr(E->getArg(1));
  llvm::Type *Val6 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val7 = Builder.CreateBitCast(Val5, Val6);
  Value *Val8 = EmitScalarExpr(E->getArg(2));
  Value *Val9 = Builder.CreateIntCast(Val8, Int32Ty, false);
  Value *Val10 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val9});
  llvm::Type *Val11 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val12 = Builder.CreateBitCast(Val1, Val11);
  Value *Val13 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val4, Val7, Val10, Val12});
  llvm::Type *Val14 = llvm::FixedVectorType::get(Int8Ty, 16);
  return Builder.CreateBitCast(Val13, Val14);
}
case ARM::BI__builtin_arm_mve_vdupq_x_n_s8:
case ARM::BI__builtin_arm_mve_vdupq_x_n_u8: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(1));
  Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
  Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val3});
  Value *Val5 = EmitScalarExpr(E->getArg(0));
  Value *Val6 = ARMMVEVectorSplat(Builder, Val5);
  return Builder.CreateSelect(Val4, Val6, Val1);
}
case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s8:
case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u8:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s8:
case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u8:
case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s8:
case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s8: {
  uint32_t  Param0;
  uint32_t  Param1;
  switch (BuiltinID) {
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s8:
    Param0 = 1;
    Param1 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u8:
    Param0 = 1;
    Param1 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s8:
    Param0 = 1;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u8:
    Param0 = 1;
    Param1 = 0;
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s8:
    Param0 = 0;
    Param1 = 1;
    break;
  case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s8:
    Param0 = 0;
    Param1 = 0;
    break;
  }
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val1 = UndefValue::get(Val0);
  Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
  Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
  Value *Val4 = EmitScalarExpr(E->getArg(0));
  Value *Val5 = EmitScalarExpr(E->getArg(1));
  Value *Val6 = EmitScalarExpr(E->getArg(2));
  Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
  Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val7});
  return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcaddq_predicated, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val3, Val1, Val4, Val5, Val8});
}
case ARM::BI__builtin_arm_mve_vnegq_s8: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
  Value *Val1 = llvm::Constant::getNullValue(Val0);
  Value *Val2 = EmitScalarExpr(E->getArg(0));
  return Builder.CreateSub(Val1, Val2);
}
case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_s8:
case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_u8:
case ARM::BI__builtin_arm_mve_vuninitializedq_s8:
case ARM::BI__builtin_arm_mve_vuninitializedq_u8: {
  llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
  return UndefValue::get(Val0);
}
