summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/tools/llvm-c-test
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/llvm/tools/llvm-c-test')
-rw-r--r--gnu/llvm/tools/llvm-c-test/CMakeLists.txt56
-rw-r--r--gnu/llvm/tools/llvm-c-test/attributes.c80
-rw-r--r--gnu/llvm/tools/llvm-c-test/calc.c147
-rw-r--r--gnu/llvm/tools/llvm-c-test/debuginfo.c183
-rw-r--r--gnu/llvm/tools/llvm-c-test/diagnostic.c89
-rw-r--r--gnu/llvm/tools/llvm-c-test/disassemble.c94
-rw-r--r--gnu/llvm/tools/llvm-c-test/echo.cpp1227
-rw-r--r--gnu/llvm/tools/llvm-c-test/helpers.c39
-rw-r--r--gnu/llvm/tools/llvm-c-test/include-all.c33
-rw-r--r--gnu/llvm/tools/llvm-c-test/llvm-c-test.h66
-rw-r--r--gnu/llvm/tools/llvm-c-test/main.c107
-rw-r--r--gnu/llvm/tools/llvm-c-test/metadata.c42
-rw-r--r--gnu/llvm/tools/llvm-c-test/module.c138
-rw-r--r--gnu/llvm/tools/llvm-c-test/object.c87
-rw-r--r--gnu/llvm/tools/llvm-c-test/targets.c30
15 files changed, 0 insertions, 2418 deletions
diff --git a/gnu/llvm/tools/llvm-c-test/CMakeLists.txt b/gnu/llvm/tools/llvm-c-test/CMakeLists.txt
deleted file mode 100644
index bce0f4a5a42..00000000000
--- a/gnu/llvm/tools/llvm-c-test/CMakeLists.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-set(LLVM_LINK_COMPONENTS
- ${LLVM_TARGETS_TO_BUILD}
- BitReader
- Core
- MCDisassembler
- Object
- Support
- Target
- )
-
-# We should only have llvm-c-test use libLLVM if libLLVM is built with the
-# default list of components. Using libLLVM with custom components can result in
-# build failures.
-
-set (USE_LLVM_DYLIB FALSE)
-
-if (TARGET LLVM)
- set (USE_LLVM_DYLIB TRUE)
- if (DEFINED LLVM_DYLIB_COMPONENTS)
- foreach(c in ${LLVM_LINK_COMPONENTS})
- list(FIND LLVM_DYLIB_COMPONENTS ${c} C_IDX)
- if (C_IDX EQUAL -1)
- set(USE_LLVM_DYLIB FALSE)
- break()
- endif()
- endforeach()
- endif()
-endif()
-
-if(USE_LLVM_DYLIB)
- set(LLVM_LINK_COMPONENTS)
-endif()
-
-if (LLVM_COMPILER_IS_GCC_COMPATIBLE)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -Wstrict-prototypes")
-endif ()
-
-add_llvm_tool(llvm-c-test
- attributes.c
- calc.c
- debuginfo.c
- diagnostic.c
- disassemble.c
- echo.cpp
- helpers.c
- include-all.c
- main.c
- module.c
- metadata.c
- object.c
- targets.c
- )
-
-if(USE_LLVM_DYLIB)
- target_link_libraries(llvm-c-test LLVM)
-endif()
diff --git a/gnu/llvm/tools/llvm-c-test/attributes.c b/gnu/llvm/tools/llvm-c-test/attributes.c
deleted file mode 100644
index c7bc0d3c87b..00000000000
--- a/gnu/llvm/tools/llvm-c-test/attributes.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/*===-- attributes.c - tool for testing libLLVM and llvm-c API ------------===*\
-|* *|
-|* The LLVM Compiler Infrastructure *|
-|* *|
-|* This file is distributed under the University of Illinois Open Source *|
-|* License. See LICENSE.TXT for details. *|
-|* *|
-|*===----------------------------------------------------------------------===*|
-|* *|
-|* This file implements the --test-attributes and --test-callsite-attributes *|
-|* commands in llvm-c-test. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#include "llvm-c-test.h"
-
-#include <assert.h>
-#include <stdlib.h>
-
-int llvm_test_function_attributes(void) {
- LLVMEnablePrettyStackTrace();
-
- LLVMModuleRef M = llvm_load_module(false, true);
-
- LLVMValueRef F = LLVMGetFirstFunction(M);
- while (F) {
- // Read attributes
- int Idx, ParamCount;
- for (Idx = LLVMAttributeFunctionIndex, ParamCount = LLVMCountParams(F);
- Idx <= ParamCount; ++Idx) {
- int AttrCount = LLVMGetAttributeCountAtIndex(F, Idx);
- LLVMAttributeRef *Attrs =
- (LLVMAttributeRef *)malloc(AttrCount * sizeof(LLVMAttributeRef));
- assert(Attrs);
- LLVMGetAttributesAtIndex(F, Idx, Attrs);
- free(Attrs);
- }
- F = LLVMGetNextFunction(F);
- }
-
- LLVMDisposeModule(M);
-
- return 0;
-}
-
-int llvm_test_callsite_attributes(void) {
- LLVMEnablePrettyStackTrace();
-
- LLVMModuleRef M = llvm_load_module(false, true);
-
- LLVMValueRef F = LLVMGetFirstFunction(M);
- while (F) {
- LLVMBasicBlockRef BB;
- for (BB = LLVMGetFirstBasicBlock(F); BB; BB = LLVMGetNextBasicBlock(BB)) {
- LLVMValueRef I;
- for (I = LLVMGetFirstInstruction(BB); I; I = LLVMGetNextInstruction(I)) {
- if (LLVMIsACallInst(I)) {
- // Read attributes
- int Idx, ParamCount;
- for (Idx = LLVMAttributeFunctionIndex,
- ParamCount = LLVMCountParams(F);
- Idx <= ParamCount; ++Idx) {
- int AttrCount = LLVMGetCallSiteAttributeCount(I, Idx);
- LLVMAttributeRef *Attrs = (LLVMAttributeRef *)malloc(
- AttrCount * sizeof(LLVMAttributeRef));
- assert(Attrs);
- LLVMGetCallSiteAttributes(I, Idx, Attrs);
- free(Attrs);
- }
- }
- }
- }
-
- F = LLVMGetNextFunction(F);
- }
-
- LLVMDisposeModule(M);
-
- return 0;
-}
diff --git a/gnu/llvm/tools/llvm-c-test/calc.c b/gnu/llvm/tools/llvm-c-test/calc.c
deleted file mode 100644
index 4c273cbf70a..00000000000
--- a/gnu/llvm/tools/llvm-c-test/calc.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/*===-- calc.c - tool for testing libLLVM and llvm-c API ------------------===*\
-|* *|
-|* The LLVM Compiler Infrastructure *|
-|* *|
-|* This file is distributed under the University of Illinois Open Source *|
-|* License. See LICENSE.TXT for details. *|
-|* *|
-|*===----------------------------------------------------------------------===*|
-|* *|
-|* This file implements the --calc command in llvm-c-test. --calc reads lines *|
-|* from stdin, parses them as a name and an expression in reverse polish *|
-|* notation and prints a module with a function with the expression. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#include "llvm-c-test.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-typedef LLVMValueRef (*binop_func_t)(LLVMBuilderRef, LLVMValueRef LHS,
- LLVMValueRef RHS, const char *Name);
-
-static LLVMOpcode op_to_opcode(char op) {
- switch (op) {
- case '+': return LLVMAdd;
- case '-': return LLVMSub;
- case '*': return LLVMMul;
- case '/': return LLVMSDiv;
- case '&': return LLVMAnd;
- case '|': return LLVMOr;
- case '^': return LLVMXor;
- }
- assert(0 && "unknown operation");
- return 0;
-}
-
-#define MAX_DEPTH 32
-
-static LLVMValueRef build_from_tokens(char **tokens, int ntokens,
- LLVMBuilderRef builder,
- LLVMValueRef param) {
- LLVMValueRef stack[MAX_DEPTH];
- int depth = 0;
- int i;
-
- for (i = 0; i < ntokens; i++) {
- char tok = tokens[i][0];
- switch (tok) {
- case '+':
- case '-':
- case '*':
- case '/':
- case '&':
- case '|':
- case '^':
- if (depth < 2) {
- printf("stack underflow\n");
- return NULL;
- }
-
- stack[depth - 2] = LLVMBuildBinOp(builder, op_to_opcode(tok),
- stack[depth - 1], stack[depth - 2], "");
- depth--;
-
- break;
-
- case '@': {
- LLVMValueRef off;
-
- if (depth < 1) {
- printf("stack underflow\n");
- return NULL;
- }
-
- off = LLVMBuildGEP(builder, param, &stack[depth - 1], 1, "");
- stack[depth - 1] = LLVMBuildLoad(builder, off, "");
-
- break;
- }
-
- default: {
- char *end;
- long val = strtol(tokens[i], &end, 0);
- if (end[0] != '\0') {
- printf("error parsing number\n");
- return NULL;
- }
-
- if (depth >= MAX_DEPTH) {
- printf("stack overflow\n");
- return NULL;
- }
-
- stack[depth++] = LLVMConstInt(LLVMInt64Type(), val, 1);
- break;
- }
- }
- }
-
- if (depth < 1) {
- printf("stack underflow at return\n");
- return NULL;
- }
-
- LLVMBuildRet(builder, stack[depth - 1]);
-
- return stack[depth - 1];
-}
-
-static void handle_line(char **tokens, int ntokens) {
- char *name = tokens[0];
- LLVMValueRef param;
- LLVMValueRef res;
-
- LLVMModuleRef M = LLVMModuleCreateWithName(name);
-
- LLVMTypeRef I64ty = LLVMInt64Type();
- LLVMTypeRef I64Ptrty = LLVMPointerType(I64ty, 0);
- LLVMTypeRef Fty = LLVMFunctionType(I64ty, &I64Ptrty, 1, 0);
-
- LLVMValueRef F = LLVMAddFunction(M, name, Fty);
- LLVMBuilderRef builder = LLVMCreateBuilder();
- LLVMPositionBuilderAtEnd(builder, LLVMAppendBasicBlock(F, "entry"));
-
- LLVMGetParams(F, &param);
- LLVMSetValueName(param, "in");
-
- res = build_from_tokens(tokens + 1, ntokens - 1, builder, param);
- if (res) {
- char *irstr = LLVMPrintModuleToString(M);
- puts(irstr);
- LLVMDisposeMessage(irstr);
- }
-
- LLVMDisposeBuilder(builder);
-
- LLVMDisposeModule(M);
-}
-
-int llvm_calc(void) {
-
- llvm_tokenize_stdin(handle_line);
-
- return 0;
-}
diff --git a/gnu/llvm/tools/llvm-c-test/debuginfo.c b/gnu/llvm/tools/llvm-c-test/debuginfo.c
deleted file mode 100644
index fbd41e97d7a..00000000000
--- a/gnu/llvm/tools/llvm-c-test/debuginfo.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/*===-- debuginfo.c - tool for testing libLLVM and llvm-c API -------------===*\
-|* *|
-|* The LLVM Compiler Infrastructure *|
-|* *|
-|* This file is distributed under the University of Illinois Open Source *|
-|* License. See LICENSE.TXT for details. *|
-|* *|
-|*===----------------------------------------------------------------------===*|
-|* *|
-|* Tests for the LLVM C DebugInfo API *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#include "llvm-c-test.h"
-#include "llvm-c/Core.h"
-#include "llvm-c/DebugInfo.h"
-#include <stdio.h>
-#include <string.h>
-
-static LLVMMetadataRef
-declare_objc_class(LLVMDIBuilderRef DIB, LLVMMetadataRef File) {
- LLVMMetadataRef Decl = LLVMDIBuilderCreateStructType(DIB, File, "TestClass", 9, File, 42, 64, 0, LLVMDIFlagObjcClassComplete, NULL, NULL, 0, 0, NULL, NULL, 0);
- LLVMMetadataRef SuperDecl = LLVMDIBuilderCreateStructType(DIB, File, "TestSuperClass", 14, File, 42, 64, 0, LLVMDIFlagObjcClassComplete, NULL, NULL, 0, 0, NULL, NULL, 0);
- LLVMDIBuilderCreateInheritance(DIB, Decl, SuperDecl, 0, 0, 0);
- LLVMMetadataRef TestProperty =
- LLVMDIBuilderCreateObjCProperty(DIB, "test", 4, File, 42, "getTest", 7, "setTest", 7, 0x20 /*copy*/ | 0x40 /*nonatomic*/, SuperDecl);
- LLVMDIBuilderCreateObjCIVar(DIB, "_test", 5, File, 42, 64, 0, 64, LLVMDIFlagPublic, SuperDecl, TestProperty);
- return Decl;
-}
-
-int llvm_test_dibuilder(void) {
- const char *Filename = "debuginfo.c";
- LLVMModuleRef M = LLVMModuleCreateWithName(Filename);
- LLVMDIBuilderRef DIB = LLVMCreateDIBuilder(M);
-
- LLVMMetadataRef File = LLVMDIBuilderCreateFile(DIB, Filename,
- strlen(Filename), ".", 1);
-
- LLVMMetadataRef CompileUnit = LLVMDIBuilderCreateCompileUnit(DIB,
- LLVMDWARFSourceLanguageC, File, "llvm-c-test", 11, 0, NULL, 0, 0,
- NULL, 0, LLVMDWARFEmissionFull, 0, 0, 0);
-
- LLVMMetadataRef Module =
- LLVMDIBuilderCreateModule(DIB, CompileUnit,
- "llvm-c-test", 11,
- "", 0,
- "/test/include/llvm-c-test.h", 27,
- "", 0);
-
- LLVMMetadataRef OtherModule =
- LLVMDIBuilderCreateModule(DIB, CompileUnit,
- "llvm-c-test-import", 18,
- "", 0,
- "/test/include/llvm-c-test-import.h", 34,
- "", 0);
- LLVMMetadataRef ImportedModule =
- LLVMDIBuilderCreateImportedModuleFromModule(DIB, Module, OtherModule,
- File, 42);
- LLVMDIBuilderCreateImportedModuleFromAlias(DIB, Module, ImportedModule,
- File, 42);
-
- LLVMMetadataRef ClassTy = declare_objc_class(DIB, File);
- LLVMMetadataRef GlobalClassValueExpr =
- LLVMDIBuilderCreateConstantValueExpression(DIB, 0);
- LLVMDIBuilderCreateGlobalVariableExpression(
- DIB, Module, "globalClass", 11, "", 0, File, 1, ClassTy, true,
- GlobalClassValueExpr, NULL, 0);
-
- LLVMMetadataRef Int64Ty =
- LLVMDIBuilderCreateBasicType(DIB, "Int64", 5, 64, 0, LLVMDIFlagZero);
- LLVMMetadataRef Int64TypeDef =
- LLVMDIBuilderCreateTypedef(DIB, Int64Ty, "int64_t", 7, File, 42, File);
-
- LLVMMetadataRef GlobalVarValueExpr =
- LLVMDIBuilderCreateConstantValueExpression(DIB, 0);
- LLVMDIBuilderCreateGlobalVariableExpression(
- DIB, Module, "global", 6, "", 0, File, 1, Int64TypeDef, true,
- GlobalVarValueExpr, NULL, 0);
-
- LLVMMetadataRef NameSpace =
- LLVMDIBuilderCreateNameSpace(DIB, Module, "NameSpace", 9, false);
-
- LLVMMetadataRef StructDbgElts[] = {Int64Ty, Int64Ty, Int64Ty};
- LLVMMetadataRef StructDbgTy =
- LLVMDIBuilderCreateStructType(DIB, NameSpace, "MyStruct",
- 8, File, 0, 192, 0, 0, NULL, StructDbgElts, 3,
- LLVMDWARFSourceLanguageC, NULL, "MyStruct", 8);
-
- LLVMMetadataRef StructDbgPtrTy =
- LLVMDIBuilderCreatePointerType(DIB, StructDbgTy, 192, 0, 0, "", 0);
-
- LLVMAddNamedMetadataOperand(M, "FooType",
- LLVMMetadataAsValue(LLVMGetModuleContext(M), StructDbgPtrTy));
-
-
- LLVMTypeRef FooParamTys[] = {
- LLVMInt64Type(),
- LLVMInt64Type(),
- LLVMVectorType(LLVMInt64Type(), 10),
- };
- LLVMTypeRef FooFuncTy = LLVMFunctionType(LLVMInt64Type(), FooParamTys, 3, 0);
- LLVMValueRef FooFunction = LLVMAddFunction(M, "foo", FooFuncTy);
- LLVMBasicBlockRef FooEntryBlock = LLVMAppendBasicBlock(FooFunction, "entry");
-
- LLVMMetadataRef Subscripts[] = {
- LLVMDIBuilderGetOrCreateSubrange(DIB, 0, 10),
- };
- LLVMMetadataRef VectorTy =
- LLVMDIBuilderCreateVectorType(DIB, 64 * 10, 0,
- Int64Ty, Subscripts, 1);
-
-
- LLVMMetadataRef ParamTypes[] = {Int64Ty, Int64Ty, VectorTy};
- LLVMMetadataRef FunctionTy =
- LLVMDIBuilderCreateSubroutineType(DIB, File, ParamTypes, 3, 0);
-
- LLVMMetadataRef ReplaceableFunctionMetadata =
- LLVMDIBuilderCreateReplaceableCompositeType(DIB, 0x15, "foo", 3,
- File, File, 42,
- 0, 0, 0,
- LLVMDIFlagFwdDecl,
- "", 0);
-
- LLVMMetadataRef FooParamLocation =
- LLVMDIBuilderCreateDebugLocation(LLVMGetGlobalContext(), 42, 0,
- ReplaceableFunctionMetadata, NULL);
- LLVMMetadataRef FunctionMetadata =
- LLVMDIBuilderCreateFunction(DIB, File, "foo", 3, "foo", 3,
- File, 42, FunctionTy, true, true,
- 42, 0, false);
- LLVMMetadataReplaceAllUsesWith(ReplaceableFunctionMetadata, FunctionMetadata);
-
- LLVMMetadataRef FooParamExpression =
- LLVMDIBuilderCreateExpression(DIB, NULL, 0);
- LLVMMetadataRef FooParamVar1 =
- LLVMDIBuilderCreateParameterVariable(DIB, FunctionMetadata, "a", 1, 1, File,
- 42, Int64Ty, true, 0);
- LLVMDIBuilderInsertDeclareAtEnd(DIB, LLVMConstInt(LLVMInt64Type(), 0, false),
- FooParamVar1, FooParamExpression,
- FooParamLocation, FooEntryBlock);
- LLVMMetadataRef FooParamVar2 =
- LLVMDIBuilderCreateParameterVariable(DIB, FunctionMetadata, "b", 1, 2, File,
- 42, Int64Ty, true, 0);
- LLVMDIBuilderInsertDeclareAtEnd(DIB, LLVMConstInt(LLVMInt64Type(), 0, false),
- FooParamVar2, FooParamExpression,
- FooParamLocation, FooEntryBlock);
- LLVMMetadataRef FooParamVar3 =
- LLVMDIBuilderCreateParameterVariable(DIB, FunctionMetadata, "c", 1, 3, File,
- 42, VectorTy, true, 0);
- LLVMDIBuilderInsertDeclareAtEnd(DIB, LLVMConstInt(LLVMInt64Type(), 0, false),
- FooParamVar3, FooParamExpression,
- FooParamLocation, FooEntryBlock);
-
- LLVMSetSubprogram(FooFunction, FunctionMetadata);
-
- LLVMMetadataRef FooLexicalBlock =
- LLVMDIBuilderCreateLexicalBlock(DIB, FunctionMetadata, File, 42, 0);
-
- LLVMBasicBlockRef FooVarBlock = LLVMAppendBasicBlock(FooFunction, "vars");
- LLVMMetadataRef FooVarsLocation =
- LLVMDIBuilderCreateDebugLocation(LLVMGetGlobalContext(), 43, 0,
- FunctionMetadata, NULL);
- LLVMMetadataRef FooVar1 =
- LLVMDIBuilderCreateAutoVariable(DIB, FooLexicalBlock, "d", 1, File,
- 43, Int64Ty, true, 0, 0);
- LLVMValueRef FooVal1 = LLVMConstInt(LLVMInt64Type(), 0, false);
- LLVMMetadataRef FooVarValueExpr =
- LLVMDIBuilderCreateConstantValueExpression(DIB, 0);
-
- LLVMDIBuilderInsertDbgValueAtEnd(DIB, FooVal1, FooVar1, FooVarValueExpr,
- FooVarsLocation, FooVarBlock);
-
- LLVMDIBuilderFinalize(DIB);
-
- char *MStr = LLVMPrintModuleToString(M);
- puts(MStr);
- LLVMDisposeMessage(MStr);
-
- LLVMDisposeDIBuilder(DIB);
- LLVMDisposeModule(M);
-
- return 0;
-}
diff --git a/gnu/llvm/tools/llvm-c-test/diagnostic.c b/gnu/llvm/tools/llvm-c-test/diagnostic.c
deleted file mode 100644
index 16d51747323..00000000000
--- a/gnu/llvm/tools/llvm-c-test/diagnostic.c
+++ /dev/null
@@ -1,89 +0,0 @@
-//===-- diagnostic.cpp - tool for testing libLLVM and llvm-c API ----------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements the --test-diagnostic-handler command in llvm-c-test.
-//
-// This command uses the C API to read a module with a custom diagnostic
-// handler set to test the diagnostic handler functionality.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm-c-test.h"
-#include "llvm-c/BitReader.h"
-#include "llvm-c/Core.h"
-
-#include <stdio.h>
-
-static void diagnosticHandler(LLVMDiagnosticInfoRef DI, void *C) {
- fprintf(stderr, "Executing diagnostic handler\n");
-
- fprintf(stderr, "Diagnostic severity is of type ");
- switch (LLVMGetDiagInfoSeverity(DI)) {
- case LLVMDSError:
- fprintf(stderr, "error");
- break;
- case LLVMDSWarning:
- fprintf(stderr, "warning");
- break;
- case LLVMDSRemark:
- fprintf(stderr, "remark");
- break;
- case LLVMDSNote:
- fprintf(stderr, "note");
- break;
- }
- fprintf(stderr, "\n");
-
- (*(int *)C) = 1;
-}
-
-static int handlerCalled = 0;
-
-int llvm_test_diagnostic_handler(void) {
- LLVMContextRef C = LLVMGetGlobalContext();
- LLVMContextSetDiagnosticHandler(C, diagnosticHandler, &handlerCalled);
-
- if (LLVMContextGetDiagnosticHandler(C) != diagnosticHandler) {
- fprintf(stderr, "LLVMContext{Set,Get}DiagnosticHandler failed\n");
- return 1;
- }
-
- int *DC = (int *)LLVMContextGetDiagnosticContext(C);
- if (DC != &handlerCalled || *DC) {
- fprintf(stderr, "LLVMContextGetDiagnosticContext failed\n");
- return 1;
- }
-
- LLVMMemoryBufferRef MB;
- char *msg = NULL;
- if (LLVMCreateMemoryBufferWithSTDIN(&MB, &msg)) {
- fprintf(stderr, "Error reading file: %s\n", msg);
- LLVMDisposeMessage(msg);
- return 1;
- }
-
-
- LLVMModuleRef M;
- int Ret = LLVMGetBitcodeModule2(MB, &M);
- if (Ret) {
- // We do not return if the bitcode was invalid, as we want to test whether
- // the diagnostic handler was executed.
- fprintf(stderr, "Error parsing bitcode: %s\n", msg);
- }
-
- LLVMDisposeMemoryBuffer(MB);
-
- if (handlerCalled) {
- fprintf(stderr, "Diagnostic handler was called while loading module\n");
- } else {
- fprintf(stderr, "Diagnostic handler was not called while loading module\n");
- }
-
- return 0;
-}
diff --git a/gnu/llvm/tools/llvm-c-test/disassemble.c b/gnu/llvm/tools/llvm-c-test/disassemble.c
deleted file mode 100644
index 7d6f1783aed..00000000000
--- a/gnu/llvm/tools/llvm-c-test/disassemble.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*===-- disassemble.c - tool for testing libLLVM and llvm-c API -----------===*\
-|* *|
-|* The LLVM Compiler Infrastructure *|
-|* *|
-|* This file is distributed under the University of Illinois Open Source *|
-|* License. See LICENSE.TXT for details. *|
-|* *|
-|*===----------------------------------------------------------------------===*|
-|* *|
-|* This file implements the --disassemble command in llvm-c-test. *|
-|* --disassemble reads lines from stdin, parses them as a triple and hex *|
-|* machine code, and prints disassembly of the machine code. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#include "llvm-c-test.h"
-#include "llvm-c/Disassembler.h"
-#include "llvm-c/Target.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-static void pprint(int pos, unsigned char *buf, int len, const char *disasm) {
- int i;
- printf("%04x: ", pos);
- for (i = 0; i < 8; i++) {
- if (i < len) {
- printf("%02x ", buf[i]);
- } else {
- printf(" ");
- }
- }
-
- printf(" %s\n", disasm);
-}
-
-static void do_disassemble(const char *triple, const char *features,
- unsigned char *buf, int siz) {
- LLVMDisasmContextRef D = LLVMCreateDisasmCPUFeatures(triple, "", features,
- NULL, 0, NULL, NULL);
- char outline[1024];
- int pos;
-
- if (!D) {
- printf("ERROR: Couldn't create disassembler for triple %s\n", triple);
- return;
- }
-
- pos = 0;
- while (pos < siz) {
- size_t l = LLVMDisasmInstruction(D, buf + pos, siz - pos, 0, outline,
- sizeof(outline));
- if (!l) {
- pprint(pos, buf + pos, 1, "\t???");
- pos++;
- } else {
- pprint(pos, buf + pos, l, outline);
- pos += l;
- }
- }
-
- LLVMDisasmDispose(D);
-}
-
-static void handle_line(char **tokens, int ntokens) {
- unsigned char disbuf[128];
- size_t disbuflen = 0;
- const char *triple = tokens[0];
- const char *features = tokens[1];
- int i;
-
- printf("triple: %s, features: %s\n", triple, features);
- if (!strcmp(features, "NULL"))
- features = "";
-
- for (i = 2; i < ntokens; i++) {
- disbuf[disbuflen++] = strtol(tokens[i], NULL, 16);
- if (disbuflen >= sizeof(disbuf)) {
- fprintf(stderr, "Warning: Too long line, truncating\n");
- break;
- }
- }
- do_disassemble(triple, features, disbuf, disbuflen);
-}
-
-int llvm_disassemble(void) {
- LLVMInitializeAllTargetInfos();
- LLVMInitializeAllTargetMCs();
- LLVMInitializeAllDisassemblers();
-
- llvm_tokenize_stdin(handle_line);
-
- return 0;
-}
diff --git a/gnu/llvm/tools/llvm-c-test/echo.cpp b/gnu/llvm/tools/llvm-c-test/echo.cpp
deleted file mode 100644
index db926e8acea..00000000000
--- a/gnu/llvm/tools/llvm-c-test/echo.cpp
+++ /dev/null
@@ -1,1227 +0,0 @@
-//===-- echo.cpp - tool for testing libLLVM and llvm-c API ----------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements the --echo command in llvm-c-test.
-//
-// This command uses the C API to read a module and output an exact copy of it
-// as output. It is used to check that the resulting module matches the input
-// to validate that the C API can read and write modules properly.
-//
-//===----------------------------------------------------------------------===//
-
-#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"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-using namespace llvm;
-
-// Provide DenseMapInfo for C API opaque types.
-template<typename T>
-struct CAPIDenseMap {};
-
-// The default DenseMapInfo require to know about pointer alignement.
-// Because the C API uses opaques pointer types, their alignement is unknown.
-// As a result, we need to roll out our own implementation.
-template<typename T>
-struct CAPIDenseMap<T*> {
- struct CAPIDenseMapInfo {
- static inline T* getEmptyKey() {
- uintptr_t Val = static_cast<uintptr_t>(-1);
- return reinterpret_cast<T*>(Val);
- }
- static inline T* getTombstoneKey() {
- uintptr_t Val = static_cast<uintptr_t>(-2);
- return reinterpret_cast<T*>(Val);
- }
- static unsigned getHashValue(const T *PtrVal) {
- return hash_value(PtrVal);
- }
- static bool isEqual(const T *LHS, const T *RHS) { return LHS == RHS; }
- };
-
- typedef DenseMap<T*, T*, CAPIDenseMapInfo> Map;
-};
-
-typedef CAPIDenseMap<LLVMValueRef>::Map ValueMap;
-typedef CAPIDenseMap<LLVMBasicBlockRef>::Map BasicBlockMap;
-
-struct TypeCloner {
- LLVMModuleRef M;
- LLVMContextRef Ctx;
-
- TypeCloner(LLVMModuleRef M): M(M), Ctx(LLVMGetModuleContext(M)) {}
-
- LLVMTypeRef Clone(LLVMValueRef Src) {
- return Clone(LLVMTypeOf(Src));
- }
-
- LLVMTypeRef Clone(LLVMTypeRef Src) {
- LLVMTypeKind Kind = LLVMGetTypeKind(Src);
- switch (Kind) {
- case LLVMVoidTypeKind:
- return LLVMVoidTypeInContext(Ctx);
- case LLVMHalfTypeKind:
- return LLVMHalfTypeInContext(Ctx);
- case LLVMFloatTypeKind:
- return LLVMFloatTypeInContext(Ctx);
- case LLVMDoubleTypeKind:
- return LLVMDoubleTypeInContext(Ctx);
- case LLVMX86_FP80TypeKind:
- return LLVMX86FP80TypeInContext(Ctx);
- case LLVMFP128TypeKind:
- return LLVMFP128TypeInContext(Ctx);
- case LLVMPPC_FP128TypeKind:
- return LLVMPPCFP128TypeInContext(Ctx);
- case LLVMLabelTypeKind:
- return LLVMLabelTypeInContext(Ctx);
- case LLVMIntegerTypeKind:
- return LLVMIntTypeInContext(Ctx, LLVMGetIntTypeWidth(Src));
- case LLVMFunctionTypeKind: {
- unsigned ParamCount = LLVMCountParamTypes(Src);
- LLVMTypeRef* Params = nullptr;
- if (ParamCount > 0) {
- Params = static_cast<LLVMTypeRef*>(
- safe_malloc(ParamCount * sizeof(LLVMTypeRef)));
- LLVMGetParamTypes(Src, Params);
- for (unsigned i = 0; i < ParamCount; i++)
- Params[i] = Clone(Params[i]);
- }
-
- LLVMTypeRef FunTy = LLVMFunctionType(Clone(LLVMGetReturnType(Src)),
- Params, ParamCount,
- LLVMIsFunctionVarArg(Src));
- if (ParamCount > 0)
- free(Params);
- return FunTy;
- }
- case LLVMStructTypeKind: {
- LLVMTypeRef S = nullptr;
- const char *Name = LLVMGetStructName(Src);
- if (Name) {
- S = LLVMGetTypeByName(M, Name);
- if (S)
- return S;
- S = LLVMStructCreateNamed(Ctx, Name);
- if (LLVMIsOpaqueStruct(Src))
- return S;
- }
-
- unsigned EltCount = LLVMCountStructElementTypes(Src);
- SmallVector<LLVMTypeRef, 8> Elts;
- for (unsigned i = 0; i < EltCount; i++)
- Elts.push_back(Clone(LLVMStructGetTypeAtIndex(Src, i)));
- if (Name)
- LLVMStructSetBody(S, Elts.data(), EltCount, LLVMIsPackedStruct(Src));
- else
- S = LLVMStructTypeInContext(Ctx, Elts.data(), EltCount,
- LLVMIsPackedStruct(Src));
- return S;
- }
- case LLVMArrayTypeKind:
- return LLVMArrayType(
- Clone(LLVMGetElementType(Src)),
- LLVMGetArrayLength(Src)
- );
- case LLVMPointerTypeKind:
- return LLVMPointerType(
- Clone(LLVMGetElementType(Src)),
- LLVMGetPointerAddressSpace(Src)
- );
- case LLVMVectorTypeKind:
- return LLVMVectorType(
- Clone(LLVMGetElementType(Src)),
- LLVMGetVectorSize(Src)
- );
- case LLVMMetadataTypeKind:
- return LLVMMetadataTypeInContext(Ctx);
- case LLVMX86_MMXTypeKind:
- return LLVMX86MMXTypeInContext(Ctx);
- case LLVMTokenTypeKind:
- return LLVMTokenTypeInContext(Ctx);
- }
-
- fprintf(stderr, "%d is not a supported typekind\n", Kind);
- exit(-1);
- }
-};
-
-static ValueMap clone_params(LLVMValueRef Src, LLVMValueRef Dst) {
- unsigned Count = LLVMCountParams(Src);
- if (Count != LLVMCountParams(Dst))
- report_fatal_error("Parameter count mismatch");
-
- ValueMap VMap;
- if (Count == 0)
- return VMap;
-
- LLVMValueRef SrcFirst = LLVMGetFirstParam(Src);
- LLVMValueRef DstFirst = LLVMGetFirstParam(Dst);
- LLVMValueRef SrcLast = LLVMGetLastParam(Src);
- LLVMValueRef DstLast = LLVMGetLastParam(Dst);
-
- LLVMValueRef SrcCur = SrcFirst;
- LLVMValueRef DstCur = DstFirst;
- LLVMValueRef SrcNext = nullptr;
- LLVMValueRef DstNext = nullptr;
- while (true) {
- size_t NameLen;
- const char *Name = LLVMGetValueName2(SrcCur, &NameLen);
- LLVMSetValueName2(DstCur, Name, NameLen);
-
- VMap[SrcCur] = DstCur;
-
- Count--;
- SrcNext = LLVMGetNextParam(SrcCur);
- DstNext = LLVMGetNextParam(DstCur);
- if (SrcNext == nullptr && DstNext == nullptr) {
- if (SrcCur != SrcLast)
- report_fatal_error("SrcLast param does not match End");
- if (DstCur != DstLast)
- report_fatal_error("DstLast param does not match End");
- break;
- }
-
- if (SrcNext == nullptr)
- report_fatal_error("SrcNext was unexpectedly null");
- if (DstNext == nullptr)
- report_fatal_error("DstNext was unexpectedly null");
-
- LLVMValueRef SrcPrev = LLVMGetPreviousParam(SrcNext);
- if (SrcPrev != SrcCur)
- report_fatal_error("SrcNext.Previous param is not Current");
-
- LLVMValueRef DstPrev = LLVMGetPreviousParam(DstNext);
- if (DstPrev != DstCur)
- report_fatal_error("DstNext.Previous param is not Current");
-
- SrcCur = SrcNext;
- DstCur = DstNext;
- }
-
- if (Count != 0)
- report_fatal_error("Parameter count does not match iteration");
-
- return VMap;
-}
-
-static void check_value_kind(LLVMValueRef V, LLVMValueKind K) {
- if (LLVMGetValueKind(V) != K)
- report_fatal_error("LLVMGetValueKind returned incorrect type");
-}
-
-static LLVMValueRef clone_constant_impl(LLVMValueRef Cst, LLVMModuleRef M);
-
-static LLVMValueRef clone_constant(LLVMValueRef Cst, LLVMModuleRef M) {
- LLVMValueRef Ret = clone_constant_impl(Cst, M);
- check_value_kind(Ret, LLVMGetValueKind(Cst));
- return Ret;
-}
-
-static LLVMValueRef clone_constant_impl(LLVMValueRef Cst, LLVMModuleRef M) {
- if (!LLVMIsAConstant(Cst))
- report_fatal_error("Expected a constant");
-
- // Maybe it is a symbol
- if (LLVMIsAGlobalValue(Cst)) {
- size_t NameLen;
- const char *Name = LLVMGetValueName2(Cst, &NameLen);
-
- // Try function
- if (LLVMIsAFunction(Cst)) {
- check_value_kind(Cst, LLVMFunctionValueKind);
-
- LLVMValueRef Dst = nullptr;
- // Try an intrinsic
- unsigned ID = LLVMGetIntrinsicID(Cst);
- if (ID > 0 && !LLVMIntrinsicIsOverloaded(ID)) {
- Dst = LLVMGetIntrinsicDeclaration(M, ID, nullptr, 0);
- } else {
- // Try a normal function
- Dst = LLVMGetNamedFunction(M, Name);
- }
-
- if (Dst)
- return Dst;
- report_fatal_error("Could not find function");
- }
-
- // Try global variable
- if (LLVMIsAGlobalVariable(Cst)) {
- check_value_kind(Cst, LLVMGlobalVariableValueKind);
- LLVMValueRef Dst = LLVMGetNamedGlobal(M, Name);
- if (Dst)
- return Dst;
- report_fatal_error("Could not find variable");
- }
-
- // Try global alias
- if (LLVMIsAGlobalAlias(Cst)) {
- check_value_kind(Cst, LLVMGlobalAliasValueKind);
- LLVMValueRef Dst = LLVMGetNamedGlobalAlias(M, Name, NameLen);
- if (Dst)
- return Dst;
- report_fatal_error("Could not find alias");
- }
-
- fprintf(stderr, "Could not find @%s\n", Name);
- exit(-1);
- }
-
- // Try integer literal
- if (LLVMIsAConstantInt(Cst)) {
- check_value_kind(Cst, LLVMConstantIntValueKind);
- return LLVMConstInt(TypeCloner(M).Clone(Cst),
- LLVMConstIntGetZExtValue(Cst), false);
- }
-
- // Try zeroinitializer
- if (LLVMIsAConstantAggregateZero(Cst)) {
- check_value_kind(Cst, LLVMConstantAggregateZeroValueKind);
- return LLVMConstNull(TypeCloner(M).Clone(Cst));
- }
-
- // Try constant array
- if (LLVMIsAConstantArray(Cst)) {
- check_value_kind(Cst, LLVMConstantArrayValueKind);
- LLVMTypeRef Ty = TypeCloner(M).Clone(Cst);
- unsigned EltCount = LLVMGetArrayLength(Ty);
- SmallVector<LLVMValueRef, 8> Elts;
- for (unsigned i = 0; i < EltCount; i++)
- Elts.push_back(clone_constant(LLVMGetOperand(Cst, i), M));
- return LLVMConstArray(LLVMGetElementType(Ty), Elts.data(), EltCount);
- }
-
- // Try contant data array
- if (LLVMIsAConstantDataArray(Cst)) {
- check_value_kind(Cst, LLVMConstantDataArrayValueKind);
- LLVMTypeRef Ty = TypeCloner(M).Clone(Cst);
- unsigned EltCount = LLVMGetArrayLength(Ty);
- SmallVector<LLVMValueRef, 8> Elts;
- for (unsigned i = 0; i < EltCount; i++)
- Elts.push_back(clone_constant(LLVMGetElementAsConstant(Cst, i), M));
- return LLVMConstArray(LLVMGetElementType(Ty), Elts.data(), EltCount);
- }
-
- // Try constant struct
- if (LLVMIsAConstantStruct(Cst)) {
- check_value_kind(Cst, LLVMConstantStructValueKind);
- LLVMTypeRef Ty = TypeCloner(M).Clone(Cst);
- unsigned EltCount = LLVMCountStructElementTypes(Ty);
- SmallVector<LLVMValueRef, 8> Elts;
- for (unsigned i = 0; i < EltCount; i++)
- Elts.push_back(clone_constant(LLVMGetOperand(Cst, i), M));
- if (LLVMGetStructName(Ty))
- return LLVMConstNamedStruct(Ty, Elts.data(), EltCount);
- return LLVMConstStructInContext(LLVMGetModuleContext(M), Elts.data(),
- EltCount, LLVMIsPackedStruct(Ty));
- }
-
- // Try undef
- if (LLVMIsUndef(Cst)) {
- check_value_kind(Cst, LLVMUndefValueValueKind);
- return LLVMGetUndef(TypeCloner(M).Clone(Cst));
- }
-
- // Try null
- if (LLVMIsNull(Cst)) {
- check_value_kind(Cst, LLVMConstantTokenNoneValueKind);
- LLVMTypeRef Ty = TypeCloner(M).Clone(Cst);
- return LLVMConstNull(Ty);
- }
-
- // Try float literal
- if (LLVMIsAConstantFP(Cst)) {
- check_value_kind(Cst, LLVMConstantFPValueKind);
- report_fatal_error("ConstantFP is not supported");
- }
-
- // This kind of constant is not supported
- if (!LLVMIsAConstantExpr(Cst))
- report_fatal_error("Expected a constant expression");
-
- // At this point, it must be a constant expression
- check_value_kind(Cst, LLVMConstantExprValueKind);
-
- LLVMOpcode Op = LLVMGetConstOpcode(Cst);
- switch(Op) {
- case LLVMBitCast:
- return LLVMConstBitCast(clone_constant(LLVMGetOperand(Cst, 0), M),
- TypeCloner(M).Clone(Cst));
- default:
- fprintf(stderr, "%d is not a supported opcode\n", Op);
- exit(-1);
- }
-}
-
-struct FunCloner {
- LLVMValueRef Fun;
- LLVMModuleRef M;
-
- ValueMap VMap;
- BasicBlockMap BBMap;
-
- FunCloner(LLVMValueRef Src, LLVMValueRef Dst): Fun(Dst),
- M(LLVMGetGlobalParent(Fun)), VMap(clone_params(Src, Dst)) {}
-
- LLVMTypeRef CloneType(LLVMTypeRef Src) {
- return TypeCloner(M).Clone(Src);
- }
-
- LLVMTypeRef CloneType(LLVMValueRef Src) {
- return TypeCloner(M).Clone(Src);
- }
-
- // Try to clone everything in the llvm::Value hierarchy.
- LLVMValueRef CloneValue(LLVMValueRef Src) {
- // First, the value may be constant.
- if (LLVMIsAConstant(Src))
- return clone_constant(Src, M);
-
- // Function argument should always be in the map already.
- auto i = VMap.find(Src);
- if (i != VMap.end())
- return i->second;
-
- if (!LLVMIsAInstruction(Src))
- report_fatal_error("Expected an instruction");
-
- auto Ctx = LLVMGetModuleContext(M);
- auto Builder = LLVMCreateBuilderInContext(Ctx);
- auto BB = DeclareBB(LLVMGetInstructionParent(Src));
- LLVMPositionBuilderAtEnd(Builder, BB);
- auto Dst = CloneInstruction(Src, Builder);
- LLVMDisposeBuilder(Builder);
- return Dst;
- }
-
- void CloneAttrs(LLVMValueRef Src, LLVMValueRef Dst) {
- auto Ctx = LLVMGetModuleContext(M);
- int ArgCount = LLVMGetNumArgOperands(Src);
- for (int i = LLVMAttributeReturnIndex; i <= ArgCount; i++) {
- for (unsigned k = 0, e = LLVMGetLastEnumAttributeKind(); k < e; ++k) {
- if (auto SrcA = LLVMGetCallSiteEnumAttribute(Src, i, k)) {
- auto Val = LLVMGetEnumAttributeValue(SrcA);
- auto A = LLVMCreateEnumAttribute(Ctx, k, Val);
- LLVMAddCallSiteAttribute(Dst, i, A);
- }
- }
- }
- }
-
- LLVMValueRef CloneInstruction(LLVMValueRef Src, LLVMBuilderRef Builder) {
- check_value_kind(Src, LLVMInstructionValueKind);
- if (!LLVMIsAInstruction(Src))
- report_fatal_error("Expected an instruction");
-
- size_t NameLen;
- const char *Name = LLVMGetValueName2(Src, &NameLen);
-
- // Check if this is something we already computed.
- {
- auto i = VMap.find(Src);
- if (i != VMap.end()) {
- // If we have a hit, it means we already generated the instruction
- // as a dependancy to somethign else. We need to make sure
- // it is ordered properly.
- auto I = i->second;
- LLVMInstructionRemoveFromParent(I);
- LLVMInsertIntoBuilderWithName(Builder, I, Name);
- return I;
- }
- }
-
- // We tried everything, it must be an instruction
- // that hasn't been generated already.
- LLVMValueRef Dst = nullptr;
-
- LLVMOpcode Op = LLVMGetInstructionOpcode(Src);
- switch(Op) {
- case LLVMRet: {
- int OpCount = LLVMGetNumOperands(Src);
- if (OpCount == 0)
- Dst = LLVMBuildRetVoid(Builder);
- else
- Dst = LLVMBuildRet(Builder, CloneValue(LLVMGetOperand(Src, 0)));
- break;
- }
- case LLVMBr: {
- if (!LLVMIsConditional(Src)) {
- LLVMValueRef SrcOp = LLVMGetOperand(Src, 0);
- LLVMBasicBlockRef SrcBB = LLVMValueAsBasicBlock(SrcOp);
- Dst = LLVMBuildBr(Builder, DeclareBB(SrcBB));
- break;
- }
-
- LLVMValueRef Cond = LLVMGetCondition(Src);
- LLVMValueRef Else = LLVMGetOperand(Src, 1);
- LLVMBasicBlockRef ElseBB = DeclareBB(LLVMValueAsBasicBlock(Else));
- LLVMValueRef Then = LLVMGetOperand(Src, 2);
- LLVMBasicBlockRef ThenBB = DeclareBB(LLVMValueAsBasicBlock(Then));
- Dst = LLVMBuildCondBr(Builder, CloneValue(Cond), ThenBB, ElseBB);
- break;
- }
- case LLVMSwitch:
- case LLVMIndirectBr:
- break;
- case LLVMInvoke: {
- SmallVector<LLVMValueRef, 8> Args;
- int ArgCount = LLVMGetNumArgOperands(Src);
- for (int i = 0; i < ArgCount; i++)
- Args.push_back(CloneValue(LLVMGetOperand(Src, i)));
- LLVMValueRef Fn = CloneValue(LLVMGetCalledValue(Src));
- LLVMBasicBlockRef Then = DeclareBB(LLVMGetNormalDest(Src));
- LLVMBasicBlockRef Unwind = DeclareBB(LLVMGetUnwindDest(Src));
- Dst = LLVMBuildInvoke(Builder, Fn, Args.data(), ArgCount,
- Then, Unwind, Name);
- CloneAttrs(Src, Dst);
- break;
- }
- case LLVMUnreachable:
- Dst = LLVMBuildUnreachable(Builder);
- break;
- case LLVMAdd: {
- LLVMValueRef LHS = CloneValue(LLVMGetOperand(Src, 0));
- LLVMValueRef RHS = CloneValue(LLVMGetOperand(Src, 1));
- Dst = LLVMBuildAdd(Builder, LHS, RHS, Name);
- break;
- }
- case LLVMSub: {
- LLVMValueRef LHS = CloneValue(LLVMGetOperand(Src, 0));
- LLVMValueRef RHS = CloneValue(LLVMGetOperand(Src, 1));
- Dst = LLVMBuildSub(Builder, LHS, RHS, Name);
- break;
- }
- case LLVMMul: {
- LLVMValueRef LHS = CloneValue(LLVMGetOperand(Src, 0));
- LLVMValueRef RHS = CloneValue(LLVMGetOperand(Src, 1));
- Dst = LLVMBuildMul(Builder, LHS, RHS, Name);
- break;
- }
- case LLVMUDiv: {
- LLVMValueRef LHS = CloneValue(LLVMGetOperand(Src, 0));
- LLVMValueRef RHS = CloneValue(LLVMGetOperand(Src, 1));
- Dst = LLVMBuildUDiv(Builder, LHS, RHS, Name);
- break;
- }
- case LLVMSDiv: {
- LLVMValueRef LHS = CloneValue(LLVMGetOperand(Src, 0));
- LLVMValueRef RHS = CloneValue(LLVMGetOperand(Src, 1));
- Dst = LLVMBuildSDiv(Builder, LHS, RHS, Name);
- break;
- }
- case LLVMURem: {
- LLVMValueRef LHS = CloneValue(LLVMGetOperand(Src, 0));
- LLVMValueRef RHS = CloneValue(LLVMGetOperand(Src, 1));
- Dst = LLVMBuildURem(Builder, LHS, RHS, Name);
- break;
- }
- case LLVMSRem: {
- LLVMValueRef LHS = CloneValue(LLVMGetOperand(Src, 0));
- LLVMValueRef RHS = CloneValue(LLVMGetOperand(Src, 1));
- Dst = LLVMBuildSRem(Builder, LHS, RHS, Name);
- break;
- }
- case LLVMShl: {
- LLVMValueRef LHS = CloneValue(LLVMGetOperand(Src, 0));
- LLVMValueRef RHS = CloneValue(LLVMGetOperand(Src, 1));
- Dst = LLVMBuildShl(Builder, LHS, RHS, Name);
- break;
- }
- case LLVMLShr: {
- LLVMValueRef LHS = CloneValue(LLVMGetOperand(Src, 0));
- LLVMValueRef RHS = CloneValue(LLVMGetOperand(Src, 1));
- Dst = LLVMBuildLShr(Builder, LHS, RHS, Name);
- break;
- }
- case LLVMAShr: {
- LLVMValueRef LHS = CloneValue(LLVMGetOperand(Src, 0));
- LLVMValueRef RHS = CloneValue(LLVMGetOperand(Src, 1));
- Dst = LLVMBuildAShr(Builder, LHS, RHS, Name);
- break;
- }
- case LLVMAnd: {
- LLVMValueRef LHS = CloneValue(LLVMGetOperand(Src, 0));
- LLVMValueRef RHS = CloneValue(LLVMGetOperand(Src, 1));
- Dst = LLVMBuildAnd(Builder, LHS, RHS, Name);
- break;
- }
- case LLVMOr: {
- LLVMValueRef LHS = CloneValue(LLVMGetOperand(Src, 0));
- LLVMValueRef RHS = CloneValue(LLVMGetOperand(Src, 1));
- Dst = LLVMBuildOr(Builder, LHS, RHS, Name);
- break;
- }
- case LLVMXor: {
- LLVMValueRef LHS = CloneValue(LLVMGetOperand(Src, 0));
- LLVMValueRef RHS = CloneValue(LLVMGetOperand(Src, 1));
- Dst = LLVMBuildXor(Builder, LHS, RHS, Name);
- break;
- }
- case LLVMAlloca: {
- LLVMTypeRef Ty = CloneType(LLVMGetAllocatedType(Src));
- Dst = LLVMBuildAlloca(Builder, Ty, Name);
- break;
- }
- case LLVMLoad: {
- LLVMValueRef Ptr = CloneValue(LLVMGetOperand(Src, 0));
- Dst = LLVMBuildLoad(Builder, Ptr, Name);
- LLVMSetAlignment(Dst, LLVMGetAlignment(Src));
- break;
- }
- case LLVMStore: {
- LLVMValueRef Val = CloneValue(LLVMGetOperand(Src, 0));
- LLVMValueRef Ptr = CloneValue(LLVMGetOperand(Src, 1));
- Dst = LLVMBuildStore(Builder, Val, Ptr);
- LLVMSetAlignment(Dst, LLVMGetAlignment(Src));
- break;
- }
- case LLVMGetElementPtr: {
- LLVMValueRef Ptr = CloneValue(LLVMGetOperand(Src, 0));
- SmallVector<LLVMValueRef, 8> Idx;
- int NumIdx = LLVMGetNumIndices(Src);
- for (int i = 1; i <= NumIdx; i++)
- Idx.push_back(CloneValue(LLVMGetOperand(Src, i)));
- if (LLVMIsInBounds(Src))
- Dst = LLVMBuildInBoundsGEP(Builder, Ptr, Idx.data(), NumIdx, Name);
- else
- Dst = LLVMBuildGEP(Builder, Ptr, Idx.data(), NumIdx, Name);
- break;
- }
- case LLVMAtomicCmpXchg: {
- LLVMValueRef Ptr = CloneValue(LLVMGetOperand(Src, 0));
- LLVMValueRef Cmp = CloneValue(LLVMGetOperand(Src, 1));
- LLVMValueRef New = CloneValue(LLVMGetOperand(Src, 2));
- LLVMAtomicOrdering Succ = LLVMGetCmpXchgSuccessOrdering(Src);
- LLVMAtomicOrdering Fail = LLVMGetCmpXchgFailureOrdering(Src);
- LLVMBool SingleThread = LLVMIsAtomicSingleThread(Src);
-
- Dst = LLVMBuildAtomicCmpXchg(Builder, Ptr, Cmp, New, Succ, Fail,
- SingleThread);
- } break;
- case LLVMBitCast: {
- LLVMValueRef V = CloneValue(LLVMGetOperand(Src, 0));
- Dst = LLVMBuildBitCast(Builder, V, CloneType(Src), Name);
- break;
- }
- case LLVMICmp: {
- LLVMIntPredicate Pred = LLVMGetICmpPredicate(Src);
- LLVMValueRef LHS = CloneValue(LLVMGetOperand(Src, 0));
- LLVMValueRef RHS = CloneValue(LLVMGetOperand(Src, 1));
- Dst = LLVMBuildICmp(Builder, Pred, LHS, RHS, Name);
- break;
- }
- case LLVMPHI: {
- // We need to aggressively set things here because of loops.
- VMap[Src] = Dst = LLVMBuildPhi(Builder, CloneType(Src), Name);
-
- SmallVector<LLVMValueRef, 8> Values;
- SmallVector<LLVMBasicBlockRef, 8> Blocks;
-
- unsigned IncomingCount = LLVMCountIncoming(Src);
- for (unsigned i = 0; i < IncomingCount; ++i) {
- Blocks.push_back(DeclareBB(LLVMGetIncomingBlock(Src, i)));
- Values.push_back(CloneValue(LLVMGetIncomingValue(Src, i)));
- }
-
- LLVMAddIncoming(Dst, Values.data(), Blocks.data(), IncomingCount);
- return Dst;
- }
- case LLVMCall: {
- SmallVector<LLVMValueRef, 8> Args;
- int ArgCount = LLVMGetNumArgOperands(Src);
- for (int i = 0; i < ArgCount; i++)
- Args.push_back(CloneValue(LLVMGetOperand(Src, i)));
- LLVMValueRef Fn = CloneValue(LLVMGetCalledValue(Src));
- Dst = LLVMBuildCall(Builder, Fn, Args.data(), ArgCount, Name);
- LLVMSetTailCall(Dst, LLVMIsTailCall(Src));
- CloneAttrs(Src, Dst);
- break;
- }
- case LLVMResume: {
- Dst = LLVMBuildResume(Builder, CloneValue(LLVMGetOperand(Src, 0)));
- break;
- }
- case LLVMLandingPad: {
- // The landing pad API is a bit screwed up for historical reasons.
- Dst = LLVMBuildLandingPad(Builder, CloneType(Src), nullptr, 0, Name);
- unsigned NumClauses = LLVMGetNumClauses(Src);
- for (unsigned i = 0; i < NumClauses; ++i)
- LLVMAddClause(Dst, CloneValue(LLVMGetClause(Src, i)));
- LLVMSetCleanup(Dst, LLVMIsCleanup(Src));
- break;
- }
- case LLVMCleanupRet: {
- LLVMValueRef CatchPad = CloneValue(LLVMGetOperand(Src, 0));
- LLVMBasicBlockRef Unwind = nullptr;
- if (LLVMBasicBlockRef UDest = LLVMGetUnwindDest(Src))
- Unwind = DeclareBB(UDest);
- Dst = LLVMBuildCleanupRet(Builder, CatchPad, Unwind);
- break;
- }
- case LLVMCatchRet: {
- LLVMValueRef CatchPad = CloneValue(LLVMGetOperand(Src, 0));
- LLVMBasicBlockRef SuccBB = DeclareBB(LLVMGetSuccessor(Src, 0));
- Dst = LLVMBuildCatchRet(Builder, CatchPad, SuccBB);
- break;
- }
- case LLVMCatchPad: {
- LLVMValueRef ParentPad = CloneValue(LLVMGetParentCatchSwitch(Src));
- SmallVector<LLVMValueRef, 8> Args;
- int ArgCount = LLVMGetNumArgOperands(Src);
- for (int i = 0; i < ArgCount; i++)
- Args.push_back(CloneValue(LLVMGetOperand(Src, i)));
- Dst = LLVMBuildCatchPad(Builder, ParentPad,
- Args.data(), ArgCount, Name);
- break;
- }
- case LLVMCleanupPad: {
- LLVMValueRef ParentPad = CloneValue(LLVMGetOperand(Src, 0));
- SmallVector<LLVMValueRef, 8> Args;
- int ArgCount = LLVMGetNumArgOperands(Src);
- for (int i = 0; i < ArgCount; i++)
- Args.push_back(CloneValue(LLVMGetArgOperand(Src, i)));
- Dst = LLVMBuildCleanupPad(Builder, ParentPad,
- Args.data(), ArgCount, Name);
- break;
- }
- case LLVMCatchSwitch: {
- LLVMValueRef ParentPad = CloneValue(LLVMGetOperand(Src, 0));
- LLVMBasicBlockRef UnwindBB = nullptr;
- if (LLVMBasicBlockRef UDest = LLVMGetUnwindDest(Src)) {
- UnwindBB = DeclareBB(UDest);
- }
- unsigned NumHandlers = LLVMGetNumHandlers(Src);
- Dst = LLVMBuildCatchSwitch(Builder, ParentPad, UnwindBB, NumHandlers, Name);
- if (NumHandlers > 0) {
- LLVMBasicBlockRef *Handlers = static_cast<LLVMBasicBlockRef*>(
- safe_malloc(NumHandlers * sizeof(LLVMBasicBlockRef)));
- LLVMGetHandlers(Src, Handlers);
- for (unsigned i = 0; i < NumHandlers; i++)
- LLVMAddHandler(Dst, DeclareBB(Handlers[i]));
- free(Handlers);
- }
- break;
- }
- case LLVMExtractValue: {
- LLVMValueRef Agg = CloneValue(LLVMGetOperand(Src, 0));
- if (LLVMGetNumIndices(Src) != 1)
- report_fatal_error("Expected only one indice");
- auto I = LLVMGetIndices(Src)[0];
- Dst = LLVMBuildExtractValue(Builder, Agg, I, Name);
- break;
- }
- case LLVMInsertValue: {
- LLVMValueRef Agg = CloneValue(LLVMGetOperand(Src, 0));
- LLVMValueRef V = CloneValue(LLVMGetOperand(Src, 1));
- if (LLVMGetNumIndices(Src) != 1)
- report_fatal_error("Expected only one indice");
- auto I = LLVMGetIndices(Src)[0];
- Dst = LLVMBuildInsertValue(Builder, Agg, V, I, Name);
- break;
- }
- default:
- break;
- }
-
- if (Dst == nullptr) {
- fprintf(stderr, "%d is not a supported opcode\n", Op);
- 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;
- }
-
- LLVMBasicBlockRef DeclareBB(LLVMBasicBlockRef Src) {
- // Check if this is something we already computed.
- {
- auto i = BBMap.find(Src);
- if (i != BBMap.end()) {
- return i->second;
- }
- }
-
- LLVMValueRef V = LLVMBasicBlockAsValue(Src);
- if (!LLVMValueIsBasicBlock(V) || LLVMValueAsBasicBlock(V) != Src)
- report_fatal_error("Basic block is not a basic block");
-
- const char *Name = LLVMGetBasicBlockName(Src);
- size_t NameLen;
- const char *VName = LLVMGetValueName2(V, &NameLen);
- if (Name != VName)
- report_fatal_error("Basic block name mismatch");
-
- LLVMBasicBlockRef BB = LLVMAppendBasicBlock(Fun, Name);
- return BBMap[Src] = BB;
- }
-
- LLVMBasicBlockRef CloneBB(LLVMBasicBlockRef Src) {
- LLVMBasicBlockRef BB = DeclareBB(Src);
-
- // Make sure ordering is correct.
- LLVMBasicBlockRef Prev = LLVMGetPreviousBasicBlock(Src);
- if (Prev)
- LLVMMoveBasicBlockAfter(BB, DeclareBB(Prev));
-
- LLVMValueRef First = LLVMGetFirstInstruction(Src);
- LLVMValueRef Last = LLVMGetLastInstruction(Src);
-
- if (First == nullptr) {
- if (Last != nullptr)
- report_fatal_error("Has no first instruction, but last one");
- return BB;
- }
-
- auto Ctx = LLVMGetModuleContext(M);
- LLVMBuilderRef Builder = LLVMCreateBuilderInContext(Ctx);
- LLVMPositionBuilderAtEnd(Builder, BB);
-
- LLVMValueRef Cur = First;
- LLVMValueRef Next = nullptr;
- while(true) {
- CloneInstruction(Cur, Builder);
- Next = LLVMGetNextInstruction(Cur);
- if (Next == nullptr) {
- if (Cur != Last)
- report_fatal_error("Final instruction does not match Last");
- break;
- }
-
- LLVMValueRef Prev = LLVMGetPreviousInstruction(Next);
- if (Prev != Cur)
- report_fatal_error("Next.Previous instruction is not Current");
-
- Cur = Next;
- }
-
- LLVMDisposeBuilder(Builder);
- return BB;
- }
-
- void CloneBBs(LLVMValueRef Src) {
- unsigned Count = LLVMCountBasicBlocks(Src);
- if (Count == 0)
- return;
-
- LLVMBasicBlockRef First = LLVMGetFirstBasicBlock(Src);
- LLVMBasicBlockRef Last = LLVMGetLastBasicBlock(Src);
-
- LLVMBasicBlockRef Cur = First;
- LLVMBasicBlockRef Next = nullptr;
- while(true) {
- CloneBB(Cur);
- Count--;
- Next = LLVMGetNextBasicBlock(Cur);
- if (Next == nullptr) {
- if (Cur != Last)
- report_fatal_error("Final basic block does not match Last");
- break;
- }
-
- LLVMBasicBlockRef Prev = LLVMGetPreviousBasicBlock(Next);
- if (Prev != Cur)
- report_fatal_error("Next.Previous basic bloc is not Current");
-
- Cur = Next;
- }
-
- if (Count != 0)
- report_fatal_error("Basic block count does not match iterration");
- }
-};
-
-static void declare_symbols(LLVMModuleRef Src, LLVMModuleRef M) {
- auto Ctx = LLVMGetModuleContext(M);
-
- LLVMValueRef Begin = LLVMGetFirstGlobal(Src);
- LLVMValueRef End = LLVMGetLastGlobal(Src);
-
- LLVMValueRef Cur = Begin;
- LLVMValueRef Next = nullptr;
- if (!Begin) {
- if (End != nullptr)
- report_fatal_error("Range has an end but no beginning");
- goto FunDecl;
- }
-
- while (true) {
- size_t NameLen;
- const char *Name = LLVMGetValueName2(Cur, &NameLen);
- if (LLVMGetNamedGlobal(M, Name))
- report_fatal_error("GlobalVariable already cloned");
- LLVMAddGlobal(M, LLVMGetElementType(TypeCloner(M).Clone(Cur)), Name);
-
- Next = LLVMGetNextGlobal(Cur);
- if (Next == nullptr) {
- if (Cur != End)
- report_fatal_error("");
- break;
- }
-
- LLVMValueRef Prev = LLVMGetPreviousGlobal(Next);
- if (Prev != Cur)
- report_fatal_error("Next.Previous global is not Current");
-
- Cur = Next;
- }
-
-FunDecl:
- Begin = LLVMGetFirstFunction(Src);
- End = LLVMGetLastFunction(Src);
- if (!Begin) {
- if (End != nullptr)
- report_fatal_error("Range has an end but no beginning");
- goto AliasDecl;
- }
-
- Cur = Begin;
- Next = nullptr;
- while (true) {
- size_t NameLen;
- const char *Name = LLVMGetValueName2(Cur, &NameLen);
- if (LLVMGetNamedFunction(M, Name))
- report_fatal_error("Function already cloned");
- auto Ty = LLVMGetElementType(TypeCloner(M).Clone(Cur));
- auto F = LLVMAddFunction(M, Name, Ty);
-
- // Copy attributes
- for (int i = LLVMAttributeFunctionIndex, c = LLVMCountParams(F);
- i <= c; ++i) {
- for (unsigned k = 0, e = LLVMGetLastEnumAttributeKind(); k < e; ++k) {
- if (auto SrcA = LLVMGetEnumAttributeAtIndex(Cur, i, k)) {
- auto Val = LLVMGetEnumAttributeValue(SrcA);
- auto DstA = LLVMCreateEnumAttribute(Ctx, k, Val);
- LLVMAddAttributeAtIndex(F, i, DstA);
- }
- }
- }
-
- Next = LLVMGetNextFunction(Cur);
- if (Next == nullptr) {
- if (Cur != End)
- report_fatal_error("Last function does not match End");
- break;
- }
-
- LLVMValueRef Prev = LLVMGetPreviousFunction(Next);
- if (Prev != Cur)
- report_fatal_error("Next.Previous function is not Current");
-
- Cur = Next;
- }
-
-AliasDecl:
- Begin = LLVMGetFirstGlobalAlias(Src);
- End = LLVMGetLastGlobalAlias(Src);
- if (!Begin) {
- if (End != nullptr)
- report_fatal_error("Range has an end but no beginning");
- goto NamedMDDecl;
- }
-
- Cur = Begin;
- Next = nullptr;
- while (true) {
- size_t NameLen;
- const char *Name = LLVMGetValueName2(Cur, &NameLen);
- if (LLVMGetNamedGlobalAlias(M, Name, NameLen))
- report_fatal_error("Global alias already cloned");
- LLVMTypeRef CurType = TypeCloner(M).Clone(Cur);
- // FIXME: Allow NULL aliasee.
- LLVMAddAlias(M, CurType, LLVMGetUndef(CurType), Name);
-
- Next = LLVMGetNextGlobalAlias(Cur);
- if (Next == nullptr) {
- if (Cur != End)
- report_fatal_error("");
- break;
- }
-
- LLVMValueRef Prev = LLVMGetPreviousGlobalAlias(Next);
- if (Prev != Cur)
- report_fatal_error("Next.Previous global is not Current");
-
- Cur = Next;
- }
-
-NamedMDDecl:
- LLVMNamedMDNodeRef BeginMD = LLVMGetFirstNamedMetadata(Src);
- LLVMNamedMDNodeRef EndMD = LLVMGetLastNamedMetadata(Src);
- if (!BeginMD) {
- if (EndMD != nullptr)
- report_fatal_error("Range has an end but no beginning");
- return;
- }
-
- LLVMNamedMDNodeRef CurMD = BeginMD;
- LLVMNamedMDNodeRef NextMD = nullptr;
- while (true) {
- size_t NameLen;
- const char *Name = LLVMGetNamedMetadataName(CurMD, &NameLen);
- if (LLVMGetNamedMetadata(M, Name, NameLen))
- report_fatal_error("Named Metadata Node already cloned");
- LLVMGetOrInsertNamedMetadata(M, Name, NameLen);
-
- NextMD = LLVMGetNextNamedMetadata(CurMD);
- if (NextMD == nullptr) {
- if (CurMD != EndMD)
- report_fatal_error("");
- break;
- }
-
- LLVMNamedMDNodeRef PrevMD = LLVMGetPreviousNamedMetadata(NextMD);
- if (PrevMD != CurMD)
- report_fatal_error("Next.Previous global is not Current");
-
- CurMD = NextMD;
- }
-}
-
-static void clone_symbols(LLVMModuleRef Src, LLVMModuleRef M) {
- LLVMValueRef Begin = LLVMGetFirstGlobal(Src);
- LLVMValueRef End = LLVMGetLastGlobal(Src);
-
- LLVMValueRef Cur = Begin;
- LLVMValueRef Next = nullptr;
- if (!Begin) {
- if (End != nullptr)
- report_fatal_error("Range has an end but no beginning");
- goto FunClone;
- }
-
- while (true) {
- size_t NameLen;
- const char *Name = LLVMGetValueName2(Cur, &NameLen);
- LLVMValueRef G = LLVMGetNamedGlobal(M, Name);
- if (!G)
- report_fatal_error("GlobalVariable must have been declared already");
-
- 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));
- LLVMSetLinkage(G, LLVMGetLinkage(Cur));
- LLVMSetSection(G, LLVMGetSection(Cur));
- LLVMSetVisibility(G, LLVMGetVisibility(Cur));
- LLVMSetUnnamedAddress(G, LLVMGetUnnamedAddress(Cur));
- LLVMSetAlignment(G, LLVMGetAlignment(Cur));
-
- Next = LLVMGetNextGlobal(Cur);
- if (Next == nullptr) {
- if (Cur != End)
- report_fatal_error("");
- break;
- }
-
- LLVMValueRef Prev = LLVMGetPreviousGlobal(Next);
- if (Prev != Cur)
- report_fatal_error("Next.Previous global is not Current");
-
- Cur = Next;
- }
-
-FunClone:
- Begin = LLVMGetFirstFunction(Src);
- End = LLVMGetLastFunction(Src);
- if (!Begin) {
- if (End != nullptr)
- report_fatal_error("Range has an end but no beginning");
- goto AliasClone;
- }
-
- Cur = Begin;
- Next = nullptr;
- while (true) {
- size_t NameLen;
- const char *Name = LLVMGetValueName2(Cur, &NameLen);
- LLVMValueRef Fun = LLVMGetNamedFunction(M, Name);
- if (!Fun)
- report_fatal_error("Function must have been declared already");
-
- if (LLVMHasPersonalityFn(Cur)) {
- size_t FNameLen;
- const char *FName = LLVMGetValueName2(LLVMGetPersonalityFn(Cur),
- &FNameLen);
- LLVMValueRef P = LLVMGetNamedFunction(M, FName);
- if (!P)
- report_fatal_error("Could not find personality function");
- 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);
-
- Next = LLVMGetNextFunction(Cur);
- if (Next == nullptr) {
- if (Cur != End)
- report_fatal_error("Last function does not match End");
- break;
- }
-
- LLVMValueRef Prev = LLVMGetPreviousFunction(Next);
- if (Prev != Cur)
- report_fatal_error("Next.Previous function is not Current");
-
- Cur = Next;
- }
-
-AliasClone:
- Begin = LLVMGetFirstGlobalAlias(Src);
- End = LLVMGetLastGlobalAlias(Src);
- if (!Begin) {
- if (End != nullptr)
- report_fatal_error("Range has an end but no beginning");
- goto NamedMDClone;
- }
-
- Cur = Begin;
- Next = nullptr;
- while (true) {
- size_t NameLen;
- const char *Name = LLVMGetValueName2(Cur, &NameLen);
- LLVMValueRef Alias = LLVMGetNamedGlobalAlias(M, Name, NameLen);
- if (!Alias)
- report_fatal_error("Global alias must have been declared already");
-
- if (LLVMValueRef Aliasee = LLVMAliasGetAliasee(Cur)) {
- LLVMAliasSetAliasee(Alias, clone_constant(Aliasee, M));
- }
-
- LLVMSetLinkage(Alias, LLVMGetLinkage(Cur));
- LLVMSetUnnamedAddress(Alias, LLVMGetUnnamedAddress(Cur));
-
- Next = LLVMGetNextGlobalAlias(Cur);
- if (Next == nullptr) {
- if (Cur != End)
- report_fatal_error("Last global alias does not match End");
- break;
- }
-
- LLVMValueRef Prev = LLVMGetPreviousGlobalAlias(Next);
- if (Prev != Cur)
- report_fatal_error("Next.Previous global alias is not Current");
-
- Cur = Next;
- }
-
-NamedMDClone:
- LLVMNamedMDNodeRef BeginMD = LLVMGetFirstNamedMetadata(Src);
- LLVMNamedMDNodeRef EndMD = LLVMGetLastNamedMetadata(Src);
- if (!BeginMD) {
- if (EndMD != nullptr)
- report_fatal_error("Range has an end but no beginning");
- return;
- }
-
- LLVMNamedMDNodeRef CurMD = BeginMD;
- LLVMNamedMDNodeRef NextMD = nullptr;
- while (true) {
- size_t NameLen;
- const char *Name = LLVMGetNamedMetadataName(CurMD, &NameLen);
- LLVMNamedMDNodeRef NamedMD = LLVMGetNamedMetadata(M, Name, NameLen);
- if (!NamedMD)
- report_fatal_error("Named MD Node must have been declared already");
-
- unsigned OperandCount = LLVMGetNamedMetadataNumOperands(Src, Name);
- LLVMValueRef *OperandBuf = static_cast<LLVMValueRef *>(
- safe_malloc(OperandCount * sizeof(LLVMValueRef)));
- LLVMGetNamedMetadataOperands(Src, Name, OperandBuf);
- for (unsigned i = 0, e = OperandCount; i != e; ++i) {
- LLVMAddNamedMetadataOperand(M, Name, OperandBuf[i]);
- }
- free(OperandBuf);
-
- NextMD = LLVMGetNextNamedMetadata(CurMD);
- if (NextMD == nullptr) {
- if (CurMD != EndMD)
- report_fatal_error("Last Named MD Node does not match End");
- break;
- }
-
- LLVMNamedMDNodeRef PrevMD = LLVMGetPreviousNamedMetadata(NextMD);
- if (PrevMD != CurMD)
- report_fatal_error("Next.Previous Named MD Node is not Current");
-
- CurMD = NextMD;
- }
-}
-
-int llvm_echo(void) {
- LLVMEnablePrettyStackTrace();
-
- LLVMModuleRef Src = llvm_load_module(false, true);
- size_t SourceFileLen;
- const char *SourceFileName = LLVMGetSourceFileName(Src, &SourceFileLen);
- size_t ModuleIdentLen;
- const char *ModuleName = LLVMGetModuleIdentifier(Src, &ModuleIdentLen);
- LLVMContextRef Ctx = LLVMContextCreate();
- LLVMModuleRef M = LLVMModuleCreateWithNameInContext(ModuleName, Ctx);
-
- LLVMSetSourceFileName(M, SourceFileName, SourceFileLen);
- LLVMSetModuleIdentifier(M, ModuleName, ModuleIdentLen);
-
- LLVMSetTarget(M, LLVMGetTarget(Src));
- LLVMSetModuleDataLayout(M, LLVMGetModuleDataLayout(Src));
- if (strcmp(LLVMGetDataLayoutStr(M), LLVMGetDataLayoutStr(Src)))
- report_fatal_error("Inconsistent DataLayout string representation");
-
- size_t ModuleInlineAsmLen;
- const char *ModuleAsm = LLVMGetModuleInlineAsm(Src, &ModuleInlineAsmLen);
- LLVMSetModuleInlineAsm2(M, ModuleAsm, ModuleInlineAsmLen);
-
- declare_symbols(Src, M);
- clone_symbols(Src, M);
- char *Str = LLVMPrintModuleToString(M);
- fputs(Str, stdout);
-
- LLVMDisposeMessage(Str);
- LLVMDisposeModule(Src);
- LLVMDisposeModule(M);
- LLVMContextDispose(Ctx);
-
- return 0;
-}
diff --git a/gnu/llvm/tools/llvm-c-test/helpers.c b/gnu/llvm/tools/llvm-c-test/helpers.c
deleted file mode 100644
index 9af88bd8be9..00000000000
--- a/gnu/llvm/tools/llvm-c-test/helpers.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*===-- helpers.c - tool for testing libLLVM and llvm-c API ---------------===*\
-|* *|
-|* The LLVM Compiler Infrastructure *|
-|* *|
-|* This file is distributed under the University of Illinois Open Source *|
-|* License. See LICENSE.TXT for details. *|
-|* *|
-|*===----------------------------------------------------------------------===*|
-|* *|
-|* Helper functions *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#include <stdio.h>
-#include <string.h>
-
-#define MAX_TOKENS 512
-#define MAX_LINE_LEN 1024
-
-void llvm_tokenize_stdin(void (*cb)(char **tokens, int ntokens)) {
- char line[MAX_LINE_LEN];
- char *tokbuf[MAX_TOKENS];
-
- while (fgets(line, sizeof(line), stdin)) {
- int c = 0;
-
- if (line[0] == ';' || line[0] == '\n')
- continue;
-
- while (c < MAX_TOKENS) {
- tokbuf[c] = strtok(c ? NULL : line, " \n");
- if (!tokbuf[c])
- break;
- c++;
- }
- if (c)
- cb(tokbuf, c);
- }
-}
diff --git a/gnu/llvm/tools/llvm-c-test/include-all.c b/gnu/llvm/tools/llvm-c-test/include-all.c
deleted file mode 100644
index 17b9917a876..00000000000
--- a/gnu/llvm/tools/llvm-c-test/include-all.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/*===-- include-all.c - tool for testing libLLVM and llvm-c API -----------===*\
-|* *|
-|* The LLVM Compiler Infrastructure *|
-|* *|
-|* This file is distributed under the University of Illinois Open Source *|
-|* License. See LICENSE.TXT for details. *|
-|* *|
-|*===----------------------------------------------------------------------===*|
-|* *|
-|* This file doesn't have any actual code. It just make sure that all *|
-|* the llvm-c include files are good and doesn't generate any warnings *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-// FIXME: Autogenerate this list
-
-#include "llvm-c/Analysis.h"
-#include "llvm-c/BitReader.h"
-#include "llvm-c/BitWriter.h"
-#include "llvm-c/Core.h"
-#include "llvm-c/Disassembler.h"
-#include "llvm-c/ExecutionEngine.h"
-#include "llvm-c/Initialization.h"
-#include "llvm-c/LinkTimeOptimizer.h"
-#include "llvm-c/Linker.h"
-#include "llvm-c/Object.h"
-#include "llvm-c/Target.h"
-#include "llvm-c/TargetMachine.h"
-#include "llvm-c/Transforms/IPO.h"
-#include "llvm-c/Transforms/PassManagerBuilder.h"
-#include "llvm-c/Transforms/Scalar.h"
-#include "llvm-c/Transforms/Vectorize.h"
-#include "llvm-c/lto.h"
diff --git a/gnu/llvm/tools/llvm-c-test/llvm-c-test.h b/gnu/llvm/tools/llvm-c-test/llvm-c-test.h
deleted file mode 100644
index cf9a0f99de6..00000000000
--- a/gnu/llvm/tools/llvm-c-test/llvm-c-test.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*===-- llvm-c-test.h - tool for testing libLLVM and llvm-c API -----------===*\
-|* *|
-|* The LLVM Compiler Infrastructure *|
-|* *|
-|* This file is distributed under the University of Illinois Open Source *|
-|* License. See LICENSE.TXT for details. *|
-|* *|
-|*===----------------------------------------------------------------------===*|
-|* *|
-|* Header file for llvm-c-test *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-#ifndef LLVM_C_TEST_H
-#define LLVM_C_TEST_H
-
-#include <stdbool.h>
-#include "llvm-c/Core.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// helpers.c
-void llvm_tokenize_stdin(void (*cb)(char **tokens, int ntokens));
-
-// module.c
-LLVMModuleRef llvm_load_module(bool Lazy, bool New);
-int llvm_module_dump(bool Lazy, bool New);
-int llvm_module_list_functions(void);
-int llvm_module_list_globals(void);
-
-// calc.c
-int llvm_calc(void);
-
-// disassemble.c
-int llvm_disassemble(void);
-
-// debuginfo.c
-int llvm_test_dibuilder(void);
-
-// metadata.c
-int llvm_add_named_metadata_operand(void);
-int llvm_set_metadata(void);
-
-// object.c
-int llvm_object_list_sections(void);
-int llvm_object_list_symbols(void);
-
-// targets.c
-int llvm_targets_list(void);
-
-// echo.c
-int llvm_echo(void);
-
-// diagnostic.c
-int llvm_test_diagnostic_handler(void);
-
-// attributes.c
-int llvm_test_function_attributes(void);
-int llvm_test_callsite_attributes(void);
-
-#ifdef __cplusplus
-}
-#endif /* !defined(__cplusplus) */
-
-#endif
diff --git a/gnu/llvm/tools/llvm-c-test/main.c b/gnu/llvm/tools/llvm-c-test/main.c
deleted file mode 100644
index 60ab7f0f900..00000000000
--- a/gnu/llvm/tools/llvm-c-test/main.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*===-- main.c - tool for testing libLLVM and llvm-c API ------------------===*\
-|* *|
-|* The LLVM Compiler Infrastructure *|
-|* *|
-|* This file is distributed under the University of Illinois Open Source *|
-|* License. See LICENSE.TXT for details. *|
-|* *|
-|*===----------------------------------------------------------------------===*|
-|* *|
-|* Main file for llvm-c-tests. "Parses" arguments and dispatches. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#include "llvm-c-test.h"
-#include <stdio.h>
-#include <string.h>
-
-static void print_usage(void) {
- fprintf(stderr, "llvm-c-test command\n\n");
- fprintf(stderr, " Commands:\n");
- fprintf(stderr, " * --module-dump\n");
- fprintf(stderr, " Read bitcode from stdin - print disassembly\n\n");
- fprintf(stderr, " * --lazy-module-dump\n");
- fprintf(stderr,
- " Lazily read bitcode from stdin - print disassembly\n\n");
- fprintf(stderr, " * --new-module-dump\n");
- fprintf(stderr, " Read bitcode from stdin - print disassembly\n\n");
- fprintf(stderr, " * --lazy-new-module-dump\n");
- fprintf(stderr,
- " Lazily read bitcode from stdin - print disassembly\n\n");
- fprintf(stderr, " * --module-list-functions\n");
- fprintf(stderr,
- " Read bitcode from stdin - list summary of functions\n\n");
- fprintf(stderr, " * --module-list-globals\n");
- fprintf(stderr, " Read bitcode from stdin - list summary of globals\n\n");
- fprintf(stderr, " * --targets-list\n");
- fprintf(stderr, " List available targets\n\n");
- fprintf(stderr, " * --object-list-sections\n");
- fprintf(stderr, " Read object file form stdin - list sections\n\n");
- fprintf(stderr, " * --object-list-symbols\n");
- fprintf(stderr,
- " Read object file form stdin - list symbols (like nm)\n\n");
- fprintf(stderr, " * --disassemble\n");
- fprintf(stderr, " Read lines of triple, hex ascii machine code from stdin "
- "- print disassembly\n\n");
- fprintf(stderr, " * --calc\n");
- fprintf(
- stderr,
- " Read lines of name, rpn from stdin - print generated module\n\n");
- fprintf(stderr, " * --echo\n");
- fprintf(stderr,
- " Read bitcode file form stdin - print it back out\n\n");
- fprintf(stderr, " * --test-diagnostic-handler\n");
- fprintf(stderr,
- " Read bitcode file form stdin with a diagnostic handler set\n\n");
- fprintf(stderr, " * --test-dibuilder\n");
- fprintf(stderr,
- " Run tests for the DIBuilder C API - print generated module\n\n");
-}
-
-int main(int argc, char **argv) {
- LLVMPassRegistryRef pr = LLVMGetGlobalPassRegistry();
-
- LLVMInitializeCore(pr);
-
- if (argc == 2 && !strcmp(argv[1], "--lazy-new-module-dump")) {
- return llvm_module_dump(true, true);
- } else if (argc == 2 && !strcmp(argv[1], "--new-module-dump")) {
- return llvm_module_dump(false, true);
- } else if (argc == 2 && !strcmp(argv[1], "--lazy-module-dump")) {
- return llvm_module_dump(true, false);
- } else if (argc == 2 && !strcmp(argv[1], "--module-dump")) {
- return llvm_module_dump(false, false);
- } else if (argc == 2 && !strcmp(argv[1], "--module-list-functions")) {
- return llvm_module_list_functions();
- } else if (argc == 2 && !strcmp(argv[1], "--module-list-globals")) {
- return llvm_module_list_globals();
- } else if (argc == 2 && !strcmp(argv[1], "--targets-list")) {
- return llvm_targets_list();
- } else if (argc == 2 && !strcmp(argv[1], "--object-list-sections")) {
- return llvm_object_list_sections();
- } else if (argc == 2 && !strcmp(argv[1], "--object-list-symbols")) {
- return llvm_object_list_symbols();
- } else if (argc == 2 && !strcmp(argv[1], "--disassemble")) {
- return llvm_disassemble();
- } else if (argc == 2 && !strcmp(argv[1], "--calc")) {
- return llvm_calc();
- } else if (argc == 2 && !strcmp(argv[1], "--add-named-metadata-operand")) {
- return llvm_add_named_metadata_operand();
- } else if (argc == 2 && !strcmp(argv[1], "--set-metadata")) {
- return llvm_set_metadata();
- } else if (argc == 2 && !strcmp(argv[1], "--test-function-attributes")) {
- return llvm_test_function_attributes();
- } else if (argc == 2 && !strcmp(argv[1], "--test-callsite-attributes")) {
- return llvm_test_callsite_attributes();
- } else if (argc == 2 && !strcmp(argv[1], "--echo")) {
- return llvm_echo();
- } else if (argc == 2 && !strcmp(argv[1], "--test-diagnostic-handler")) {
- return llvm_test_diagnostic_handler();
- } else if (argc == 2 && !strcmp(argv[1], "--test-dibuilder")) {
- return llvm_test_dibuilder();
- } else {
- print_usage();
- }
-
- return 1;
-}
diff --git a/gnu/llvm/tools/llvm-c-test/metadata.c b/gnu/llvm/tools/llvm-c-test/metadata.c
deleted file mode 100644
index 89215b8ebcb..00000000000
--- a/gnu/llvm/tools/llvm-c-test/metadata.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*===-- object.c - tool for testing libLLVM and llvm-c API ----------------===*\
-|* *|
-|* The LLVM Compiler Infrastructure *|
-|* *|
-|* This file is distributed under the University of Illinois Open Source *|
-|* License. See LICENSE.TXT for details. *|
-|* *|
-|*===----------------------------------------------------------------------===*|
-|* *|
-|* This file implements the --add-named-metadata-operand and --set-metadata *|
-|* commands in llvm-c-test. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#include "llvm-c-test.h"
-
-int llvm_add_named_metadata_operand(void) {
- LLVMModuleRef m = LLVMModuleCreateWithName("Mod");
- LLVMValueRef values[] = { LLVMConstInt(LLVMInt32Type(), 0, 0) };
-
- // This used to trigger an assertion
- LLVMAddNamedMetadataOperand(m, "name", LLVMMDNode(values, 1));
-
- LLVMDisposeModule(m);
-
- return 0;
-}
-
-int llvm_set_metadata(void) {
- LLVMBuilderRef b = LLVMCreateBuilder();
- LLVMValueRef values[] = { LLVMConstInt(LLVMInt32Type(), 0, 0) };
-
- // This used to trigger an assertion
- LLVMSetMetadata(
- LLVMBuildRetVoid(b),
- LLVMGetMDKindID("kind", 4),
- LLVMMDNode(values, 1));
-
- LLVMDisposeBuilder(b);
-
- return 0;
-}
diff --git a/gnu/llvm/tools/llvm-c-test/module.c b/gnu/llvm/tools/llvm-c-test/module.c
deleted file mode 100644
index cbb44d0bd15..00000000000
--- a/gnu/llvm/tools/llvm-c-test/module.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*===-- module.c - tool for testing libLLVM and llvm-c API ----------------===*\
-|* *|
-|* The LLVM Compiler Infrastructure *|
-|* *|
-|* This file is distributed under the University of Illinois Open Source *|
-|* License. See LICENSE.TXT for details. *|
-|* *|
-|*===----------------------------------------------------------------------===*|
-|* *|
-|* This file implements the --module-dump, --module-list-functions and *|
-|* --module-list-globals commands in llvm-c-test. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#include "llvm-c-test.h"
-#include "llvm-c/BitReader.h"
-#include <stdio.h>
-#include <stdlib.h>
-
-static void diagnosticHandler(LLVMDiagnosticInfoRef DI, void *C) {
- char *CErr = LLVMGetDiagInfoDescription(DI);
- fprintf(stderr, "Error with new bitcode parser: %s\n", CErr);
- LLVMDisposeMessage(CErr);
- exit(1);
-}
-
-LLVMModuleRef llvm_load_module(bool Lazy, bool New) {
- LLVMMemoryBufferRef MB;
- LLVMModuleRef M;
- char *msg = NULL;
-
- if (LLVMCreateMemoryBufferWithSTDIN(&MB, &msg)) {
- fprintf(stderr, "Error reading file: %s\n", msg);
- exit(1);
- }
-
- LLVMBool Ret;
- if (New) {
- LLVMContextRef C = LLVMGetGlobalContext();
- LLVMContextSetDiagnosticHandler(C, diagnosticHandler, NULL);
- if (Lazy)
- Ret = LLVMGetBitcodeModule2(MB, &M);
- else
- Ret = LLVMParseBitcode2(MB, &M);
- } else {
- 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);
- }
-
- if (!Lazy)
- LLVMDisposeMemoryBuffer(MB);
-
- return M;
-}
-
-int llvm_module_dump(bool Lazy, bool New) {
- LLVMModuleRef M = llvm_load_module(Lazy, New);
-
- char *irstr = LLVMPrintModuleToString(M);
- puts(irstr);
- LLVMDisposeMessage(irstr);
-
- LLVMDisposeModule(M);
-
- return 0;
-}
-
-int llvm_module_list_functions(void) {
- LLVMModuleRef M = llvm_load_module(false, false);
- LLVMValueRef f;
-
- f = LLVMGetFirstFunction(M);
- while (f) {
- if (LLVMIsDeclaration(f)) {
- printf("FunctionDeclaration: %s\n", LLVMGetValueName(f));
- } else {
- LLVMBasicBlockRef bb;
- LLVMValueRef isn;
- unsigned nisn = 0;
- unsigned nbb = 0;
-
- printf("FunctionDefinition: %s [#bb=%u]\n", LLVMGetValueName(f),
- LLVMCountBasicBlocks(f));
-
- for (bb = LLVMGetFirstBasicBlock(f); bb;
- bb = LLVMGetNextBasicBlock(bb)) {
- nbb++;
- for (isn = LLVMGetFirstInstruction(bb); isn;
- isn = LLVMGetNextInstruction(isn)) {
- nisn++;
- if (LLVMIsACallInst(isn)) {
- LLVMValueRef callee =
- LLVMGetOperand(isn, LLVMGetNumOperands(isn) - 1);
- printf(" calls: %s\n", LLVMGetValueName(callee));
- }
- }
- }
- printf(" #isn: %u\n", nisn);
- printf(" #bb: %u\n\n", nbb);
- }
- f = LLVMGetNextFunction(f);
- }
-
- LLVMDisposeModule(M);
-
- return 0;
-}
-
-int llvm_module_list_globals(void) {
- LLVMModuleRef M = llvm_load_module(false, false);
- LLVMValueRef g;
-
- g = LLVMGetFirstGlobal(M);
- while (g) {
- LLVMTypeRef T = LLVMTypeOf(g);
- char *s = LLVMPrintTypeToString(T);
-
- printf("Global%s: %s %s\n",
- LLVMIsDeclaration(g) ? "Declaration" : "Definition",
- LLVMGetValueName(g), s);
-
- LLVMDisposeMessage(s);
-
- g = LLVMGetNextGlobal(g);
- }
-
- LLVMDisposeModule(M);
-
- return 0;
-}
diff --git a/gnu/llvm/tools/llvm-c-test/object.c b/gnu/llvm/tools/llvm-c-test/object.c
deleted file mode 100644
index 809ad54f872..00000000000
--- a/gnu/llvm/tools/llvm-c-test/object.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*===-- object.c - tool for testing libLLVM and llvm-c API ----------------===*\
-|* *|
-|* The LLVM Compiler Infrastructure *|
-|* *|
-|* This file is distributed under the University of Illinois Open Source *|
-|* License. See LICENSE.TXT for details. *|
-|* *|
-|*===----------------------------------------------------------------------===*|
-|* *|
-|* This file implements the --object-list-sections and --object-list-symbols *|
-|* commands in llvm-c-test. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#include "llvm-c-test.h"
-#include "llvm-c/Object.h"
-#include <stdio.h>
-#include <stdlib.h>
-
-int llvm_object_list_sections(void) {
- LLVMMemoryBufferRef MB;
- LLVMObjectFileRef O;
- LLVMSectionIteratorRef sect;
- char *msg = NULL;
-
- if (LLVMCreateMemoryBufferWithSTDIN(&MB, &msg)) {
- fprintf(stderr, "Error reading file: %s\n", msg);
- exit(1);
- }
-
- O = LLVMCreateObjectFile(MB);
- if (!O) {
- fprintf(stderr, "Error reading object\n");
- exit(1);
- }
-
- sect = LLVMGetSections(O);
- while (!LLVMIsSectionIteratorAtEnd(O, sect)) {
- printf("'%s': @0x%08" PRIx64 " +%" PRIu64 "\n", LLVMGetSectionName(sect),
- LLVMGetSectionAddress(sect), LLVMGetSectionSize(sect));
-
- LLVMMoveToNextSection(sect);
- }
-
- LLVMDisposeSectionIterator(sect);
-
- LLVMDisposeObjectFile(O);
-
- return 0;
-}
-
-int llvm_object_list_symbols(void) {
- LLVMMemoryBufferRef MB;
- LLVMObjectFileRef O;
- LLVMSectionIteratorRef sect;
- LLVMSymbolIteratorRef sym;
- char *msg = NULL;
-
- if (LLVMCreateMemoryBufferWithSTDIN(&MB, &msg)) {
- fprintf(stderr, "Error reading file: %s\n", msg);
- exit(1);
- }
-
- O = LLVMCreateObjectFile(MB);
- if (!O) {
- fprintf(stderr, "Error reading object\n");
- exit(1);
- }
-
- sect = LLVMGetSections(O);
- sym = LLVMGetSymbols(O);
- while (!LLVMIsSymbolIteratorAtEnd(O, sym)) {
-
- LLVMMoveToContainingSection(sect, sym);
- printf("%s @0x%08" PRIx64 " +%" PRIu64 " (%s)\n", LLVMGetSymbolName(sym),
- LLVMGetSymbolAddress(sym), LLVMGetSymbolSize(sym),
- LLVMGetSectionName(sect));
-
- LLVMMoveToNextSymbol(sym);
- }
-
- LLVMDisposeSymbolIterator(sym);
-
- LLVMDisposeObjectFile(O);
-
- return 0;
-}
diff --git a/gnu/llvm/tools/llvm-c-test/targets.c b/gnu/llvm/tools/llvm-c-test/targets.c
deleted file mode 100644
index f2a9e924a74..00000000000
--- a/gnu/llvm/tools/llvm-c-test/targets.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/*===-- targets.c - tool for testing libLLVM and llvm-c API ---------------===*\
-|* *|
-|* The LLVM Compiler Infrastructure *|
-|* *|
-|* This file is distributed under the University of Illinois Open Source *|
-|* License. See LICENSE.TXT for details. *|
-|* *|
-|*===----------------------------------------------------------------------===*|
-|* *|
-|* This file implements the --targets command in llvm-c-test. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#include "llvm-c/TargetMachine.h"
-#include <stdio.h>
-
-int llvm_targets_list(void) {
- LLVMTargetRef t;
- LLVMInitializeAllTargetInfos();
- LLVMInitializeAllTargets();
-
- for (t = LLVMGetFirstTarget(); t; t = LLVMGetNextTarget(t)) {
- printf("%s", LLVMGetTargetName(t));
- if (LLVMTargetHasJIT(t))
- printf(" (+jit)");
- printf("\n - %s\n", LLVMGetTargetDescription(t));
- }
-
- return 0;
-}