| Anton Korobeynikov | 2f93128 | 2011-01-10 12:39:04 +0000 | [diff] [blame] | 1 | //==- MSP430FrameLowering.h - Define frame lowering for MSP430 --*- C++ -*--==// | 
| Anton Korobeynikov | f7183ed | 2010-11-15 00:06:54 +0000 | [diff] [blame] | 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 | 
| Anton Korobeynikov | f7183ed | 2010-11-15 00:06:54 +0000 | [diff] [blame] | 6 | // | 
|  | 7 | //===----------------------------------------------------------------------===// | 
|  | 8 | // | 
|  | 9 | // | 
|  | 10 | // | 
|  | 11 | //===----------------------------------------------------------------------===// | 
|  | 12 |  | 
| Benjamin Kramer | a7c40ef | 2014-08-13 16:26:38 +0000 | [diff] [blame] | 13 | #ifndef LLVM_LIB_TARGET_MSP430_MSP430FRAMELOWERING_H | 
|  | 14 | #define LLVM_LIB_TARGET_MSP430_MSP430FRAMELOWERING_H | 
| Anton Korobeynikov | f7183ed | 2010-11-15 00:06:54 +0000 | [diff] [blame] | 15 |  | 
|  | 16 | #include "MSP430.h" | 
| David Blaikie | 1be62f0 | 2017-11-03 22:32:11 +0000 | [diff] [blame] | 17 | #include "llvm/CodeGen/TargetFrameLowering.h" | 
| Anton Korobeynikov | f7183ed | 2010-11-15 00:06:54 +0000 | [diff] [blame] | 18 |  | 
|  | 19 | namespace llvm { | 
| Anton Korobeynikov | 2f93128 | 2011-01-10 12:39:04 +0000 | [diff] [blame] | 20 | class MSP430FrameLowering : public TargetFrameLowering { | 
| Anton Korobeynikov | f7183ed | 2010-11-15 00:06:54 +0000 | [diff] [blame] | 21 | protected: | 
| Anton Korobeynikov | f7183ed | 2010-11-15 00:06:54 +0000 | [diff] [blame] | 22 |  | 
|  | 23 | public: | 
| Eric Christopher | f8e3468 | 2014-06-27 00:52:11 +0000 | [diff] [blame] | 24 | explicit MSP430FrameLowering() | 
|  | 25 | : TargetFrameLowering(TargetFrameLowering::StackGrowsDown, 2, -2, 2) {} | 
| Anton Korobeynikov | f7183ed | 2010-11-15 00:06:54 +0000 | [diff] [blame] | 26 |  | 
|  | 27 | /// emitProlog/emitEpilog - These methods insert prolog and epilog code into | 
|  | 28 | /// the function. | 
| Quentin Colombet | 61b305e | 2015-05-05 17:38:16 +0000 | [diff] [blame] | 29 | void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override; | 
| Craig Topper | 6f9e59e | 2014-04-29 07:58:09 +0000 | [diff] [blame] | 30 | void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override; | 
| Anton Korobeynikov | 0eecf5d | 2010-11-18 21:19:35 +0000 | [diff] [blame] | 31 |  | 
| Hans Wennborg | e1a2e90 | 2016-03-31 18:33:38 +0000 | [diff] [blame] | 32 | MachineBasicBlock::iterator | 
|  | 33 | eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB, | 
|  | 34 | MachineBasicBlock::iterator I) const override; | 
| Eli Bendersky | 8da8716 | 2013-02-21 20:05:00 +0000 | [diff] [blame] | 35 |  | 
| Anton Korobeynikov | d08fbd1 | 2010-11-27 23:05:03 +0000 | [diff] [blame] | 36 | bool spillCalleeSavedRegisters(MachineBasicBlock &MBB, | 
|  | 37 | MachineBasicBlock::iterator MI, | 
|  | 38 | const std::vector<CalleeSavedInfo> &CSI, | 
| Craig Topper | 6f9e59e | 2014-04-29 07:58:09 +0000 | [diff] [blame] | 39 | const TargetRegisterInfo *TRI) const override; | 
| Anton Korobeynikov | d08fbd1 | 2010-11-27 23:05:03 +0000 | [diff] [blame] | 40 | bool restoreCalleeSavedRegisters(MachineBasicBlock &MBB, | 
| Craig Topper | 6f9e59e | 2014-04-29 07:58:09 +0000 | [diff] [blame] | 41 | MachineBasicBlock::iterator MI, | 
| Krzysztof Parzyszek | bea30c6 | 2017-08-10 16:17:32 +0000 | [diff] [blame] | 42 | std::vector<CalleeSavedInfo> &CSI, | 
| Craig Topper | 6f9e59e | 2014-04-29 07:58:09 +0000 | [diff] [blame] | 43 | const TargetRegisterInfo *TRI) const override; | 
| Anton Korobeynikov | d08fbd1 | 2010-11-27 23:05:03 +0000 | [diff] [blame] | 44 |  | 
| Craig Topper | 6f9e59e | 2014-04-29 07:58:09 +0000 | [diff] [blame] | 45 | bool hasFP(const MachineFunction &MF) const override; | 
|  | 46 | bool hasReservedCallFrame(const MachineFunction &MF) const override; | 
| Hal Finkel | 5a765fd | 2013-03-14 20:33:40 +0000 | [diff] [blame] | 47 | void processFunctionBeforeFrameFinalized(MachineFunction &MF, | 
| Craig Topper | 6f9e59e | 2014-04-29 07:58:09 +0000 | [diff] [blame] | 48 | RegScavenger *RS = nullptr) const override; | 
| Anton Korobeynikov | f7183ed | 2010-11-15 00:06:54 +0000 | [diff] [blame] | 49 | }; | 
|  | 50 |  | 
| Alexander Kornienko | f00654e | 2015-06-23 09:49:53 +0000 | [diff] [blame] | 51 | } // End llvm namespace | 
| Anton Korobeynikov | f7183ed | 2010-11-15 00:06:54 +0000 | [diff] [blame] | 52 |  | 
|  | 53 | #endif |