TableGen most of the LLVM IR Dialect to LLVM IR conversions
authorAlex Zinenko <zinenko@google.com>
Thu, 7 Mar 2019 09:23:43 +0000 (01:23 -0800)
committerjpienaar <jpienaar@google.com>
Sat, 30 Mar 2019 00:04:50 +0000 (17:04 -0700)
commitdbaab04a80bfe1a905ed53419e571d170736e6f4
tree42a1ce85ed4aa12910452c730436b5a6c1eb3ac1
parent056fc2fd0936f5fab1b3f3080a524aad8c0cb3c5
TableGen most of the LLVM IR Dialect to LLVM IR conversions

The LLVM IR Dialect strives to be close to the original LLVM IR instructions.
The conversion from the LLVM IR Dialect to LLVM IR proper is mostly mechanical
and can be automated.  Implement TableGen support for generating conversions
from a concise pattern form in the TableGen definition of the LLVM IR Dialect
operations.  It is used for all operations except calls and branches.  These
operations need access to function and block remapping tables and would require
significantly more code to generate the conversions from TableGen definitions
than the current manually written conversions.

This implementation is accompanied by various necessary changes to the TableGen
operation definition infrastructure.  In particular, operation definitions now
contain named accessors to results as well as named accessors to the variadic
operand (returning a vector of operands).  The base operation support TableGen
file now contains a FunctionAttr definition.  The TableGen now allows to query
the names of the operation results.

PiperOrigin-RevId: 237203077
mlir/include/mlir/IR/Attributes.h
mlir/include/mlir/IR/OpBase.td
mlir/include/mlir/LLVMIR/LLVMOps.td
mlir/lib/Target/LLVMIR/ConvertToLLVMIR.cpp
mlir/tools/mlir-tblgen/LLVMIRConversionGen.cpp [new file with mode: 0644]
mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp