blob: bfb3fdef5ebfea845cc6373045406fb0ad4ec423 [file] [log] [blame]
Pete Couperus2d1f6d62017-08-24 15:40:33 +00001//===- ARCMachineFunctionInfo.h - ARC machine function info -----*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file declares ARC-specific per-machine-function information.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_ARC_ARCMACHINEFUNCTIONINFO_H
15#define LLVM_LIB_TARGET_ARC_ARCMACHINEFUNCTIONINFO_H
16
17#include "llvm/CodeGen/MachineFunction.h"
18#include <vector>
19
20namespace llvm {
21
22/// ARCFunctionInfo - This class is derived from MachineFunction private
23/// ARC target-specific information for each MachineFunction.
24class ARCFunctionInfo : public MachineFunctionInfo {
25 virtual void anchor();
26 bool ReturnStackOffsetSet;
27 int VarArgsFrameIndex;
28 unsigned VarArgFrameBytes;
29 unsigned ReturnStackOffset;
30
31public:
32 ARCFunctionInfo()
33 : ReturnStackOffsetSet(false), VarArgsFrameIndex(0), VarArgFrameBytes(0),
34 ReturnStackOffset(-1U), MaxCallStackReq(0) {}
35
36 explicit ARCFunctionInfo(MachineFunction &MF)
37 : ReturnStackOffsetSet(false), VarArgsFrameIndex(0), VarArgFrameBytes(0),
38 ReturnStackOffset(-1U), MaxCallStackReq(0) {
39 // Functions are 4-byte (2**2) aligned.
40 MF.setAlignment(2);
41 }
42
43 ~ARCFunctionInfo() {}
44
45 void setVarArgsFrameIndex(int off) { VarArgsFrameIndex = off; }
46 int getVarArgsFrameIndex() const { return VarArgsFrameIndex; }
47
48 void setReturnStackOffset(unsigned value) {
49 assert(!ReturnStackOffsetSet && "Return stack offset set twice");
50 ReturnStackOffset = value;
51 ReturnStackOffsetSet = true;
52 }
53
54 unsigned getReturnStackOffset() const {
55 assert(ReturnStackOffsetSet && "Return stack offset not set");
56 return ReturnStackOffset;
57 }
58
59 unsigned MaxCallStackReq;
60};
61
62} // end namespace llvm
63
64#endif // LLVM_LIB_TARGET_ARC_ARCMACHINEFUNCTIONINFO_H