diff --git a/mlir/lib/Target/LLVMIR/DebugTranslation.cpp b/mlir/lib/Target/LLVMIR/DebugTranslation.cpp --- a/mlir/lib/Target/LLVMIR/DebugTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/DebugTranslation.cpp @@ -51,6 +51,13 @@ // is set explicitly. Windows/MSVC should use CodeView instead. llvmModule.addModuleFlag(llvm::Module::Warning, "CodeView", 1); } + + if (targetTriple.isRISCV()) { + llvmModule.addModuleFlag( + llvm::Module::Warning, "target-abi", + llvm::MDString::get(llvmCtx, + targetTriple.isRISCV32() ? "ilp32d" : "lp64d")); + } } } diff --git a/mlir/test/Dialect/LLVMIR/riscv32-abi.mlir b/mlir/test/Dialect/LLVMIR/riscv32-abi.mlir new file mode 100644 --- /dev/null +++ b/mlir/test/Dialect/LLVMIR/riscv32-abi.mlir @@ -0,0 +1,12 @@ +// RUN: mlir-translate -mlir-to-llvmir %s | FileCheck %s + +// CHECK: target triple = "riscv32" +// +// CHECK: llvm.module.flags +// CHECK: Debug Info Version +// CHECK: target-abi +module attributes {llvm.target_triple = "riscv32"} { + llvm.func @func_32() -> () { + llvm.return + } +} diff --git a/mlir/test/Dialect/LLVMIR/riscv64-abi.mlir b/mlir/test/Dialect/LLVMIR/riscv64-abi.mlir new file mode 100644 --- /dev/null +++ b/mlir/test/Dialect/LLVMIR/riscv64-abi.mlir @@ -0,0 +1,12 @@ +// RUN: mlir-translate -mlir-to-llvmir %s | FileCheck %s + +// CHECK: target triple = "riscv64" +// +// CHECK: llvm.module.flags +// CHECK: Debug Info Version +// CHECK: target-abi +module attributes {llvm.target_triple = "riscv64"} { + llvm.func @func_64() -> () { + llvm.return + } +}