blob: 067c7323beb83a49ffa6d490b9f3efe0118c8725 [file] [log] [blame]
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;
llvm::Type * Param2;
switch (BuiltinID) {
case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_z_s64:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
break;
case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_z_u64:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
break;
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_f32:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
Param1 = llvm::FixedVectorType::get(FloatTy, 4);
Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
break;
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_s32:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
break;
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_u32:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
Param2 = 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, {Param0}), {Val4});
Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vldr_gather_base_wb_predicated, {Param1, Param2, Param0}), {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;
llvm::Type * Param2;
switch (BuiltinID) {
case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_p_s64:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
break;
case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_p_u64:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
break;
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_f32:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
Param2 = llvm::FixedVectorType::get(FloatTy, 4);
break;
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_s32:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
break;
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_u32:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
Param2 = 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, {Param0}), {Val5});
Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vstr_scatter_base_wb_predicated, {Param1, Param2, Param0}), {Val1, Val2, Val3, Val6});
return Builder.CreateStore(Val7, Val0);
}
case ARM::BI__builtin_arm_mve_vld1q_f32:
case ARM::BI__builtin_arm_mve_vldrwq_f32: {
Address Val0 = EmitPointerWithAlignment(E->getArg(0));
Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4)));
Address Val2 = Address(Val1, llvm::FixedVectorType::get(FloatTy, 4), 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_f16:
case ARM::BI__builtin_arm_mve_vldrhq_f16: {
Address Val0 = EmitPointerWithAlignment(E->getArg(0));
Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8)));
Address Val2 = Address(Val1, llvm::FixedVectorType::get(HalfTy, 8), CharUnits::fromQuantity(2));
return Builder.CreateLoad(Val2);
}
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, llvm::FixedVectorType::get(Int16Ty, 4), 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_s16:
case ARM::BI__builtin_arm_mve_vld1q_u16:
case ARM::BI__builtin_arm_mve_vldrhq_s16:
case ARM::BI__builtin_arm_mve_vldrhq_u16: {
Address Val0 = EmitPointerWithAlignment(E->getArg(0));
Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8)));
Address Val2 = Address(Val1, llvm::FixedVectorType::get(Int16Ty, 8), CharUnits::fromQuantity(2));
return Builder.CreateLoad(Val2);
}
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_s32:
case ARM::BI__builtin_arm_mve_vld1q_u32:
case ARM::BI__builtin_arm_mve_vldrwq_s32:
case ARM::BI__builtin_arm_mve_vldrwq_u32: {
Address Val0 = EmitPointerWithAlignment(E->getArg(0));
Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4)));
Address Val2 = Address(Val1, llvm::FixedVectorType::get(Int32Ty, 4), CharUnits::fromQuantity(4));
return Builder.CreateLoad(Val2);
}
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, llvm::FixedVectorType::get(Int8Ty, 16), 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, llvm::FixedVectorType::get(Int8Ty, 4), 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, llvm::FixedVectorType::get(Int8Ty, 8), 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(), 2);
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(), 2);
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(), 2);
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(), 2);
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(), 2);
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(), 2);
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(), 2);
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(), 2);
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(), 2);
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_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;
llvm::Type * Param2;
switch (BuiltinID) {
case ARM::BI__builtin_arm_mve_vldrdq_gather_base_z_s64:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
break;
case ARM::BI__builtin_arm_mve_vldrdq_gather_base_z_u64:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
break;
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_f32:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
Param1 = llvm::FixedVectorType::get(FloatTy, 4);
Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
break;
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_s32:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
break;
case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_u32:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
Param2 = 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, {Param0}), {Val3});
return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vldr_gather_base_predicated, {Param1, Param2, Param0}), {Val0, Val1, Val4});
}
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_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_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;
llvm::Type * Param2;
switch (BuiltinID) {
case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_p_s64:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
break;
case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_p_u64:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
break;
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_f32:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
Param2 = llvm::FixedVectorType::get(FloatTy, 4);
break;
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_s32:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
break;
case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_u32:
Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
Param2 = 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, {Param0}), {Val4});
return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vstr_scatter_base_predicated, {Param1, Param2, Param0}), {Val0, Val1, Val2, Val5});
}
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_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_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_f32:
case ARM::BI__builtin_arm_mve_vstrwq_f32: {
Value *Val0 = EmitScalarExpr(E->getArg(1));
Address Val1 = EmitPointerWithAlignment(E->getArg(0));
Value *Val2 = Builder.CreatePointerCast((Val1.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4)));
Address Val3 = Address(Val2, llvm::FixedVectorType::get(FloatTy, 4), CharUnits::fromQuantity(4));
return Builder.CreateStore(Val0, Val3);
}
case ARM::BI__builtin_arm_mve_vst1q_f16:
case ARM::BI__builtin_arm_mve_vstrhq_f16: {
Value *Val0 = EmitScalarExpr(E->getArg(1));
Address Val1 = EmitPointerWithAlignment(E->getArg(0));
Value *Val2 = Builder.CreatePointerCast((Val1.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8)));
Address Val3 = Address(Val2, llvm::FixedVectorType::get(HalfTy, 8), CharUnits::fromQuantity(2));
return Builder.CreateStore(Val0, Val3);
}
case ARM::BI__builtin_arm_mve_vst1q_s16:
case ARM::BI__builtin_arm_mve_vst1q_u16:
case ARM::BI__builtin_arm_mve_vstrhq_s16:
case ARM::BI__builtin_arm_mve_vstrhq_u16: {
Value *Val0 = EmitScalarExpr(E->getArg(1));
Address Val1 = EmitPointerWithAlignment(E->getArg(0));
Value *Val2 = Builder.CreatePointerCast((Val1.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8)));
Address Val3 = Address(Val2, llvm::FixedVectorType::get(Int16Ty, 8), CharUnits::fromQuantity(2));
return Builder.CreateStore(Val0, Val3);
}
case ARM::BI__builtin_arm_mve_vst1q_s32:
case ARM::BI__builtin_arm_mve_vst1q_u32:
case ARM::BI__builtin_arm_mve_vstrwq_s32:
case ARM::BI__builtin_arm_mve_vstrwq_u32: {
Value *Val0 = EmitScalarExpr(E->getArg(1));
Address Val1 = EmitPointerWithAlignment(E->getArg(0));
Value *Val2 = Builder.CreatePointerCast((Val1.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4)));
Address Val3 = Address(Val2, llvm::FixedVectorType::get(Int32Ty, 4), CharUnits::fromQuantity(4));
return Builder.CreateStore(Val0, Val3);
}
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, llvm::FixedVectorType::get(Int8Ty, 16), 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(), 2);
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_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;
llvm::Type * Param3;
switch (BuiltinID) {
case ARM::BI__builtin_arm_mve_vqdmullbq_m_n_s16:
Param0 = 0;
Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
break;
case ARM::BI__builtin_arm_mve_vqdmullbq_m_n_s32:
Param0 = 0;
Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
break;
case ARM::BI__builtin_arm_mve_vqdmulltq_m_n_s16:
Param0 = 1;
Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
break;
case ARM::BI__builtin_arm_mve_vqdmulltq_m_n_s32:
Param0 = 1;
Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 2);
Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
Param3 = 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, {Param1}), {Val5});
Value *Val7 = EmitScalarExpr(E->getArg(0));
return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vqdmull_predicated, {Param2, Param3, Param1}), {Val0, Val2, Val3, Val6, Val7});
}
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_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(), 2);
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(), 2);
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(), 2);
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(), 2);
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(), 2);
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(), 2);
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, llvm::FixedVectorType::get(Int16Ty, 4), 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, llvm::FixedVectorType::get(Int8Ty, 4), 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, llvm::FixedVectorType::get(Int8Ty, 8), 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 ARMMVEVectorReinterpret(Builder, this, 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 ARMMVEVectorReinterpret(Builder, this, 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 ARMMVEVectorReinterpret(Builder, this, 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 ARMMVEVectorReinterpret(Builder, this, 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 ARMMVEVectorReinterpret(Builder, this, 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 ARMMVEVectorReinterpret(Builder, this, 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(), 2)}), {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(), 2)}), {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);
}