blob: 57d2d85daecdbc536f4975130397bc8ed34ae101 [file] [log] [blame]
Tom Stellard75aadc22012-12-11 21:25:42 +00001//===- AMDGPUMCInstLower.h MachineInstr Lowering Interface ------*- 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//
Tom Stellard75aadc22012-12-11 21:25:42 +00008//===----------------------------------------------------------------------===//
9
Matt Arsenault6b6a2c32016-03-11 08:00:27 +000010#ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPUMCINSTLOWER_H
11#define LLVM_LIB_TARGET_AMDGPU_AMDGPUMCINSTLOWER_H
Tom Stellard75aadc22012-12-11 21:25:42 +000012
13namespace llvm {
14
Tom Stellardc721a232014-05-16 20:56:47 +000015class AMDGPUSubtarget;
Tom Stellard1b9748c2016-09-26 17:29:25 +000016class AsmPrinter;
Matt Arsenault6bc43d82016-10-06 16:20:41 +000017class MachineBasicBlock;
Tom Stellard75aadc22012-12-11 21:25:42 +000018class MachineInstr;
Matt Arsenault6bc43d82016-10-06 16:20:41 +000019class MachineOperand;
Matt Arsenault236d9af2014-06-23 18:00:20 +000020class MCContext;
Matt Arsenault6bc43d82016-10-06 16:20:41 +000021class MCExpr;
Matt Arsenault236d9af2014-06-23 18:00:20 +000022class MCInst;
Matt Arsenault11f74022016-10-06 17:19:11 +000023class MCOperand;
Tom Stellard75aadc22012-12-11 21:25:42 +000024
25class AMDGPUMCInstLower {
Tom Stellard9e90b582012-12-17 15:14:54 +000026 MCContext &Ctx;
Tom Stellardc721a232014-05-16 20:56:47 +000027 const AMDGPUSubtarget &ST;
Tom Stellard1b9748c2016-09-26 17:29:25 +000028 const AsmPrinter ≈
Tom Stellardc721a232014-05-16 20:56:47 +000029
Matt Arsenault6bc43d82016-10-06 16:20:41 +000030 const MCExpr *getLongBranchBlockExpr(const MachineBasicBlock &SrcBB,
31 const MachineOperand &MO) const;
32
Tom Stellard75aadc22012-12-11 21:25:42 +000033public:
Tom Stellard1b9748c2016-09-26 17:29:25 +000034 AMDGPUMCInstLower(MCContext &ctx, const AMDGPUSubtarget &ST,
35 const AsmPrinter &AP);
Tom Stellard75aadc22012-12-11 21:25:42 +000036
Matt Arsenault11f74022016-10-06 17:19:11 +000037 bool lowerOperand(const MachineOperand &MO, MCOperand &MCOp) const;
38
Tom Stellard75aadc22012-12-11 21:25:42 +000039 /// \brief Lower a MachineInstr to an MCInst
40 void lower(const MachineInstr *MI, MCInst &OutMI) const;
41
42};
43
44} // End namespace llvm
45
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000046#endif