diff options
author | Robert Widmann <devteam.codafi@gmail.com> | 2018-09-28 15:35:18 +0000 |
---|---|---|
committer | Robert Widmann <devteam.codafi@gmail.com> | 2018-09-28 15:35:18 +0000 |
commit | 9cba4eced8496409c6bf61ffefebeeed08e91282 (patch) | |
tree | 455c82b90bdd0ec572098b86e7ef8eaa6ddb16ca /llvm/tools/llvm-c-test/echo.cpp | |
parent | 242f90fe82ef60e7dc4629961f7c732ccf5e69f8 (diff) | |
download | bcm5719-llvm-9cba4eced8496409c6bf61ffefebeeed08e91282.tar.gz bcm5719-llvm-9cba4eced8496409c6bf61ffefebeeed08e91282.zip |
[LLVM-C] Add more debug information accessors to GlobalObject and Instruction
Summary: Adds missing debug information accessors to GlobalObject. This puts the finishing touches on cloning debug info in the echo tests.
Reviewers: whitequark, deadalnix
Reviewed By: whitequark
Subscribers: aprantl, JDevlieghere, llvm-commits, harlanhaskins
Differential Revision: https://reviews.llvm.org/D51522
llvm-svn: 343330
Diffstat (limited to 'llvm/tools/llvm-c-test/echo.cpp')
-rw-r--r-- | llvm/tools/llvm-c-test/echo.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/llvm/tools/llvm-c-test/echo.cpp b/llvm/tools/llvm-c-test/echo.cpp index 60638ebbd00..d4c61e2d13c 100644 --- a/llvm/tools/llvm-c-test/echo.cpp +++ b/llvm/tools/llvm-c-test/echo.cpp @@ -16,6 +16,7 @@ //===----------------------------------------------------------------------===// #include "llvm-c-test.h" +#include "llvm-c/DebugInfo.h" #include "llvm-c/Target.h" #include "llvm/ADT/DenseMap.h" #include "llvm/Support/ErrorHandling.h" @@ -728,6 +729,19 @@ struct FunCloner { exit(-1); } + auto Ctx = LLVMGetModuleContext(M); + size_t NumMetadataEntries; + auto *AllMetadata = + LLVMInstructionGetAllMetadataOtherThanDebugLoc(Src, + &NumMetadataEntries); + for (unsigned i = 0; i < NumMetadataEntries; ++i) { + unsigned Kind = LLVMValueMetadataEntriesGetKind(AllMetadata, i); + LLVMMetadataRef MD = LLVMValueMetadataEntriesGetMetadata(AllMetadata, i); + LLVMSetMetadata(Dst, Kind, LLVMMetadataAsValue(Ctx, MD)); + } + LLVMDisposeValueMetadataEntries(AllMetadata); + LLVMSetInstDebugLocation(Builder, Dst); + check_value_kind(Dst, LLVMInstructionValueKind); return VMap[Src] = Dst; } @@ -999,6 +1013,15 @@ static void clone_symbols(LLVMModuleRef Src, LLVMModuleRef M) { if (auto I = LLVMGetInitializer(Cur)) LLVMSetInitializer(G, clone_constant(I, M)); + size_t NumMetadataEntries; + auto *AllMetadata = LLVMGlobalCopyAllMetadata(Cur, &NumMetadataEntries); + for (unsigned i = 0; i < NumMetadataEntries; ++i) { + unsigned Kind = LLVMValueMetadataEntriesGetKind(AllMetadata, i); + LLVMMetadataRef MD = LLVMValueMetadataEntriesGetMetadata(AllMetadata, i); + LLVMGlobalSetMetadata(G, Kind, MD); + } + LLVMDisposeValueMetadataEntries(AllMetadata); + LLVMSetGlobalConstant(G, LLVMIsGlobalConstant(Cur)); LLVMSetThreadLocal(G, LLVMIsThreadLocal(Cur)); LLVMSetExternallyInitialized(G, LLVMIsExternallyInitialized(Cur)); @@ -1050,6 +1073,15 @@ FunClone: LLVMSetPersonalityFn(Fun, P); } + size_t NumMetadataEntries; + auto *AllMetadata = LLVMGlobalCopyAllMetadata(Cur, &NumMetadataEntries); + for (unsigned i = 0; i < NumMetadataEntries; ++i) { + unsigned Kind = LLVMValueMetadataEntriesGetKind(AllMetadata, i); + LLVMMetadataRef MD = LLVMValueMetadataEntriesGetMetadata(AllMetadata, i); + LLVMGlobalSetMetadata(Fun, Kind, MD); + } + LLVMDisposeValueMetadataEntries(AllMetadata); + FunCloner FC(Cur, Fun); FC.CloneBBs(Cur); |