[Mlir-commits] [mlir] [mlir][bufferize] Make buffer-results-to-out-params support only functions that are neither public nor extern (PR #162441)

lonely eagle llvmlistbot at llvm.org
Tue Oct 14 18:43:22 PDT 2025


linuxlonelyeagle wrote:

> The documentation of this pass implies that it is used for enforcing calling conventions:
> 
> > Some calling conventions prefer to pass output memrefs as "out params". The
> > conversion to this calling convention must be done as an atomic
> > transformation of the entire program (hence this is a module pass).
> 
> Our internal target uses this pass to enforce a valid calling convention for MLIR, and I believe that many users of EmitC will also be using this as iirc EmitC doesn't support functions that return memrefs. To be clear, **this change completely breaks our downstream target.**
> 
> See https://godbolt.org/z/n8bvv4oTa for an example of this change breaking EmitC export (Compiler Explorer doesn't have this change merged, so I removed this pass to be equivalent).
> 
> Given that this pass explicitly modifies the calling convention, l don't believe that the reasoning for this change is valid. The presence of a calling convention implies that all functions must abide by its rules, and thus if a platform/target requires out-params, it is perfectly valid to change the function signatures of public or extern functions so that they comply with calling convention.
> 
> Considering that this breaks EmitC and at least one downstream target, I believe that this should be reverted.

cc: @matthias-springer @joker-eph @ftynse What are you thinking?

https://github.com/llvm/llvm-project/pull/162441


More information about the Mlir-commits mailing list