pytorch
ec2c974b - Simplify some TH codegen by moving code out of the switch and killing dead code. (#32888)

Commit
4 years ago
Simplify some TH codegen by moving code out of the switch and killing dead code. (#32888) Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/32888 This kills ~1500 lines of generated code by doing the following: 1) Stop binding _th_clone, which isn't used anymore. 2) Move allocation code out of the switch, because it doesn't need to be there, example: Now: ``` auto dispatch_scalar_type = infer_scalar_type(self); auto result_ = c10::make_intrusive<TensorImpl, UndefinedTensorImpl>(c10::Storage(scalarTypeToTypeMeta(dispatch_scalar_type), 0, allocator(), true),DispatchKey::CPUTensorId).release(); auto result = Tensor(c10::intrusive_ptr<TensorImpl, UndefinedTensorImpl>::reclaim(result_)); switch (dispatch_scalar_type) { case ScalarType::Bool: { ... case ScalarType::Byte: { ... ``` Before: ``` auto dispatch_scalar_type = infer_scalar_type(self); switch(dispatch_scalar_type) { case ScalarType::Bool: { auto result_ = c10::make_intrusive<TensorImpl, UndefinedTensorImpl>(caffe2::TypeMeta::Make<bool>(), 0, allocator(), true),DispatchKey::CPUTensorId).release(); auto result = Tensor(c10::intrusive_ptr<TensorImpl, UndefinedTensorImpl>::reclaim(result_)); case ScalarType::Byte: { auto result_ = c10::make_intrusive<TensorImpl, UndefinedTensorImpl>(caffe2::TypeMeta::Make<byte>(), 0, allocator(), true),DispatchKey::CPUTensorId).release(); auto result = Tensor(c10::intrusive_ptr<TensorImpl, UndefinedTensorImpl>::reclaim(result_)); ``` Note there's one extra lookup from ScalarType -> TypeMeta, but that can go away once we are able to put everything in a dispatch macro. 3) Prepare for more moves out of the switch by using dispatch_scalar_type where we would have used an explicit ScalarType::Name More moves are currently blocked by "real" types needing to map scalar_type -> C++ type. Dispatch macros can solve that, but I'll need to wrap the actual TH calls in templates so the entire thing can be done via dispatch. 4) Kill some codegen that isn't used anymore: ALLOC_WRAP, is_actual_return_long. Test Plan: Imported from OSS Differential Revision: D19672613 Pulled By: gchanan fbshipit-source-id: 753f480842d11757e10182e43b471bd3abaa5446
Author
Parents
Loading