From: Rafael Espindola <rafael.espindola@gmail.com>
Date: Fri, 18 Dec 2015 03:57:26 +0000 (+0000)
Subject: Add a test for LLVMGetBitcodeModule.
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0b270d1d748ae6faeb9e410088b374847bafc7a8;p=oota-llvm.git

Add a test for LLVMGetBitcodeModule.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255985 91177308-0d34-0410-b5e6-96231b3b80d8
---

diff --git a/test/Bindings/llvm-c/functions.ll b/test/Bindings/llvm-c/functions.ll
index 4503fb17315..27c05464502 100644
--- a/test/Bindings/llvm-c/functions.ll
+++ b/test/Bindings/llvm-c/functions.ll
@@ -1,4 +1,13 @@
-; RUN: llvm-as < %s | llvm-c-test --module-list-functions | FileCheck %s
+; RUN: llvm-as %s -o %t.bc
+; RUN: llvm-c-test --module-list-functions < %t.bc| FileCheck %s
+; RUN: llvm-c-test --module-dump < %t.bc| FileCheck --check-prefix=MOD %s
+; RUN: llvm-c-test --lazy-module-dump < %t.bc| FileCheck --check-prefix=LMOD %s
+
+; MOD:      define i32 @X() {
+; MOD-NEXT:   entry:
+
+; LMOD:      ; Materializable
+; LMOD-NEXT: define i32 @X() {}
 
 define i32 @X() {
 entry:
diff --git a/tools/llvm-c-test/llvm-c-test.h b/tools/llvm-c-test/llvm-c-test.h
index 1b4976ae142..5f49d702b21 100644
--- a/tools/llvm-c-test/llvm-c-test.h
+++ b/tools/llvm-c-test/llvm-c-test.h
@@ -13,11 +13,13 @@
 #ifndef LLVM_C_TEST_H
 #define LLVM_C_TEST_H
 
+#include <stdbool.h>
+
 // helpers.c
 void tokenize_stdin(void (*cb)(char **tokens, int ntokens));
 
 // module.c
-int module_dump(void);
+int module_dump(bool Lazy);
 int module_list_functions(void);
 int module_list_globals(void);
 
diff --git a/tools/llvm-c-test/main.c b/tools/llvm-c-test/main.c
index 59cc749fb15..185ed4c0e04 100644
--- a/tools/llvm-c-test/main.c
+++ b/tools/llvm-c-test/main.c
@@ -23,6 +23,9 @@ static void print_usage(void) {
   fprintf(stderr, " Commands:\n");
   fprintf(stderr, "  * --module-dump\n");
   fprintf(stderr, "    Read bytecode from stdin - print disassembly\n\n");
+  fprintf(stderr, "  * --lazy-module-dump\n");
+  fprintf(stderr,
+          "    Lazily read bytecode from stdin - print disassembly\n\n");
   fprintf(stderr, "  * --module-list-functions\n");
   fprintf(stderr,
           "    Read bytecode from stdin - list summary of functions\n\n");
@@ -49,8 +52,10 @@ int main(int argc, char **argv) {
 
   LLVMInitializeCore(pr);
 
-  if (argc == 2 && !strcmp(argv[1], "--module-dump")) {
-    return module_dump();
+  if (argc == 2 && !strcmp(argv[1], "--lazy-module-dump")) {
+    return module_dump(true);
+  } else if (argc == 2 && !strcmp(argv[1], "--module-dump")) {
+    return module_dump(false);
   } else if (argc == 2 && !strcmp(argv[1], "--module-list-functions")) {
     return module_list_functions();
   } else if (argc == 2 && !strcmp(argv[1], "--module-list-globals")) {
diff --git a/tools/llvm-c-test/module.c b/tools/llvm-c-test/module.c
index 2661fc81d88..0f27337eb7c 100644
--- a/tools/llvm-c-test/module.c
+++ b/tools/llvm-c-test/module.c
@@ -19,7 +19,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-static LLVMModuleRef load_module(void) {
+static LLVMModuleRef load_module(bool Lazy) {
   LLVMMemoryBufferRef MB;
   LLVMModuleRef M;
   char *msg = NULL;
@@ -29,18 +29,26 @@ static LLVMModuleRef load_module(void) {
     exit(1);
   }
 
-  if (LLVMParseBitcode(MB, &M, &msg)) {
+  LLVMBool Ret;
+  if (Lazy)
+    Ret = LLVMGetBitcodeModule(MB, &M, &msg);
+  else
+    Ret = LLVMParseBitcode(MB, &M, &msg);
+
+  if (Ret) {
     fprintf(stderr, "Error parsing bitcode: %s\n", msg);
     LLVMDisposeMemoryBuffer(MB);
     exit(1);
   }
 
-  LLVMDisposeMemoryBuffer(MB);
+  if (!Lazy)
+    LLVMDisposeMemoryBuffer(MB);
+
   return M;
 }
 
-int module_dump(void) {
-  LLVMModuleRef M = load_module();
+int module_dump(bool Lazy) {
+  LLVMModuleRef M = load_module(Lazy);
 
   char *irstr = LLVMPrintModuleToString(M);
   puts(irstr);
@@ -52,7 +60,7 @@ int module_dump(void) {
 }
 
 int module_list_functions(void) {
-  LLVMModuleRef M = load_module();
+  LLVMModuleRef M = load_module(false);
   LLVMValueRef f;
 
   f = LLVMGetFirstFunction(M);
@@ -93,7 +101,7 @@ int module_list_functions(void) {
 }
 
 int module_list_globals(void) {
-  LLVMModuleRef M = load_module();
+  LLVMModuleRef M = load_module(false);
   LLVMValueRef g;
 
   g = LLVMGetFirstGlobal(M);