LLVM
8.0.1
|
#include "AArch64TargetMachine.h"
#include "MCTargetDesc/AArch64AddressingModes.h"
#include "llvm/ADT/APSInt.h"
#include "llvm/CodeGen/SelectionDAGISel.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/KnownBits.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/raw_ostream.h"
#include "AArch64GenDAGISel.inc"
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "aarch64-isel" |
Functions | |
static bool | isIntImmediate (const SDNode *N, uint64_t &Imm) |
isIntImmediate - This method tests to see if the node is a constant operand. More... | |
static bool | isIntImmediate (SDValue N, uint64_t &Imm) |
static bool | isOpcWithIntImmediate (const SDNode *N, unsigned Opc, uint64_t &Imm) |
static AArch64_AM::ShiftExtendType | getShiftTypeForNode (SDValue N) |
getShiftTypeForNode - Translate a shift node to the corresponding ShiftType value. More... | |
static bool | isWorthFoldingSHL (SDValue V) |
Determine whether it is worth it to fold SHL into the addressing mode. More... | |
static AArch64_AM::ShiftExtendType | getExtendTypeForNode (SDValue N, bool IsLoadStore=false) |
getExtendTypeForNode - Translate an extend node to the corresponding ExtendType value. More... | |
static bool | checkHighLaneIndex (SDNode *DL, SDValue &LaneOp, int &LaneIdx) |
static bool | checkV64LaneV128 (SDValue Op0, SDValue Op1, SDValue &StdOp, SDValue &LaneOp, int &LaneIdx) |
static SDValue | narrowIfNeeded (SelectionDAG *CurDAG, SDValue N) |
Instructions that accept extend modifiers like UXTW expect the register being extended to be a GPR32, but the incoming DAG might be acting on a GPR64 (either via SEXT_INREG or AND). More... | |
static bool | isWorthFoldingADDlow (SDValue N) |
If there's a use of this ADDlow that's not itself a load/store then we'll need to create a real ADD instruction from it anyway and there's no point in folding it into the mem op. More... | |
static SDValue | Widen (SelectionDAG *CurDAG, SDValue N) |
static bool | isPreferredADD (int64_t ImmOff) |
static SDValue | NarrowVector (SDValue V128Reg, SelectionDAG &DAG) |
NarrowVector - Given a value in the V128 register class, produce the equivalent value in the V64 register class. More... | |
static bool | isBitfieldExtractOpFromAnd (SelectionDAG *CurDAG, SDNode *N, unsigned &Opc, SDValue &Opd0, unsigned &LSB, unsigned &MSB, unsigned NumberOfIgnoredLowBits, bool BiggerPattern) |
static bool | isBitfieldExtractOpFromSExtInReg (SDNode *N, unsigned &Opc, SDValue &Opd0, unsigned &Immr, unsigned &Imms) |
static bool | isSeveralBitsExtractOpFromShr (SDNode *N, unsigned &Opc, SDValue &Opd0, unsigned &LSB, unsigned &MSB) |
static bool | isBitfieldExtractOpFromShr (SDNode *N, unsigned &Opc, SDValue &Opd0, unsigned &Immr, unsigned &Imms, bool BiggerPattern) |
static bool | isBitfieldExtractOp (SelectionDAG *CurDAG, SDNode *N, unsigned &Opc, SDValue &Opd0, unsigned &Immr, unsigned &Imms, unsigned NumberOfIgnoredLowBits=0, bool BiggerPattern=false) |
static bool | isBitfieldDstMask (uint64_t DstMask, const APInt &BitsToBeInserted, unsigned NumberOfIgnoredHighBits, EVT VT) |
Does DstMask form a complementary pair with the mask provided by BitsToBeInserted, suitable for use in a BFI instruction. More... | |
static void | getUsefulBits (SDValue Op, APInt &UsefulBits, unsigned Depth=0) |
static void | getUsefulBitsFromAndWithImmediate (SDValue Op, APInt &UsefulBits, unsigned Depth) |
static void | getUsefulBitsFromBitfieldMoveOpd (SDValue Op, APInt &UsefulBits, uint64_t Imm, uint64_t MSB, unsigned Depth) |
static void | getUsefulBitsFromUBFM (SDValue Op, APInt &UsefulBits, unsigned Depth) |
static void | getUsefulBitsFromOrWithShiftedReg (SDValue Op, APInt &UsefulBits, unsigned Depth) |
static void | getUsefulBitsFromBFM (SDValue Op, SDValue Orig, APInt &UsefulBits, unsigned Depth) |
static void | getUsefulBitsForUse (SDNode *UserNode, APInt &UsefulBits, SDValue Orig, unsigned Depth) |
static SDValue | getLeftShift (SelectionDAG *CurDAG, SDValue Op, int ShlAmount) |
Create a machine node performing a notional SHL of Op by ShlAmount. More... | |
static bool | isBitfieldPositioningOp (SelectionDAG *CurDAG, SDValue Op, bool BiggerPattern, SDValue &Src, int &ShiftAmount, int &MaskWidth) |
Does this tree qualify as an attempt to move a bitfield into position, essentially "(and (shl VAL, N), Mask)". More... | |
static bool | isShiftedMask (uint64_t Mask, EVT VT) |
static bool | tryBitfieldInsertOpFromOrAndImm (SDNode *N, SelectionDAG *CurDAG) |
static bool | tryBitfieldInsertOpFromOr (SDNode *N, const APInt &UsefulBits, SelectionDAG *CurDAG) |
static int | getIntOperandFromRegisterString (StringRef RegString) |
#define DEBUG_TYPE "aarch64-isel" |
Definition at line 29 of file AArch64ISelDAGToDAG.cpp.
Definition at line 469 of file AArch64ISelDAGToDAG.cpp.
References llvm::AArch64ISD::DUPLANE16, llvm::AArch64ISD::DUPLANE32, llvm::ISD::EXTRACT_SUBVECTOR, llvm::SDValue::getNode(), llvm::SDValue::getOpcode(), llvm::SDNode::getOpcode(), llvm::SDValue::getOperand(), llvm::SDNode::getOperand(), llvm::ConstantSDNode::getSExtValue(), and llvm::ISD::INSERT_SUBVECTOR.
Referenced by checkV64LaneV128().
|
static |
Definition at line 492 of file AArch64ISelDAGToDAG.cpp.
References llvm::Intrinsic::aarch64_neon_smull, llvm::Intrinsic::aarch64_neon_umull, checkHighLaneIndex(), llvm::SDValue::getNode(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::SDNode::getOperand(), llvm::SDNode::getSimpleValueType(), llvm::SDNode::getValueType(), llvm::MVT::i64, llvm_unreachable, llvm::ISD::MUL, llvm::MVT::SimpleTy, std::swap(), llvm::MVT::v2i32, llvm::MVT::v2i64, llvm::MVT::v4i16, llvm::MVT::v4i32, and llvm::MVT::v8i16.
|
static |
getExtendTypeForNode - Translate an extend node to the corresponding ExtendType value.
Definition at line 417 of file AArch64ISelDAGToDAG.cpp.
References llvm::ISD::AND, llvm::ISD::ANY_EXTEND, assert(), llvm::dyn_cast(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::SDValue::getValueType(), llvm::ConstantSDNode::getZExtValue(), llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, llvm::AArch64_AM::InvalidShiftExtend, llvm::ISD::SIGN_EXTEND, llvm::ISD::SIGN_EXTEND_INREG, llvm::AArch64_AM::SXTB, llvm::AArch64_AM::SXTH, llvm::AArch64_AM::SXTW, llvm::AArch64_AM::UXTB, llvm::AArch64_AM::UXTH, llvm::AArch64_AM::UXTW, and llvm::ISD::ZERO_EXTEND.
|
static |
Definition at line 2590 of file AArch64ISelDAGToDAG.cpp.
References assert(), llvm::dyn_cast(), llvm::AArch64SysReg::SysReg::Encoding, llvm::tgtok::Field, llvm::MDNodeSDNode::getMD(), llvm::SDNode::getOperand(), llvm::MDNode::getOperand(), llvm::SDNode::getSimpleValueType(), llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, llvm_unreachable, llvm::AArch64SysReg::lookupSysRegByName(), N, llvm::MVT::Other, llvm::AArch64SysReg::parseGenericRegister(), llvm::MCID::Select, llvm::SmallVectorBase::size(), and llvm::StringRef::split().
|
static |
Create a machine node performing a notional SHL of Op by ShlAmount.
If ShlAmount is negative, do a (logical) right-shift instead. If ShlAmount is 0, return Op unchanged.
Definition at line 2051 of file AArch64ISelDAGToDAG.cpp.
References assert(), llvm::SelectionDAG::getMachineNode(), llvm::EVT::getSizeInBits(), llvm::SelectionDAG::getTargetConstant(), and llvm::SDValue::getValueType().
Referenced by isBitfieldPositioningOp().
|
static |
getShiftTypeForNode - Translate a shift node to the corresponding ShiftType value.
Definition at line 325 of file AArch64ISelDAGToDAG.cpp.
References llvm::AArch64_AM::ASR, llvm::SDValue::getOpcode(), llvm::AArch64_AM::InvalidShiftExtend, llvm::AArch64_AM::LSL, llvm::AArch64_AM::LSR, llvm::AArch64_AM::ROR, llvm::ISD::ROTR, llvm::ISD::SHL, llvm::ISD::SRA, and llvm::ISD::SRL.
Definition at line 2024 of file AArch64ISelDAGToDAG.cpp.
References llvm::APInt::flipAllBits(), llvm::APInt::getBitWidth(), and llvm::SDValue::getScalarValueSizeInBits().
Referenced by getUsefulBitsFromAndWithImmediate(), getUsefulBitsFromBFM(), getUsefulBitsFromBitfieldMoveOpd(), getUsefulBitsFromOrWithShiftedReg(), isBitfieldDstMask(), and tryBitfieldInsertOpFromOr().
|
static |
Definition at line 1976 of file AArch64ISelDAGToDAG.cpp.
References llvm::APInt::getBitWidth(), llvm::SDNode::getMachineOpcode(), llvm::SDNode::getOperand(), getUsefulBitsFromAndWithImmediate(), getUsefulBitsFromBFM(), getUsefulBitsFromOrWithShiftedReg(), getUsefulBitsFromUBFM(), and llvm::SDNode::isMachineOpcode().
|
static |
Definition at line 1847 of file AArch64ISelDAGToDAG.cpp.
References llvm::AArch64_AM::decodeLogicalImmediate(), llvm::APInt::getBitWidth(), llvm::SDValue::getNode(), llvm::SDValue::getOperand(), and getUsefulBits().
Referenced by getUsefulBitsForUse().
|
static |
Definition at line 1921 of file AArch64ISelDAGToDAG.cpp.
References llvm::APInt::flipAllBits(), llvm::APInt::getBitWidth(), llvm::SDValue::getNode(), llvm::SDValue::getOperand(), getUsefulBits(), and llvm::BitmaskEnumDetail::Mask().
Referenced by getUsefulBitsForUse().
|
static |
Definition at line 1856 of file AArch64ISelDAGToDAG.cpp.
References llvm::APInt::getBitWidth(), getUsefulBits(), and llvm::APInt::lshrInPlace().
Referenced by getUsefulBitsFromUBFM().
|
static |
Definition at line 1893 of file AArch64ISelDAGToDAG.cpp.
References llvm::APInt::clearAllBits(), llvm::APInt::flipAllBits(), llvm::SDValue::getNode(), llvm::SDValue::getOperand(), llvm::AArch64_AM::getShiftType(), llvm::AArch64_AM::getShiftValue(), getUsefulBits(), llvm::APInt::lshrInPlace(), llvm::AArch64_AM::LSL, llvm::AArch64_AM::LSR, and llvm::BitmaskEnumDetail::Mask().
Referenced by getUsefulBitsForUse().
Definition at line 1883 of file AArch64ISelDAGToDAG.cpp.
References llvm::SDValue::getNode(), llvm::SDValue::getOperand(), and getUsefulBitsFromBitfieldMoveOpd().
Referenced by getUsefulBitsForUse().
|
static |
Does DstMask form a complementary pair with the mask provided by BitsToBeInserted, suitable for use in a BFI instruction.
Roughly speaking, this asks whether DstMask zeroes precisely those bits that will be set by the other half.
Definition at line 1817 of file AArch64ISelDAGToDAG.cpp.
References assert(), llvm::Depth, llvm::EVT::getSizeInBits(), getUsefulBits(), llvm::MVT::i32, llvm::MVT::i64, and llvm::APInt::zextOrTrunc().
Referenced by tryBitfieldInsertOpFromOr().
|
static |
Definition at line 1744 of file AArch64ISelDAGToDAG.cpp.
References llvm::ISD::AND, llvm::AMDGPUISD::BFM, llvm::SDNode::getMachineOpcode(), llvm::SDValue::getNode(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::SDNode::getValueType(), llvm::MVT::i32, llvm::MVT::i64, isBitfieldExtractOpFromAnd(), isBitfieldExtractOpFromSExtInReg(), isBitfieldExtractOpFromShr(), llvm::SDNode::isMachineOpcode(), llvm::ISD::SIGN_EXTEND_INREG, llvm::ISD::SRA, llvm::ISD::SRL, and SubReg.
Referenced by tryBitfieldInsertOpFromOr().
|
static |
Definition at line 1482 of file AArch64ISelDAGToDAG.cpp.
References llvm::ISD::AND, llvm::ISD::ANY_EXTEND, assert(), llvm::dbgs(), llvm::SDValue::getNode(), llvm::SDNode::getOpcode(), llvm::SDValue::getOperand(), llvm::SDNode::getOperand(), llvm::SDNode::getValueType(), llvm::MVT::i32, llvm::MVT::i64, isOpcWithIntImmediate(), LLVM_DEBUG, llvm::ISD::SRL, llvm::ISD::TRUNCATE, and Widen().
Referenced by isBitfieldExtractOp().
|
static |
Definition at line 1574 of file AArch64ISelDAGToDAG.cpp.
References assert(), llvm::SDValue::getNode(), llvm::SDNode::getOpcode(), llvm::SDValue::getOperand(), llvm::SDNode::getOperand(), llvm::EVT::getSizeInBits(), llvm::SDNode::getValueType(), llvm::MVT::i32, llvm::MVT::i64, isOpcWithIntImmediate(), llvm::ISD::SIGN_EXTEND_INREG, llvm::ISD::SRA, llvm::ISD::SRL, and llvm::ISD::TRUNCATE.
Referenced by isBitfieldExtractOp().
|
static |
Definition at line 1653 of file AArch64ISelDAGToDAG.cpp.
References assert(), llvm::dbgs(), llvm::SDValue::getNode(), llvm::SDNode::getOpcode(), llvm::SDValue::getOperand(), llvm::SDNode::getOperand(), llvm::EVT::getSizeInBits(), llvm::SDValue::getValueType(), llvm::SDNode::getValueType(), llvm::MVT::i32, llvm::MVT::i64, isIntImmediate(), isOpcWithIntImmediate(), isSeveralBitsExtractOpFromShr(), LLVM_DEBUG, llvm::ISD::SHL, llvm::ISD::SIGN_EXTEND, llvm::ISD::SRA, llvm::ISD::SRL, llvm::ISD::TRUNCATE, and Widen().
Referenced by isBitfieldExtractOp().
|
static |
Does this tree qualify as an attempt to move a bitfield into position, essentially "(and (shl VAL, N), Mask)".
Definition at line 2081 of file AArch64ISelDAGToDAG.cpp.
References llvm::ISD::AND, assert(), llvm::SelectionDAG::computeKnownBits(), llvm::countTrailingOnes(), llvm::countTrailingZeros(), getLeftShift(), llvm::SDValue::getNode(), llvm::SDValue::getOperand(), llvm::EVT::getSizeInBits(), llvm::SDValue::getValueType(), llvm::SDValue::hasOneUse(), isOpcWithIntImmediate(), llvm::isShiftedMask_64(), llvm::ISD::SHL, and llvm::KnownBits::Zero.
Referenced by tryBitfieldInsertOpFromOr().
isIntImmediate - This method tests to see if the node is a constant operand.
If so Imm will receive the 32-bit value.
Definition at line 212 of file AArch64ISelDAGToDAG.cpp.
References C.
Referenced by isBitfieldExtractOpFromShr(), isIntImmediate(), isOpcWithIntImmediate(), isSeveralBitsExtractOpFromShr(), and tryBitfieldInsertOpFromOr().
Definition at line 222 of file AArch64ISelDAGToDAG.cpp.
References llvm::SDValue::getNode(), and isIntImmediate().
Definition at line 229 of file AArch64ISelDAGToDAG.cpp.
References llvm::InlineAsm::Constraint_i, llvm::InlineAsm::Constraint_m, llvm::InlineAsm::Constraint_Q, llvm::TargetRegisterClass::getID(), llvm::SDValue::getNode(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::TargetRegisterInfo::getPointerRegClass(), llvm::AArch64_AM::getShifterImm(), llvm::SDValue::getValueType(), llvm::MVT::i32, llvm::MVT::i64, isIntImmediate(), llvm_unreachable, llvm::AArch64_AM::LSL, N, and TRI.
Referenced by isBitfieldExtractOpFromAnd(), isBitfieldExtractOpFromSExtInReg(), isBitfieldExtractOpFromShr(), isBitfieldPositioningOp(), isSeveralBitsExtractOpFromShr(), tryBitfieldInsertOpFromOr(), and tryBitfieldInsertOpFromOrAndImm().
|
static |
Definition at line 941 of file AArch64ISelDAGToDAG.cpp.
References llvm::ISD::ADD, llvm::SDValue::getOpcode(), and llvm::SDValue::getOperand().
|
static |
Definition at line 1607 of file AArch64ISelDAGToDAG.cpp.
References llvm::ISD::AND, llvm::countLeadingOnes(), llvm::SDValue::getNode(), llvm::SDNode::getOpcode(), llvm::SDValue::getOperand(), llvm::SDNode::getOperand(), llvm::SDNode::getValueType(), llvm::MVT::i32, isIntImmediate(), llvm::isMask_64(), isOpcWithIntImmediate(), and llvm::ISD::SRL.
Referenced by isBitfieldExtractOpFromShr().
Definition at line 2132 of file AArch64ISelDAGToDAG.cpp.
References assert(), llvm::MVT::i32, llvm::MVT::i64, llvm::isShiftedMask_32(), and llvm::isShiftedMask_64().
Referenced by tryBitfieldInsertOpFromOr(), and tryBitfieldInsertOpFromOrAndImm().
If there's a use of this ADDlow that's not itself a load/store then we'll need to create a real ADD instruction from it anyway and there's no point in folding it into the mem op.
Theoretically, it shouldn't matter, but there's a single pseudo-instruction for an ADRP/ADD pair so over-aggressive folding leads to duplicated ADRP instructions.
Definition at line 663 of file AArch64ISelDAGToDAG.cpp.
References llvm::AArch64ISD::ADDlow, llvm::ISD::ATOMIC_LOAD, llvm::ISD::ATOMIC_STORE, llvm::dyn_cast(), llvm::ISD::FrameIndex, llvm::DataLayout::getABITypeAlignment(), llvm::GlobalValue::getAlignment(), llvm::GlobalAddressSDNode::getGlobal(), llvm::SDValue::getNode(), llvm::GlobalAddressSDNode::getOffset(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::TargetLoweringBase::getPointerTy(), llvm::GlobalValue::getValueType(), llvm::MVT::i64, llvm::Type::isSized(), llvm::isStrongerThanMonotonic(), llvm::ISD::LOAD, llvm::Log2_32(), N, Size, llvm::ISD::STORE, and llvm::SDNode::uses().
Determine whether it is worth it to fold SHL into the addressing mode.
Definition at line 342 of file AArch64ISelDAGToDAG.cpp.
References assert(), llvm::dyn_cast(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::ConstantSDNode::getZExtValue(), and llvm::ISD::SHL.
|
static |
Instructions that accept extend modifiers like UXTW expect the register being extended to be a GPR32, but the incoming DAG might be acting on a GPR64 (either via SEXT_INREG or AND).
Extract the appropriate low bits if this is the case.
Definition at line 601 of file AArch64ISelDAGToDAG.cpp.
References llvm::SelectionDAG::getTargetConstant(), llvm::SDValue::getValueType(), llvm::MVT::i32, and SubReg.
Referenced by tryBitfieldInsertOpFromOr().
|
static |
NarrowVector - Given a value in the V128 register class, produce the equivalent value in the V64 register class.
Definition at line 1315 of file AArch64ISelDAGToDAG.cpp.
References llvm::ArrayRef< T >::begin(), llvm::SDNode::getOperand(), llvm::EVT::getSimpleVT(), llvm::EVT::getSizeInBits(), llvm::SelectionDAG::getTargetExtractSubreg(), llvm::SDValue::getValueType(), llvm::SDNode::getValueType(), llvm::EVT::getVectorElementType(), llvm::EVT::getVectorNumElements(), llvm::MVT::getVectorVT(), llvm::MVT::i64, N, llvm::SDNode::op_begin(), llvm::MVT::Other, llvm::transform(), llvm::MVT::Untyped, and WidenVector().
|
static |
Definition at line 2229 of file AArch64ISelDAGToDAG.cpp.
References llvm::ISD::ADD, llvm::AArch64ISD::ADDlow, llvm::ISD::AND, llvm::ISD::ANY_EXTEND, assert(), llvm::tgtok::Bits, llvm::SelectionDAG::computeKnownBits(), llvm::APFloat::convertToInteger(), llvm::APInt::countLeadingZeros(), llvm::APInt::countPopulation(), llvm::countTrailingOnes(), llvm::countTrailingZeros(), llvm::APInt::countTrailingZeros(), llvm::dyn_cast(), llvm::MipsISD::Ext, llvm::APInt::getBitsSet(), llvm::KnownBits::getBitWidth(), llvm::ConstantPoolSDNode::getConstVal(), llvm::SelectionDAG::getMachineNode(), llvm::SDValue::getNode(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::EVT::getSizeInBits(), llvm::SelectionDAG::getTargetConstant(), getUsefulBits(), llvm::SDValue::getValueType(), llvm::SDNode::getValueType(), llvm::SDValue::hasOneUse(), I, llvm::MVT::i32, llvm::MVT::i64, llvm::tgtok::IntVal, isBitfieldDstMask(), isBitfieldExtractOp(), isBitfieldPositioningOp(), isIntImmediate(), isOpcWithIntImmediate(), llvm::APInt::isPowerOf2(), isShiftedMask(), llvm::APInt::logBase2(), llvm::AArch64_AM::LSR, narrowIfNeeded(), llvm::ISD::OR, llvm::APFloatBase::rmTowardZero, llvm::ISD::ROTR, llvm::SelectionDAG::SelectNodeTo(), llvm::ISD::SHL, Size, llvm::ISD::SRA, llvm::ISD::SRL, llvm::ISD::SUB, SubReg, std::swap(), tryBitfieldInsertOpFromOrAndImm(), llvm::KnownBits::Zero, and llvm::ISD::ZERO_EXTEND.
|
static |
Definition at line 2141 of file AArch64ISelDAGToDAG.cpp.
References llvm::ISD::AND, assert(), llvm::SelectionDAG::computeKnownBits(), llvm::APInt::countPopulation(), llvm::countTrailingOnes(), llvm::SelectionDAG::getMachineNode(), llvm::SDValue::getNode(), llvm::SDNode::getOpcode(), llvm::SDValue::getOperand(), llvm::SDNode::getOperand(), llvm::EVT::getSizeInBits(), llvm::SelectionDAG::getTargetConstant(), llvm::SDNode::getValueType(), llvm::APInt::getZExtValue(), llvm::SDValue::hasOneUse(), llvm::MVT::i32, llvm::MVT::i64, llvm::AArch64_AM::isLogicalImmediate(), isOpcWithIntImmediate(), isShiftedMask(), llvm::AArch64ISD::MOVI, llvm::ISD::OR, llvm::SelectionDAG::SelectNodeTo(), and llvm::KnownBits::Zero.
Referenced by tryBitfieldInsertOpFromOr().
|
static |
Definition at line 820 of file AArch64ISelDAGToDAG.cpp.
References llvm::SelectionDAG::getMachineNode(), llvm::SelectionDAG::getTargetConstant(), llvm::MVT::i32, llvm::MVT::i64, and SubReg.
Referenced by isBitfieldExtractOpFromAnd(), and isBitfieldExtractOpFromShr().