#pragma once #include #include #include #include namespace torch::lazy { class TORCH_API DeviceData : public TsNode { public: static OpKind ClassOpKind() { return ltc_device_data; } explicit DeviceData(std::shared_ptr data); // A DeviceData node can be reused if the shape matches, // but we will substitute the actual data_ pointer under // the hood. bool CanBeReused(const std::shared_ptr& data) const { return data_->shape() == data->shape(); } std::string ToString() const override; const std::shared_ptr& data() const { return data_; } void SetData(std::shared_ptr data) { data_ = std::move(data); } static const DeviceData* Cast(const Node* node); // To reuse IR nodes, use this method to create DeviceData nodes // instead of calling the constructor directconst ly. static NodePtr Create(const std::shared_ptr& data); TSOpVector Lower( std::shared_ptr function, TSLoweringContext* loctx) const override; private: std::shared_ptr data_; }; } // namespace torch::lazy