mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-24 13:33:37 +02:00
0bd0e50fbc
The explicit set of destination types is not fully redundant when lazy loading since the TypeFinder will not find types used only in function bodies. This keeps the logic to drop the name of mapped types since it still helps with avoiding further renaming. llvm-svn: 223043
56 lines
1.6 KiB
C++
56 lines
1.6 KiB
C++
//===- Linker.h - Module Linker Interface -----------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LINKER_LINKER_H
|
|
#define LLVM_LINKER_LINKER_H
|
|
|
|
#include "llvm/ADT/SmallPtrSet.h"
|
|
|
|
#include <functional>
|
|
|
|
namespace llvm {
|
|
class DiagnosticInfo;
|
|
class Module;
|
|
class StructType;
|
|
|
|
/// This class provides the core functionality of linking in LLVM. It keeps a
|
|
/// pointer to the merged module so far. It doesn't take ownership of the
|
|
/// module since it is assumed that the user of this class will want to do
|
|
/// something with it after the linking.
|
|
class Linker {
|
|
public:
|
|
typedef std::function<void(const DiagnosticInfo &)> DiagnosticHandlerFunction;
|
|
|
|
Linker(Module *M, DiagnosticHandlerFunction DiagnosticHandler);
|
|
Linker(Module *M);
|
|
~Linker();
|
|
|
|
Module *getModule() const { return Composite; }
|
|
void deleteModule();
|
|
|
|
/// \brief Link \p Src into the composite. The source is destroyed.
|
|
/// Returns true on error.
|
|
bool linkInModule(Module *Src);
|
|
|
|
static bool LinkModules(Module *Dest, Module *Src,
|
|
DiagnosticHandlerFunction DiagnosticHandler);
|
|
|
|
static bool LinkModules(Module *Dest, Module *Src);
|
|
|
|
private:
|
|
void init(Module *M, DiagnosticHandlerFunction DiagnosticHandler);
|
|
Module *Composite;
|
|
SmallPtrSet<StructType *, 32> IdentifiedStructTypes;
|
|
DiagnosticHandlerFunction DiagnosticHandler;
|
|
};
|
|
|
|
} // End llvm namespace
|
|
|
|
#endif
|