| //===---- MipsCCState.h - CCState with Mips specific extensions -----------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #ifndef MIPSCCSTATE_H | |
| #define MIPSCCSTATE_H | |
| #include "MipsISelLowering.h" | |
| #include "llvm/ADT/SmallVector.h" | |
| #include "llvm/CodeGen/CallingConvLower.h" | |
| namespace llvm { | |
| class SDNode; | |
| class MipsSubtarget; | |
| class MipsCCState : public CCState { | |
| public: | |
| enum SpecialCallingConvType { Mips16RetHelperConv, NoSpecialCallingConv }; | |
| /// Determine the SpecialCallingConvType for the given callee | |
| static SpecialCallingConvType | |
| getSpecialCallingConvForCallee(const SDNode *Callee, | |
| const MipsSubtarget &Subtarget); | |
| private: | |
| // Used to handle MIPS16-specific calling convention tweaks. | |
| // FIXME: This should probably be a fully fledged calling convention. | |
| SpecialCallingConvType SpecialCallingConv; | |
| public: | |
| MipsCCState(CallingConv::ID CC, bool isVarArg, MachineFunction &MF, | |
| SmallVectorImpl<CCValAssign> &locs, LLVMContext &C, | |
| SpecialCallingConvType SpecialCC = NoSpecialCallingConv) | |
| : CCState(CC, isVarArg, MF, locs, C), SpecialCallingConv(SpecialCC) {} | |
| SpecialCallingConvType getSpecialCallingConv() { return SpecialCallingConv; } | |
| }; | |
| } | |
| #endif |