[PATCH] D18736: [llvm-c] Improve IR Introspection: Add LLVM{Get, Set}ModuleIdentifier
Nicole Mazzuca via llvm-commits
llvm-commits at lists.llvm.org
Sun Apr 3 16:31:47 PDT 2016
ubsan updated this revision to Diff 52517.
http://reviews.llvm.org/D18736
Files:
include/llvm-c/Core.h
lib/IR/Core.cpp
tools/llvm-c-test/echo.cpp
Index: tools/llvm-c-test/echo.cpp
===================================================================
--- tools/llvm-c-test/echo.cpp
+++ tools/llvm-c-test/echo.cpp
@@ -862,12 +862,23 @@
}
int llvm_echo(void) {
+ const char *ModuleName = "<stdin>";
+
LLVMEnablePrettyStackTrace();
LLVMModuleRef Src = llvm_load_module(false, true);
LLVMContextRef Ctx = LLVMContextCreate();
- LLVMModuleRef M = LLVMModuleCreateWithNameInContext("<stdin>", Ctx);
+ LLVMModuleRef M = LLVMModuleCreateWithNameInContext(ModuleName, Ctx);
+
+ // This whole switcharound is done because the C API has no way to
+ // set the source_filename
+ unsigned Len;
+ LLVMSetModuleIdentifier(M, "", 0);
+ LLVMGetModuleIdentifier(M, &Len);
+ if (Len != 0)
+ report_fatal_error("LLVM{Set,Get}ModuleIdentifier failed");
+ LLVMSetModuleIdentifier(M, ModuleName, strlen(ModuleName));
LLVMSetTarget(M, LLVMGetTarget(Src));
LLVMSetModuleDataLayout(M, LLVMGetModuleDataLayout(Src));
Index: lib/IR/Core.cpp
===================================================================
--- lib/IR/Core.cpp
+++ lib/IR/Core.cpp
@@ -157,6 +157,20 @@
delete unwrap(M);
}
+char *LLVMGetModuleIdentifier(LLVMModuleRef M, unsigned *Len) {
+ auto Ret = strdup(unwrap(M)->getModuleIdentifier().c_str());
+ auto ModuleLen = strlen(Ret);
+ assert(ModuleLen < UINT_MAX && "Module identifier is too long");
+ *Len = (unsigned)ModuleLen;
+ return Ret;
+}
+
+void LLVMSetModuleIdentifier(LLVMModuleRef M, const char *Ident,
+ unsigned Len) {
+ unwrap(M)->setModuleIdentifier({Ident, Len});
+}
+
+
/*--.. Data layout .........................................................--*/
const char *LLVMGetDataLayoutStr(LLVMModuleRef M) {
return unwrap(M)->getDataLayoutStr().c_str();
Index: include/llvm-c/Core.h
===================================================================
--- include/llvm-c/Core.h
+++ include/llvm-c/Core.h
@@ -481,6 +481,27 @@
void LLVMDisposeModule(LLVMModuleRef M);
/**
+ * Obtain the identifier of a module. The result must be discarded with
+ * LLVMDisposeMessage.
+ *
+ * @param M Module to obtain identifier of
+ * @param Len Out parameter which holds the length of the returned string.
+ * @return The identifier of M.
+ * @see Module::getModuleIdentifier()
+ */
+char *LLVMGetModuleIdentifier(LLVMModuleRef M, unsigned *Len);
+
+/**
+ * Set the identifier of a module to a string Ident with length Len.
+ *
+ * @param M The module to set identifier
+ * @param Ident The string to set M's identifier to
+ * @param Len Length of Ident
+ * @see Module::setModuleIdentifier()
+ */
+void LLVMSetModuleIdentifier(LLVMModuleRef M, const char *Ident, unsigned Len);
+
+/**
* Obtain the data layout for a module.
*
* @see Module::getDataLayoutStr()
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D18736.52517.patch
Type: text/x-patch
Size: 2793 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160403/674a2554/attachment.bin>
More information about the llvm-commits
mailing list