#include #include namespace torch { namespace lazy { namespace { std::atomic backend_impl_registry; } // namespace bool hasBackend() { return !!backend_impl_registry.load(); } const BackendImplInterface* getBackend() { auto* interface = backend_impl_registry.load(); TORCH_CHECK(interface, "Lazy tensor backend not registered."); return interface; } BackendRegistrar::BackendRegistrar( const BackendImplInterface* backend_impl_interface) { backend_impl_registry.store(backend_impl_interface); } // Get IrBuilder from backend. Use TorchScriptIrBuilder by default const IrBuilder* getIrBuilder() { static const IrBuilder* builder = getBackend()->GetIrBuilder(); return builder; } std::unique_ptr LoweringContext::Create( const std::string& name, BackendDevice device, c10::ArrayRef post_order, Util::EmissionMap emit_status) { return getBackend()->CreateLoweringContext( name, std::move(device), post_order, emit_status); } std::unique_ptr LoweringContext::Create( const std::string& name, BackendDevice device) { return getBackend()->CreateLoweringContext(name, std::move(device)); } } // namespace lazy } // namespace torch