Added support in MC for Directional Local Labels.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103989 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Kevin Enderby
2010-05-17 23:08:19 +00:00
parent c6177a4531
commit ebe7fcd041
8 changed files with 283 additions and 9 deletions

View File

@@ -20,6 +20,7 @@ namespace llvm {
class MCExpr;
class MCSection;
class MCSymbol;
class MCLabel;
class StringRef;
class Twine;
class MCSectionMachO;
@@ -43,6 +44,15 @@ namespace llvm {
/// NextUniqueID - The next ID to dole out to an unnamed assembler temporary
/// symbol.
unsigned NextUniqueID;
/// Instances of directional local labels.
DenseMap<unsigned, MCLabel *> Instances;
/// NextInstance() creates the next instance of the directional local label
/// for the LocalLabelVal and adds it to the map if needed.
unsigned NextInstance(int64_t LocalLabelVal);
/// GetInstance() gets the current instance of the directional local label
/// for the LocalLabelVal and adds it to the map if needed.
unsigned GetInstance(int64_t LocalLabelVal);
/// Allocator - Allocator object used for creating machine code objects.
///
@@ -64,6 +74,14 @@ namespace llvm {
/// with a unique but unspecified name.
MCSymbol *CreateTempSymbol();
/// CreateDirectionalLocalSymbol - Create the defintion of a directional
/// local symbol for numbered label (used for "1:" defintions).
MCSymbol *CreateDirectionalLocalSymbol(int64_t LocalLabelVal);
/// GetDirectionalLocalSymbol - Create and return a directional local
/// symbol for numbered label (used for "1b" or 1f" references).
MCSymbol *GetDirectionalLocalSymbol(int64_t LocalLabelVal, int bORf);
/// GetOrCreateSymbol - Lookup the symbol inside with the specified
/// @p Name. If it exists, return it. If not, create a forward
/// reference and return it.

56
include/llvm/MC/MCLabel.h Normal file
View File

@@ -0,0 +1,56 @@
//===- MCLabel.h - Machine Code Directional Local Labels --------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file contains the declaration of the MCLabel class.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_MC_MCLABEL_H
#define LLVM_MC_MCLABEL_H
namespace llvm {
class MCContext;
class raw_ostream;
/// MCLabel - Instances of this class represent a label name in the MC file,
/// and MCLabel are created and unique'd by the MCContext class. MCLabel
/// should only be constructed for valid instances in the object file.
class MCLabel {
// Instance - the instance number of this Directional Local Label
unsigned Instance;
private: // MCContext creates and uniques these.
friend class MCContext;
MCLabel(unsigned instance)
: Instance(instance) {}
MCLabel(const MCLabel&); // DO NOT IMPLEMENT
void operator=(const MCLabel&); // DO NOT IMPLEMENT
public:
/// getInstance - Get the current instance of this Directional Local Label.
unsigned getInstance() const { return Instance; }
/// incInstance - Increment the current instance of this Directional Local
/// Label.
unsigned incInstance() { return ++Instance; }
/// print - Print the value to the stream \arg OS.
void print(raw_ostream &OS) const;
/// dump - Print the value to stderr.
void dump() const;
};
inline raw_ostream &operator<<(raw_ostream &OS, const MCLabel &Label) {
Label.print(OS);
return OS;
}
} // end namespace llvm
#endif