summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-c-test/echo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-c-test/echo.cpp')
-rw-r--r--llvm/tools/llvm-c-test/echo.cpp32
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);
OpenPOWER on IntegriCloud