[mlir][LLVMIR] Add support for va_start/copy/end intrinsics
authorMin-Yih Hsu <minyihh@uci.edu>
Mon, 23 May 2022 20:52:38 +0000 (13:52 -0700)
committerMin-Yih Hsu <minyihh@uci.edu>
Mon, 27 Jun 2022 16:46:40 +0000 (09:46 -0700)
commit856056d1b0b34be3f72848dd28b32a800f551ad5
tree27b9eba1b1f2f11af6c4ae7f50a7bb4b2fb309bd
parent3a1a404ae2d323ebb20f2e270abb0cabd337cf35
[mlir][LLVMIR] Add support for va_start/copy/end intrinsics

This patch adds three new LLVM intrinsic operations: llvm.intr.vastart/copy/end.
And its translation from LLVM IR.

This effectively removes a restriction, imposed by 0126dcf1f0a1, where
non-external functions in LLVM dialect cannot be variadic. At that time
it was not clear how LLVM intrinsics are going to be modeled, which
indirectly affects va_start/copy/end, the core intrinsics used in
variadic functions. But since we have LLVM intrinsics as normal
MLIR operations, it's not a problem anymore.

Differential Revision: https://reviews.llvm.org/D127540
12 files changed:
mlir/docs/TargetLLVMIR.md
mlir/include/mlir/Dialect/LLVMIR/LLVMIntrinsicOps.td
mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp
mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
mlir/test/Conversion/FuncToLLVM/convert-funcs.mlir
mlir/test/Dialect/LLVMIR/func.mlir
mlir/test/Dialect/LLVMIR/roundtrip.mlir
mlir/test/Target/LLVMIR/Import/basic.ll
mlir/test/Target/LLVMIR/Import/intrinsic.ll
mlir/test/Target/LLVMIR/llvmir.mlir
mlir/test/mlir-cpu-runner/lit.local.cfg
mlir/test/mlir-cpu-runner/x86-varargs.mlir [new file with mode: 0644]