@@ -364,6 +364,76 @@ ORT_API_STATUS_IMPL(KernelDefBuilder_AddTypeConstraint, _In_ OrtKernelDefBuilder
364364 API_IMPL_END
365365}
366366
367+ ORT_API_STATUS_IMPL (KernelDefBuilder_AddInputOutputAliases, _In_ OrtKernelDefBuilder* kernel_def_builder,
368+ _In_reads_ (num_io_indices) int const * input_indices,
369+ _In_reads_(num_io_indices) int const * output_indices,
370+ _In_ size_t num_io_indices) {
371+ API_IMPL_BEGIN
372+ if (num_io_indices == 0 ) {
373+ return OrtApis::CreateStatus (ORT_INVALID_ARGUMENT, " Must specify at least one input/output alias" );
374+ }
375+
376+ if (input_indices == nullptr ) {
377+ return OrtApis::CreateStatus (ORT_INVALID_ARGUMENT, " Must specify a valid array of input indices to alias" );
378+ }
379+
380+ if (output_indices == nullptr ) {
381+ return OrtApis::CreateStatus (ORT_INVALID_ARGUMENT, " Must specify a valid array of output indices to alias" );
382+ }
383+
384+ if (num_io_indices == 1 ) {
385+ kernel_def_builder->Alias (input_indices[0 ], output_indices[0 ]);
386+ } else {
387+ std::vector<std::pair<int , int >> pairs;
388+ pairs.reserve (num_io_indices);
389+
390+ for (size_t i = 0 ; i < num_io_indices; ++i) {
391+ pairs.push_back ({input_indices[i], output_indices[i]});
392+ }
393+
394+ kernel_def_builder->Alias (pairs);
395+ }
396+
397+ return nullptr ;
398+ API_IMPL_END
399+ }
400+
401+ ORT_API_STATUS_IMPL (KernelDefBuilder_AddInputOutputMutableAliases, _In_ OrtKernelDefBuilder* kernel_def_builder,
402+ _In_reads_ (num_io_indices) int const * input_indices,
403+ _In_reads_(num_io_indices) int const * output_indices,
404+ _In_ size_t num_io_indices) {
405+ API_IMPL_BEGIN
406+ if (num_io_indices == 0 ) {
407+ return OrtApis::CreateStatus (ORT_INVALID_ARGUMENT, " Must specify at least one input/output alias (mutable)" );
408+ }
409+
410+ if (input_indices == nullptr ) {
411+ return OrtApis::CreateStatus (ORT_INVALID_ARGUMENT,
412+ " Must specify a valid array of input indices to alias (mutable)" );
413+ }
414+
415+ if (output_indices == nullptr ) {
416+ return OrtApis::CreateStatus (ORT_INVALID_ARGUMENT,
417+ " Must specify a valid array of output indices to alias (mutable)" );
418+ }
419+
420+ if (num_io_indices == 1 ) {
421+ kernel_def_builder->MayInplace (input_indices[0 ], output_indices[0 ]);
422+ } else {
423+ std::vector<std::pair<int , int >> pairs;
424+ pairs.reserve (num_io_indices);
425+
426+ for (size_t i = 0 ; i < num_io_indices; ++i) {
427+ pairs.push_back ({input_indices[i], output_indices[i]});
428+ }
429+
430+ kernel_def_builder->MayInplace (pairs);
431+ }
432+
433+ return nullptr ;
434+ API_IMPL_END
435+ }
436+
367437ORT_API_STATUS_IMPL (KernelDefBuilder_Build, _In_ OrtKernelDefBuilder* kernel_def_builder,
368438 _Outptr_ OrtKernelDef** kernel_def_out) {
369439 API_IMPL_BEGIN
@@ -550,6 +620,8 @@ static constexpr OrtEpApi ort_ep_api = {
550620 &OrtExecutionProviderApi::KernelDefBuilder_SetInputMemType,
551621 &OrtExecutionProviderApi::KernelDefBuilder_SetOutputMemType,
552622 &OrtExecutionProviderApi::KernelDefBuilder_AddTypeConstraint,
623+ &OrtExecutionProviderApi::KernelDefBuilder_AddInputOutputAliases,
624+ &OrtExecutionProviderApi::KernelDefBuilder_AddInputOutputMutableAliases,
553625 &OrtExecutionProviderApi::KernelDefBuilder_Build,
554626 &OrtExecutionProviderApi::ReleaseKernelDef,
555627 &OrtExecutionProviderApi::KernelDef_GetOperatorType,
0 commit comments