blob: fb65a86a6d1897b21ed4b265a241497ad101139e [file] [log] [blame]
Alexei Starovoitove4c8c802015-01-24 17:51:26 +00001//===-- BPFInstrInfo.h - BPF Instruction Information ------------*- 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 contains the BPF implementation of the TargetInstrInfo class.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_BPF_BPFINSTRINFO_H
15#define LLVM_LIB_TARGET_BPF_BPFINSTRINFO_H
16
17#include "BPFRegisterInfo.h"
David Blaikie3f833ed2017-11-08 01:01:31 +000018#include "llvm/CodeGen/TargetInstrInfo.h"
Alexei Starovoitove4c8c802015-01-24 17:51:26 +000019
20#define GET_INSTRINFO_HEADER
21#include "BPFGenInstrInfo.inc"
22
23namespace llvm {
24
25class BPFInstrInfo : public BPFGenInstrInfo {
26 const BPFRegisterInfo RI;
27
28public:
29 BPFInstrInfo();
30
31 const BPFRegisterInfo &getRegisterInfo() const { return RI; }
32
33 void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
Benjamin Kramerbdc49562016-06-12 15:39:02 +000034 const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
Alexei Starovoitove4c8c802015-01-24 17:51:26 +000035 bool KillSrc) const override;
36
Yonghong Song71d81e52018-07-25 22:40:02 +000037 bool expandPostRAPseudo(MachineInstr &MI) const override;
38
Alexei Starovoitove4c8c802015-01-24 17:51:26 +000039 void storeRegToStackSlot(MachineBasicBlock &MBB,
40 MachineBasicBlock::iterator MBBI, unsigned SrcReg,
41 bool isKill, int FrameIndex,
42 const TargetRegisterClass *RC,
43 const TargetRegisterInfo *TRI) const override;
44
45 void loadRegFromStackSlot(MachineBasicBlock &MBB,
46 MachineBasicBlock::iterator MBBI, unsigned DestReg,
47 int FrameIndex, const TargetRegisterClass *RC,
48 const TargetRegisterInfo *TRI) const override;
Jacques Pienaar71c30a12016-07-15 14:41:04 +000049 bool analyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB,
Alexei Starovoitove4c8c802015-01-24 17:51:26 +000050 MachineBasicBlock *&FBB,
51 SmallVectorImpl<MachineOperand> &Cond,
52 bool AllowModify) const override;
53
Matt Arsenault1b9fc8e2016-09-14 20:43:16 +000054 unsigned removeBranch(MachineBasicBlock &MBB,
Matt Arsenaulta2b036e2016-09-14 17:23:48 +000055 int *BytesRemoved = nullptr) const override;
Matt Arsenaulte8e0f5c2016-09-14 17:24:15 +000056 unsigned insertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
Ahmed Bougachac88bf542015-06-11 19:30:37 +000057 MachineBasicBlock *FBB, ArrayRef<MachineOperand> Cond,
Matt Arsenaulta2b036e2016-09-14 17:23:48 +000058 const DebugLoc &DL,
59 int *BytesAdded = nullptr) const override;
Yonghong Song71d81e52018-07-25 22:40:02 +000060private:
61 void expandMEMCPY(MachineBasicBlock::iterator) const;
62
Alexei Starovoitove4c8c802015-01-24 17:51:26 +000063};
Alexander Kornienkof00654e2015-06-23 09:49:53 +000064}
Alexei Starovoitove4c8c802015-01-24 17:51:26 +000065
66#endif