1235633Sdim//===-- XCoreMachineFuctionInfo.h - XCore machine function info -*- C++ -*-===//
2193323Sed//
3193323Sed//                     The LLVM Compiler Infrastructure
4193323Sed//
5193323Sed// This file is distributed under the University of Illinois Open Source
6193323Sed// License. See LICENSE.TXT for details.
7193323Sed//
8193323Sed//===----------------------------------------------------------------------===//
9193323Sed//
10193323Sed// This file declares XCore-specific per-machine-function information.
11193323Sed//
12193323Sed//===----------------------------------------------------------------------===//
13193323Sed
14193323Sed#ifndef XCOREMACHINEFUNCTIONINFO_H
15193323Sed#define XCOREMACHINEFUNCTIONINFO_H
16193323Sed
17252723Sdim#include "llvm/CodeGen/MachineFrameInfo.h"
18193323Sed#include "llvm/CodeGen/MachineFunction.h"
19193323Sed#include <vector>
20193323Sed
21193323Sednamespace llvm {
22193323Sed
23193323Sed// Forward declarations
24193323Sedclass Function;
25193323Sed
26193323Sed/// XCoreFunctionInfo - This class is derived from MachineFunction private
27193323Sed/// XCore target-specific information for each MachineFunction.
28193323Sedclass XCoreFunctionInfo : public MachineFunctionInfo {
29235633Sdim  virtual void anchor();
30193323Sed  bool UsesLR;
31193323Sed  int LRSpillSlot;
32193323Sed  int FPSpillSlot;
33193323Sed  int VarArgsFrameIndex;
34205218Srdivacky  std::vector<std::pair<MCSymbol*, CalleeSavedInfo> > SpillLabels;
35193323Sed
36193323Sedpublic:
37193323Sed  XCoreFunctionInfo() :
38193323Sed    UsesLR(false),
39193323Sed    LRSpillSlot(0),
40193323Sed    FPSpillSlot(0),
41193323Sed    VarArgsFrameIndex(0) {}
42193323Sed
43193574Sed  explicit XCoreFunctionInfo(MachineFunction &MF) :
44193323Sed    UsesLR(false),
45193323Sed    LRSpillSlot(0),
46193323Sed    FPSpillSlot(0),
47193323Sed    VarArgsFrameIndex(0) {}
48193323Sed
49193323Sed  ~XCoreFunctionInfo() {}
50193323Sed
51193323Sed  void setVarArgsFrameIndex(int off) { VarArgsFrameIndex = off; }
52193323Sed  int getVarArgsFrameIndex() const { return VarArgsFrameIndex; }
53193323Sed
54193323Sed  void setUsesLR(bool val) { UsesLR = val; }
55193323Sed  bool getUsesLR() const { return UsesLR; }
56193323Sed
57193323Sed  void setLRSpillSlot(int off) { LRSpillSlot = off; }
58193323Sed  int getLRSpillSlot() const { return LRSpillSlot; }
59193323Sed
60193323Sed  void setFPSpillSlot(int off) { FPSpillSlot = off; }
61193323Sed  int getFPSpillSlot() const { return FPSpillSlot; }
62193323Sed
63205218Srdivacky  std::vector<std::pair<MCSymbol*, CalleeSavedInfo> > &getSpillLabels() {
64193323Sed    return SpillLabels;
65193323Sed  }
66193323Sed};
67193323Sed} // End llvm namespace
68193323Sed
69193323Sed#endif // XCOREMACHINEFUNCTIONINFO_H
70