[mlir][StandardToSPIRV] Emulate bitwidths not supported for store op.
authorHanhan Wang <hanchung@google.com>
Mon, 4 May 2020 22:13:46 +0000 (15:13 -0700)
committerHanhan Wang <hanchung@google.com>
Mon, 4 May 2020 22:18:44 +0000 (15:18 -0700)
commit5d10613b6edcfb1e50cf08c7ec97ed872d0989be
tree51f0e810959690ad60551e8c571962933f909ed9
parent3a7be241f252215e8a2cf26e8a301fd2a8269b58
[mlir][StandardToSPIRV] Emulate bitwidths not supported for store op.

Summary:
As D78974, this patch implements the emulation for store op. The emulation is
done with atomic operations. E.g., if the storing value is i8, rewrite the
StoreOp to:

 1) load a 32-bit integer
 2) clear 8 bits in the loading value
 3) store 32-bit value back
 4) load a 32-bit integer
 5) modify 8 bits in the loading value
 6) store 32-bit value back

The step 1 to step 3 are done by AtomicAnd as one atomic step, and the step 4
to step 6 are done by AtomicOr as another atomic step.

Differential Revision: https://reviews.llvm.org/D79272
mlir/lib/Conversion/StandardToSPIRV/ConvertStandardToSPIRV.cpp
mlir/test/Conversion/StandardToSPIRV/std-ops-to-spirv.mlir