Add integer bit-shift operations to the standard dialect.
authorManuel Freiberger <manuel.freiberger@gmail.com>
Sun, 22 Dec 2019 18:01:35 +0000 (10:01 -0800)
committerA. Unique TensorFlower <gardener@tensorflow.org>
Sun, 22 Dec 2019 18:02:13 +0000 (10:02 -0800)
commit22954a0e408afde1d8686dffb3a3dcab107a2cd3
treed206709d143fb15efd807a2c601035668fcae7b2
parentdcc14f08656a82aadd326aeca54b95b5b866fc86
Add integer bit-shift operations to the standard dialect.

Rename the 'shlis' operation in the standard dialect to 'shift_left'. Add tests
for this operation (these have been missing so far) and add a lowering to the
'shl' operation in the LLVM dialect.

Add also 'shift_right_signed' (lowered to LLVM's 'ashr') and 'shift_right_unsigned'
(lowered to 'lshr').

The original plan was to name these operations 'shift.left', 'shift.right.signed'
and 'shift.right.unsigned'. This works if the operations are prefixed with 'std.'
in MLIR assembly. Unfortunately during import the short form is ambigous with
operations from a hypothetical 'shift' dialect. The best solution seems to omit
dots in standard operations for now.

Closes tensorflow/mlir#226

PiperOrigin-RevId: 286803388
23 files changed:
mlir/bindings/python/test/test_py2and3.py
mlir/include/mlir/Dialect/StandardOps/Ops.td
mlir/lib/Conversion/AffineToStandard/AffineToStandard.cpp
mlir/lib/Conversion/LoopsToGPU/LoopsToGPU.cpp
mlir/lib/Conversion/StandardToLLVM/ConvertStandardToLLVM.cpp
mlir/lib/Conversion/StandardToSPIRV/ConvertStandardToSPIRV.cpp
mlir/lib/Dialect/StandardOps/Ops.cpp
mlir/lib/EDSC/Builders.cpp
mlir/lib/Transforms/Utils/LoopUtils.cpp
mlir/test/Conversion/LoopsToGPU/imperfect_3D.mlir
mlir/test/Conversion/LoopsToGPU/imperfect_4D.mlir
mlir/test/Conversion/LoopsToGPU/linalg_to_gpu.mlir
mlir/test/Conversion/LoopsToGPU/step_positive.mlir
mlir/test/Conversion/StandardToLLVM/convert-to-llvmir.mlir
mlir/test/Conversion/StandardToSPIRV/std-to-spirv.mlir
mlir/test/EDSC/builder-api-test.cpp
mlir/test/IR/core-ops.mlir
mlir/test/Target/llvmir.mlir
mlir/test/Transforms/canonicalize.mlir
mlir/test/Transforms/constant-fold.mlir
mlir/test/Transforms/loop-coalescing.mlir
mlir/test/Transforms/lower-affine.mlir
mlir/test/Transforms/parametric-tiling.mlir