| Alex Bradbury | c85be0d | 2018-01-10 19:41:03 +0000 | [diff] [blame] | 1 | //=- RISCVMachineFunctionInfo.h - RISCV machine function info -----*- C++ -*-=// | 
|  | 2 | // | 
| Chandler Carruth | 2946cd7 | 2019-01-19 08:50:56 +0000 | [diff] [blame] | 3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | 4 | // See https://llvm.org/LICENSE.txt for license information. | 
|  | 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
| Alex Bradbury | c85be0d | 2018-01-10 19:41:03 +0000 | [diff] [blame] | 6 | // | 
|  | 7 | //===----------------------------------------------------------------------===// | 
|  | 8 | // | 
|  | 9 | // This file declares RISCV-specific per-machine-function information. | 
|  | 10 | // | 
|  | 11 | //===----------------------------------------------------------------------===// | 
|  | 12 |  | 
|  | 13 | #ifndef LLVM_LIB_TARGET_RISCV_RISCVMACHINEFUNCTIONINFO_H | 
|  | 14 | #define LLVM_LIB_TARGET_RISCV_RISCVMACHINEFUNCTIONINFO_H | 
|  | 15 |  | 
| Alex Bradbury | 0b4175f | 2018-04-12 05:34:25 +0000 | [diff] [blame] | 16 | #include "llvm/CodeGen/MachineFrameInfo.h" | 
| Alex Bradbury | c85be0d | 2018-01-10 19:41:03 +0000 | [diff] [blame] | 17 | #include "llvm/CodeGen/MachineFunction.h" | 
|  | 18 |  | 
|  | 19 | namespace llvm { | 
|  | 20 |  | 
|  | 21 | /// RISCVMachineFunctionInfo - This class is derived from MachineFunctionInfo | 
|  | 22 | /// and contains private RISCV-specific information for each MachineFunction. | 
|  | 23 | class RISCVMachineFunctionInfo : public MachineFunctionInfo { | 
| Alex Bradbury | 0b4175f | 2018-04-12 05:34:25 +0000 | [diff] [blame] | 24 | private: | 
|  | 25 | MachineFunction &MF; | 
| Alex Bradbury | c85be0d | 2018-01-10 19:41:03 +0000 | [diff] [blame] | 26 | /// FrameIndex for start of varargs area | 
|  | 27 | int VarArgsFrameIndex = 0; | 
|  | 28 | /// Size of the save area used for varargs | 
|  | 29 | int VarArgsSaveSize = 0; | 
| Alex Bradbury | 0b4175f | 2018-04-12 05:34:25 +0000 | [diff] [blame] | 30 | /// FrameIndex used for transferring values between 64-bit FPRs and a pair | 
|  | 31 | /// of 32-bit GPRs via the stack. | 
|  | 32 | int MoveF64FrameIndex = -1; | 
| Alex Bradbury | c85be0d | 2018-01-10 19:41:03 +0000 | [diff] [blame] | 33 |  | 
|  | 34 | public: | 
| Alex Bradbury | 0b4175f | 2018-04-12 05:34:25 +0000 | [diff] [blame] | 35 | //  RISCVMachineFunctionInfo() = default; | 
| Alex Bradbury | c85be0d | 2018-01-10 19:41:03 +0000 | [diff] [blame] | 36 |  | 
| Alex Bradbury | 0b4175f | 2018-04-12 05:34:25 +0000 | [diff] [blame] | 37 | RISCVMachineFunctionInfo(MachineFunction &MF) : MF(MF) {} | 
| Alex Bradbury | c85be0d | 2018-01-10 19:41:03 +0000 | [diff] [blame] | 38 |  | 
|  | 39 | int getVarArgsFrameIndex() const { return VarArgsFrameIndex; } | 
|  | 40 | void setVarArgsFrameIndex(int Index) { VarArgsFrameIndex = Index; } | 
|  | 41 |  | 
|  | 42 | unsigned getVarArgsSaveSize() const { return VarArgsSaveSize; } | 
|  | 43 | void setVarArgsSaveSize(int Size) { VarArgsSaveSize = Size; } | 
| Alex Bradbury | 0b4175f | 2018-04-12 05:34:25 +0000 | [diff] [blame] | 44 |  | 
|  | 45 | int getMoveF64FrameIndex() { | 
|  | 46 | if (MoveF64FrameIndex == -1) | 
|  | 47 | MoveF64FrameIndex = MF.getFrameInfo().CreateStackObject(8, 8, false); | 
|  | 48 | return MoveF64FrameIndex; | 
|  | 49 | } | 
| Alex Bradbury | c85be0d | 2018-01-10 19:41:03 +0000 | [diff] [blame] | 50 | }; | 
|  | 51 |  | 
|  | 52 | } // end namespace llvm | 
|  | 53 |  | 
|  | 54 | #endif // LLVM_LIB_TARGET_RISCV_RISCVMACHINEFUNCTIONINFO_H |