[Mlir-commits] [mlir] [mlir] Add llvm.linker.options operation to the LLVM IR Dialect (PR #71720)
Oleksandr Alex Zinenko
llvmlistbot at llvm.org
Thu Nov 9 00:40:24 PST 2023
================
@@ -1825,4 +1825,42 @@ def LLVM_CallIntrinsicOp
let hasVerifier = 1;
}
+def LLVM_LinkerOptionsOp
+ : LLVM_Op<"linker.options"> {
+ let summary = "Options to pass to the linker when the object file is linked";
+ let description = [{
+ Pass the given options to the linker when the resulting object file is linked.
+ This is used extensively on Windows to determine the C runtime that the object
+ files should link against.
+
+ Examples:
+ ```mlir
+ // Link against the MSVC static threaded CRT.
+ llvm.linker.options ["/DEFAULTLIB:", "libcmt"]
+
+ // Link against aarch64 compiler-rt builtins
+ llvm.linker.options ["-l", "clang_rt.builtins-aarch64"]
+ ```
+ }];
+ let arguments = (ins StrArrayAttr:$options);
+ let assemblyFormat = [{
+ $options attr-dict
+ }];
+
+ let llvmBuilder = [{
+ llvm::Module *llvmModule = moduleTranslation.getLLVMModule();
+ llvm::LLVMContext &context = llvmModule->getContext();
+ llvm::NamedMDNode *linkerMDNode = llvmModule->getOrInsertNamedMetadata("llvm.linker.options");
+ SmallVector<llvm::Metadata*> MDNodes;
+ for (auto s : $options) {
+ auto str = cast<StringAttr>(s);
+ auto *MDNode = llvm::MDString::get(context, str.getValue());
+ MDNodes.push_back(MDNode);
+ }
+
+ auto *listMDNode = llvm::MDTuple::get(context, MDNodes);
+ linkerMDNode->addOperand(listMDNode);
----------------
ftynse wrote:
Nit: can we put this into a static function that we just call here? C++ embedded as strings into Tablegen is quite difficult to maintain.
https://github.com/llvm/llvm-project/pull/71720
More information about the Mlir-commits
mailing list