//===-- llvm/CodeGen/PseudoSourceValue.cpp ----------------------*- C++ -*-===//
//
//                     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 PseudoSourceValue class.
//
//===----------------------------------------------------------------------===//

#include "llvm/CodeGen/PseudoSourceValue.h"
#include "llvm/DerivedTypes.h"
#include "llvm/Support/ManagedStatic.h"

namespace llvm {
  static ManagedStatic<PseudoSourceValue[5]> PSVs;

  const PseudoSourceValue *PseudoSourceValue::getFixedStack() { return &(*PSVs)[0]; }
  const PseudoSourceValue *PseudoSourceValue::getStack() { return &(*PSVs)[1]; }
  const PseudoSourceValue *PseudoSourceValue::getGOT() { return &(*PSVs)[2]; }
  const PseudoSourceValue *PseudoSourceValue::getConstantPool() { return &(*PSVs)[3]; }
  const PseudoSourceValue *PseudoSourceValue::getJumpTable() { return &(*PSVs)[4]; }

  static const char *PSVNames[] = {
    "FixedStack",
    "Stack",
    "GOT",
    "ConstantPool",
    "JumpTable"
  };

  PseudoSourceValue::PseudoSourceValue() :
    Value(PointerType::getUnqual(Type::Int8Ty), PseudoSourceValueVal) {}

  void PseudoSourceValue::print(std::ostream &OS) const {
    OS << PSVNames[this - *PSVs];
  }
}
