@@ -43,17 +43,26 @@ RuntimeLibcallsInfo::RuntimeLibcallsInfo(const Triple &TT,
4343 switch (ClVectorLibrary) {
4444 case VectorLibrary::SLEEFGNUABI:
4545 for (RTLIB::LibcallImpl Impl :
46- {RTLIB::impl__ZGVnN4vl4l4_sincospif, RTLIB::impl__ZGVnN2vl8l8_sincospi,
46+ {RTLIB::impl__ZGVnN2vl8l8_sincos, RTLIB::impl__ZGVnN4vl4l4_sincosf,
47+ RTLIB::impl__ZGVsNxvl8l8_sincos, RTLIB::impl__ZGVsNxvl4l4_sincosf,
48+ RTLIB::impl__ZGVnN4vl4l4_sincospif, RTLIB::impl__ZGVnN2vl8l8_sincospi,
4749 RTLIB::impl__ZGVsNxvl4l4_sincospif,
4850 RTLIB::impl__ZGVsNxvl8l8_sincospi})
4951 setAvailable (Impl);
5052 break ;
5153 case VectorLibrary::ArmPL:
5254 for (RTLIB::LibcallImpl Impl :
53- {RTLIB::impl_armpl_vsincospiq_f32, RTLIB::impl_armpl_vsincospiq_f64,
55+ {RTLIB::impl_armpl_vsincosq_f64, RTLIB::impl_armpl_vsincosq_f32,
56+ RTLIB::impl_armpl_svsincos_f64_x, RTLIB::impl_armpl_svsincos_f32_x,
57+ RTLIB::impl_armpl_vsincospiq_f32, RTLIB::impl_armpl_vsincospiq_f64,
5458 RTLIB::impl_armpl_svsincospi_f32_x,
5559 RTLIB::impl_armpl_svsincospi_f64_x})
5660 setAvailable (Impl);
61+
62+ for (RTLIB::LibcallImpl Impl :
63+ {RTLIB::impl_armpl_vsincosq_f64, RTLIB::impl_armpl_vsincosq_f32})
64+ setLibcallImplCallingConv (Impl, CallingConv::AArch64_VectorCall);
65+
5766 break ;
5867 default :
5968 break ;
@@ -188,6 +197,14 @@ RuntimeLibcallsInfo::getFunctionTy(LLVMContext &Ctx, const Triple &TT,
188197 fcNegNormal));
189198 return {FuncTy, Attrs};
190199 }
200+ case RTLIB::impl__ZGVnN2vl8l8_sincos:
201+ case RTLIB::impl__ZGVnN4vl4l4_sincosf:
202+ case RTLIB::impl__ZGVsNxvl8l8_sincos:
203+ case RTLIB::impl__ZGVsNxvl4l4_sincosf:
204+ case RTLIB::impl_armpl_vsincosq_f64:
205+ case RTLIB::impl_armpl_vsincosq_f32:
206+ case RTLIB::impl_armpl_svsincos_f64_x:
207+ case RTLIB::impl_armpl_svsincos_f32_x:
191208 case RTLIB::impl__ZGVnN4vl4l4_sincospif:
192209 case RTLIB::impl__ZGVnN2vl8l8_sincospi:
193210 case RTLIB::impl__ZGVsNxvl4l4_sincospif:
@@ -201,14 +218,24 @@ RuntimeLibcallsInfo::getFunctionTy(LLVMContext &Ctx, const Triple &TT,
201218 bool IsF32 = LibcallImpl == RTLIB::impl__ZGVnN4vl4l4_sincospif ||
202219 LibcallImpl == RTLIB::impl__ZGVsNxvl4l4_sincospif ||
203220 LibcallImpl == RTLIB::impl_armpl_vsincospiq_f32 ||
204- LibcallImpl == RTLIB::impl_armpl_svsincospi_f32_x;
221+ LibcallImpl == RTLIB::impl_armpl_svsincospi_f32_x ||
222+ LibcallImpl == RTLIB::impl__ZGVnN4vl4l4_sincosf ||
223+ LibcallImpl == RTLIB::impl__ZGVsNxvl4l4_sincosf ||
224+ LibcallImpl == RTLIB::impl_armpl_vsincosq_f32 ||
225+ LibcallImpl == RTLIB::impl_armpl_svsincos_f32_x;
226+
205227 Type *ScalarTy = IsF32 ? Type::getFloatTy (Ctx) : Type::getDoubleTy (Ctx);
206228 unsigned EC = IsF32 ? 4 : 2 ;
207229
208- bool IsScalable = LibcallImpl == RTLIB::impl__ZGVsNxvl4l4_sincospif ||
230+ bool IsScalable = LibcallImpl == RTLIB::impl__ZGVsNxvl8l8_sincos ||
231+ LibcallImpl == RTLIB::impl__ZGVsNxvl4l4_sincosf ||
232+ LibcallImpl == RTLIB::impl_armpl_svsincos_f32_x ||
233+ LibcallImpl == RTLIB::impl_armpl_svsincos_f64_x ||
234+ LibcallImpl == RTLIB::impl__ZGVsNxvl4l4_sincospif ||
209235 LibcallImpl == RTLIB::impl__ZGVsNxvl8l8_sincospi ||
210236 LibcallImpl == RTLIB::impl_armpl_svsincospi_f32_x ||
211237 LibcallImpl == RTLIB::impl_armpl_svsincospi_f64_x;
238+
212239 Type *VecTy =
213240 IsScalable ? static_cast <Type *>(ScalableVectorType::get (ScalarTy, EC))
214241 : static_cast <Type *>(FixedVectorType::get (ScalarTy, EC));
@@ -247,6 +274,8 @@ bool RuntimeLibcallsInfo::hasVectorMaskArgument(RTLIB::LibcallImpl Impl) {
247274 // / FIXME: This should be generated by tablegen and support the argument at an
248275 // / arbitrary position
249276 switch (Impl) {
277+ case RTLIB::impl_armpl_svsincos_f32_x:
278+ case RTLIB::impl_armpl_svsincos_f64_x:
250279 case RTLIB::impl_armpl_svsincospi_f32_x:
251280 case RTLIB::impl_armpl_svsincospi_f64_x:
252281 return true ;
0 commit comments