|
LLVM 24.0.0git
|
#include "X86InstrInfo.h"#include "X86.h"#include "X86InstrBuilder.h"#include "X86InstrFoldTables.h"#include "X86MachineFunctionInfo.h"#include "X86Subtarget.h"#include "X86TargetMachine.h"#include "llvm/ADT/STLExtras.h"#include "llvm/ADT/Sequence.h"#include "llvm/CodeGen/LiveIntervals.h"#include "llvm/CodeGen/LivePhysRegs.h"#include "llvm/CodeGen/MachineConstantPool.h"#include "llvm/CodeGen/MachineFrameInfo.h"#include "llvm/CodeGen/MachineInstr.h"#include "llvm/CodeGen/MachineInstrBuilder.h"#include "llvm/CodeGen/MachineModuleInfo.h"#include "llvm/CodeGen/MachineOperand.h"#include "llvm/CodeGen/MachineRegisterInfo.h"#include "llvm/CodeGen/StackMaps.h"#include "llvm/IR/DebugInfoMetadata.h"#include "llvm/IR/DerivedTypes.h"#include "llvm/IR/Function.h"#include "llvm/IR/InstrTypes.h"#include "llvm/IR/Module.h"#include "llvm/MC/MCAsmInfo.h"#include "llvm/MC/MCExpr.h"#include "llvm/MC/MCInst.h"#include "llvm/Support/Debug.h"#include "llvm/Support/ErrorHandling.h"#include "llvm/Support/MathExtras.h"#include "llvm/Support/raw_ostream.h"#include "llvm/Target/TargetOptions.h"#include <optional>#include "X86GenInstrInfo.inc"#include "X86GenInstrMapping.inc"#include "X86ReplaceableInstrs.def"Go to the source code of this file.
Macros | |
| #define | DEBUG_TYPE "x86-instr-info" |
| #define | GET_INSTRINFO_CTOR_DTOR |
| #define | CASE_NF(OP) |
| #define | VPERM_CASES(Suffix) |
| #define | VPERM_CASES_BROADCAST(Suffix) |
| #define | VPERM_CASES(Orig, New) |
| #define | VPERM_CASES_BROADCAST(Orig, New) |
| #define | CASE_ND(OP) |
| #define | FROM_TO_SIZE(A, B, S) |
| #define | GET_X86_NF_TRANSFORM_TABLE |
| #define | GET_X86_ND2NONND_TABLE |
| #define | GET_ND_IF_ENABLED(OPC) |
| #define | GET_EGPR_IF_ENABLED(OPC) |
| #define | CASE_EVEX(OP) |
| #define | FROM_TO(A, B) |
| #define | FROM_TO(FROM, TO) |
| #define | FROM_TO(FROM, TO) |
| #define | FOLD_BROADCAST(SIZE) |
| #define | CASE_BCAST_TYPE_OPC(TYPE, OP16, OP32, OP64) |
| #define | GET_INSTRINFO_HELPERS |
Enumerations | |
| enum | MachineOutlinerClass { MachineOutlinerDefault , MachineOutlinerTailCall } |
| Constants defining how certain sequences should be outlined. More... | |
| #define CASE_BCAST_TYPE_OPC | ( | TYPE, | |
| OP16, | |||
| OP32, | |||
| OP64 ) |
Referenced by getBroadcastOpcode().
| #define CASE_EVEX | ( | OP | ) |
Definition at line 4961 of file X86InstrInfo.cpp.
Referenced by isDefConvertible(), and isUseDefConvertible().
| #define CASE_ND | ( | OP | ) |
Referenced by llvm::X86InstrInfo::analyzeCompare(), canConvert2Copy(), llvm::X86InstrInfo::commuteInstructionImpl(), llvm::X86InstrInfo::isAssociativeAndCommutative(), isDefConvertible(), isUseDefConvertible(), and llvm::X86InstrInfo::optimizeCompareInstr().
| #define CASE_NF | ( | OP | ) |
Referenced by llvm::X86InstrInfo::convertToThreeAddress().
| #define DEBUG_TYPE "x86-instr-info" |
Definition at line 49 of file X86InstrInfo.cpp.
| #define FOLD_BROADCAST | ( | SIZE | ) |
Referenced by llvm::X86InstrInfo::foldMemoryOperandImpl().
| #define FROM_TO | ( | FROM, | |
| TO ) |
| #define FROM_TO | ( | FROM, | |
| TO ) |
| #define GET_EGPR_IF_ENABLED | ( | OPC | ) |
| #define GET_INSTRINFO_CTOR_DTOR |
Definition at line 51 of file X86InstrInfo.cpp.
| #define GET_INSTRINFO_HELPERS |
Definition at line 11067 of file X86InstrInfo.cpp.
| #define GET_ND_IF_ENABLED | ( | OPC | ) |
Referenced by llvm::X86::getCMovOpcode().
| #define GET_X86_ND2NONND_TABLE |
Definition at line 3207 of file X86InstrInfo.cpp.
| #define GET_X86_NF_TRANSFORM_TABLE |
Definition at line 3206 of file X86InstrInfo.cpp.
| #define VPERM_CASES | ( | Orig, | |
| New ) |
| #define VPERM_CASES | ( | Suffix | ) |
Referenced by getCommutedVPERMV3Opcode(), and isCommutableVPERMV3Instruction().
| #define VPERM_CASES_BROADCAST | ( | Orig, | |
| New ) |
| #define VPERM_CASES_BROADCAST | ( | Suffix | ) |
Referenced by getCommutedVPERMV3Opcode(), and isCommutableVPERMV3Instruction().
| enum MachineOutlinerClass |
Constants defining how certain sequences should be outlined.
MachineOutlinerDefault implies that the function is called with a call instruction, and a return must be emitted for the outlined function frame.
That is,
I1 OUTLINED_FUNCTION: I2 --> call OUTLINED_FUNCTION I1 I3 I2 I3 ret
MachineOutlinerTailCall implies that the function is being tail called. A jump is emitted instead of a call, and the return is already present in the outlined sequence. That is,
I1 OUTLINED_FUNCTION: I2 --> jmp OUTLINED_FUNCTION I1 ret I2 ret
| Enumerator | |
|---|---|
| MachineOutlinerDefault | |
| MachineOutlinerTailCall | |
Definition at line 10692 of file X86InstrInfo.cpp.
|
static |
Definition at line 7441 of file X86InstrInfo.cpp.
References llvm::MachineInstrBuilder::add(), llvm::MachineInstrBuilder::addDisp(), llvm::addOffset(), assert(), and llvm::ArrayRef< T >::size().
Referenced by fuseInst(), fuseTwoAddrInst(), and makeM0Inst().
|
static |
Definition at line 9345 of file X86InstrInfo.cpp.
References assert(), and llvm::Sub.
Referenced by llvm::X86InstrInfo::getExecutionDomainCustom(), and llvm::X86InstrInfo::setExecutionDomainCustom().
Definition at line 5848 of file X86InstrInfo.cpp.
|
static |
Definition at line 2073 of file X86InstrInfo.cpp.
References assert(), getThreeSrcCommuteCase(), Imm, and MI.
Referenced by llvm::X86InstrInfo::commuteInstructionImpl().
Convert an ALUrr opcode to corresponding ALUri opcode.
Such as ADD32rr ==> ADD32ri
Definition at line 5866 of file X86InstrInfo.cpp.
|
static |
Definition at line 4182 of file X86InstrInfo.cpp.
References assert(), contains(), llvm::X86Subtarget::hasAVX(), and llvm::X86Subtarget::hasAVX512().
Referenced by llvm::X86InstrInfo::copyPhysReg().
|
static |
If DescribedReg overlaps with the MOVrr instruction's destination register then, if possible, describe the value in terms of the source register.
Definition at line 10418 of file X86InstrInfo.cpp.
References assert(), llvm::MachineOperand::CreateReg(), llvm::MDNode::get(), MI, and TRI.
Referenced by llvm::X86InstrInfo::describeLoadedValue().
|
static |
Expand a single-def pseudo instruction to a two-addr instruction with two k0 reads.
This is used for mapping: k4 = K_SET1 to: k4 = KXNORrr k0, k0
Definition at line 6126 of file X86InstrInfo.cpp.
References llvm::MachineInstrBuilder::addReg(), assert(), Reg, llvm::MachineInstr::setDesc(), and llvm::Undef.
Referenced by llvm::X86InstrInfo::expandPostRAPseudo().
|
static |
Expand a single-def pseudo instruction to a two-addr instruction with two undef reads of the register being defined.
This is used for mapping: xmm4 = V_SET0 to: xmm4 = PXORrr undef xmm4, undef xmm4
Definition at line 6106 of file X86InstrInfo.cpp.
References llvm::MachineInstrBuilder::addReg(), assert(), llvm::MachineInstrBuilder::getReg(), Reg, llvm::MachineInstr::setDesc(), and llvm::Undef.
|
static |
Definition at line 6212 of file X86InstrInfo.cpp.
References llvm::MachineInstrBuilder::addGlobalAddress(), llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addMemOperand(), llvm::MachineInstrBuilder::addReg(), llvm::BuildMI(), llvm::cast(), DL, llvm::MachineInstr::getDebugLoc(), llvm::MachinePointerInfo::getGOT(), llvm::MachineInstrBuilder::getInstr(), llvm::MachineInstr::getParent(), llvm::MachineInstrBuilder::getReg(), I, llvm::Kill, MBB, llvm::MachineInstr::memoperands_begin(), llvm::X86II::MO_GOTPCREL, llvm::MachineMemOperand::MODereferenceable, llvm::MachineMemOperand::MOInvariant, llvm::MachineMemOperand::MOLoad, Reg, llvm::MachineInstr::setDebugLoc(), llvm::MachineInstr::setDesc(), and TII.
Referenced by llvm::X86InstrInfo::expandPostRAPseudo().
|
static |
Definition at line 6134 of file X86InstrInfo.cpp.
References llvm::MachineInstrBuilder::addReg(), llvm::BuildMI(), DL, llvm::MachineInstr::getDebugLoc(), llvm::MachineInstrBuilder::getInstr(), llvm::MachineInstr::getParent(), llvm::MachineInstrBuilder::getReg(), MBB, Reg, llvm::MachineInstr::setDesc(), TII, and llvm::Undef.
Referenced by llvm::X86InstrInfo::expandPostRAPseudo().
|
static |
Definition at line 6152 of file X86InstrInfo.cpp.
References llvm::MachineInstrBuilder::addImm(), llvm::MachineInstr::addImplicitDefUseOperands(), assert(), llvm::X86FrameLowering::BuildCFI(), llvm::BuildMI(), llvm::MCCFIInstruction::createAdjustCfaOffset(), DL, llvm::MachineInstr::getDebugLoc(), llvm::X86Subtarget::getFrameLowering(), llvm::MachineOperand::getImm(), llvm::MachineInstrBuilder::getInstr(), llvm::TargetMachine::getMCAsmInfo(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineInstr::getParent(), llvm::MachineInstrBuilder::getReg(), llvm::MachineFunction::getTarget(), llvm::X86MachineFunctionInfo::getUsesRedZone(), llvm::getX86SubSuperRegister(), llvm::TargetFrameLowering::hasFP(), I, Imm, MBB, llvm::MachineFunction::needsFrameMoves(), llvm::MachineInstr::removeOperand(), llvm::MachineInstr::setDesc(), llvm::MachineOperand::setReg(), TII, and llvm::MCAsmInfo::usesWindowsCFI().
Referenced by llvm::X86InstrInfo::expandPostRAPseudo().
|
static |
Definition at line 6308 of file X86InstrInfo.cpp.
References MI, Reg, llvm::MachineInstr::setDesc(), and TII.
Referenced by llvm::X86InstrInfo::expandPostRAPseudo().
|
static |
Definition at line 6253 of file X86InstrInfo.cpp.
References llvm::MachineInstr::getOperand(), llvm::MachineInstrBuilder::getReg(), llvm::MachineInstr::setDesc(), llvm::MachineOperand::setReg(), and TRI.
Referenced by llvm::X86InstrInfo::expandPostRAPseudo().
|
static |
Definition at line 6275 of file X86InstrInfo.cpp.
References llvm::MachineInstrBuilder::addImm(), llvm::X86::AddrNumOperands, llvm::MachineInstr::getOperand(), llvm::MachineInstrBuilder::getReg(), llvm::MachineInstr::setDesc(), llvm::MachineOperand::setReg(), and TRI.
Referenced by llvm::X86InstrInfo::expandPostRAPseudo().
|
static |
Definition at line 6296 of file X86InstrInfo.cpp.
References llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addReg(), llvm::MachineOperand::getImm(), llvm::MachineInstr::getOperand(), llvm::MachineInstrBuilder::getReg(), llvm::getUndefRegState(), llvm::MachineOperand::isUndef(), llvm::MachineInstr::removeOperand(), and llvm::MachineInstr::setDesc().
Referenced by llvm::X86InstrInfo::expandPostRAPseudo().
|
static |
Definition at line 6238 of file X86InstrInfo.cpp.
References llvm::MachineInstrBuilder::addReg(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getParent(), llvm::X86Subtarget::getRegisterInfo(), llvm::MachineFunction::getSubtarget(), MBB, llvm::MachineInstr::setDesc(), TII, TRI, and llvm::Undef.
Referenced by llvm::X86InstrInfo::expandPostRAPseudo().
|
static |
Definition at line 8713 of file X86InstrInfo.cpp.
References llvm::MachineFunction::getMachineMemOperand(), llvm::MachineMemOperand::MOStore, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Referenced by llvm::X86InstrInfo::unfoldMemoryOperand(), and llvm::X86InstrInfo::unfoldMemoryOperand().
|
static |
Definition at line 8734 of file X86InstrInfo.cpp.
References llvm::MachineFunction::getMachineMemOperand(), llvm::MachineMemOperand::MOLoad, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Referenced by llvm::X86InstrInfo::unfoldMemoryOperand(), and llvm::X86InstrInfo::unfoldMemoryOperand().
|
static |
Definition at line 1010 of file X86InstrInfo.cpp.
References assert(), llvm::MachineOperand::getImm(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineInstr::getParent(), llvm::MachineOperand::getReg(), llvm::MachineRegisterInfo::getVRegDef(), llvm::isUInt(), llvm::Register::isVirtual(), llvm::make_range(), llvm::MachineInstr::modifiesRegister(), and TRI.
Referenced by llvm::X86InstrInfo::optimizeCompareInstr().
|
static |
Definition at line 7519 of file X86InstrInfo.cpp.
References llvm::MachineInstrBuilder::add(), addOperands(), assert(), llvm::MachineOperand::isReg(), MBB, MI, llvm::MachineInstr::NoFPExcept, llvm::MachineInstr::setFlag(), TII, and updateOperandRegConstraints().
Referenced by llvm::X86InstrInfo::foldMemoryOperandImpl().
|
static |
Definition at line 7490 of file X86InstrInfo.cpp.
References AbstractManglingParser< Derived, Alloc >::NumOps, llvm::MachineInstrBuilder::add(), addOperands(), llvm::drop_begin(), MBB, MI, TII, and updateOperandRegConstraints().
Referenced by llvm::X86InstrInfo::foldMemoryOperandImpl().
|
static |
Definition at line 10930 of file X86InstrInfo.cpp.
References llvm::Add, llvm::MachineInstrBuilder::addReg(), assert(), llvm::BuildMI(), llvm::getKillRegState(), llvm::MachineInstr::getMF(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineFunction::getRegInfo(), llvm::DenseMapBase< StorageT, KeyT, ValueT, KeyInfoT, BucketT >::insert(), llvm::MachineOperand::isKill(), Opc, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::MachineInstr::removeOperand(), llvm::MachineInstr::setDesc(), llvm::MachineOperand::setReg(), TII, and llvm::MachineInstr::untieRegOperand().
Referenced by llvm::X86InstrInfo::genAlternativeCodeSequence().
|
static |
Definition at line 8754 of file X86InstrInfo.cpp.
References assert(), CASE_BCAST_TYPE_OPC, llvm::X86Subtarget::getRegisterInfo(), llvm::X86Subtarget::hasAVX512(), I, llvm_unreachable, llvm::TB_BCAST_D, llvm::TB_BCAST_MASK, llvm::TB_BCAST_Q, llvm::TB_BCAST_SD, llvm::TB_BCAST_SH, llvm::TB_BCAST_SS, and llvm::TB_BCAST_W.
Referenced by llvm::X86InstrInfo::unfoldMemoryOperand(), and llvm::X86InstrInfo::unfoldMemoryOperand().
Definition at line 2164 of file X86InstrInfo.cpp.
References llvm_unreachable, VPERM_CASES, and VPERM_CASES_BROADCAST.
Referenced by llvm::X86InstrInfo::commuteInstructionImpl().
|
static |
Definition at line 3760 of file X86InstrInfo.cpp.
Referenced by llvm::X86InstrInfo::insertBranch().
|
static |
Definition at line 3914 of file X86InstrInfo.cpp.
References llvm::X86::AddrDisp, assert(), llvm::MachineOperand::getIndex(), llvm::X86II::getMemoryOperandIdx(), llvm::MachineOperand::isJTI(), and MI.
Referenced by llvm::X86InstrInfo::getJumpTableIndex(), and getJumpTableIndexFromReg().
|
static |
Definition at line 3925 of file X86InstrInfo.cpp.
References getJumpTableIndexFromAddr(), llvm::MachineRegisterInfo::getUniqueVRegDef(), MI, and Reg.
|
static |
Definition at line 4675 of file X86InstrInfo.cpp.
References getLoadStoreRegOpcode().
Referenced by llvm::M68kInstrInfo::loadRegFromStackSlot(), llvm::X86InstrInfo::loadRegFromStackSlot(), llvm::X86InstrInfo::unfoldMemoryOperand(), and llvm::X86InstrInfo::unfoldMemoryOperand().
|
static |
Definition at line 4365 of file X86InstrInfo.cpp.
References llvm::Load.
Referenced by getLoadStoreRegOpcode().
|
static |
Definition at line 4373 of file X86InstrInfo.cpp.
References assert(), GET_EGPR_IF_ENABLED, getLoadStoreOpcodeForFP16(), llvm::X86Subtarget::getRegisterInfo(), llvm::X86Subtarget::hasAVX(), llvm::X86Subtarget::hasAVX512(), isHReg(), llvm_unreachable, llvm::Load, and Reg.
Referenced by getLoadRegOpcode(), and getStoreRegOpcode().
Definition at line 3210 of file X86InstrInfo.cpp.
References I, llvm::lower_bound(), Opc, and llvm::Table.
Referenced by llvm::X86::getNFVariant(), and llvm::X86::getNonNDVariant().
|
static |
Definition at line 4668 of file X86InstrInfo.cpp.
References getLoadStoreRegOpcode().
Referenced by llvm::M68kInstrInfo::storeRegToStackSlot(), llvm::X86InstrInfo::storeRegToStackSlot(), llvm::X86InstrInfo::unfoldMemoryOperand(), and llvm::X86InstrInfo::unfoldMemoryOperand().
|
static |
Assuming the flags are set by MI(a,b), return the condition code if we modify the instructions such that flags are set by MI(b,a).
Definition at line 3303 of file X86InstrInfo.cpp.
References llvm::X86::COND_A, llvm::X86::COND_AE, llvm::X86::COND_B, llvm::X86::COND_BE, llvm::X86::COND_E, llvm::X86::COND_G, llvm::X86::COND_GE, llvm::X86::COND_INVALID, llvm::X86::COND_L, llvm::X86::COND_LE, and llvm::X86::COND_NE.
Referenced by llvm::ARMBaseInstrInfo::optimizeCompareInstr(), llvm::X86InstrInfo::optimizeCompareInstr(), performCSELCombine(), PerformVCMPCombine(), and reassociateCSELOperandsForCSE().
This determines which of three possible cases of a three source commute the source indexes correspond to taking into account any mask operands.
All prevents commuting a passthru operand. Returns -1 if the commute isn't possible. Case 0 - Possible to commute the first and second operands. Case 1 - Possible to commute the first and third operands. Case 2 - Possible to commute the second and third operands.
Definition at line 1996 of file X86InstrInfo.cpp.
References llvm::X86II::isKMasked(), llvm_unreachable, std::swap(), and uint64_t.
Referenced by commuteVPTERNLOG(), and llvm::X86InstrInfo::getFMA3OpcodeToCommuteOperands().
|
inlinestatic |
Check whether the shift count for a machine operand is non-zero.
Definition at line 990 of file X86InstrInfo.cpp.
References Imm, MI, and llvm::X86II::REX_W.
Referenced by llvm::X86InstrInfo::convertToThreeAddress(), and isDefConvertible().
|
static |
Return true for all instructions that only update the first 32 or 64-bits of the destination register and leave the rest unmodified.
This can be used to avoid folding loads if the instructions only update part of the destination register, and the non-updated part is not needed. e.g. cvtss2sd, sqrtss. Unfolding the load from these instructions breaks the partial register dependency and it can improve performance. e.g.:
movss (rdi), xmm0 cvtss2sd xmm0, xmm0
Instead of cvtss2sd (rdi), xmm0
FIXME: This should be turned into a TSFlags.
Definition at line 6588 of file X86InstrInfo.cpp.
Referenced by llvm::X86InstrInfo::foldMemoryOperandImpl(), llvm::X86InstrInfo::foldMemoryOperandImpl(), llvm::X86InstrInfo::foldMemoryOperandImpl(), and llvm::X86InstrInfo::getPartialRegUpdateClearance().
Definition at line 7016 of file X86InstrInfo.cpp.
Referenced by llvm::X86InstrInfo::getUndefRegClearance(), and shouldPreventUndefRegUpdateMemFold().
Definition at line 4681 of file X86InstrInfo.cpp.
References Opc.
Referenced by llvm::X86InstrInfo::loadRegFromStackSlot(), and llvm::X86InstrInfo::storeRegToStackSlot().
|
inlinestatic |
Definition at line 4940 of file X86InstrInfo.cpp.
References llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineOperand::isReg(), and llvm::Register::isValid().
Referenced by llvm::X86InstrInfo::optimizeCompareInstr().
Definition at line 2105 of file X86InstrInfo.cpp.
References B(), D(), VPERM_CASES, and VPERM_CASES_BROADCAST.
Referenced by llvm::X86InstrInfo::commuteInstructionImpl().
|
static |
Definition at line 3050 of file X86InstrInfo.cpp.
References llvm::X86::AddrDisp, llvm::X86::AddrScaleAmt, llvm::X86::AddrSegmentReg, llvm::MachineOperand::getImm(), llvm::MachineOperand::getReg(), llvm::MachineOperand::isImm(), and MI.
Referenced by llvm::X86InstrInfo::hasCommutePreference().
|
inlinestatic |
Check whether the definition can be converted to remove a comparison against zero.
Definition at line 4967 of file X86InstrInfo.cpp.
References CASE_EVEX, CASE_ND, getTruncatedShiftCount(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), isTruncatedShiftCountForLEA(), llvm::Register::isVirtual(), MI, llvm::X86II::MO_GOTNTPOFF, llvm::X86II::MO_GOTTPOFF, and llvm::X86II::MO_INDNTPOFF.
Referenced by llvm::X86InstrInfo::optimizeCompareInstr().
Definition at line 458 of file X86InstrInfo.cpp.
References llvm::TypeSize::getFixed().
Definition at line 560 of file X86InstrInfo.cpp.
References llvm::TypeSize::getFixed().
Test if the given register is a physical h register.
Definition at line 4177 of file X86InstrInfo.cpp.
References Reg.
Referenced by llvm::X86InstrInfo::copyPhysReg(), and getLoadStoreRegOpcode().
|
static |
Check if LoadMI is a partial register load that we can't fold into MI because the latter uses contents that wouldn't be defined in the folded version.
For instance, this transformation isn't legal: movss (rdi), xmm0 addps xmm0, xmm0 -> addps (rdi), xmm0
But this one is: movss (rdi), xmm0 addss xmm0, xmm0 -> addss (rdi), xmm0
Definition at line 7963 of file X86InstrInfo.cpp.
References llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineRegisterInfo::getRegClass(), llvm::MachineFunction::getRegInfo(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::MachineFunction::getSubtarget(), Opc, RegSize, and TRI.
Referenced by llvm::X86InstrInfo::foldMemoryOperandImpl().
Check whether the given shift count is appropriate can be represented by a LEA instruction.
Definition at line 1000 of file X86InstrInfo.cpp.
Referenced by llvm::X86InstrInfo::convertToThreeAddress(), and isDefConvertible().
|
static |
Check whether the use can be converted to remove a comparison against zero.
Returns the EFLAGS condition and the operand that we are comparing against zero.
Definition at line 5219 of file X86InstrInfo.cpp.
References CASE_EVEX, CASE_ND, llvm::X86::COND_AE, llvm::X86::COND_B, llvm::X86::COND_E, llvm::X86::COND_INVALID, and MI.
Referenced by llvm::X86InstrInfo::optimizeCompareInstr().
Return true if the Reg is X87 register.
Definition at line 3557 of file X86InstrInfo.cpp.
References Reg.
Referenced by llvm::X86::isX87Instruction().
Definition at line 9327 of file X86InstrInfo.cpp.
References llvm::Table.
|
static |
Definition at line 9335 of file X86InstrInfo.cpp.
References llvm::Table.
Referenced by llvm::X86InstrInfo::getExecutionDomain(), llvm::X86InstrInfo::setExecutionDomain(), and llvm::X86InstrInfo::setExecutionDomainCustom().
|
static |
Definition at line 7551 of file X86InstrInfo.cpp.
References llvm::MachineInstrBuilder::addImm(), addOperands(), llvm::BuildMI(), MI, and TII.
|
static |
Definition at line 7682 of file X86InstrInfo.cpp.
References llvm::dbgs(), and MI.
Referenced by llvm::X86InstrInfo::foldMemoryOperandImpl().
|
static |
Return true if register is PIC base; i.e.g defined by X86::MOVPC32r.
Definition at line 725 of file X86InstrInfo.cpp.
References assert(), llvm::MachineRegisterInfo::def_instructions(), and DefMI.
Referenced by llvm::X86InstrInfo::isReMaterializableImpl().
|
static |
Definition at line 7642 of file X86InstrInfo.cpp.
References llvm::MachineFunction::getRegInfo(), hasUndefRegUpdate(), llvm::MachineInstr::isImplicitDef(), and MI.
Referenced by llvm::X86InstrInfo::foldMemoryOperandImpl(), llvm::X86InstrInfo::foldMemoryOperandImpl(), and llvm::X86InstrInfo::foldMemoryOperandImpl().
|
static |
Definition at line 7465 of file X86InstrInfo.cpp.
References llvm::MachineRegisterInfo::constrainRegClass(), llvm::dbgs(), llvm::MachineInstr::dump(), llvm::MachineInstr::getDesc(), llvm::MachineInstr::getNumOperands(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineFunction::getRegInfo(), llvm::MachineOperand::isReg(), LLVM_DEBUG, Reg, llvm::seq(), and TII.
Referenced by fuseInst(), and fuseTwoAddrInst().