This is an archive of the discontinued LLVM Phabricator instance.

[mlir][spirv] Improve integer cast during type conversion
ClosedPublic

Authored by antiagainst on Jul 12 2023, 2:09 PM.

Details

Summary

In SPIR-V, the capabilities for storage and compute are separate.
We have good handling of the storage side in general via MemRef
type conversion and various memref dialect ops.

Once the value was loaded properly, if the compute capability is
supported directly, we don't need to emulate like the storage side
with int32. However, we do need to make sure casting ops are
properly inserted to chain the flow to go back to the original
bitwidth.

Right now that is done in the each individual pattern directly,
which put lots of pressure that shouldn't be on the patterns and
causes duplication and trickiness w.r.t. capability check and such.

Instead, we should handle such casting within the SPIR-V conversion
framework using addSourceMaterialization, where we can check with
the target environment to make sure the corresponding compute
capability is allowed and then we can materialize and SPIR-V casting
op.

Along the way, we can drop all the duplicated cast materialization
registration in various places.

Diff Detail

Event Timeline

antiagainst created this revision.Jul 12 2023, 2:09 PM
Herald added a project: Restricted Project. · View Herald Transcript
antiagainst requested review of this revision.Jul 12 2023, 2:09 PM
kuhar accepted this revision.Jul 12 2023, 2:25 PM

LGTM

This revision is now accepted and ready to land.Jul 12 2023, 2:25 PM
This revision was landed with ongoing or failed builds.Jul 12 2023, 2:38 PM
This revision was automatically updated to reflect the committed changes.