Dialect conversion: decouple function signature conversion from type conversion
Function types are built-in in MLIR and affect the validity of the IR itself. However, advanced target dialects such as the LLVM IR dialect may include custom function types. Until now, dialect conversion was expecting function types not to be converted to the custom type: although the signatures was allowed to change, the outer type must have been an mlir::FunctionType. This effectively prevented dialect conversion from creating instructions that operate on values of the custom function type. Dissociate function signature conversion from general type conversion. Function signature conversion must still produce an mlir::FunctionType and is used in places where built-in types are required to make IR valid. General type conversion is used for SSA values, including function and block arguments and function results. Exercise this behavior in the LLVM IR dialect conversion by converting function types to LLVM IR function pointer types. The pointer to a function is chosen to provide consistent lowering of higher-order functions: while it is possible to have a value of function type, it is not possible to create a function type accepting a returning another function type. PiperOrigin-RevId: 234124494
Loading
Please sign in to comment