Types with data-location storage should convert to slot + offset pair. Similarly, types with data-location calldata should convert to offset + size pair. This needs the 1:N mapping introduced by llvm/llvm-project#116470 and related commits.
I wrote a minimal proof-of-concept here: https://github.com/abinavpp/mlir-play/tree/one-to-n