Move the result types to trailing type op storage instead. This
results in each operation having its own types recorded vs deduped tuple type,
but comes at benefit that every mutation doesn't incurs uniquing. The latter
ran into cases whereupdating result type of operation led to very large memory
usage.
Details
Details
Diff Detail
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
mlir/lib/IR/Operation.cpp | ||
---|---|---|
555–556 | I don't think this is legal: you can only access the element of a union through the member it has been set IIRC. |
Comment Actions
I know River had a better/alternate approach in mind here too
mlir/lib/IR/Operation.cpp | ||
---|---|---|
555–556 | Good, point, had kept it to close to the original logic and didn't think about that. Updated here and below. |
Comment Actions
It doesn't look like MSVC likes this use of type. Break in the buildbot here: https://lab.llvm.org/buildbot/#/builders/13/builds/5148. Thanks!
FAILED: tools/mlir/lib/IR/CMakeFiles/obj.MLIRIR.dir/Operation.cpp.obj ... C:\buildbot\mlir-x64-windows-ninja\llvm-project\mlir\lib\IR\Operation.cpp(174): error C2280: 'mlir::Operation::<unnamed-type-resultTypeOrSize>::<unnamed-type-resultTypeOrSize>(void)': attempting to reference a deleted function C:\buildbot\mlir-x64-windows-ninja\llvm-project\mlir\include\mlir/IR/Operation.h(709): note: compiler has generated 'mlir::Operation::<unnamed-type-resultTypeOrSize>::<unnamed-type-resultTypeOrSize>' here C:\buildbot\mlir-x64-windows-ninja\llvm-project\mlir\include\mlir/IR/Operation.h(709): note: 'mlir::Operation::<unnamed-type-resultTypeOrSize>::<unnamed-type-resultTypeOrSize>(void)': function was implicitly deleted because 'mlir::Operation::<unnamed-type-resultTypeOrSize>' has a variant data member 'mlir::Operation::<unnamed-type-resultTypeOrSize>::type' with a non-trivial default constructor C:\buildbot\mlir-x64-windows-ninja\llvm-project\mlir\include\mlir/IR/Operation.h(706): note: see declaration of 'mlir::Operation::<unnamed-type-resultTypeOrSize>::type'
I don't think this is legal: you can only access the element of a union through the member it has been set IIRC.