LLVM API Documentation
#include "X86.h"
#include "X86InstrBuilder.h"
#include "X86MachineFunctionInfo.h"
#include "X86RegisterInfo.h"
#include "X86Subtarget.h"
#include "X86TargetMachine.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/SelectionDAGISel.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/Type.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/TargetMachine.h"
#include "llvm/Target/TargetOptions.h"
#include "X86GenDAGISel.inc"
Go to the source code of this file.
#define DEBUG_TYPE "x86-isel" |
Definition at line 39 of file X86ISelDAGToDAG.cpp.
enum AtomicOpc |
Atomic opcode table
Definition at line 1573 of file X86ISelDAGToDAG.cpp.
enum AtomicSz |
ConstantI8 | |
I8 | |
SextConstantI16 | |
ConstantI16 | |
I16 | |
SextConstantI32 | |
ConstantI32 | |
I32 | |
SextConstantI64 | |
ConstantI64 | |
I64 | |
AtomicSzEnd |
Definition at line 1584 of file X86ISelDAGToDAG.cpp.
static bool FoldMaskAndShiftToExtract | ( | SelectionDAG & | DAG, |
SDValue | N, | ||
uint64_t | Mask, | ||
SDValue | Shift, | ||
SDValue | X, | ||
X86ISelAddressMode & | AM | ||
) | [static] |
Definition at line 782 of file X86ISelDAGToDAG.cpp.
References llvm::ISD::AND, llvm::APIntOps::And(), llvm::SelectionDAG::getConstant(), llvm::SDValue::getConstantOperandVal(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::SDValue::getSimpleValueType(), llvm::SDValue::hasOneUse(), llvm::MVT::i8, InsertDAGNode(), llvm::SelectionDAG::ReplaceAllUsesWith(), llvm::ISD::SHL, and llvm::ISD::SRL.
static bool FoldMaskAndShiftToScale | ( | SelectionDAG & | DAG, |
SDValue | N, | ||
uint64_t | Mask, | ||
SDValue | Shift, | ||
SDValue | X, | ||
X86ISelAddressMode & | AM | ||
) | [static] |
Definition at line 892 of file X86ISelDAGToDAG.cpp.
References llvm::ISD::ANY_EXTEND, llvm::SelectionDAG::computeKnownBits(), llvm::countLeadingZeros(), llvm::CountTrailingOnes_64(), llvm::countTrailingZeros(), llvm::SelectionDAG::getConstant(), llvm::SDValue::getConstantOperandVal(), llvm::APInt::getHighBitsSet(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::SDValue::getSimpleValueType(), llvm::MVT::getSizeInBits(), llvm::SDValue::getValueType(), llvm::SDValue::hasOneUse(), llvm::MVT::i8, InsertDAGNode(), llvm::SelectionDAG::ReplaceAllUsesWith(), llvm::ISD::SHL, llvm::ISD::SRL, and llvm::ISD::ZERO_EXTEND.
static bool FoldMaskedShiftToScaledMask | ( | SelectionDAG & | DAG, |
SDValue | N, | ||
uint64_t | Mask, | ||
SDValue | Shift, | ||
SDValue | X, | ||
X86ISelAddressMode & | AM | ||
) | [static] |
Definition at line 825 of file X86ISelDAGToDAG.cpp.
References llvm::ISD::AND, llvm::SelectionDAG::getConstant(), llvm::SDValue::getConstantOperandVal(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::SDValue::getSimpleValueType(), llvm::SDValue::hasOneUse(), InsertDAGNode(), llvm::SelectionDAG::ReplaceAllUsesWith(), and llvm::ISD::SHL.
static SDValue getAtomicLoadArithTargetConstant | ( | SelectionDAG * | CurDAG, |
SDLoc | dl, | ||
enum AtomicOpc & | Op, | ||
MVT | NVT, | ||
SDValue | Val | ||
) | [static] |
Definition at line 1699 of file X86ISelDAGToDAG.cpp.
References ADD, DEC, llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::ConstantSDNode::getSExtValue(), llvm::SelectionDAG::getTargetConstant(), llvm::SelectionDAG::getTargetExtractSubreg(), llvm::SDValue::hasOneUse(), llvm::MVT::i16, INC, llvm::X86::isZeroNode(), llvm::ISD::SUB, SUB, and llvm::ISD::TRUNCATE.
static unsigned getFusedLdStOpcode | ( | EVT & | LdVT, |
unsigned | Opc | ||
) | [static] |
getFusedLdStOpcode - Get the appropriate X86 opcode for an in memory increment or decrement. Opc should be X86ISD::DEC or X86ISD::INC.
Definition at line 2001 of file X86ISelDAGToDAG.cpp.
References llvm::X86ISD::DEC, llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, llvm::X86ISD::INC, and llvm_unreachable.
static bool HasNoSignedComparisonUses | ( | SDNode * | N | ) | [static] |
HasNoSignedComparisonUses - Test whether the given X86ISD::CMP node has any uses which require the SF or OF bits to be accurate.
Definition at line 1853 of file X86ISelDAGToDAG.cpp.
References llvm::ISD::CopyToReg, getReg(), llvm::SDNode::use_begin(), and llvm::SDNode::use_end().
static void InsertDAGNode | ( | SelectionDAG & | DAG, |
SDValue | Pos, | ||
SDValue | N | ||
) | [static] |
Definition at line 770 of file X86ISelDAGToDAG.cpp.
References llvm::SDValue::getNode(), llvm::SDNode::getNodeId(), llvm::SelectionDAG::RepositionNode(), and llvm::SDNode::setNodeId().
Referenced by FoldMaskAndShiftToExtract(), FoldMaskAndShiftToScale(), and FoldMaskedShiftToScaledMask().
static bool isCalleeLoad | ( | SDValue | Callee, |
SDValue & | Chain, | ||
bool | HasCallSeq | ||
) | [static] |
isCalleeLoad - Return true if call address is a load and it can be moved below CALLSEQ_START and the chains leading up to the call. Return the CALLSEQ_START by reference as a second output. In the case of a tail call, there isn't a callseq node between the call chain and the load.
Definition at line 409 of file X86ISelDAGToDAG.cpp.
References llvm::ISD::CALLSEQ_START, llvm::dyn_cast(), llvm::LSBaseSDNode::getAddressingMode(), llvm::LoadSDNode::getExtensionType(), llvm::SDValue::getNode(), llvm::SDValue::getNumOperands(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::SDValue::getValue(), llvm::SDValue::hasOneUse(), llvm::SDValue::isOperandOf(), llvm::MemSDNode::isVolatile(), llvm::AArch64DB::LD, llvm::ISD::NON_EXTLOAD, llvm::ISD::TokenFactor, and llvm::ISD::UNINDEXED.
static bool isDispSafeForFrameIndex | ( | int64_t | Val | ) | [static] |
Definition at line 584 of file X86ISelDAGToDAG.cpp.
static bool isLoadIncOrDecStore | ( | StoreSDNode * | StoreNode, |
unsigned | Opc, | ||
SDValue | StoredVal, | ||
SelectionDAG * | CurDAG, | ||
LoadSDNode *& | LoadNode, | ||
SDValue & | InputChain | ||
) | [static] |
isLoadIncOrDecStore - Check whether or not the chain ending in StoreNode is suitable for doing the {load; increment or decrement; store} to modify transformation.
Definition at line 1916 of file X86ISelDAGToDAG.cpp.
References llvm::X86ISD::DEC, llvm::LoadSDNode::getBasePtr(), llvm::StoreSDNode::getBasePtr(), llvm::MemSDNode::getChain(), llvm::MemSDNode::getMemoryVT(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDNode::getNodeId(), llvm::SDValue::getNumOperands(), llvm::LoadSDNode::getOffset(), llvm::StoreSDNode::getOffset(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::SDNode::getOperand(), llvm::SDValue::getResNo(), llvm::SDValue::getValue(), llvm::SDNode::hasNUsesOfValue(), llvm::SDValue::hasOneUse(), llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, llvm::X86ISD::INC, llvm::MemSDNode::isNonTemporal(), llvm::ISD::isNormalLoad(), llvm::ISD::isNormalStore(), llvm::SPII::Load, llvm::MVT::Other, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::ISD::TokenFactor, llvm::SDNode::use_begin(), and llvm::SDNode::use_end().
static void MoveBelowOrigChain | ( | SelectionDAG * | CurDAG, |
SDValue | Load, | ||
SDValue | Call, | ||
SDValue | OrigChain | ||
) | [static] |
MoveBelowCallOrigChain - Replace the original chain operand of the call with load's chain operand and move load below the call's chain operand.
Definition at line 371 of file X86ISelDAGToDAG.cpp.
References llvm::SmallVectorImpl< T >::clear(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDValue::getNumOperands(), llvm::SDNode::getNumOperands(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::MVT::Other, llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), llvm::ISD::TokenFactor, and llvm::SelectionDAG::UpdateNodeOperands().
STATISTIC | ( | NumLoadMoved | , |
"Number of loads moved below TokenFactor" | |||
) |
const uint16_t AtomicOpcTbl[AtomicOpcEnd][AtomicSzEnd] [static] |
Definition at line 1599 of file X86ISelDAGToDAG.cpp.