From 0b270d1d748ae6faeb9e410088b374847bafc7a8 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Fri, 18 Dec 2015 03:57:26 +0000 Subject: [PATCH] Add a test for LLVMGetBitcodeModule. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255985 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Bindings/llvm-c/functions.ll | 11 ++++++++++- tools/llvm-c-test/llvm-c-test.h | 4 +++- tools/llvm-c-test/main.c | 9 +++++++-- tools/llvm-c-test/module.c | 22 +++++++++++++++------- 4 files changed, 35 insertions(+), 11 deletions(-) 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 + // 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 #include -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); -- 2.34.1