mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
68c567a38a
The syntax for "cmpxchg" should now look something like: cmpxchg i32* %addr, i32 42, i32 3 acquire monotonic where the second ordering argument gives the required semantics in the case that no exchange takes place. It should be no stronger than the first ordering constraint and cannot be either "release" or "acq_rel" (since no store will have taken place). rdar://problem/15996804 llvm-svn: 203559
121 lines
3.6 KiB
C++
121 lines
3.6 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 writeAtomicCmpXchg(AtomicOrdering SuccessOrdering,
|
|
AtomicOrdering FailureOrdering,
|
|
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
|