mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
f4ccd11075
This compiles with no changes to clang/lld/lldb with MSVC and includes overloads to various functions which are used by those projects and llvm which have OwningPtr's as parameters. This should allow out of tree projects some time to move. There are also no changes to libs/Target, which should help out of tree targets have time to move, if necessary. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203083 91177308-0d34-0410-b5e6-96231b3b80d8
118 lines
3.5 KiB
C++
118 lines
3.5 KiB
C++
//===-- llvm/IR/AsmWriter.h - Printing LLVM IR as an assembly file - C++ --===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This files defines the interface for the AssemblyWriter class used to print
|
|
// LLVM IR and various helper classes that are used in printing.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_IR_ASSEMBLYWRITER_H
|
|
#define LLVM_IR_ASSEMBLYWRITER_H
|
|
|
|
#include "llvm/ADT/DenseMap.h"
|
|
#include "llvm/IR/Attributes.h"
|
|
#include "llvm/IR/Instructions.h"
|
|
#include "llvm/IR/TypeFinder.h"
|
|
#include "llvm/Support/FormattedStream.h"
|
|
|
|
namespace llvm {
|
|
|
|
class BasicBlock;
|
|
class Function;
|
|
class GlobalValue;
|
|
class Module;
|
|
class NamedMDNode;
|
|
class Value;
|
|
class SlotTracker;
|
|
|
|
/// Create a new SlotTracker for a Module
|
|
SlotTracker *createSlotTracker(const Module *M);
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// TypePrinting Class: Type printing machinery
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
class TypePrinting {
|
|
TypePrinting(const TypePrinting &) LLVM_DELETED_FUNCTION;
|
|
void operator=(const TypePrinting&) LLVM_DELETED_FUNCTION;
|
|
public:
|
|
|
|
/// NamedTypes - The named types that are used by the current module.
|
|
TypeFinder NamedTypes;
|
|
|
|
/// NumberedTypes - The numbered types, along with their value.
|
|
DenseMap<StructType*, unsigned> NumberedTypes;
|
|
|
|
|
|
TypePrinting() {}
|
|
~TypePrinting() {}
|
|
|
|
void incorporateTypes(const Module &M);
|
|
|
|
void print(Type *Ty, raw_ostream &OS);
|
|
|
|
void printStructBody(StructType *Ty, raw_ostream &OS);
|
|
};
|
|
|
|
class AssemblyWriter {
|
|
protected:
|
|
formatted_raw_ostream &Out;
|
|
const Module *TheModule;
|
|
|
|
private:
|
|
std::unique_ptr<SlotTracker> ModuleSlotTracker;
|
|
SlotTracker &Machine;
|
|
TypePrinting TypePrinter;
|
|
AssemblyAnnotationWriter *AnnotationWriter;
|
|
|
|
public:
|
|
/// Construct an AssemblyWriter with an external SlotTracker
|
|
AssemblyWriter(formatted_raw_ostream &o, SlotTracker &Mac,
|
|
const Module *M, AssemblyAnnotationWriter *AAW);
|
|
|
|
/// Construct an AssemblyWriter with an internally allocated SlotTracker
|
|
AssemblyWriter(formatted_raw_ostream &o, const Module *M,
|
|
AssemblyAnnotationWriter *AAW);
|
|
|
|
virtual ~AssemblyWriter();
|
|
|
|
void printMDNodeBody(const MDNode *MD);
|
|
void printNamedMDNode(const NamedMDNode *NMD);
|
|
|
|
void printModule(const Module *M);
|
|
|
|
void writeOperand(const Value *Op, bool PrintType);
|
|
void writeParamOperand(const Value *Operand, AttributeSet Attrs,unsigned Idx);
|
|
void writeAtomic(AtomicOrdering Ordering, SynchronizationScope SynchScope);
|
|
|
|
void writeAllMDNodes();
|
|
void writeMDNode(unsigned Slot, const MDNode *Node);
|
|
void writeAllAttributeGroups();
|
|
|
|
void printTypeIdentities();
|
|
void printGlobal(const GlobalVariable *GV);
|
|
void printAlias(const GlobalAlias *GV);
|
|
void printFunction(const Function *F);
|
|
void printArgument(const Argument *FA, AttributeSet Attrs, unsigned Idx);
|
|
void printBasicBlock(const BasicBlock *BB);
|
|
void printInstructionLine(const Instruction &I);
|
|
void printInstruction(const Instruction &I);
|
|
|
|
private:
|
|
void init();
|
|
|
|
// printInfoComment - Print a little comment after the instruction indicating
|
|
// which slot it occupies.
|
|
void printInfoComment(const Value &V);
|
|
};
|
|
|
|
} // namespace llvm
|
|
|
|
#endif //LLVM_IR_ASMWRITER_H
|