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/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.
Macros | |
#define | DEBUG_TYPE "x86-isel" |
Enumerations | |
enum | AtomicOpc { ADD, SUB, INC, DEC, OR, AND, XOR, AtomicOpcEnd } |
enum | AtomicSz { ConstantI8, I8, SextConstantI16, ConstantI16, I16, SextConstantI32, ConstantI32, I32, SextConstantI64, ConstantI64, I64, AtomicSzEnd } |
Functions | |
STATISTIC (NumLoadMoved,"Number of loads moved below TokenFactor") | |
static void | MoveBelowOrigChain (SelectionDAG *CurDAG, SDValue Load, SDValue Call, SDValue OrigChain) |
static bool | isCalleeLoad (SDValue Callee, SDValue &Chain, bool HasCallSeq) |
static bool | isDispSafeForFrameIndex (int64_t Val) |
static void | InsertDAGNode (SelectionDAG &DAG, SDValue Pos, SDValue N) |
static bool | FoldMaskAndShiftToExtract (SelectionDAG &DAG, SDValue N, uint64_t Mask, SDValue Shift, SDValue X, X86ISelAddressMode &AM) |
static bool | FoldMaskedShiftToScaledMask (SelectionDAG &DAG, SDValue N, uint64_t Mask, SDValue Shift, SDValue X, X86ISelAddressMode &AM) |
static bool | FoldMaskAndShiftToScale (SelectionDAG &DAG, SDValue N, uint64_t Mask, SDValue Shift, SDValue X, X86ISelAddressMode &AM) |
static SDValue | getAtomicLoadArithTargetConstant (SelectionDAG *CurDAG, SDLoc dl, enum AtomicOpc &Op, MVT NVT, SDValue Val) |
static bool | HasNoSignedComparisonUses (SDNode *N) |
static bool | isLoadIncOrDecStore (StoreSDNode *StoreNode, unsigned Opc, SDValue StoredVal, SelectionDAG *CurDAG, LoadSDNode *&LoadNode, SDValue &InputChain) |
static unsigned | getFusedLdStOpcode (EVT &LdVT, unsigned Opc) |
Variables | |
static const uint16_t | AtomicOpcTbl [AtomicOpcEnd][AtomicSzEnd] |
#define DEBUG_TYPE "x86-isel" |
Definition at line 15 of file X86ISelDAGToDAG.cpp.
enum AtomicOpc |
Atomic opcode table
Enumerator | |
---|---|
ADD | |
SUB | |
INC | |
DEC | |
OR | |
AND | |
XOR | |
AtomicOpcEnd |
Definition at line 1582 of file X86ISelDAGToDAG.cpp.
enum AtomicSz |
Enumerator | |
---|---|
ConstantI8 | |
I8 | |
SextConstantI16 | |
ConstantI16 | |
I16 | |
SextConstantI32 | |
ConstantI32 | |
I32 | |
SextConstantI64 | |
ConstantI64 | |
I64 | |
AtomicSzEnd |
Definition at line 1593 of file X86ISelDAGToDAG.cpp.
|
static |
Definition at line 773 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 |
Definition at line 883 of file X86ISelDAGToDAG.cpp.
References llvm::ISD::ANY_EXTEND, llvm::SelectionDAG::ComputeMaskedBits(), 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 |
Definition at line 816 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 |
Definition at line 1708 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.
getFusedLdStOpcode - Get the appropriate X86 opcode for an in memory increment or decrement. Opc should be X86ISD::DEC or X86ISD::INC.
Definition at line 2003 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.
HasNoSignedComparisonUses - Test whether the given X86ISD::CMP node has any uses which require the SF or OF bits to be accurate.
Definition at line 1855 of file X86ISelDAGToDAG.cpp.
References llvm::ISD::CopyToReg, getReg(), llvm::SDNode::use_begin(), and llvm::SDNode::use_end().
|
static |
Definition at line 762 of file X86ISelDAGToDAG.cpp.
References llvm::SDValue::getNode(), llvm::SDNode::getNodeId(), llvm::SelectionDAG::RepositionNode(), and llvm::SDNode::setNodeId().
Referenced by FoldMaskAndShiftToExtract(), FoldMaskAndShiftToScale(), and FoldMaskedShiftToScaledMask().
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 401 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::A64DB::LD, llvm::ISD::NON_EXTLOAD, llvm::ISD::TokenFactor, and llvm::ISD::UNINDEXED.
|
static |
Definition at line 576 of file X86ISelDAGToDAG.cpp.
|
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 1918 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::SmallVectorTemplateCommon< T >::size(), llvm::ISD::TokenFactor, llvm::SDNode::use_begin(), and llvm::SDNode::use_end().
|
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 362 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< T >::value >::push_back(), llvm::SmallVectorTemplateCommon< T >::size(), llvm::ISD::TokenFactor, and llvm::SelectionDAG::UpdateNodeOperands().
STATISTIC | ( | NumLoadMoved | , |
"Number of loads moved below TokenFactor" | |||
) |
|
static |
Definition at line 1608 of file X86ISelDAGToDAG.cpp.