LLVM
8.0.1
|
#include "AMDGPU.h"
#include "AMDGPUSubtarget.h"
#include "SIInstrInfo.h"
#include "SIMachineFunctionInfo.h"
#include "MCTargetDesc/AMDGPUMCTargetDesc.h"
#include "llvm/ADT/DepthFirstIterator.h"
#include "llvm/CodeGen/LiveIntervals.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetMachine.h"
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "si-fold-operands" |
#define DEBUG_TYPE "si-fold-operands" |
Definition at line 26 of file SIFoldOperands.cpp.
|
static |
Definition at line 557 of file SIFoldOperands.cpp.
Referenced by tryConstantFoldOp().
|
static |
Definition at line 630 of file SIFoldOperands.cpp.
References llvm::tgtok::Def, llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineOperand::getSubReg(), llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineOperand::isImm(), llvm::MachineInstr::isMoveImmediate(), llvm::MachineOperand::isReg(), and llvm::TargetRegisterInfo::isVirtualRegister().
Referenced by tryConstantFoldOp().
Definition at line 608 of file SIFoldOperands.cpp.
Referenced by tryConstantFoldOp(), and tryFoldInst().
|
static |
Definition at line 987 of file SIFoldOperands.cpp.
References llvm::dbgs(), llvm::tgtok::Def, llvm::depth_first(), llvm::SIOutMods::DIV2, llvm::MachineInstr::eraseFromParent(), llvm::MachineInstr::FmNsz, llvm::MachineInstr::getFlag(), llvm::MachineFunction::getFunction(), llvm::MachineOperand::getImm(), llvm::MachineFunction::getInfo(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineFunction::getRegInfo(), llvm::GCNSubtarget::getRegisterInfo(), llvm::MachineOperand::getSubReg(), llvm::MachineFunction::getSubtarget(), llvm::AMDGPUMachineFunction::hasNoSignedZerosFPMath(), hasOneNonDBGUseInst(), I, llvm::MachineOperand::isFI(), llvm::MachineOperand::isImm(), llvm::MachineOperand::isReg(), llvm::TargetRegisterInfo::isVirtualRegister(), LLVM_DEBUG, llvm_unreachable, MRI, llvm::SIOutMods::MUL2, llvm::SIOutMods::MUL4, llvm::SIOutMods::NONE, llvm::MachineOperand::setImm(), llvm::ARM_MB::ST, TII, TRI, and tryFoldInst().
|
static |
Definition at line 950 of file SIFoldOperands.cpp.
References llvm::dbgs(), llvm::tgtok::Def, E, llvm::MachineInstr::eraseFromParent(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), I, LLVM_DEBUG, MRI, llvm::MachineOperand::setImm(), TII, llvm::MachineRegisterInfo::use_instr_nodbg_begin(), and llvm::MachineRegisterInfo::use_instr_nodbg_end().
Referenced by getOModValue().
|
static |
Definition at line 132 of file SIFoldOperands.cpp.
References llvm::AMDGPU::getNamedOperandIdx(), llvm::MachineInstr::getOpcode(), llvm::SIInstrInfo::isInlineConstant(), llvm::MCOperandInfo::OperandType, and llvm::MCInstrDesc::OpInfo.
Referenced by tryFoldInst().
|
static |
Definition at line 272 of file SIFoldOperands.cpp.
Referenced by tryAddToFoldList().
|
static |
Definition at line 389 of file SIFoldOperands.cpp.
References assert(), llvm::MachineOperand::CreateImm(), E, F(), R600_InstFlag::FC, llvm::MachineInstr::getDesc(), llvm::TargetRegisterClass::getID(), llvm::MachineOperand::getImm(), llvm::APInt::getLoBits(), llvm::MachineInstr::getOperand(), llvm::Use::getOperandNo(), llvm::MachineInstr::getOperandNo(), llvm::MachineOperand::getParent(), llvm::MachineInstr::getParent(), llvm::MachineOperand::getReg(), llvm::AMDGPU::getRegBitWidth(), llvm::MachineOperand::getSubReg(), llvm::MachineInstr::isCopy(), llvm::MachineOperand::isImm(), llvm::MachineOperand::isImplicit(), llvm::MachineOperand::isReg(), llvm::MachineInstr::isRegSequence(), llvm::SIInstrInfo::isSDWA(), llvm::MachineOperand::isTied(), llvm::MachineOperand::isUndef(), llvm::MCInstrDesc::isVariadic(), llvm::TargetRegisterInfo::isVirtualRegister(), MRI, llvm::MCInstrDesc::OpInfo, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorTemplateBase< T >::push_back(), llvm::MCOperandInfo::RegClass, llvm::MachineInstr::setDesc(), llvm::MachineOperand::setIsKill(), llvm::MachineOperand::setReg(), llvm::MachineOperand::setSubReg(), TII, TRI, tryAddToFoldList(), UseMI, and UseReg().
|
static |
Definition at line 625 of file SIFoldOperands.cpp.
References llvm::MachineInstr::setDesc(), and stripExtraCopyOperands().
Referenced by tryConstantFoldOp(), and tryFoldInst().
|
static |
Remove any leftover implicit operands from mutating the instruction.
e.g. if we replace an s_and_b32 with a copy, we don't need the implicit scc def anymore.
Definition at line 615 of file SIFoldOperands.cpp.
References llvm::MachineInstr::getDesc(), llvm::MCInstrDesc::getNumImplicitDefs(), llvm::MCInstrDesc::getNumImplicitUses(), llvm::MCInstrDesc::getNumOperands(), llvm::MachineInstr::getNumOperands(), I, and llvm::MachineInstr::RemoveOperand().
Referenced by mutateCopyOp(), and tryConstantFoldOp().
|
static |
Definition at line 281 of file SIFoldOperands.cpp.
References assert(), llvm::TargetInstrInfo::CommuteAnyOperandIndex, llvm::SIInstrInfo::findCommutedOpIndices(), llvm::AMDGPU::getNamedOperandIdx(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineBasicBlock::getParent(), llvm::MachineInstr::getParent(), llvm::MachineOperand::getReg(), llvm::MachineFunction::getRegInfo(), llvm::SIInstrInfo::getRegisterInfo(), llvm::AMDGPU::getVOPe32(), llvm::MachineOperand::isDef(), llvm::MachineOperand::isFI(), llvm::MachineOperand::isImm(), llvm::SIInstrInfo::isOperandLegal(), llvm::MachineOperand::isReg(), isUseMIInFoldList(), llvm::SIRegisterInfo::isVGPR(), MRI, llvm::SmallVectorTemplateBase< T >::push_back(), llvm::MachineInstr::setDesc(), and llvm::MachineInstr::untieRegOperand().
Referenced by isUseSafeToFold().
|
static |
Definition at line 652 of file SIFoldOperands.cpp.
References llvm::MachineOperand::ChangeToImmediate(), evalBinaryInstruction(), llvm::MachineOperand::getImm(), getImmOrMaterializedImm(), getMovOpc(), llvm::SIInstrInfo::getNamedOperand(), llvm::AMDGPU::getNamedOperandIdx(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::SIInstrInfo::getRegisterInfo(), llvm::MachineInstr::isCommutable(), llvm::MachineOperand::isImm(), llvm::MachineOperand::isReg(), llvm::SIRegisterInfo::isSGPRReg(), mutateCopyOp(), llvm::MachineInstr::RemoveOperand(), llvm::MachineInstr::setDesc(), stripExtraCopyOperands(), std::swap(), and TRI.
Referenced by tryFoldInst().
|
static |
Definition at line 766 of file SIFoldOperands.cpp.
References assert(), llvm::SmallVectorImpl< T >::clear(), llvm::dbgs(), E, getMovOpc(), llvm::SIInstrInfo::getNamedOperand(), llvm::AMDGPU::getNamedOperandIdx(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::Use::getOperandNo(), llvm::MachineInstr::getOperandNo(), llvm::MachineBasicBlock::getParent(), llvm::MachineOperand::getParent(), llvm::MachineInstr::getParent(), llvm::MachineOperand::getReg(), llvm::MachineOperand::getSubReg(), llvm::MachineOperand::isFI(), llvm::MachineOperand::isIdenticalTo(), llvm::MachineOperand::isImm(), isInlineConstantIfFolded(), llvm::MachineOperand::isReg(), LLVM_DEBUG, MI, MRI, mutateCopyOp(), llvm::SISrcMods::OP_SEL_1, llvm::SmallVectorTemplateBase< T >::push_back(), llvm::MachineInstr::RemoveOperand(), TII, TRI, tryConstantFoldOp(), and updateOperand().
Referenced by getOModValue().
|
static |
Definition at line 167 of file SIFoldOperands.cpp.
References assert(), llvm::BuildMI(), llvm::SIInstrInfo::buildShrunkInst(), llvm::MachineOperand::ChangeToFrameIndex(), llvm::MachineOperand::ChangeToImmediate(), llvm::MachineBasicBlock::computeRegisterLiveness(), llvm::MachineRegisterInfo::createVirtualRegister(), llvm::MachineInstr::getDebugLoc(), llvm::MachineInstr::getDesc(), llvm::MachineOperand::getImm(), llvm::AMDGPU::getNamedOperandIdx(), llvm::MachineInstr::getNumOperands(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineInstr::getOperandNo(), llvm::MachineBasicBlock::getParent(), llvm::MachineInstr::getParent(), llvm::MachineOperand::getReg(), llvm::MachineRegisterInfo::getRegClass(), llvm::MachineFunction::getRegInfo(), llvm::MachineOperand::getSubReg(), I, llvm::MachineOperand::isDef(), llvm::SIInstrFlags::IsPacked, llvm::MachineOperand::isReg(), llvm::isUInt< 16 >(), llvm::MachineOperand::isUndef(), llvm::TargetRegisterInfo::isVirtualRegister(), llvm::RegState::Kill, llvm::MachineBasicBlock::LQR_Dead, MI, llvm::Mod, MRI, llvm::SISrcMods::OP_SEL_0, llvm::SISrcMods::OP_SEL_1, llvm::MachineInstr::RemoveOperand(), llvm::MachineInstr::setDesc(), llvm::MachineOperand::setImm(), llvm::MachineOperand::setIsUndef(), llvm::MachineOperand::setReg(), llvm::MachineOperand::substVirtReg(), TRI, llvm::MCInstrDesc::TSFlags, and llvm::MachineRegisterInfo::use_nodbg_empty().
Referenced by tryFoldInst().