LLVM  8.0.1
Macros | Functions
R600InstrInfo.cpp File Reference

R600 Implementation of TargetInstrInfo. More...

#include "R600InstrInfo.h"
#include "AMDGPU.h"
#include "AMDGPUInstrInfo.h"
#include "AMDGPUSubtarget.h"
#include "R600Defines.h"
#include "R600FrameLowering.h"
#include "R600RegisterInfo.h"
#include "MCTargetDesc/AMDGPUMCTargetDesc.h"
#include "Utils/AMDGPUBaseInfo.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/TargetRegisterInfo.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/Support/ErrorHandling.h"
#include <algorithm>
#include <cassert>
#include <cstdint>
#include <cstring>
#include <iterator>
#include <utility>
#include <vector>
#include "R600GenDFAPacketizer.inc"
#include "R600GenInstrInfo.inc"
Include dependency graph for R600InstrInfo.cpp:

Go to the source code of this file.

Macros

#define GET_INSTRINFO_CTOR_DTOR
 
#define GET_INSTRINFO_CTOR_DTOR
 
#define GET_INSTRMAP_INFO
 
#define GET_INSTRINFO_NAMED_OPS
 
#define OPERAND_CASE(Label)
 

Functions

static std::vector< std::pair< int, unsigned > > Swizzle (std::vector< std::pair< int, unsigned >> Src, R600InstrInfo::BankSwizzle Swz)
 
static unsigned getTransSwizzle (R600InstrInfo::BankSwizzle Swz, unsigned Op)
 
static bool NextPossibleSolution (std::vector< R600InstrInfo::BankSwizzle > &SwzCandidate, unsigned Idx)
 Given a swizzle sequence SwzCandidate and an index Idx, returns the next (in lexicographic term) swizzle sequence assuming that all swizzles after Idx can be skipped. More...
 
static bool isConstCompatible (R600InstrInfo::BankSwizzle TransSwz, const std::vector< std::pair< int, unsigned >> &TransOps, unsigned ConstCount)
 Instructions in Trans slot can't read gpr at cycle 0 if they also read a const, and can't read a gpr at cycle 1 if they read 2 const. More...
 
static bool isPredicateSetter (unsigned Opcode)
 
static MachineInstrfindFirstPredicateSetterFrom (MachineBasicBlock &MBB, MachineBasicBlock::iterator I)
 
static bool isJump (unsigned Opcode)
 
static bool isBranch (unsigned Opcode)
 
static MachineBasicBlock::iterator FindLastAluClause (MachineBasicBlock &MBB)
 
static unsigned getSlotedOps (unsigned Op, unsigned Slot)
 

Detailed Description

R600 Implementation of TargetInstrInfo.

Definition in file R600InstrInfo.cpp.

Macro Definition Documentation

◆ GET_INSTRINFO_CTOR_DTOR [1/2]

#define GET_INSTRINFO_CTOR_DTOR

Definition at line 50 of file R600InstrInfo.cpp.

◆ GET_INSTRINFO_CTOR_DTOR [2/2]

#define GET_INSTRINFO_CTOR_DTOR

Definition at line 50 of file R600InstrInfo.cpp.

◆ GET_INSTRINFO_NAMED_OPS

#define GET_INSTRINFO_NAMED_OPS

Definition at line 52 of file R600InstrInfo.cpp.

◆ GET_INSTRMAP_INFO

#define GET_INSTRMAP_INFO

Definition at line 51 of file R600InstrInfo.cpp.

◆ OPERAND_CASE

#define OPERAND_CASE (   Label)
Value:
case Label: { \
static const unsigned Ops[] = \
{ \
Label##_X, \
Label##_Y, \
Label##_Z, \
Label##_W \
}; \
return Ops[Slot]; \
}

Definition at line 1280 of file R600InstrInfo.cpp.

Referenced by getSlotedOps().

Function Documentation

◆ findFirstPredicateSetterFrom()

static MachineInstr* findFirstPredicateSetterFrom ( MachineBasicBlock MBB,
MachineBasicBlock::iterator  I 
)
static

◆ FindLastAluClause()

static MachineBasicBlock::iterator FindLastAluClause ( MachineBasicBlock MBB)
static

◆ getSlotedOps()

static unsigned getSlotedOps ( unsigned  Op,
unsigned  Slot 
)
static

◆ getTransSwizzle()

static unsigned getTransSwizzle ( R600InstrInfo::BankSwizzle  Swz,
unsigned  Op 
)
static

◆ isBranch()

static bool isBranch ( unsigned  Opcode)
static

◆ isConstCompatible()

static bool isConstCompatible ( R600InstrInfo::BankSwizzle  TransSwz,
const std::vector< std::pair< int, unsigned >> &  TransOps,
unsigned  ConstCount 
)
static

Instructions in Trans slot can't read gpr at cycle 0 if they also read a const, and can't read a gpr at cycle 1 if they read 2 const.

Definition at line 516 of file R600InstrInfo.cpp.

References getTransSwizzle().

Referenced by llvm::R600InstrInfo::fitsReadPortLimitations().

◆ isJump()

static bool isJump ( unsigned  Opcode)
static

Definition at line 666 of file R600InstrInfo.cpp.

Referenced by llvm::R600InstrInfo::analyzeBranch().

◆ isPredicateSetter()

static bool isPredicateSetter ( unsigned  Opcode)
static

◆ NextPossibleSolution()

static bool NextPossibleSolution ( std::vector< R600InstrInfo::BankSwizzle > &  SwzCandidate,
unsigned  Idx 
)
static

Given a swizzle sequence SwzCandidate and an index Idx, returns the next (in lexicographic term) swizzle sequence assuming that all swizzles after Idx can be skipped.

Definition at line 480 of file R600InstrInfo.cpp.

References llvm::R600InstrInfo::ALU_VEC_012_SCL_210, llvm::R600InstrInfo::ALU_VEC_210, and assert().

Referenced by llvm::R600InstrInfo::FindSwizzleForVectorSlot().

◆ Swizzle()

static std::vector<std::pair<int, unsigned> > Swizzle ( std::vector< std::pair< int, unsigned >>  Src,
R600InstrInfo::BankSwizzle  Swz 
)
static