mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-11 00:39:36 +00:00
Add contexts to some of the MVT APIs. No functionality change yet, just the infrastructure work needed to get the contexts to where they need to be first.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78759 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
45563ba9e3
commit
23b9b19b1a
include/llvm
lib
CodeGen/SelectionDAG
DAGCombiner.cppFastISel.cppLegalizeDAG.cppLegalizeFloatTypes.cppLegalizeIntegerTypes.cppLegalizeTypes.cppLegalizeTypes.hLegalizeTypesGeneric.cppLegalizeVectorTypes.cppSelectionDAG.cppSelectionDAGBuild.cppTargetLowering.cpp
Target
CellSPU
PIC16
PowerPC
XCore
Transforms/Scalar
VMCore
utils/TableGen
@ -144,6 +144,25 @@ namespace llvm {
|
||||
SimpleTy <= MVT::LAST_VECTOR_VALUETYPE);
|
||||
}
|
||||
|
||||
/// isPow2VectorType - Retuns true if the given vector is a power of 2.
|
||||
bool isPow2VectorType() const {
|
||||
unsigned NElts = getVectorNumElements();
|
||||
return !(NElts & (NElts - 1));
|
||||
}
|
||||
|
||||
/// getPow2VectorType - Widens the length of the given vector EVT up to
|
||||
/// the nearest power of 2 and returns that type.
|
||||
MVT getPow2VectorType() const {
|
||||
if (!isPow2VectorType()) {
|
||||
unsigned NElts = getVectorNumElements();
|
||||
unsigned Pow2NElts = 1 << Log2_32_Ceil(NElts);
|
||||
return MVT::getVectorVT(getVectorElementType(), Pow2NElts);
|
||||
}
|
||||
else {
|
||||
return *this;
|
||||
}
|
||||
}
|
||||
|
||||
MVT getVectorElementType() const {
|
||||
switch (SimpleTy) {
|
||||
default:
|
||||
@ -364,30 +383,30 @@ namespace llvm {
|
||||
|
||||
/// getIntegerVT - Returns the EVT that represents an integer with the given
|
||||
/// number of bits.
|
||||
static EVT getIntegerVT(unsigned BitWidth) {
|
||||
static EVT getIntegerVT(LLVMContext &Context, unsigned BitWidth) {
|
||||
MVT M = MVT::getIntegerVT(BitWidth);
|
||||
if (M.SimpleTy == MVT::LastSimpleValueType+1)
|
||||
return getExtendedIntegerVT(BitWidth);
|
||||
return getExtendedIntegerVT(Context, BitWidth);
|
||||
else
|
||||
return M;
|
||||
}
|
||||
|
||||
/// getVectorVT - Returns the EVT that represents a vector NumElements in
|
||||
/// length, where each element is of type VT.
|
||||
static EVT getVectorVT(EVT VT, unsigned NumElements) {
|
||||
static EVT getVectorVT(LLVMContext &Context, EVT VT, unsigned NumElements) {
|
||||
MVT M = MVT::getVectorVT(VT.V, NumElements);
|
||||
if (M.SimpleTy == MVT::LastSimpleValueType+1)
|
||||
return getExtendedVectorVT(VT, NumElements);
|
||||
return getExtendedVectorVT(Context, VT, NumElements);
|
||||
else
|
||||
return M;
|
||||
}
|
||||
|
||||
/// getIntVectorWithNumElements - Return any integer vector type that has
|
||||
/// the specified number of elements.
|
||||
static EVT getIntVectorWithNumElements(unsigned NumElts) {
|
||||
static EVT getIntVectorWithNumElements(LLVMContext &C, unsigned NumElts) {
|
||||
MVT M = MVT::getIntVectorWithNumElements(NumElts);
|
||||
if (M.SimpleTy == MVT::LastSimpleValueType+1)
|
||||
return getVectorVT(EVT(MVT::i8), NumElts);
|
||||
return getVectorVT(C, MVT::i8, NumElts);
|
||||
else
|
||||
return M;
|
||||
}
|
||||
@ -537,13 +556,13 @@ namespace llvm {
|
||||
/// getRoundIntegerType - Rounds the bit-width of the given integer EVT up
|
||||
/// to the nearest power of two (and at least to eight), and returns the
|
||||
/// integer EVT with that number of bits.
|
||||
EVT getRoundIntegerType() const {
|
||||
EVT getRoundIntegerType(LLVMContext &Context) const {
|
||||
assert(isInteger() && !isVector() && "Invalid integer type!");
|
||||
unsigned BitWidth = getSizeInBits();
|
||||
if (BitWidth <= 8)
|
||||
return EVT(MVT::i8);
|
||||
else
|
||||
return getIntegerVT(1 << Log2_32_Ceil(BitWidth));
|
||||
return getIntegerVT(Context, 1 << Log2_32_Ceil(BitWidth));
|
||||
}
|
||||
|
||||
/// isPow2VectorType - Retuns true if the given vector is a power of 2.
|
||||
@ -554,11 +573,11 @@ namespace llvm {
|
||||
|
||||
/// getPow2VectorType - Widens the length of the given vector EVT up to
|
||||
/// the nearest power of 2 and returns that type.
|
||||
EVT getPow2VectorType() const {
|
||||
EVT getPow2VectorType(LLVMContext &Context) const {
|
||||
if (!isPow2VectorType()) {
|
||||
unsigned NElts = getVectorNumElements();
|
||||
unsigned Pow2NElts = 1 << Log2_32_Ceil(NElts);
|
||||
return EVT::getVectorVT(getVectorElementType(), Pow2NElts);
|
||||
return EVT::getVectorVT(Context, getVectorElementType(), Pow2NElts);
|
||||
}
|
||||
else {
|
||||
return *this;
|
||||
@ -572,7 +591,7 @@ namespace llvm {
|
||||
/// getTypeForEVT - This method returns an LLVM type corresponding to the
|
||||
/// specified EVT. For integer types, this returns an unsigned type. Note
|
||||
/// that this will abort for types that cannot be represented.
|
||||
const Type *getTypeForEVT() const;
|
||||
const Type *getTypeForEVT(LLVMContext &Context) const;
|
||||
|
||||
/// getEVT - Return the value type corresponding to the specified type.
|
||||
/// This returns all pointers as iPTR. If HandleUnknown is true, unknown
|
||||
@ -601,8 +620,9 @@ namespace llvm {
|
||||
// Methods for handling the Extended-type case in functions above.
|
||||
// These are all out-of-line to prevent users of this header file
|
||||
// from having a dependency on Type.h.
|
||||
static EVT getExtendedIntegerVT(unsigned BitWidth);
|
||||
static EVT getExtendedVectorVT(EVT VT, unsigned NumElements);
|
||||
static EVT getExtendedIntegerVT(LLVMContext &C, unsigned BitWidth);
|
||||
static EVT getExtendedVectorVT(LLVMContext &C, EVT VT,
|
||||
unsigned NumElements);
|
||||
bool isExtendedFloatingPoint() const;
|
||||
bool isExtendedInteger() const;
|
||||
bool isExtendedVector() const;
|
||||
|
@ -186,14 +186,14 @@ public:
|
||||
ValueTypeActions[3] = RHS.ValueTypeActions[3];
|
||||
}
|
||||
|
||||
LegalizeAction getTypeAction(EVT VT) const {
|
||||
LegalizeAction getTypeAction(LLVMContext &Context, EVT VT) const {
|
||||
if (VT.isExtended()) {
|
||||
if (VT.isVector()) {
|
||||
return VT.isPow2VectorType() ? Expand : Promote;
|
||||
}
|
||||
if (VT.isInteger())
|
||||
// First promote to a power-of-two size, then expand if necessary.
|
||||
return VT == VT.getRoundIntegerType() ? Expand : Promote;
|
||||
return VT == VT.getRoundIntegerType(Context) ? Expand : Promote;
|
||||
assert(0 && "Unsupported extended type!");
|
||||
return Legal;
|
||||
}
|
||||
@ -216,8 +216,8 @@ public:
|
||||
/// it is already legal (return 'Legal') or we need to promote it to a larger
|
||||
/// type (return 'Promote'), or we need to expand it into multiple registers
|
||||
/// of smaller integer type (return 'Expand'). 'Custom' is not an option.
|
||||
LegalizeAction getTypeAction(EVT VT) const {
|
||||
return ValueTypeActions.getTypeAction(VT);
|
||||
LegalizeAction getTypeAction(LLVMContext &Context, EVT VT) const {
|
||||
return ValueTypeActions.getTypeAction(Context, VT);
|
||||
}
|
||||
|
||||
/// getTypeToTransformTo - For types supported by the target, this is an
|
||||
@ -226,34 +226,37 @@ public:
|
||||
/// than the largest integer register, this contains one step in the expansion
|
||||
/// to get to the smaller register. For illegal floating point types, this
|
||||
/// returns the integer type to transform to.
|
||||
EVT getTypeToTransformTo(EVT VT) const {
|
||||
EVT getTypeToTransformTo(LLVMContext &Context, EVT VT) const {
|
||||
if (VT.isSimple()) {
|
||||
assert((unsigned)VT.getSimpleVT().SimpleTy <
|
||||
array_lengthof(TransformToType));
|
||||
EVT NVT = TransformToType[VT.getSimpleVT().SimpleTy];
|
||||
assert(getTypeAction(NVT) != Promote &&
|
||||
assert(getTypeAction(Context, NVT) != Promote &&
|
||||
"Promote may not follow Expand or Promote");
|
||||
return NVT;
|
||||
}
|
||||
|
||||
if (VT.isVector()) {
|
||||
EVT NVT = VT.getPow2VectorType();
|
||||
EVT NVT = VT.getPow2VectorType(Context);
|
||||
if (NVT == VT) {
|
||||
// Vector length is a power of 2 - split to half the size.
|
||||
unsigned NumElts = VT.getVectorNumElements();
|
||||
EVT EltVT = VT.getVectorElementType();
|
||||
return (NumElts == 1) ? EltVT : EVT::getVectorVT(EltVT, NumElts / 2);
|
||||
return (NumElts == 1) ?
|
||||
EltVT : EVT::getVectorVT(Context, EltVT, NumElts / 2);
|
||||
}
|
||||
// Promote to a power of two size, avoiding multi-step promotion.
|
||||
return getTypeAction(NVT) == Promote ? getTypeToTransformTo(NVT) : NVT;
|
||||
return getTypeAction(Context, NVT) == Promote ?
|
||||
getTypeToTransformTo(Context, NVT) : NVT;
|
||||
} else if (VT.isInteger()) {
|
||||
EVT NVT = VT.getRoundIntegerType();
|
||||
EVT NVT = VT.getRoundIntegerType(Context);
|
||||
if (NVT == VT)
|
||||
// Size is a power of two - expand to half the size.
|
||||
return EVT::getIntegerVT(VT.getSizeInBits() / 2);
|
||||
return EVT::getIntegerVT(Context, VT.getSizeInBits() / 2);
|
||||
else
|
||||
// Promote to a power of two size, avoiding multi-step promotion.
|
||||
return getTypeAction(NVT) == Promote ? getTypeToTransformTo(NVT) : NVT;
|
||||
return getTypeAction(Context, NVT) == Promote ?
|
||||
getTypeToTransformTo(Context, NVT) : NVT;
|
||||
}
|
||||
assert(0 && "Unsupported extended type!");
|
||||
return MVT(MVT::Other); // Not reached
|
||||
@ -263,14 +266,14 @@ public:
|
||||
/// identity function. For types that must be expanded (i.e. integer types
|
||||
/// that are larger than the largest integer register or illegal floating
|
||||
/// point types), this returns the largest legal type it will be expanded to.
|
||||
EVT getTypeToExpandTo(EVT VT) const {
|
||||
EVT getTypeToExpandTo(LLVMContext &Context, EVT VT) const {
|
||||
assert(!VT.isVector());
|
||||
while (true) {
|
||||
switch (getTypeAction(VT)) {
|
||||
switch (getTypeAction(Context, VT)) {
|
||||
case Legal:
|
||||
return VT;
|
||||
case Expand:
|
||||
VT = getTypeToTransformTo(VT);
|
||||
VT = getTypeToTransformTo(Context, VT);
|
||||
break;
|
||||
default:
|
||||
assert(false && "Type is not legal nor is it to be expanded!");
|
||||
@ -289,7 +292,7 @@ public:
|
||||
/// register. It also returns the VT and quantity of the intermediate values
|
||||
/// before they are promoted/expanded.
|
||||
///
|
||||
unsigned getVectorTypeBreakdown(EVT VT,
|
||||
unsigned getVectorTypeBreakdown(LLVMContext &Context, EVT VT,
|
||||
EVT &IntermediateVT,
|
||||
unsigned &NumIntermediates,
|
||||
EVT &RegisterVT) const;
|
||||
@ -549,7 +552,14 @@ public:
|
||||
|
||||
/// getRegisterType - Return the type of registers that this ValueType will
|
||||
/// eventually require.
|
||||
EVT getRegisterType(EVT VT) const {
|
||||
EVT getRegisterType(MVT VT) const {
|
||||
assert((unsigned)VT.SimpleTy < array_lengthof(RegisterTypeForVT));
|
||||
return RegisterTypeForVT[VT.SimpleTy];
|
||||
}
|
||||
|
||||
/// getRegisterType - Return the type of registers that this ValueType will
|
||||
/// eventually require.
|
||||
EVT getRegisterType(LLVMContext &Context, EVT VT) const {
|
||||
if (VT.isSimple()) {
|
||||
assert((unsigned)VT.getSimpleVT().SimpleTy <
|
||||
array_lengthof(RegisterTypeForVT));
|
||||
@ -558,11 +568,12 @@ public:
|
||||
if (VT.isVector()) {
|
||||
EVT VT1, RegisterVT;
|
||||
unsigned NumIntermediates;
|
||||
(void)getVectorTypeBreakdown(VT, VT1, NumIntermediates, RegisterVT);
|
||||
(void)getVectorTypeBreakdown(Context, VT, VT1,
|
||||
NumIntermediates, RegisterVT);
|
||||
return RegisterVT;
|
||||
}
|
||||
if (VT.isInteger()) {
|
||||
return getRegisterType(getTypeToTransformTo(VT));
|
||||
return getRegisterType(Context, getTypeToTransformTo(Context, VT));
|
||||
}
|
||||
assert(0 && "Unsupported extended type!");
|
||||
return EVT(MVT::Other); // Not reached
|
||||
@ -574,7 +585,7 @@ public:
|
||||
/// into pieces. For types like i140, which are first promoted then expanded,
|
||||
/// it is the number of registers needed to hold all the bits of the original
|
||||
/// type. For an i140 on a 32 bit machine this means 5 registers.
|
||||
unsigned getNumRegisters(EVT VT) const {
|
||||
unsigned getNumRegisters(LLVMContext &Context, EVT VT) const {
|
||||
if (VT.isSimple()) {
|
||||
assert((unsigned)VT.getSimpleVT().SimpleTy <
|
||||
array_lengthof(NumRegistersForVT));
|
||||
@ -583,11 +594,11 @@ public:
|
||||
if (VT.isVector()) {
|
||||
EVT VT1, VT2;
|
||||
unsigned NumIntermediates;
|
||||
return getVectorTypeBreakdown(VT, VT1, NumIntermediates, VT2);
|
||||
return getVectorTypeBreakdown(Context, VT, VT1, NumIntermediates, VT2);
|
||||
}
|
||||
if (VT.isInteger()) {
|
||||
unsigned BitWidth = VT.getSizeInBits();
|
||||
unsigned RegWidth = getRegisterType(VT).getSizeInBits();
|
||||
unsigned RegWidth = getRegisterType(Context, VT).getSizeInBits();
|
||||
return (BitWidth + RegWidth - 1) / RegWidth;
|
||||
}
|
||||
assert(0 && "Unsupported extended type!");
|
||||
|
@ -1881,7 +1881,7 @@ SDValue DAGCombiner::visitAND(SDNode *N) {
|
||||
EVT ExtVT = MVT::Other;
|
||||
uint32_t ActiveBits = N1C->getAPIntValue().getActiveBits();
|
||||
if (ActiveBits > 0 && APIntOps::isMask(ActiveBits, N1C->getAPIntValue()))
|
||||
ExtVT = EVT::getIntegerVT(ActiveBits);
|
||||
ExtVT = EVT::getIntegerVT(*DAG.getContext(), ActiveBits);
|
||||
|
||||
EVT LoadedVT = LN0->getMemoryVT();
|
||||
|
||||
@ -2539,7 +2539,7 @@ SDValue DAGCombiner::visitSRA(SDNode *N) {
|
||||
// sext_inreg.
|
||||
if (N1C && N0.getOpcode() == ISD::SHL && N1 == N0.getOperand(1)) {
|
||||
unsigned LowBits = VT.getSizeInBits() - (unsigned)N1C->getZExtValue();
|
||||
EVT EVT = EVT::getIntegerVT(LowBits);
|
||||
EVT EVT = EVT::getIntegerVT(*DAG.getContext(), LowBits);
|
||||
if ((!LegalOperations || TLI.isOperationLegal(ISD::SIGN_EXTEND_INREG, EVT)))
|
||||
return DAG.getNode(ISD::SIGN_EXTEND_INREG, N->getDebugLoc(), VT,
|
||||
N0.getOperand(0), DAG.getValueType(EVT));
|
||||
@ -2567,7 +2567,7 @@ SDValue DAGCombiner::visitSRA(SDNode *N) {
|
||||
// Determine what the truncate's result bitsize and type would be.
|
||||
unsigned VTValSize = VT.getSizeInBits();
|
||||
EVT TruncVT =
|
||||
EVT::getIntegerVT(VTValSize - N1C->getZExtValue());
|
||||
EVT::getIntegerVT(*DAG.getContext(), VTValSize - N1C->getZExtValue());
|
||||
// Determine the residual right-shift amount.
|
||||
signed ShiftAmt = N1C->getZExtValue() - N01C->getZExtValue();
|
||||
|
||||
@ -3684,7 +3684,7 @@ SDValue DAGCombiner::CombineConsecutiveLoads(SDNode *N, EVT VT) {
|
||||
TLI.isConsecutiveLoad(LD2, LD1, LD1VT.getSizeInBits()/8, 1, MFI)) {
|
||||
unsigned Align = LD1->getAlignment();
|
||||
unsigned NewAlign = TLI.getTargetData()->
|
||||
getABITypeAlignment(VT.getTypeForEVT());
|
||||
getABITypeAlignment(VT.getTypeForEVT(*DAG.getContext()));
|
||||
|
||||
if (NewAlign <= Align &&
|
||||
(!LegalOperations || TLI.isOperationLegal(ISD::LOAD, VT)))
|
||||
@ -3753,7 +3753,7 @@ SDValue DAGCombiner::visitBIT_CONVERT(SDNode *N) {
|
||||
(!LegalOperations || TLI.isOperationLegal(ISD::LOAD, VT))) {
|
||||
LoadSDNode *LN0 = cast<LoadSDNode>(N0);
|
||||
unsigned Align = TLI.getTargetData()->
|
||||
getABITypeAlignment(VT.getTypeForEVT());
|
||||
getABITypeAlignment(VT.getTypeForEVT(*DAG.getContext()));
|
||||
unsigned OrigAlign = LN0->getAlignment();
|
||||
|
||||
if (Align <= OrigAlign) {
|
||||
@ -3796,7 +3796,7 @@ SDValue DAGCombiner::visitBIT_CONVERT(SDNode *N) {
|
||||
isa<ConstantFPSDNode>(N0.getOperand(0)) &&
|
||||
VT.isInteger() && !VT.isVector()) {
|
||||
unsigned OrigXWidth = N0.getOperand(1).getValueType().getSizeInBits();
|
||||
EVT IntXVT = EVT::getIntegerVT(OrigXWidth);
|
||||
EVT IntXVT = EVT::getIntegerVT(*DAG.getContext(), OrigXWidth);
|
||||
if (TLI.isTypeLegal(IntXVT) || !LegalTypes) {
|
||||
SDValue X = DAG.getNode(ISD::BIT_CONVERT, N0.getDebugLoc(),
|
||||
IntXVT, N0.getOperand(1));
|
||||
@ -3875,7 +3875,7 @@ ConstantFoldBIT_CONVERTofBUILD_VECTOR(SDNode *BV, EVT DstEltVT) {
|
||||
DstEltVT, Op));
|
||||
AddToWorkList(Ops.back().getNode());
|
||||
}
|
||||
EVT VT = EVT::getVectorVT(DstEltVT,
|
||||
EVT VT = EVT::getVectorVT(*DAG.getContext(), DstEltVT,
|
||||
BV->getValueType(0).getVectorNumElements());
|
||||
return DAG.getNode(ISD::BUILD_VECTOR, BV->getDebugLoc(), VT,
|
||||
&Ops[0], Ops.size());
|
||||
@ -3888,7 +3888,7 @@ ConstantFoldBIT_CONVERTofBUILD_VECTOR(SDNode *BV, EVT DstEltVT) {
|
||||
// Convert the input float vector to a int vector where the elements are the
|
||||
// same sizes.
|
||||
assert((SrcEltVT == MVT::f32 || SrcEltVT == MVT::f64) && "Unknown FP VT!");
|
||||
EVT IntVT = EVT::getIntegerVT(SrcEltVT.getSizeInBits());
|
||||
EVT IntVT = EVT::getIntegerVT(*DAG.getContext(), SrcEltVT.getSizeInBits());
|
||||
BV = ConstantFoldBIT_CONVERTofBUILD_VECTOR(BV, IntVT).getNode();
|
||||
SrcEltVT = IntVT;
|
||||
}
|
||||
@ -3897,7 +3897,7 @@ ConstantFoldBIT_CONVERTofBUILD_VECTOR(SDNode *BV, EVT DstEltVT) {
|
||||
// convert to integer first, then to FP of the right size.
|
||||
if (DstEltVT.isFloatingPoint()) {
|
||||
assert((DstEltVT == MVT::f32 || DstEltVT == MVT::f64) && "Unknown FP VT!");
|
||||
EVT TmpVT = EVT::getIntegerVT(DstEltVT.getSizeInBits());
|
||||
EVT TmpVT = EVT::getIntegerVT(*DAG.getContext(), DstEltVT.getSizeInBits());
|
||||
SDNode *Tmp = ConstantFoldBIT_CONVERTofBUILD_VECTOR(BV, TmpVT).getNode();
|
||||
|
||||
// Next, convert to FP elements of the same size.
|
||||
@ -3933,7 +3933,7 @@ ConstantFoldBIT_CONVERTofBUILD_VECTOR(SDNode *BV, EVT DstEltVT) {
|
||||
Ops.push_back(DAG.getConstant(NewBits, DstEltVT));
|
||||
}
|
||||
|
||||
EVT VT = EVT::getVectorVT(DstEltVT, Ops.size());
|
||||
EVT VT = EVT::getVectorVT(*DAG.getContext(), DstEltVT, Ops.size());
|
||||
return DAG.getNode(ISD::BUILD_VECTOR, BV->getDebugLoc(), VT,
|
||||
&Ops[0], Ops.size());
|
||||
}
|
||||
@ -3942,7 +3942,8 @@ ConstantFoldBIT_CONVERTofBUILD_VECTOR(SDNode *BV, EVT DstEltVT) {
|
||||
// turns into multiple outputs.
|
||||
bool isS2V = ISD::isScalarToVector(BV);
|
||||
unsigned NumOutputsPerInput = SrcBitSize/DstBitSize;
|
||||
EVT VT = EVT::getVectorVT(DstEltVT, NumOutputsPerInput*BV->getNumOperands());
|
||||
EVT VT = EVT::getVectorVT(*DAG.getContext(), DstEltVT,
|
||||
NumOutputsPerInput*BV->getNumOperands());
|
||||
SmallVector<SDValue, 8> Ops;
|
||||
|
||||
for (unsigned i = 0, e = BV->getNumOperands(); i != e; ++i) {
|
||||
@ -4997,12 +4998,12 @@ SDValue DAGCombiner::ReduceLoadOpStoreWidth(SDNode *N) {
|
||||
unsigned ShAmt = Imm.countTrailingZeros();
|
||||
unsigned MSB = BitWidth - Imm.countLeadingZeros() - 1;
|
||||
unsigned NewBW = NextPowerOf2(MSB - ShAmt);
|
||||
EVT NewVT = EVT::getIntegerVT(NewBW);
|
||||
EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), NewBW);
|
||||
while (NewBW < BitWidth &&
|
||||
!(TLI.isOperationLegalOrCustom(Opc, NewVT) &&
|
||||
TLI.isNarrowingProfitable(VT, NewVT))) {
|
||||
NewBW = NextPowerOf2(NewBW);
|
||||
NewVT = EVT::getIntegerVT(NewBW);
|
||||
NewVT = EVT::getIntegerVT(*DAG.getContext(), NewBW);
|
||||
}
|
||||
if (NewBW >= BitWidth)
|
||||
return SDValue();
|
||||
@ -5024,7 +5025,7 @@ SDValue DAGCombiner::ReduceLoadOpStoreWidth(SDNode *N) {
|
||||
|
||||
unsigned NewAlign = MinAlign(LD->getAlignment(), PtrOff);
|
||||
if (NewAlign <
|
||||
TLI.getTargetData()->getABITypeAlignment(NewVT.getTypeForEVT()))
|
||||
TLI.getTargetData()->getABITypeAlignment(NewVT.getTypeForEVT(*DAG.getContext())))
|
||||
return SDValue();
|
||||
|
||||
SDValue NewPtr = DAG.getNode(ISD::ADD, LD->getDebugLoc(),
|
||||
@ -5079,7 +5080,7 @@ SDValue DAGCombiner::visitSTORE(SDNode *N) {
|
||||
unsigned OrigAlign = ST->getAlignment();
|
||||
EVT SVT = Value.getOperand(0).getValueType();
|
||||
unsigned Align = TLI.getTargetData()->
|
||||
getABITypeAlignment(SVT.getTypeForEVT());
|
||||
getABITypeAlignment(SVT.getTypeForEVT(*DAG.getContext()));
|
||||
if (Align <= OrigAlign &&
|
||||
((!LegalOperations && !ST->isVolatile()) ||
|
||||
TLI.isOperationLegalOrCustom(ISD::STORE, SVT)))
|
||||
@ -5359,7 +5360,7 @@ SDValue DAGCombiner::visitEXTRACT_VECTOR_ELT(SDNode *N) {
|
||||
// Check the resultant load doesn't need a higher alignment than the
|
||||
// original load.
|
||||
unsigned NewAlign =
|
||||
TLI.getTargetData()->getABITypeAlignment(LVT.getTypeForEVT());
|
||||
TLI.getTargetData()->getABITypeAlignment(LVT.getTypeForEVT(*DAG.getContext()));
|
||||
|
||||
if (NewAlign > Align || !TLI.isOperationLegalOrCustom(ISD::LOAD, LVT))
|
||||
return SDValue();
|
||||
|
@ -69,7 +69,7 @@ unsigned FastISel::getRegForValue(Value *V) {
|
||||
if (!TLI.isTypeLegal(VT)) {
|
||||
// Promote MVT::i1 to a legal type though, because it's common and easy.
|
||||
if (VT == MVT::i1)
|
||||
VT = TLI.getTypeToTransformTo(VT).getSimpleVT();
|
||||
VT = TLI.getTypeToTransformTo(V->getContext(), VT).getSimpleVT();
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
@ -202,7 +202,7 @@ bool FastISel::SelectBinaryOp(User *I, ISD::NodeType ISDOpcode) {
|
||||
if (VT == MVT::i1 &&
|
||||
(ISDOpcode == ISD::AND || ISDOpcode == ISD::OR ||
|
||||
ISDOpcode == ISD::XOR))
|
||||
VT = TLI.getTypeToTransformTo(VT);
|
||||
VT = TLI.getTypeToTransformTo(I->getContext(), VT);
|
||||
else
|
||||
return false;
|
||||
}
|
||||
@ -523,14 +523,14 @@ bool FastISel::SelectCast(User *I, ISD::NodeType Opcode) {
|
||||
|
||||
// If the operand is i1, arrange for the high bits in the register to be zero.
|
||||
if (SrcVT == MVT::i1) {
|
||||
SrcVT = TLI.getTypeToTransformTo(SrcVT);
|
||||
SrcVT = TLI.getTypeToTransformTo(I->getContext(), SrcVT);
|
||||
InputReg = FastEmitZExtFromI1(SrcVT.getSimpleVT(), InputReg);
|
||||
if (!InputReg)
|
||||
return false;
|
||||
}
|
||||
// If the result is i1, truncate to the target's type for i1 first.
|
||||
if (DstVT == MVT::i1)
|
||||
DstVT = TLI.getTypeToTransformTo(DstVT);
|
||||
DstVT = TLI.getTypeToTransformTo(I->getContext(), DstVT);
|
||||
|
||||
unsigned ResultReg = FastEmit_r(SrcVT.getSimpleVT(),
|
||||
DstVT.getSimpleVT(),
|
||||
|
@ -101,7 +101,8 @@ public:
|
||||
/// it is already legal or we need to expand it into multiple registers of
|
||||
/// smaller integer type, or we need to promote it to a larger type.
|
||||
LegalizeAction getTypeAction(EVT VT) const {
|
||||
return (LegalizeAction)ValueTypeActions.getTypeAction(VT);
|
||||
return
|
||||
(LegalizeAction)ValueTypeActions.getTypeAction(*DAG.getContext(), VT);
|
||||
}
|
||||
|
||||
/// isTypeLegal - Return true if this type is legal on this target.
|
||||
@ -361,7 +362,7 @@ static SDValue ExpandConstantFP(ConstantFPSDNode *CFP, bool UseCP,
|
||||
// smaller type.
|
||||
TLI.isLoadExtLegal(ISD::EXTLOAD, SVT) &&
|
||||
TLI.ShouldShrinkFPConstant(OrigVT)) {
|
||||
const Type *SType = SVT.getTypeForEVT();
|
||||
const Type *SType = SVT.getTypeForEVT(*DAG.getContext());
|
||||
LLVMC = cast<ConstantFP>(ConstantExpr::getFPTrunc(LLVMC, SType));
|
||||
VT = SVT;
|
||||
Extend = true;
|
||||
@ -392,7 +393,7 @@ SDValue ExpandUnalignedStore(StoreSDNode *ST, SelectionDAG &DAG,
|
||||
DebugLoc dl = ST->getDebugLoc();
|
||||
if (ST->getMemoryVT().isFloatingPoint() ||
|
||||
ST->getMemoryVT().isVector()) {
|
||||
EVT intVT = EVT::getIntegerVT(VT.getSizeInBits());
|
||||
EVT intVT = EVT::getIntegerVT(*DAG.getContext(), VT.getSizeInBits());
|
||||
if (TLI.isTypeLegal(intVT)) {
|
||||
// Expand to a bitconvert of the value to the integer type of the
|
||||
// same size, then a (misaligned) int store.
|
||||
@ -405,7 +406,7 @@ SDValue ExpandUnalignedStore(StoreSDNode *ST, SelectionDAG &DAG,
|
||||
// to the final destination using (unaligned) integer loads and stores.
|
||||
EVT StoredVT = ST->getMemoryVT();
|
||||
EVT RegVT =
|
||||
TLI.getRegisterType(EVT::getIntegerVT(StoredVT.getSizeInBits()));
|
||||
TLI.getRegisterType(*DAG.getContext(), EVT::getIntegerVT(*DAG.getContext(), StoredVT.getSizeInBits()));
|
||||
unsigned StoredBytes = StoredVT.getSizeInBits() / 8;
|
||||
unsigned RegBytes = RegVT.getSizeInBits() / 8;
|
||||
unsigned NumRegs = (StoredBytes + RegBytes - 1) / RegBytes;
|
||||
@ -439,7 +440,7 @@ SDValue ExpandUnalignedStore(StoreSDNode *ST, SelectionDAG &DAG,
|
||||
// The last store may be partial. Do a truncating store. On big-endian
|
||||
// machines this requires an extending load from the stack slot to ensure
|
||||
// that the bits are in the right place.
|
||||
EVT MemVT = EVT::getIntegerVT(8 * (StoredBytes - Offset));
|
||||
EVT MemVT = EVT::getIntegerVT(*DAG.getContext(), 8 * (StoredBytes - Offset));
|
||||
|
||||
// Load from the stack slot.
|
||||
SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, RegVT, Store, StackPtr,
|
||||
@ -494,7 +495,7 @@ SDValue ExpandUnalignedLoad(LoadSDNode *LD, SelectionDAG &DAG,
|
||||
EVT LoadedVT = LD->getMemoryVT();
|
||||
DebugLoc dl = LD->getDebugLoc();
|
||||
if (VT.isFloatingPoint() || VT.isVector()) {
|
||||
EVT intVT = EVT::getIntegerVT(LoadedVT.getSizeInBits());
|
||||
EVT intVT = EVT::getIntegerVT(*DAG.getContext(), LoadedVT.getSizeInBits());
|
||||
if (TLI.isTypeLegal(intVT)) {
|
||||
// Expand to a (misaligned) integer load of the same size,
|
||||
// then bitconvert to floating point or vector.
|
||||
@ -510,7 +511,7 @@ SDValue ExpandUnalignedLoad(LoadSDNode *LD, SelectionDAG &DAG,
|
||||
} else {
|
||||
// Copy the value to a (aligned) stack slot using (unaligned) integer
|
||||
// loads and stores, then do a (aligned) load from the stack slot.
|
||||
EVT RegVT = TLI.getRegisterType(intVT);
|
||||
EVT RegVT = TLI.getRegisterType(*DAG.getContext(), intVT);
|
||||
unsigned LoadedBytes = LoadedVT.getSizeInBits() / 8;
|
||||
unsigned RegBytes = RegVT.getSizeInBits() / 8;
|
||||
unsigned NumRegs = (LoadedBytes + RegBytes - 1) / RegBytes;
|
||||
@ -540,7 +541,7 @@ SDValue ExpandUnalignedLoad(LoadSDNode *LD, SelectionDAG &DAG,
|
||||
}
|
||||
|
||||
// The last copy may be partial. Do an extending load.
|
||||
EVT MemVT = EVT::getIntegerVT(8 * (LoadedBytes - Offset));
|
||||
EVT MemVT = EVT::getIntegerVT(*DAG.getContext(), 8 * (LoadedBytes - Offset));
|
||||
SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, RegVT, Chain, Ptr,
|
||||
LD->getSrcValue(), SVOffset + Offset,
|
||||
MemVT, LD->isVolatile(),
|
||||
@ -571,7 +572,7 @@ SDValue ExpandUnalignedLoad(LoadSDNode *LD, SelectionDAG &DAG,
|
||||
// integer MVT.
|
||||
unsigned NumBits = LoadedVT.getSizeInBits();
|
||||
EVT NewLoadedVT;
|
||||
NewLoadedVT = EVT::getIntegerVT(NumBits/2);
|
||||
NewLoadedVT = EVT::getIntegerVT(*DAG.getContext(), NumBits/2);
|
||||
NumBits >>= 1;
|
||||
|
||||
unsigned Alignment = LD->getAlignment();
|
||||
@ -1070,7 +1071,7 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
// expand it.
|
||||
if (!TLI.allowsUnalignedMemoryAccesses()) {
|
||||
unsigned ABIAlignment = TLI.getTargetData()->
|
||||
getABITypeAlignment(LD->getMemoryVT().getTypeForEVT());
|
||||
getABITypeAlignment(LD->getMemoryVT().getTypeForEVT(*DAG.getContext()));
|
||||
if (LD->getAlignment() < ABIAlignment){
|
||||
Result = ExpandUnalignedLoad(cast<LoadSDNode>(Result.getNode()),
|
||||
DAG, TLI);
|
||||
@ -1127,7 +1128,7 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
// Promote to a byte-sized load if not loading an integral number of
|
||||
// bytes. For example, promote EXTLOAD:i20 -> EXTLOAD:i24.
|
||||
unsigned NewWidth = SrcVT.getStoreSizeInBits();
|
||||
EVT NVT = EVT::getIntegerVT(NewWidth);
|
||||
EVT NVT = EVT::getIntegerVT(*DAG.getContext(), NewWidth);
|
||||
SDValue Ch;
|
||||
|
||||
// The extra bits are guaranteed to be zero, since we stored them that
|
||||
@ -1165,8 +1166,8 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
assert(ExtraWidth < RoundWidth);
|
||||
assert(!(RoundWidth % 8) && !(ExtraWidth % 8) &&
|
||||
"Load size not an integral number of bytes!");
|
||||
EVT RoundVT = EVT::getIntegerVT(RoundWidth);
|
||||
EVT ExtraVT = EVT::getIntegerVT(ExtraWidth);
|
||||
EVT RoundVT = EVT::getIntegerVT(*DAG.getContext(), RoundWidth);
|
||||
EVT ExtraVT = EVT::getIntegerVT(*DAG.getContext(), ExtraWidth);
|
||||
SDValue Lo, Hi, Ch;
|
||||
unsigned IncrementSize;
|
||||
|
||||
@ -1253,7 +1254,7 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
// expand it.
|
||||
if (!TLI.allowsUnalignedMemoryAccesses()) {
|
||||
unsigned ABIAlignment = TLI.getTargetData()->
|
||||
getABITypeAlignment(LD->getMemoryVT().getTypeForEVT());
|
||||
getABITypeAlignment(LD->getMemoryVT().getTypeForEVT(*DAG.getContext()));
|
||||
if (LD->getAlignment() < ABIAlignment){
|
||||
Result = ExpandUnalignedLoad(cast<LoadSDNode>(Result.getNode()),
|
||||
DAG, TLI);
|
||||
@ -1331,7 +1332,7 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
// expand it.
|
||||
if (!TLI.allowsUnalignedMemoryAccesses()) {
|
||||
unsigned ABIAlignment = TLI.getTargetData()->
|
||||
getABITypeAlignment(ST->getMemoryVT().getTypeForEVT());
|
||||
getABITypeAlignment(ST->getMemoryVT().getTypeForEVT(*DAG.getContext()));
|
||||
if (ST->getAlignment() < ABIAlignment)
|
||||
Result = ExpandUnalignedStore(cast<StoreSDNode>(Result.getNode()), DAG,
|
||||
TLI);
|
||||
@ -1362,7 +1363,7 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
// Promote to a byte-sized store with upper bits zero if not
|
||||
// storing an integral number of bytes. For example, promote
|
||||
// TRUNCSTORE:i1 X -> TRUNCSTORE:i8 (and X, 1)
|
||||
EVT NVT = EVT::getIntegerVT(StVT.getStoreSizeInBits());
|
||||
EVT NVT = EVT::getIntegerVT(*DAG.getContext(), StVT.getStoreSizeInBits());
|
||||
Tmp3 = DAG.getZeroExtendInReg(Tmp3, dl, StVT);
|
||||
Result = DAG.getTruncStore(Tmp1, dl, Tmp3, Tmp2, ST->getSrcValue(),
|
||||
SVOffset, NVT, isVolatile, Alignment);
|
||||
@ -1376,8 +1377,8 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
assert(ExtraWidth < RoundWidth);
|
||||
assert(!(RoundWidth % 8) && !(ExtraWidth % 8) &&
|
||||
"Store size not an integral number of bytes!");
|
||||
EVT RoundVT = EVT::getIntegerVT(RoundWidth);
|
||||
EVT ExtraVT = EVT::getIntegerVT(ExtraWidth);
|
||||
EVT RoundVT = EVT::getIntegerVT(*DAG.getContext(), RoundWidth);
|
||||
EVT ExtraVT = EVT::getIntegerVT(*DAG.getContext(), ExtraWidth);
|
||||
SDValue Lo, Hi;
|
||||
unsigned IncrementSize;
|
||||
|
||||
@ -1430,7 +1431,7 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
// expand it.
|
||||
if (!TLI.allowsUnalignedMemoryAccesses()) {
|
||||
unsigned ABIAlignment = TLI.getTargetData()->
|
||||
getABITypeAlignment(ST->getMemoryVT().getTypeForEVT());
|
||||
getABITypeAlignment(ST->getMemoryVT().getTypeForEVT(*DAG.getContext()));
|
||||
if (ST->getAlignment() < ABIAlignment)
|
||||
Result = ExpandUnalignedStore(cast<StoreSDNode>(Result.getNode()), DAG,
|
||||
TLI);
|
||||
@ -1696,7 +1697,7 @@ SDValue SelectionDAGLegalize::EmitStackConvert(SDValue SrcOp,
|
||||
// Create the stack frame object.
|
||||
unsigned SrcAlign =
|
||||
TLI.getTargetData()->getPrefTypeAlignment(SrcOp.getValueType().
|
||||
getTypeForEVT());
|
||||
getTypeForEVT(*DAG.getContext()));
|
||||
SDValue FIPtr = DAG.CreateStackTemporary(SlotVT, SrcAlign);
|
||||
|
||||
FrameIndexSDNode *StackPtrFI = cast<FrameIndexSDNode>(FIPtr);
|
||||
@ -1707,7 +1708,7 @@ SDValue SelectionDAGLegalize::EmitStackConvert(SDValue SrcOp,
|
||||
unsigned SlotSize = SlotVT.getSizeInBits();
|
||||
unsigned DestSize = DestVT.getSizeInBits();
|
||||
unsigned DestAlign =
|
||||
TLI.getTargetData()->getPrefTypeAlignment(DestVT.getTypeForEVT());
|
||||
TLI.getTargetData()->getPrefTypeAlignment(DestVT.getTypeForEVT(*DAG.getContext()));
|
||||
|
||||
// Emit a store to the stack slot. Use a truncstore if the input value is
|
||||
// later than DestVT.
|
||||
@ -1801,7 +1802,7 @@ SDValue SelectionDAGLegalize::ExpandBUILD_VECTOR(SDNode *Node) {
|
||||
CV.push_back(const_cast<ConstantInt *>(V->getConstantIntValue()));
|
||||
} else {
|
||||
assert(Node->getOperand(i).getOpcode() == ISD::UNDEF);
|
||||
const Type *OpNTy = OpVT.getTypeForEVT();
|
||||
const Type *OpNTy = OpVT.getTypeForEVT(*DAG.getContext());
|
||||
CV.push_back(UndefValue::get(OpNTy));
|
||||
}
|
||||
}
|
||||
@ -1855,7 +1856,7 @@ SDValue SelectionDAGLegalize::ExpandLibCall(RTLIB::Libcall LC, SDNode *Node,
|
||||
TargetLowering::ArgListEntry Entry;
|
||||
for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) {
|
||||
EVT ArgVT = Node->getOperand(i).getValueType();
|
||||
const Type *ArgTy = ArgVT.getTypeForEVT();
|
||||
const Type *ArgTy = ArgVT.getTypeForEVT(*DAG.getContext());
|
||||
Entry.Node = Node->getOperand(i); Entry.Ty = ArgTy;
|
||||
Entry.isSExt = isSigned;
|
||||
Entry.isZExt = !isSigned;
|
||||
@ -1865,7 +1866,7 @@ SDValue SelectionDAGLegalize::ExpandLibCall(RTLIB::Libcall LC, SDNode *Node,
|
||||
TLI.getPointerTy());
|
||||
|
||||
// Splice the libcall in wherever FindInputOutputChains tells us to.
|
||||
const Type *RetTy = Node->getValueType(0).getTypeForEVT();
|
||||
const Type *RetTy = Node->getValueType(0).getTypeForEVT(*DAG.getContext());
|
||||
std::pair<SDValue, SDValue> CallInfo =
|
||||
TLI.LowerCallTo(InChain, RetTy, isSigned, !isSigned, false, false,
|
||||
0, CallingConv::C, false,
|
||||
@ -2357,7 +2358,7 @@ void SelectionDAGLegalize::ExpandNode(SDNode *Node,
|
||||
// Increment the pointer, VAList, to the next vaarg
|
||||
Tmp3 = DAG.getNode(ISD::ADD, dl, TLI.getPointerTy(), VAList,
|
||||
DAG.getConstant(TLI.getTargetData()->
|
||||
getTypeAllocSize(VT.getTypeForEVT()),
|
||||
getTypeAllocSize(VT.getTypeForEVT(*DAG.getContext())),
|
||||
TLI.getPointerTy()));
|
||||
// Store the incremented VAList to the legalized pointer
|
||||
Tmp3 = DAG.getStore(VAList.getValue(1), dl, Tmp3, Tmp2, V, 0);
|
||||
@ -2757,8 +2758,8 @@ void SelectionDAGLegalize::ExpandNode(SDNode *Node,
|
||||
BottomHalf = DAG.getNode(Ops[isSigned][1], dl, DAG.getVTList(VT, VT), LHS,
|
||||
RHS);
|
||||
TopHalf = BottomHalf.getValue(1);
|
||||
} else if (TLI.isTypeLegal(EVT::getIntegerVT(VT.getSizeInBits() * 2))) {
|
||||
EVT WideVT = EVT::getIntegerVT(VT.getSizeInBits() * 2);
|
||||
} else if (TLI.isTypeLegal(EVT::getIntegerVT(*DAG.getContext(), VT.getSizeInBits() * 2))) {
|
||||
EVT WideVT = EVT::getIntegerVT(*DAG.getContext(), VT.getSizeInBits() * 2);
|
||||
LHS = DAG.getNode(Ops[isSigned][2], dl, WideVT, LHS);
|
||||
RHS = DAG.getNode(Ops[isSigned][2], dl, WideVT, RHS);
|
||||
Tmp1 = DAG.getNode(ISD::MUL, dl, WideVT, LHS, RHS);
|
||||
@ -2823,7 +2824,7 @@ void SelectionDAGLegalize::ExpandNode(SDNode *Node,
|
||||
Index, DAG.getConstant(EntrySize, PTy));
|
||||
SDValue Addr = DAG.getNode(ISD::ADD, dl, PTy, Index, Table);
|
||||
|
||||
EVT MemVT = EVT::getIntegerVT(EntrySize * 8);
|
||||
EVT MemVT = EVT::getIntegerVT(*DAG.getContext(), EntrySize * 8);
|
||||
SDValue LD = DAG.getExtLoad(ISD::SEXTLOAD, dl, PTy, Chain, Addr,
|
||||
PseudoSourceValue::getJumpTable(), 0, MemVT);
|
||||
Addr = LD;
|
||||
|
@ -108,14 +108,14 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_BIT_CONVERT(SDNode *N) {
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_BUILD_PAIR(SDNode *N) {
|
||||
// Convert the inputs to integers, and build a new pair out of them.
|
||||
return DAG.getNode(ISD::BUILD_PAIR, N->getDebugLoc(),
|
||||
TLI.getTypeToTransformTo(N->getValueType(0)),
|
||||
TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0)),
|
||||
BitConvertToInteger(N->getOperand(0)),
|
||||
BitConvertToInteger(N->getOperand(1)));
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_ConstantFP(ConstantFPSDNode *N) {
|
||||
return DAG.getConstant(N->getValueAPF().bitcastToAPInt(),
|
||||
TLI.getTypeToTransformTo(N->getValueType(0)));
|
||||
TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0)));
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_EXTRACT_VECTOR_ELT(SDNode *N) {
|
||||
@ -126,7 +126,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_EXTRACT_VECTOR_ELT(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FABS(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
unsigned Size = NVT.getSizeInBits();
|
||||
|
||||
// Mask = ~(1 << (Size-1))
|
||||
@ -137,7 +137,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FABS(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FADD(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Ops[2] = { GetSoftenedFloat(N->getOperand(0)),
|
||||
GetSoftenedFloat(N->getOperand(1)) };
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
@ -149,7 +149,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FADD(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FCEIL(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::CEIL_F32,
|
||||
@ -200,7 +200,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FCOPYSIGN(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FCOS(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::COS_F32,
|
||||
@ -211,7 +211,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FCOS(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FDIV(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Ops[2] = { GetSoftenedFloat(N->getOperand(0)),
|
||||
GetSoftenedFloat(N->getOperand(1)) };
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
@ -223,7 +223,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FDIV(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FEXP(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::EXP_F32,
|
||||
@ -234,7 +234,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FEXP(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FEXP2(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::EXP2_F32,
|
||||
@ -245,7 +245,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FEXP2(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FFLOOR(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::FLOOR_F32,
|
||||
@ -256,7 +256,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FFLOOR(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FLOG(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::LOG_F32,
|
||||
@ -267,7 +267,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FLOG(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FLOG2(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::LOG2_F32,
|
||||
@ -278,7 +278,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FLOG2(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FLOG10(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::LOG10_F32,
|
||||
@ -289,7 +289,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FLOG10(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FMUL(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Ops[2] = { GetSoftenedFloat(N->getOperand(0)),
|
||||
GetSoftenedFloat(N->getOperand(1)) };
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
@ -301,7 +301,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FMUL(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FNEARBYINT(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::NEARBYINT_F32,
|
||||
@ -312,7 +312,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FNEARBYINT(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FNEG(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
// Expand Y = FNEG(X) -> Y = SUB -0.0, X
|
||||
SDValue Ops[2] = { DAG.getConstantFP(-0.0, N->getValueType(0)),
|
||||
GetSoftenedFloat(N->getOperand(0)) };
|
||||
@ -325,7 +325,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FNEG(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FP_EXTEND(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = N->getOperand(0);
|
||||
RTLIB::Libcall LC = RTLIB::getFPEXT(Op.getValueType(), N->getValueType(0));
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported FP_EXTEND!");
|
||||
@ -333,7 +333,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FP_EXTEND(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FP_ROUND(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = N->getOperand(0);
|
||||
RTLIB::Libcall LC = RTLIB::getFPROUND(Op.getValueType(), N->getValueType(0));
|
||||
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported FP_ROUND!");
|
||||
@ -341,7 +341,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FP_ROUND(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FPOW(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Ops[2] = { GetSoftenedFloat(N->getOperand(0)),
|
||||
GetSoftenedFloat(N->getOperand(1)) };
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
@ -355,7 +355,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FPOW(SDNode *N) {
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FPOWI(SDNode *N) {
|
||||
assert(N->getOperand(1).getValueType() == MVT::i32 &&
|
||||
"Unsupported power type!");
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Ops[2] = { GetSoftenedFloat(N->getOperand(0)), N->getOperand(1) };
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::POWI_F32,
|
||||
@ -366,7 +366,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FPOWI(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FREM(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Ops[2] = { GetSoftenedFloat(N->getOperand(0)),
|
||||
GetSoftenedFloat(N->getOperand(1)) };
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
@ -378,7 +378,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FREM(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FRINT(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::RINT_F32,
|
||||
@ -389,7 +389,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FRINT(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FSIN(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::SIN_F32,
|
||||
@ -400,7 +400,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FSIN(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FSQRT(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::SQRT_F32,
|
||||
@ -411,7 +411,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FSQRT(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FSUB(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Ops[2] = { GetSoftenedFloat(N->getOperand(0)),
|
||||
GetSoftenedFloat(N->getOperand(1)) };
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
@ -423,7 +423,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FSUB(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_FTRUNC(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Op = GetSoftenedFloat(N->getOperand(0));
|
||||
return MakeLibCall(GetFPLibCall(N->getValueType(0),
|
||||
RTLIB::TRUNC_F32,
|
||||
@ -436,7 +436,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_FTRUNC(SDNode *N) {
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_LOAD(SDNode *N) {
|
||||
LoadSDNode *L = cast<LoadSDNode>(N);
|
||||
EVT VT = N->getValueType(0);
|
||||
EVT NVT = TLI.getTypeToTransformTo(VT);
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
|
||||
SDValue NewL;
|
||||
@ -480,14 +480,14 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_SELECT_CC(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_UNDEF(SDNode *N) {
|
||||
return DAG.getUNDEF(TLI.getTypeToTransformTo(N->getValueType(0)));
|
||||
return DAG.getUNDEF(TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0)));
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatRes_VAARG(SDNode *N) {
|
||||
SDValue Chain = N->getOperand(0); // Get the chain.
|
||||
SDValue Ptr = N->getOperand(1); // Get the pointer.
|
||||
EVT VT = N->getValueType(0);
|
||||
EVT NVT = TLI.getTypeToTransformTo(VT);
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
|
||||
SDValue NewVAARG;
|
||||
@ -522,7 +522,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_XINT_TO_FP(SDNode *N) {
|
||||
// Sign/zero extend the argument if the libcall takes a larger type.
|
||||
SDValue Op = DAG.getNode(Signed ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND, dl,
|
||||
NVT, N->getOperand(0));
|
||||
return MakeLibCall(LC, TLI.getTypeToTransformTo(RVT), &Op, 1, false, dl);
|
||||
return MakeLibCall(LC, TLI.getTypeToTransformTo(*DAG.getContext(), RVT), &Op, 1, false, dl);
|
||||
}
|
||||
|
||||
|
||||
@ -829,7 +829,7 @@ void DAGTypeLegalizer::ExpandFloatResult(SDNode *N, unsigned ResNo) {
|
||||
|
||||
void DAGTypeLegalizer::ExpandFloatRes_ConstantFP(SDNode *N, SDValue &Lo,
|
||||
SDValue &Hi) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
assert(NVT.getSizeInBits() == integerPartWidth &&
|
||||
"Do not know how to expand this float constant!");
|
||||
APInt C = cast<ConstantFPSDNode>(N)->getValueAPF().bitcastToAPInt();
|
||||
@ -981,7 +981,7 @@ void DAGTypeLegalizer::ExpandFloatRes_FNEG(SDNode *N, SDValue &Lo,
|
||||
|
||||
void DAGTypeLegalizer::ExpandFloatRes_FP_EXTEND(SDNode *N, SDValue &Lo,
|
||||
SDValue &Hi) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
Hi = DAG.getNode(ISD::FP_EXTEND, N->getDebugLoc(), NVT, N->getOperand(0));
|
||||
Lo = DAG.getConstantFP(APFloat(APInt(NVT.getSizeInBits(), 0)), NVT);
|
||||
}
|
||||
@ -1066,7 +1066,7 @@ void DAGTypeLegalizer::ExpandFloatRes_LOAD(SDNode *N, SDValue &Lo,
|
||||
SDValue Ptr = LD->getBasePtr();
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
|
||||
EVT NVT = TLI.getTypeToTransformTo(LD->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), LD->getValueType(0));
|
||||
assert(NVT.isByteSized() && "Expanded type not byte sized!");
|
||||
assert(LD->getMemoryVT().bitsLE(NVT) && "Float type not round?");
|
||||
|
||||
@ -1090,7 +1090,7 @@ void DAGTypeLegalizer::ExpandFloatRes_XINT_TO_FP(SDNode *N, SDValue &Lo,
|
||||
SDValue &Hi) {
|
||||
assert(N->getValueType(0) == MVT::ppcf128 && "Unsupported XINT_TO_FP!");
|
||||
EVT VT = N->getValueType(0);
|
||||
EVT NVT = TLI.getTypeToTransformTo(VT);
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
|
||||
SDValue Src = N->getOperand(0);
|
||||
EVT SrcVT = Src.getValueType();
|
||||
bool isSigned = N->getOpcode() == ISD::SINT_TO_FP;
|
||||
@ -1372,7 +1372,7 @@ SDValue DAGTypeLegalizer::ExpandFloatOp_STORE(SDNode *N, unsigned OpNo) {
|
||||
SDValue Chain = ST->getChain();
|
||||
SDValue Ptr = ST->getBasePtr();
|
||||
|
||||
EVT NVT = TLI.getTypeToTransformTo(ST->getValue().getValueType());
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), ST->getValue().getValueType());
|
||||
assert(NVT.isByteSized() && "Expanded type not byte sized!");
|
||||
assert(ST->getMemoryVT().bitsLE(NVT) && "Float type not round?");
|
||||
|
||||
|
@ -163,9 +163,9 @@ SDValue DAGTypeLegalizer::PromoteIntRes_Atomic2(AtomicSDNode *N) {
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_BIT_CONVERT(SDNode *N) {
|
||||
SDValue InOp = N->getOperand(0);
|
||||
EVT InVT = InOp.getValueType();
|
||||
EVT NInVT = TLI.getTypeToTransformTo(InVT);
|
||||
EVT NInVT = TLI.getTypeToTransformTo(*DAG.getContext(), InVT);
|
||||
EVT OutVT = N->getValueType(0);
|
||||
EVT NOutVT = TLI.getTypeToTransformTo(OutVT);
|
||||
EVT NOutVT = TLI.getTypeToTransformTo(*DAG.getContext(), OutVT);
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
|
||||
switch (getTypeAction(InVT)) {
|
||||
@ -202,7 +202,7 @@ SDValue DAGTypeLegalizer::PromoteIntRes_BIT_CONVERT(SDNode *N) {
|
||||
std::swap(Lo, Hi);
|
||||
|
||||
InOp = DAG.getNode(ISD::ANY_EXTEND, dl,
|
||||
EVT::getIntegerVT(NOutVT.getSizeInBits()),
|
||||
EVT::getIntegerVT(*DAG.getContext(), NOutVT.getSizeInBits()),
|
||||
JoinIntegers(Lo, Hi));
|
||||
return DAG.getNode(ISD::BIT_CONVERT, dl, NOutVT, InOp);
|
||||
}
|
||||
@ -231,7 +231,7 @@ SDValue DAGTypeLegalizer::PromoteIntRes_BUILD_PAIR(SDNode *N) {
|
||||
// The pair element type may be legal, or may not promote to the same type as
|
||||
// the result, for example i14 = BUILD_PAIR (i7, i7). Handle all cases.
|
||||
return DAG.getNode(ISD::ANY_EXTEND, N->getDebugLoc(),
|
||||
TLI.getTypeToTransformTo(N->getValueType(0)),
|
||||
TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0)),
|
||||
JoinIntegers(N->getOperand(0), N->getOperand(1)));
|
||||
}
|
||||
|
||||
@ -242,7 +242,7 @@ SDValue DAGTypeLegalizer::PromoteIntRes_Constant(SDNode *N) {
|
||||
// Zero extend things like i1, sign extend everything else. It shouldn't
|
||||
// matter in theory which one we pick, but this tends to give better code?
|
||||
unsigned Opc = VT.isByteSized() ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND;
|
||||
SDValue Result = DAG.getNode(Opc, dl, TLI.getTypeToTransformTo(VT),
|
||||
SDValue Result = DAG.getNode(Opc, dl, TLI.getTypeToTransformTo(*DAG.getContext(), VT),
|
||||
SDValue(N, 0));
|
||||
assert(isa<ConstantSDNode>(Result) && "Didn't constant fold ext?");
|
||||
return Result;
|
||||
@ -254,7 +254,7 @@ SDValue DAGTypeLegalizer::PromoteIntRes_CONVERT_RNDSAT(SDNode *N) {
|
||||
CvtCode == ISD::CVT_US || CvtCode == ISD::CVT_UU ||
|
||||
CvtCode == ISD::CVT_SF || CvtCode == ISD::CVT_UF) &&
|
||||
"can only promote integers");
|
||||
EVT OutVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT OutVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
return DAG.getConvertRndSat(OutVT, N->getDebugLoc(), N->getOperand(0),
|
||||
N->getOperand(1), N->getOperand(2),
|
||||
N->getOperand(3), N->getOperand(4), CvtCode);
|
||||
@ -295,13 +295,13 @@ SDValue DAGTypeLegalizer::PromoteIntRes_CTTZ(SDNode *N) {
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_EXTRACT_VECTOR_ELT(SDNode *N) {
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, NVT, N->getOperand(0),
|
||||
N->getOperand(1));
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_FP_TO_XINT(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
unsigned NewOpc = N->getOpcode();
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
|
||||
@ -325,7 +325,7 @@ SDValue DAGTypeLegalizer::PromoteIntRes_FP_TO_XINT(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_INT_EXTEND(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
|
||||
if (getTypeAction(N->getOperand(0).getValueType()) == PromoteInteger) {
|
||||
@ -352,7 +352,7 @@ SDValue DAGTypeLegalizer::PromoteIntRes_INT_EXTEND(SDNode *N) {
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_LOAD(LoadSDNode *N) {
|
||||
assert(ISD::isUNINDEXEDLoad(N) && "Indexed load during type legalization!");
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
ISD::LoadExtType ExtType =
|
||||
ISD::isNON_EXTLoad(N) ? ISD::EXTLOAD : N->getExtensionType();
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
@ -370,7 +370,7 @@ SDValue DAGTypeLegalizer::PromoteIntRes_LOAD(LoadSDNode *N) {
|
||||
/// Promote the overflow flag of an overflowing arithmetic node.
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_Overflow(SDNode *N) {
|
||||
// Simply change the return type of the boolean result.
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(1));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(1));
|
||||
EVT ValueVTs[] = { N->getValueType(0), NVT };
|
||||
SDValue Ops[] = { N->getOperand(0), N->getOperand(1) };
|
||||
SDValue Res = DAG.getNode(N->getOpcode(), N->getDebugLoc(),
|
||||
@ -445,14 +445,14 @@ SDValue DAGTypeLegalizer::PromoteIntRes_SETCC(SDNode *N) {
|
||||
N->getOperand(1), N->getOperand(2));
|
||||
|
||||
// Convert to the expected type.
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
assert(NVT.bitsLE(SVT) && "Integer type overpromoted?");
|
||||
return DAG.getNode(ISD::TRUNCATE, dl, NVT, SetCC);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_SHL(SDNode *N) {
|
||||
return DAG.getNode(ISD::SHL, N->getDebugLoc(),
|
||||
TLI.getTypeToTransformTo(N->getValueType(0)),
|
||||
TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0)),
|
||||
GetPromotedInteger(N->getOperand(0)), N->getOperand(1));
|
||||
}
|
||||
|
||||
@ -482,13 +482,13 @@ SDValue DAGTypeLegalizer::PromoteIntRes_SRA(SDNode *N) {
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_SRL(SDNode *N) {
|
||||
// The input value must be properly zero extended.
|
||||
EVT VT = N->getValueType(0);
|
||||
EVT NVT = TLI.getTypeToTransformTo(VT);
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
|
||||
SDValue Res = ZExtPromotedInteger(N->getOperand(0));
|
||||
return DAG.getNode(ISD::SRL, N->getDebugLoc(), NVT, Res, N->getOperand(1));
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_TRUNCATE(SDNode *N) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Res;
|
||||
|
||||
switch (getTypeAction(N->getOperand(0).getValueType())) {
|
||||
@ -543,7 +543,7 @@ SDValue DAGTypeLegalizer::PromoteIntRes_UDIV(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_UNDEF(SDNode *N) {
|
||||
return DAG.getUNDEF(TLI.getTypeToTransformTo(N->getValueType(0)));
|
||||
return DAG.getUNDEF(TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0)));
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_VAARG(SDNode *N) {
|
||||
@ -552,8 +552,8 @@ SDValue DAGTypeLegalizer::PromoteIntRes_VAARG(SDNode *N) {
|
||||
EVT VT = N->getValueType(0);
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
|
||||
EVT RegVT = TLI.getRegisterType(VT);
|
||||
unsigned NumRegs = TLI.getNumRegisters(VT);
|
||||
EVT RegVT = TLI.getRegisterType(*DAG.getContext(), VT);
|
||||
unsigned NumRegs = TLI.getNumRegisters(*DAG.getContext(), VT);
|
||||
// The argument is passed as NumRegs registers of type RegVT.
|
||||
|
||||
SmallVector<SDValue, 8> Parts(NumRegs);
|
||||
@ -567,7 +567,7 @@ SDValue DAGTypeLegalizer::PromoteIntRes_VAARG(SDNode *N) {
|
||||
std::reverse(Parts.begin(), Parts.end());
|
||||
|
||||
// Assemble the parts in the promoted type.
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Res = DAG.getNode(ISD::ZERO_EXTEND, dl, NVT, Parts[0]);
|
||||
for (unsigned i = 1; i < NumRegs; ++i) {
|
||||
SDValue Part = DAG.getNode(ISD::ZERO_EXTEND, dl, NVT, Parts[i]);
|
||||
@ -1007,7 +1007,7 @@ void DAGTypeLegalizer::ExpandShiftByConstant(SDNode *N, unsigned Amt,
|
||||
Hi = InL;
|
||||
} else if (Amt == 1 &&
|
||||
TLI.isOperationLegalOrCustom(ISD::ADDC,
|
||||
TLI.getTypeToExpandTo(NVT))) {
|
||||
TLI.getTypeToExpandTo(*DAG.getContext(), NVT))) {
|
||||
// Emit this X << 1 as X+X.
|
||||
SDVTList VTList = DAG.getVTList(NVT, MVT::Flag);
|
||||
SDValue LoOps[2] = { InL, InL };
|
||||
@ -1077,7 +1077,7 @@ void DAGTypeLegalizer::ExpandShiftByConstant(SDNode *N, unsigned Amt,
|
||||
bool DAGTypeLegalizer::
|
||||
ExpandShiftWithKnownAmountBit(SDNode *N, SDValue &Lo, SDValue &Hi) {
|
||||
SDValue Amt = N->getOperand(1);
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
EVT ShTy = Amt.getValueType();
|
||||
unsigned ShBits = ShTy.getSizeInBits();
|
||||
unsigned NVTBits = NVT.getSizeInBits();
|
||||
@ -1155,7 +1155,7 @@ ExpandShiftWithKnownAmountBit(SDNode *N, SDValue &Lo, SDValue &Hi) {
|
||||
bool DAGTypeLegalizer::
|
||||
ExpandShiftWithUnknownAmountBit(SDNode *N, SDValue &Lo, SDValue &Hi) {
|
||||
SDValue Amt = N->getOperand(1);
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
EVT ShTy = Amt.getValueType();
|
||||
unsigned NVTBits = NVT.getSizeInBits();
|
||||
assert(isPowerOf2_32(NVTBits) &&
|
||||
@ -1242,7 +1242,7 @@ void DAGTypeLegalizer::ExpandIntRes_ADDSUB(SDNode *N,
|
||||
bool hasCarry =
|
||||
TLI.isOperationLegalOrCustom(N->getOpcode() == ISD::ADD ?
|
||||
ISD::ADDC : ISD::SUBC,
|
||||
TLI.getTypeToExpandTo(NVT));
|
||||
TLI.getTypeToExpandTo(*DAG.getContext(), NVT));
|
||||
|
||||
if (hasCarry) {
|
||||
SDVTList VTList = DAG.getVTList(NVT, MVT::Flag);
|
||||
@ -1331,7 +1331,7 @@ void DAGTypeLegalizer::ExpandIntRes_ADDSUBE(SDNode *N,
|
||||
|
||||
void DAGTypeLegalizer::ExpandIntRes_ANY_EXTEND(SDNode *N,
|
||||
SDValue &Lo, SDValue &Hi) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
SDValue Op = N->getOperand(0);
|
||||
if (Op.getValueType().bitsLE(NVT)) {
|
||||
@ -1362,7 +1362,7 @@ void DAGTypeLegalizer::ExpandIntRes_AssertSext(SDNode *N,
|
||||
|
||||
if (NVTBits < EVTBits) {
|
||||
Hi = DAG.getNode(ISD::AssertSext, dl, NVT, Hi,
|
||||
DAG.getValueType(EVT::getIntegerVT(EVTBits - NVTBits)));
|
||||
DAG.getValueType(EVT::getIntegerVT(*DAG.getContext(), EVTBits - NVTBits)));
|
||||
} else {
|
||||
Lo = DAG.getNode(ISD::AssertSext, dl, NVT, Lo, DAG.getValueType(EVT));
|
||||
// The high part replicates the sign bit of Lo, make it explicit.
|
||||
@ -1382,7 +1382,7 @@ void DAGTypeLegalizer::ExpandIntRes_AssertZext(SDNode *N,
|
||||
|
||||
if (NVTBits < EVTBits) {
|
||||
Hi = DAG.getNode(ISD::AssertZext, dl, NVT, Hi,
|
||||
DAG.getValueType(EVT::getIntegerVT(EVTBits - NVTBits)));
|
||||
DAG.getValueType(EVT::getIntegerVT(*DAG.getContext(), EVTBits - NVTBits)));
|
||||
} else {
|
||||
Lo = DAG.getNode(ISD::AssertZext, dl, NVT, Lo, DAG.getValueType(EVT));
|
||||
// The high part must be zero, make it explicit.
|
||||
@ -1400,7 +1400,7 @@ void DAGTypeLegalizer::ExpandIntRes_BSWAP(SDNode *N,
|
||||
|
||||
void DAGTypeLegalizer::ExpandIntRes_Constant(SDNode *N,
|
||||
SDValue &Lo, SDValue &Hi) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
unsigned NBitWidth = NVT.getSizeInBits();
|
||||
const APInt &Cst = cast<ConstantSDNode>(N)->getAPIntValue();
|
||||
Lo = DAG.getConstant(APInt(Cst).trunc(NBitWidth), NVT);
|
||||
@ -1486,7 +1486,7 @@ void DAGTypeLegalizer::ExpandIntRes_LOAD(LoadSDNode *N,
|
||||
assert(ISD::isUNINDEXEDLoad(N) && "Indexed load during type legalization!");
|
||||
|
||||
EVT VT = N->getValueType(0);
|
||||
EVT NVT = TLI.getTypeToTransformTo(VT);
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
|
||||
SDValue Ch = N->getChain();
|
||||
SDValue Ptr = N->getBasePtr();
|
||||
ISD::LoadExtType ExtType = N->getExtensionType();
|
||||
@ -1527,7 +1527,7 @@ void DAGTypeLegalizer::ExpandIntRes_LOAD(LoadSDNode *N,
|
||||
|
||||
unsigned ExcessBits =
|
||||
N->getMemoryVT().getSizeInBits() - NVT.getSizeInBits();
|
||||
EVT NEVT = EVT::getIntegerVT(ExcessBits);
|
||||
EVT NEVT = EVT::getIntegerVT(*DAG.getContext(), ExcessBits);
|
||||
|
||||
// Increment the pointer to the other half.
|
||||
unsigned IncrementSize = NVT.getSizeInBits()/8;
|
||||
@ -1551,7 +1551,7 @@ void DAGTypeLegalizer::ExpandIntRes_LOAD(LoadSDNode *N,
|
||||
|
||||
// Load both the high bits and maybe some of the low bits.
|
||||
Hi = DAG.getExtLoad(ExtType, dl, NVT, Ch, Ptr, N->getSrcValue(), SVOffset,
|
||||
EVT::getIntegerVT(EVT.getSizeInBits() - ExcessBits),
|
||||
EVT::getIntegerVT(*DAG.getContext(), EVT.getSizeInBits() - ExcessBits),
|
||||
isVolatile, Alignment);
|
||||
|
||||
// Increment the pointer to the other half.
|
||||
@ -1560,7 +1560,7 @@ void DAGTypeLegalizer::ExpandIntRes_LOAD(LoadSDNode *N,
|
||||
// Load the rest of the low bits.
|
||||
Lo = DAG.getExtLoad(ISD::ZEXTLOAD, dl, NVT, Ch, Ptr, N->getSrcValue(),
|
||||
SVOffset+IncrementSize,
|
||||
EVT::getIntegerVT(ExcessBits),
|
||||
EVT::getIntegerVT(*DAG.getContext(), ExcessBits),
|
||||
isVolatile, MinAlign(Alignment, IncrementSize));
|
||||
|
||||
// Build a factor node to remember that this load is independent of the
|
||||
@ -1600,7 +1600,7 @@ void DAGTypeLegalizer::ExpandIntRes_Logical(SDNode *N,
|
||||
void DAGTypeLegalizer::ExpandIntRes_MUL(SDNode *N,
|
||||
SDValue &Lo, SDValue &Hi) {
|
||||
EVT VT = N->getValueType(0);
|
||||
EVT NVT = TLI.getTypeToTransformTo(VT);
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
|
||||
bool HasMULHS = TLI.isOperationLegalOrCustom(ISD::MULHS, NVT);
|
||||
@ -1735,7 +1735,7 @@ void DAGTypeLegalizer::ExpandIntRes_Shift(SDNode *N,
|
||||
|
||||
// Next check to see if the target supports this SHL_PARTS operation or if it
|
||||
// will custom expand it.
|
||||
EVT NVT = TLI.getTypeToTransformTo(VT);
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
|
||||
TargetLowering::LegalizeAction Action = TLI.getOperationAction(PartsOpc, NVT);
|
||||
if ((Action == TargetLowering::Legal && TLI.isTypeLegal(NVT)) ||
|
||||
Action == TargetLowering::Custom) {
|
||||
@ -1798,7 +1798,7 @@ void DAGTypeLegalizer::ExpandIntRes_Shift(SDNode *N,
|
||||
|
||||
void DAGTypeLegalizer::ExpandIntRes_SIGN_EXTEND(SDNode *N,
|
||||
SDValue &Lo, SDValue &Hi) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
SDValue Op = N->getOperand(0);
|
||||
if (Op.getValueType().bitsLE(NVT)) {
|
||||
@ -1821,7 +1821,7 @@ void DAGTypeLegalizer::ExpandIntRes_SIGN_EXTEND(SDNode *N,
|
||||
unsigned ExcessBits =
|
||||
Op.getValueType().getSizeInBits() - NVT.getSizeInBits();
|
||||
Hi = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, Hi.getValueType(), Hi,
|
||||
DAG.getValueType(EVT::getIntegerVT(ExcessBits)));
|
||||
DAG.getValueType(EVT::getIntegerVT(*DAG.getContext(), ExcessBits)));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1847,7 +1847,7 @@ ExpandIntRes_SIGN_EXTEND_INREG(SDNode *N, SDValue &Lo, SDValue &Hi) {
|
||||
unsigned ExcessBits =
|
||||
EVT.getSizeInBits() - Lo.getValueType().getSizeInBits();
|
||||
Hi = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, Hi.getValueType(), Hi,
|
||||
DAG.getValueType(EVT::getIntegerVT(ExcessBits)));
|
||||
DAG.getValueType(EVT::getIntegerVT(*DAG.getContext(), ExcessBits)));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1873,7 +1873,7 @@ void DAGTypeLegalizer::ExpandIntRes_SREM(SDNode *N,
|
||||
|
||||
void DAGTypeLegalizer::ExpandIntRes_TRUNCATE(SDNode *N,
|
||||
SDValue &Lo, SDValue &Hi) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
Lo = DAG.getNode(ISD::TRUNCATE, dl, NVT, N->getOperand(0));
|
||||
Hi = DAG.getNode(ISD::SRL, dl,
|
||||
@ -1924,7 +1924,7 @@ void DAGTypeLegalizer::ExpandIntRes_UREM(SDNode *N,
|
||||
|
||||
void DAGTypeLegalizer::ExpandIntRes_ZERO_EXTEND(SDNode *N,
|
||||
SDValue &Lo, SDValue &Hi) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
SDValue Op = N->getOperand(0);
|
||||
if (Op.getValueType().bitsLE(NVT)) {
|
||||
@ -1943,7 +1943,7 @@ void DAGTypeLegalizer::ExpandIntRes_ZERO_EXTEND(SDNode *N,
|
||||
SplitInteger(Res, Lo, Hi);
|
||||
unsigned ExcessBits =
|
||||
Op.getValueType().getSizeInBits() - NVT.getSizeInBits();
|
||||
Hi = DAG.getZeroExtendInReg(Hi, dl, EVT::getIntegerVT(ExcessBits));
|
||||
Hi = DAG.getZeroExtendInReg(Hi, dl, EVT::getIntegerVT(*DAG.getContext(), ExcessBits));
|
||||
}
|
||||
}
|
||||
|
||||
@ -2189,7 +2189,7 @@ SDValue DAGTypeLegalizer::ExpandIntOp_STORE(StoreSDNode *N, unsigned OpNo) {
|
||||
assert(OpNo == 1 && "Can only expand the stored value so far");
|
||||
|
||||
EVT VT = N->getOperand(1).getValueType();
|
||||
EVT NVT = TLI.getTypeToTransformTo(VT);
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
|
||||
SDValue Ch = N->getChain();
|
||||
SDValue Ptr = N->getBasePtr();
|
||||
int SVOffset = N->getSrcValueOffset();
|
||||
@ -2213,7 +2213,7 @@ SDValue DAGTypeLegalizer::ExpandIntOp_STORE(StoreSDNode *N, unsigned OpNo) {
|
||||
|
||||
unsigned ExcessBits =
|
||||
N->getMemoryVT().getSizeInBits() - NVT.getSizeInBits();
|
||||
EVT NEVT = EVT::getIntegerVT(ExcessBits);
|
||||
EVT NEVT = EVT::getIntegerVT(*DAG.getContext(), ExcessBits);
|
||||
|
||||
// Increment the pointer to the other half.
|
||||
unsigned IncrementSize = NVT.getSizeInBits()/8;
|
||||
@ -2232,7 +2232,7 @@ SDValue DAGTypeLegalizer::ExpandIntOp_STORE(StoreSDNode *N, unsigned OpNo) {
|
||||
unsigned EBytes = ExtVT.getStoreSizeInBits()/8;
|
||||
unsigned IncrementSize = NVT.getSizeInBits()/8;
|
||||
unsigned ExcessBits = (EBytes - IncrementSize)*8;
|
||||
EVT HiVT = EVT::getIntegerVT(ExtVT.getSizeInBits() - ExcessBits);
|
||||
EVT HiVT = EVT::getIntegerVT(*DAG.getContext(), ExtVT.getSizeInBits() - ExcessBits);
|
||||
|
||||
if (ExcessBits < NVT.getSizeInBits()) {
|
||||
// Transfer high bits from the top of Lo to the bottom of Hi.
|
||||
@ -2255,7 +2255,7 @@ SDValue DAGTypeLegalizer::ExpandIntOp_STORE(StoreSDNode *N, unsigned OpNo) {
|
||||
// Store the lowest ExcessBits bits in the second half.
|
||||
Lo = DAG.getTruncStore(Ch, dl, Lo, Ptr, N->getSrcValue(),
|
||||
SVOffset+IncrementSize,
|
||||
EVT::getIntegerVT(ExcessBits),
|
||||
EVT::getIntegerVT(*DAG.getContext(), ExcessBits),
|
||||
isVolatile, MinAlign(Alignment, IncrementSize));
|
||||
return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Lo, Hi);
|
||||
}
|
||||
|
@ -732,7 +732,7 @@ void DAGTypeLegalizer::ReplaceValueWith(SDValue From, SDValue To) {
|
||||
}
|
||||
|
||||
void DAGTypeLegalizer::SetPromotedInteger(SDValue Op, SDValue Result) {
|
||||
assert(Result.getValueType() == TLI.getTypeToTransformTo(Op.getValueType()) &&
|
||||
assert(Result.getValueType() == TLI.getTypeToTransformTo(*DAG.getContext(), Op.getValueType()) &&
|
||||
"Invalid type for promoted integer");
|
||||
AnalyzeNewValue(Result);
|
||||
|
||||
@ -742,7 +742,7 @@ void DAGTypeLegalizer::SetPromotedInteger(SDValue Op, SDValue Result) {
|
||||
}
|
||||
|
||||
void DAGTypeLegalizer::SetSoftenedFloat(SDValue Op, SDValue Result) {
|
||||
assert(Result.getValueType() == TLI.getTypeToTransformTo(Op.getValueType()) &&
|
||||
assert(Result.getValueType() == TLI.getTypeToTransformTo(*DAG.getContext(), Op.getValueType()) &&
|
||||
"Invalid type for softened float");
|
||||
AnalyzeNewValue(Result);
|
||||
|
||||
@ -773,7 +773,7 @@ void DAGTypeLegalizer::GetExpandedInteger(SDValue Op, SDValue &Lo,
|
||||
|
||||
void DAGTypeLegalizer::SetExpandedInteger(SDValue Op, SDValue Lo,
|
||||
SDValue Hi) {
|
||||
assert(Lo.getValueType() == TLI.getTypeToTransformTo(Op.getValueType()) &&
|
||||
assert(Lo.getValueType() == TLI.getTypeToTransformTo(*DAG.getContext(), Op.getValueType()) &&
|
||||
Hi.getValueType() == Lo.getValueType() &&
|
||||
"Invalid type for expanded integer");
|
||||
// Lo/Hi may have been newly allocated, if so, add nodeid's as relevant.
|
||||
@ -799,7 +799,7 @@ void DAGTypeLegalizer::GetExpandedFloat(SDValue Op, SDValue &Lo,
|
||||
|
||||
void DAGTypeLegalizer::SetExpandedFloat(SDValue Op, SDValue Lo,
|
||||
SDValue Hi) {
|
||||
assert(Lo.getValueType() == TLI.getTypeToTransformTo(Op.getValueType()) &&
|
||||
assert(Lo.getValueType() == TLI.getTypeToTransformTo(*DAG.getContext(), Op.getValueType()) &&
|
||||
Hi.getValueType() == Lo.getValueType() &&
|
||||
"Invalid type for expanded float");
|
||||
// Lo/Hi may have been newly allocated, if so, add nodeid's as relevant.
|
||||
@ -843,7 +843,7 @@ void DAGTypeLegalizer::SetSplitVector(SDValue Op, SDValue Lo,
|
||||
}
|
||||
|
||||
void DAGTypeLegalizer::SetWidenedVector(SDValue Op, SDValue Result) {
|
||||
assert(Result.getValueType() == TLI.getTypeToTransformTo(Op.getValueType()) &&
|
||||
assert(Result.getValueType() == TLI.getTypeToTransformTo(*DAG.getContext(), Op.getValueType()) &&
|
||||
"Invalid type for widened vector");
|
||||
AnalyzeNewValue(Result);
|
||||
|
||||
@ -861,7 +861,7 @@ void DAGTypeLegalizer::SetWidenedVector(SDValue Op, SDValue Result) {
|
||||
SDValue DAGTypeLegalizer::BitConvertToInteger(SDValue Op) {
|
||||
unsigned BitWidth = Op.getValueType().getSizeInBits();
|
||||
return DAG.getNode(ISD::BIT_CONVERT, Op.getDebugLoc(),
|
||||
EVT::getIntegerVT(BitWidth), Op);
|
||||
EVT::getIntegerVT(*DAG.getContext(), BitWidth), Op);
|
||||
}
|
||||
|
||||
/// BitConvertVectorToIntegerVector - Convert to a vector of integers of the
|
||||
@ -869,10 +869,10 @@ SDValue DAGTypeLegalizer::BitConvertToInteger(SDValue Op) {
|
||||
SDValue DAGTypeLegalizer::BitConvertVectorToIntegerVector(SDValue Op) {
|
||||
assert(Op.getValueType().isVector() && "Only applies to vectors!");
|
||||
unsigned EltWidth = Op.getValueType().getVectorElementType().getSizeInBits();
|
||||
EVT EltNVT = EVT::getIntegerVT(EltWidth);
|
||||
EVT EltNVT = EVT::getIntegerVT(*DAG.getContext(), EltWidth);
|
||||
unsigned NumElts = Op.getValueType().getVectorNumElements();
|
||||
return DAG.getNode(ISD::BIT_CONVERT, Op.getDebugLoc(),
|
||||
EVT::getVectorVT(EltNVT, NumElts), Op);
|
||||
EVT::getVectorVT(*DAG.getContext(), EltNVT, NumElts), Op);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::CreateStackStoreLoad(SDValue Op,
|
||||
@ -923,11 +923,11 @@ bool DAGTypeLegalizer::CustomLowerNode(SDNode *N, EVT VT, bool LegalizeResult) {
|
||||
void DAGTypeLegalizer::GetSplitDestVTs(EVT InVT, EVT &LoVT, EVT &HiVT) {
|
||||
// Currently all types are split in half.
|
||||
if (!InVT.isVector()) {
|
||||
LoVT = HiVT = TLI.getTypeToTransformTo(InVT);
|
||||
LoVT = HiVT = TLI.getTypeToTransformTo(*DAG.getContext(), InVT);
|
||||
} else {
|
||||
unsigned NumElements = InVT.getVectorNumElements();
|
||||
assert(!(NumElements & 1) && "Splitting vector, but not in half!");
|
||||
LoVT = HiVT = EVT::getVectorVT(InVT.getVectorElementType(), NumElements/2);
|
||||
LoVT = HiVT = EVT::getVectorVT(*DAG.getContext(), InVT.getVectorElementType(), NumElements/2);
|
||||
}
|
||||
}
|
||||
|
||||
@ -936,7 +936,7 @@ void DAGTypeLegalizer::GetSplitDestVTs(EVT InVT, EVT &LoVT, EVT &HiVT) {
|
||||
void DAGTypeLegalizer::GetPairElements(SDValue Pair,
|
||||
SDValue &Lo, SDValue &Hi) {
|
||||
DebugLoc dl = Pair.getDebugLoc();
|
||||
EVT NVT = TLI.getTypeToTransformTo(Pair.getValueType());
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), Pair.getValueType());
|
||||
Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Pair,
|
||||
DAG.getIntPtrConstant(0));
|
||||
Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Pair,
|
||||
@ -967,7 +967,7 @@ SDValue DAGTypeLegalizer::JoinIntegers(SDValue Lo, SDValue Hi) {
|
||||
DebugLoc dlLo = Lo.getDebugLoc();
|
||||
EVT LVT = Lo.getValueType();
|
||||
EVT HVT = Hi.getValueType();
|
||||
EVT NVT = EVT::getIntegerVT(LVT.getSizeInBits() + HVT.getSizeInBits());
|
||||
EVT NVT = EVT::getIntegerVT(*DAG.getContext(), LVT.getSizeInBits() + HVT.getSizeInBits());
|
||||
|
||||
Lo = DAG.getNode(ISD::ZERO_EXTEND, dlLo, NVT, Lo);
|
||||
Hi = DAG.getNode(ISD::ANY_EXTEND, dlHi, NVT, Hi);
|
||||
@ -1008,7 +1008,7 @@ SDValue DAGTypeLegalizer::MakeLibCall(RTLIB::Libcall LC, EVT RetVT,
|
||||
TargetLowering::ArgListEntry Entry;
|
||||
for (unsigned i = 0; i != NumOps; ++i) {
|
||||
Entry.Node = Ops[i];
|
||||
Entry.Ty = Entry.Node.getValueType().getTypeForEVT();
|
||||
Entry.Ty = Entry.Node.getValueType().getTypeForEVT(*DAG.getContext());
|
||||
Entry.isSExt = isSigned;
|
||||
Entry.isZExt = !isSigned;
|
||||
Args.push_back(Entry);
|
||||
@ -1016,7 +1016,7 @@ SDValue DAGTypeLegalizer::MakeLibCall(RTLIB::Libcall LC, EVT RetVT,
|
||||
SDValue Callee = DAG.getExternalSymbol(TLI.getLibcallName(LC),
|
||||
TLI.getPointerTy());
|
||||
|
||||
const Type *RetTy = RetVT.getTypeForEVT();
|
||||
const Type *RetTy = RetVT.getTypeForEVT(*DAG.getContext());
|
||||
std::pair<SDValue,SDValue> CallInfo =
|
||||
TLI.LowerCallTo(DAG.getEntryNode(), RetTy, isSigned, !isSigned, false,
|
||||
false, 0, CallingConv::C, false,
|
||||
@ -1069,7 +1069,7 @@ void DAGTypeLegalizer::SplitInteger(SDValue Op,
|
||||
/// type half the size of Op's.
|
||||
void DAGTypeLegalizer::SplitInteger(SDValue Op,
|
||||
SDValue &Lo, SDValue &Hi) {
|
||||
EVT HalfVT = EVT::getIntegerVT(Op.getValueType().getSizeInBits()/2);
|
||||
EVT HalfVT = EVT::getIntegerVT(*DAG.getContext(), Op.getValueType().getSizeInBits()/2);
|
||||
SplitInteger(Op, HalfVT, HalfVT, Lo, Hi);
|
||||
}
|
||||
|
||||
|
@ -75,7 +75,7 @@ private:
|
||||
|
||||
/// getTypeAction - Return how we should legalize values of this type.
|
||||
LegalizeAction getTypeAction(EVT VT) const {
|
||||
switch (ValueTypeActions.getTypeAction(VT)) {
|
||||
switch (ValueTypeActions.getTypeAction(*DAG.getContext(), VT)) {
|
||||
default:
|
||||
assert(false && "Unknown legalize action!");
|
||||
case TargetLowering::Legal:
|
||||
@ -96,7 +96,7 @@ private:
|
||||
if (VT.isInteger())
|
||||
return ExpandInteger;
|
||||
else if (VT.getSizeInBits() ==
|
||||
TLI.getTypeToTransformTo(VT).getSizeInBits())
|
||||
TLI.getTypeToTransformTo(*DAG.getContext(), VT).getSizeInBits())
|
||||
return SoftenFloat;
|
||||
else
|
||||
return ExpandFloat;
|
||||
@ -110,7 +110,8 @@ private:
|
||||
|
||||
/// isTypeLegal - Return true if this type is legal on this target.
|
||||
bool isTypeLegal(EVT VT) const {
|
||||
return ValueTypeActions.getTypeAction(VT) == TargetLowering::Legal;
|
||||
return (ValueTypeActions.getTypeAction(*DAG.getContext(), VT) ==
|
||||
TargetLowering::Legal);
|
||||
}
|
||||
|
||||
/// IgnoreNodeResults - Pretend all of this node's results are legal.
|
||||
|
@ -35,7 +35,7 @@ using namespace llvm;
|
||||
void DAGTypeLegalizer::ExpandRes_BIT_CONVERT(SDNode *N, SDValue &Lo,
|
||||
SDValue &Hi) {
|
||||
EVT OutVT = N->getValueType(0);
|
||||
EVT NOutVT = TLI.getTypeToTransformTo(OutVT);
|
||||
EVT NOutVT = TLI.getTypeToTransformTo(*DAG.getContext(), OutVT);
|
||||
SDValue InOp = N->getOperand(0);
|
||||
EVT InVT = InOp.getValueType();
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
@ -76,7 +76,7 @@ void DAGTypeLegalizer::ExpandRes_BIT_CONVERT(SDNode *N, SDValue &Lo,
|
||||
case WidenVector: {
|
||||
assert(!(InVT.getVectorNumElements() & 1) && "Unsupported BIT_CONVERT");
|
||||
InOp = GetWidenedVector(InOp);
|
||||
EVT InNVT = EVT::getVectorVT(InVT.getVectorElementType(),
|
||||
EVT InNVT = EVT::getVectorVT(*DAG.getContext(), InVT.getVectorElementType(),
|
||||
InVT.getVectorNumElements()/2);
|
||||
Lo = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, InNVT, InOp,
|
||||
DAG.getIntPtrConstant(0));
|
||||
@ -93,7 +93,7 @@ void DAGTypeLegalizer::ExpandRes_BIT_CONVERT(SDNode *N, SDValue &Lo,
|
||||
if (InVT.isVector() && OutVT.isInteger()) {
|
||||
// Handle cases like i64 = BIT_CONVERT v1i64 on x86, where the operand
|
||||
// is legal but the result is not.
|
||||
EVT NVT = EVT::getVectorVT(NOutVT, 2);
|
||||
EVT NVT = EVT::getVectorVT(*DAG.getContext(), NOutVT, 2);
|
||||
|
||||
if (isTypeLegal(NVT)) {
|
||||
SDValue CastInOp = DAG.getNode(ISD::BIT_CONVERT, dl, NVT, InOp);
|
||||
@ -115,7 +115,7 @@ void DAGTypeLegalizer::ExpandRes_BIT_CONVERT(SDNode *N, SDValue &Lo,
|
||||
// Create the stack frame object. Make sure it is aligned for both
|
||||
// the source and expanded destination types.
|
||||
unsigned Alignment =
|
||||
TLI.getTargetData()->getPrefTypeAlignment(NOutVT.getTypeForEVT());
|
||||
TLI.getTargetData()->getPrefTypeAlignment(NOutVT.getTypeForEVT(*DAG.getContext()));
|
||||
SDValue StackPtr = DAG.CreateStackTemporary(InVT, Alignment);
|
||||
int SPFI = cast<FrameIndexSDNode>(StackPtr.getNode())->getIndex();
|
||||
const Value *SV = PseudoSourceValue::getFixedStack(SPFI);
|
||||
@ -168,10 +168,10 @@ void DAGTypeLegalizer::ExpandRes_EXTRACT_VECTOR_ELT(SDNode *N, SDValue &Lo,
|
||||
// Convert to a vector of the expanded element type, for example
|
||||
// <3 x i64> -> <6 x i32>.
|
||||
EVT OldVT = N->getValueType(0);
|
||||
EVT NewVT = TLI.getTypeToTransformTo(OldVT);
|
||||
EVT NewVT = TLI.getTypeToTransformTo(*DAG.getContext(), OldVT);
|
||||
|
||||
SDValue NewVec = DAG.getNode(ISD::BIT_CONVERT, dl,
|
||||
EVT::getVectorVT(NewVT, 2*OldElts),
|
||||
EVT::getVectorVT(*DAG.getContext(), NewVT, 2*OldElts),
|
||||
OldVec);
|
||||
|
||||
// Extract the elements at 2 * Idx and 2 * Idx + 1 from the new vector.
|
||||
@ -198,7 +198,7 @@ void DAGTypeLegalizer::ExpandRes_NormalLoad(SDNode *N, SDValue &Lo,
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
|
||||
LoadSDNode *LD = cast<LoadSDNode>(N);
|
||||
EVT NVT = TLI.getTypeToTransformTo(LD->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), LD->getValueType(0));
|
||||
SDValue Chain = LD->getChain();
|
||||
SDValue Ptr = LD->getBasePtr();
|
||||
int SVOffset = LD->getSrcValueOffset();
|
||||
@ -233,7 +233,7 @@ void DAGTypeLegalizer::ExpandRes_NormalLoad(SDNode *N, SDValue &Lo,
|
||||
}
|
||||
|
||||
void DAGTypeLegalizer::ExpandRes_VAARG(SDNode *N, SDValue &Lo, SDValue &Hi) {
|
||||
EVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue Chain = N->getOperand(0);
|
||||
SDValue Ptr = N->getOperand(1);
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
@ -264,7 +264,7 @@ SDValue DAGTypeLegalizer::ExpandOp_BIT_CONVERT(SDNode *N) {
|
||||
// is no point, and it might create expansion loops). For example, on
|
||||
// x86 this turns v1i64 = BIT_CONVERT i64 into v1i64 = BIT_CONVERT v2i32.
|
||||
EVT OVT = N->getOperand(0).getValueType();
|
||||
EVT NVT = EVT::getVectorVT(TLI.getTypeToTransformTo(OVT), 2);
|
||||
EVT NVT = EVT::getVectorVT(*DAG.getContext(), TLI.getTypeToTransformTo(*DAG.getContext(), OVT), 2);
|
||||
|
||||
if (isTypeLegal(NVT)) {
|
||||
SDValue Parts[2];
|
||||
@ -287,7 +287,7 @@ SDValue DAGTypeLegalizer::ExpandOp_BUILD_VECTOR(SDNode *N) {
|
||||
EVT VecVT = N->getValueType(0);
|
||||
unsigned NumElts = VecVT.getVectorNumElements();
|
||||
EVT OldVT = N->getOperand(0).getValueType();
|
||||
EVT NewVT = TLI.getTypeToTransformTo(OldVT);
|
||||
EVT NewVT = TLI.getTypeToTransformTo(*DAG.getContext(), OldVT);
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
|
||||
assert(OldVT == VecVT.getVectorElementType() &&
|
||||
@ -308,7 +308,7 @@ SDValue DAGTypeLegalizer::ExpandOp_BUILD_VECTOR(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue NewVec = DAG.getNode(ISD::BUILD_VECTOR, dl,
|
||||
EVT::getVectorVT(NewVT, NewElts.size()),
|
||||
EVT::getVectorVT(*DAG.getContext(), NewVT, NewElts.size()),
|
||||
&NewElts[0], NewElts.size());
|
||||
|
||||
// Convert the new vector to the old vector type.
|
||||
@ -329,14 +329,14 @@ SDValue DAGTypeLegalizer::ExpandOp_INSERT_VECTOR_ELT(SDNode *N) {
|
||||
|
||||
SDValue Val = N->getOperand(1);
|
||||
EVT OldEVT = Val.getValueType();
|
||||
EVT NewEVT = TLI.getTypeToTransformTo(OldEVT);
|
||||
EVT NewEVT = TLI.getTypeToTransformTo(*DAG.getContext(), OldEVT);
|
||||
|
||||
assert(OldEVT == VecVT.getVectorElementType() &&
|
||||
"Inserted element type doesn't match vector element type!");
|
||||
|
||||
// Bitconvert to a vector of twice the length with elements of the expanded
|
||||
// type, insert the expanded vector elements, and then convert back.
|
||||
EVT NewVecVT = EVT::getVectorVT(NewEVT, NumElts*2);
|
||||
EVT NewVecVT = EVT::getVectorVT(*DAG.getContext(), NewEVT, NumElts*2);
|
||||
SDValue NewVec = DAG.getNode(ISD::BIT_CONVERT, dl,
|
||||
NewVecVT, N->getOperand(0));
|
||||
|
||||
@ -376,7 +376,7 @@ SDValue DAGTypeLegalizer::ExpandOp_NormalStore(SDNode *N, unsigned OpNo) {
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
|
||||
StoreSDNode *St = cast<StoreSDNode>(N);
|
||||
EVT NVT = TLI.getTypeToTransformTo(St->getValue().getValueType());
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), St->getValue().getValueType());
|
||||
SDValue Chain = St->getChain();
|
||||
SDValue Ptr = St->getBasePtr();
|
||||
int SVOffset = St->getSrcValueOffset();
|
||||
|
@ -512,8 +512,8 @@ void DAGTypeLegalizer::SplitVecRes_BIT_CONVERT(SDNode *N, SDValue &Lo,
|
||||
}
|
||||
|
||||
// In the general case, convert the input to an integer and split it by hand.
|
||||
EVT LoIntVT = EVT::getIntegerVT(LoVT.getSizeInBits());
|
||||
EVT HiIntVT = EVT::getIntegerVT(HiVT.getSizeInBits());
|
||||
EVT LoIntVT = EVT::getIntegerVT(*DAG.getContext(), LoVT.getSizeInBits());
|
||||
EVT HiIntVT = EVT::getIntegerVT(*DAG.getContext(), HiVT.getSizeInBits());
|
||||
if (TLI.isBigEndian())
|
||||
std::swap(LoIntVT, HiIntVT);
|
||||
|
||||
@ -578,7 +578,7 @@ void DAGTypeLegalizer::SplitVecRes_CONVERT_RNDSAT(SDNode *N, SDValue &Lo,
|
||||
switch (getTypeAction(InVT)) {
|
||||
default: llvm_unreachable("Unexpected type action!");
|
||||
case Legal: {
|
||||
EVT InNVT = EVT::getVectorVT(InVT.getVectorElementType(),
|
||||
EVT InNVT = EVT::getVectorVT(*DAG.getContext(), InVT.getVectorElementType(),
|
||||
LoVT.getVectorNumElements());
|
||||
VLo = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, InNVT, N->getOperand(0),
|
||||
DAG.getIntPtrConstant(0));
|
||||
@ -594,7 +594,7 @@ void DAGTypeLegalizer::SplitVecRes_CONVERT_RNDSAT(SDNode *N, SDValue &Lo,
|
||||
// the two types must have different lengths. Use the widened result
|
||||
// and extract from it to do the split.
|
||||
SDValue InOp = GetWidenedVector(N->getOperand(0));
|
||||
EVT InNVT = EVT::getVectorVT(InVT.getVectorElementType(),
|
||||
EVT InNVT = EVT::getVectorVT(*DAG.getContext(), InVT.getVectorElementType(),
|
||||
LoVT.getVectorNumElements());
|
||||
VLo = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, InNVT, InOp,
|
||||
DAG.getIntPtrConstant(0));
|
||||
@ -667,7 +667,7 @@ void DAGTypeLegalizer::SplitVecRes_INSERT_VECTOR_ELT(SDNode *N, SDValue &Lo,
|
||||
// so use a truncating store.
|
||||
SDValue EltPtr = GetVectorElementPointer(StackPtr, EltVT, Idx);
|
||||
unsigned Alignment =
|
||||
TLI.getTargetData()->getPrefTypeAlignment(VecVT.getTypeForEVT());
|
||||
TLI.getTargetData()->getPrefTypeAlignment(VecVT.getTypeForEVT(*DAG.getContext()));
|
||||
Store = DAG.getTruncStore(Store, dl, Elt, EltPtr, NULL, 0, EltVT);
|
||||
|
||||
// Load the Lo part from the stack slot.
|
||||
@ -741,7 +741,7 @@ void DAGTypeLegalizer::SplitVecRes_SETCC(SDNode *N, SDValue &Lo, SDValue &Hi) {
|
||||
// Split the input.
|
||||
EVT InVT = N->getOperand(0).getValueType();
|
||||
SDValue LL, LH, RL, RH;
|
||||
EVT InNVT = EVT::getVectorVT(InVT.getVectorElementType(),
|
||||
EVT InNVT = EVT::getVectorVT(*DAG.getContext(), InVT.getVectorElementType(),
|
||||
LoVT.getVectorNumElements());
|
||||
LL = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, InNVT, N->getOperand(0),
|
||||
DAG.getIntPtrConstant(0));
|
||||
@ -769,7 +769,7 @@ void DAGTypeLegalizer::SplitVecRes_UnaryOp(SDNode *N, SDValue &Lo,
|
||||
switch (getTypeAction(InVT)) {
|
||||
default: llvm_unreachable("Unexpected type action!");
|
||||
case Legal: {
|
||||
EVT InNVT = EVT::getVectorVT(InVT.getVectorElementType(),
|
||||
EVT InNVT = EVT::getVectorVT(*DAG.getContext(), InVT.getVectorElementType(),
|
||||
LoVT.getVectorNumElements());
|
||||
Lo = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, InNVT, N->getOperand(0),
|
||||
DAG.getIntPtrConstant(0));
|
||||
@ -785,7 +785,7 @@ void DAGTypeLegalizer::SplitVecRes_UnaryOp(SDNode *N, SDValue &Lo,
|
||||
// the two types must have different lengths. Use the widened result
|
||||
// and extract from it to do the split.
|
||||
SDValue InOp = GetWidenedVector(N->getOperand(0));
|
||||
EVT InNVT = EVT::getVectorVT(InVT.getVectorElementType(),
|
||||
EVT InNVT = EVT::getVectorVT(*DAG.getContext(), InVT.getVectorElementType(),
|
||||
LoVT.getVectorNumElements());
|
||||
Lo = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, InNVT, InOp,
|
||||
DAG.getIntPtrConstant(0));
|
||||
@ -975,7 +975,7 @@ SDValue DAGTypeLegalizer::SplitVecOp_UnaryOp(SDNode *N) {
|
||||
GetSplitVector(N->getOperand(0), Lo, Hi);
|
||||
EVT InVT = Lo.getValueType();
|
||||
|
||||
EVT OutVT = EVT::getVectorVT(ResVT.getVectorElementType(),
|
||||
EVT OutVT = EVT::getVectorVT(*DAG.getContext(), ResVT.getVectorElementType(),
|
||||
InVT.getVectorNumElements());
|
||||
|
||||
Lo = DAG.getNode(N->getOpcode(), dl, OutVT, Lo);
|
||||
@ -1197,7 +1197,7 @@ void DAGTypeLegalizer::WidenVectorResult(SDNode *N, unsigned ResNo) {
|
||||
|
||||
SDValue DAGTypeLegalizer::WidenVecRes_Binary(SDNode *N) {
|
||||
// Binary op widening.
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue InOp1 = GetWidenedVector(N->getOperand(0));
|
||||
SDValue InOp2 = GetWidenedVector(N->getOperand(1));
|
||||
return DAG.getNode(N->getOpcode(), N->getDebugLoc(), WidenVT, InOp1, InOp2);
|
||||
@ -1207,12 +1207,12 @@ SDValue DAGTypeLegalizer::WidenVecRes_Convert(SDNode *N) {
|
||||
SDValue InOp = N->getOperand(0);
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
unsigned WidenNumElts = WidenVT.getVectorNumElements();
|
||||
|
||||
EVT InVT = InOp.getValueType();
|
||||
EVT InEltVT = InVT.getVectorElementType();
|
||||
EVT InWidenVT = EVT::getVectorVT(InEltVT, WidenNumElts);
|
||||
EVT InWidenVT = EVT::getVectorVT(*DAG.getContext(), InEltVT, WidenNumElts);
|
||||
|
||||
unsigned Opcode = N->getOpcode();
|
||||
unsigned InVTNumElts = InVT.getVectorNumElements();
|
||||
@ -1270,7 +1270,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_Convert(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::WidenVecRes_Shift(SDNode *N) {
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue InOp = GetWidenedVector(N->getOperand(0));
|
||||
SDValue ShOp = N->getOperand(1);
|
||||
|
||||
@ -1279,7 +1279,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_Shift(SDNode *N) {
|
||||
ShOp = GetWidenedVector(ShOp);
|
||||
ShVT = ShOp.getValueType();
|
||||
}
|
||||
EVT ShWidenVT = EVT::getVectorVT(ShVT.getVectorElementType(),
|
||||
EVT ShWidenVT = EVT::getVectorVT(*DAG.getContext(), ShVT.getVectorElementType(),
|
||||
WidenVT.getVectorNumElements());
|
||||
if (ShVT != ShWidenVT)
|
||||
ShOp = ModifyToType(ShOp, ShWidenVT);
|
||||
@ -1289,7 +1289,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_Shift(SDNode *N) {
|
||||
|
||||
SDValue DAGTypeLegalizer::WidenVecRes_Unary(SDNode *N) {
|
||||
// Unary op widening.
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue InOp = GetWidenedVector(N->getOperand(0));
|
||||
return DAG.getNode(N->getOpcode(), N->getDebugLoc(), WidenVT, InOp);
|
||||
}
|
||||
@ -1298,7 +1298,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_BIT_CONVERT(SDNode *N) {
|
||||
SDValue InOp = N->getOperand(0);
|
||||
EVT InVT = InOp.getValueType();
|
||||
EVT VT = N->getValueType(0);
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(VT);
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
|
||||
switch (getTypeAction(InVT)) {
|
||||
@ -1342,9 +1342,9 @@ SDValue DAGTypeLegalizer::WidenVecRes_BIT_CONVERT(SDNode *N) {
|
||||
unsigned NewNumElts = WidenSize / InSize;
|
||||
if (InVT.isVector()) {
|
||||
EVT InEltVT = InVT.getVectorElementType();
|
||||
NewInVT= EVT::getVectorVT(InEltVT, WidenSize / InEltVT.getSizeInBits());
|
||||
NewInVT= EVT::getVectorVT(*DAG.getContext(), InEltVT, WidenSize / InEltVT.getSizeInBits());
|
||||
} else {
|
||||
NewInVT = EVT::getVectorVT(InVT, NewNumElts);
|
||||
NewInVT = EVT::getVectorVT(*DAG.getContext(), InVT, NewNumElts);
|
||||
}
|
||||
|
||||
if (TLI.isTypeLegal(NewInVT)) {
|
||||
@ -1380,7 +1380,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_BUILD_VECTOR(SDNode *N) {
|
||||
EVT EltVT = VT.getVectorElementType();
|
||||
unsigned NumElts = VT.getVectorNumElements();
|
||||
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(VT);
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
|
||||
unsigned WidenNumElts = WidenVT.getVectorNumElements();
|
||||
|
||||
SmallVector<SDValue, 16> NewOps(N->op_begin(), N->op_end());
|
||||
@ -1393,7 +1393,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_BUILD_VECTOR(SDNode *N) {
|
||||
|
||||
SDValue DAGTypeLegalizer::WidenVecRes_CONCAT_VECTORS(SDNode *N) {
|
||||
EVT InVT = N->getOperand(0).getValueType();
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
unsigned WidenNumElts = WidenVT.getVectorNumElements();
|
||||
unsigned NumOperands = N->getNumOperands();
|
||||
@ -1414,7 +1414,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_CONCAT_VECTORS(SDNode *N) {
|
||||
}
|
||||
} else {
|
||||
InputWidened = true;
|
||||
if (WidenVT == TLI.getTypeToTransformTo(InVT)) {
|
||||
if (WidenVT == TLI.getTypeToTransformTo(*DAG.getContext(), InVT)) {
|
||||
// The inputs and the result are widen to the same value.
|
||||
unsigned i;
|
||||
for (i=1; i < NumOperands; ++i)
|
||||
@ -1466,12 +1466,12 @@ SDValue DAGTypeLegalizer::WidenVecRes_CONVERT_RNDSAT(SDNode *N) {
|
||||
SDValue RndOp = N->getOperand(3);
|
||||
SDValue SatOp = N->getOperand(4);
|
||||
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
unsigned WidenNumElts = WidenVT.getVectorNumElements();
|
||||
|
||||
EVT InVT = InOp.getValueType();
|
||||
EVT InEltVT = InVT.getVectorElementType();
|
||||
EVT InWidenVT = EVT::getVectorVT(InEltVT, WidenNumElts);
|
||||
EVT InWidenVT = EVT::getVectorVT(*DAG.getContext(), InEltVT, WidenNumElts);
|
||||
|
||||
SDValue DTyOp = DAG.getValueType(WidenVT);
|
||||
SDValue STyOp = DAG.getValueType(InWidenVT);
|
||||
@ -1540,7 +1540,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_CONVERT_RNDSAT(SDNode *N) {
|
||||
|
||||
SDValue DAGTypeLegalizer::WidenVecRes_EXTRACT_SUBVECTOR(SDNode *N) {
|
||||
EVT VT = N->getValueType(0);
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(VT);
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
|
||||
unsigned WidenNumElts = WidenVT.getVectorNumElements();
|
||||
SDValue InOp = N->getOperand(0);
|
||||
SDValue Idx = N->getOperand(1);
|
||||
@ -1600,7 +1600,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_INSERT_VECTOR_ELT(SDNode *N) {
|
||||
|
||||
SDValue DAGTypeLegalizer::WidenVecRes_LOAD(SDNode *N) {
|
||||
LoadSDNode *LD = cast<LoadSDNode>(N);
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(LD->getValueType(0));
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), LD->getValueType(0));
|
||||
EVT LdVT = LD->getMemoryVT();
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
assert(LdVT.isVector() && WidenVT.isVector());
|
||||
@ -1671,20 +1671,20 @@ SDValue DAGTypeLegalizer::WidenVecRes_LOAD(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::WidenVecRes_SCALAR_TO_VECTOR(SDNode *N) {
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
return DAG.getNode(ISD::SCALAR_TO_VECTOR, N->getDebugLoc(),
|
||||
WidenVT, N->getOperand(0));
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::WidenVecRes_SELECT(SDNode *N) {
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
unsigned WidenNumElts = WidenVT.getVectorNumElements();
|
||||
|
||||
SDValue Cond1 = N->getOperand(0);
|
||||
EVT CondVT = Cond1.getValueType();
|
||||
if (CondVT.isVector()) {
|
||||
EVT CondEltVT = CondVT.getVectorElementType();
|
||||
EVT CondWidenVT = EVT::getVectorVT(CondEltVT, WidenNumElts);
|
||||
EVT CondWidenVT = EVT::getVectorVT(*DAG.getContext(), CondEltVT, WidenNumElts);
|
||||
if (getTypeAction(CondVT) == WidenVector)
|
||||
Cond1 = GetWidenedVector(Cond1);
|
||||
|
||||
@ -1708,7 +1708,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_SELECT_CC(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::WidenVecRes_UNDEF(SDNode *N) {
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
return DAG.getUNDEF(WidenVT);
|
||||
}
|
||||
|
||||
@ -1716,7 +1716,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_VECTOR_SHUFFLE(ShuffleVectorSDNode *N) {
|
||||
EVT VT = N->getValueType(0);
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(VT);
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
|
||||
unsigned NumElts = VT.getVectorNumElements();
|
||||
unsigned WidenNumElts = WidenVT.getVectorNumElements();
|
||||
|
||||
@ -1738,13 +1738,13 @@ SDValue DAGTypeLegalizer::WidenVecRes_VECTOR_SHUFFLE(ShuffleVectorSDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::WidenVecRes_VSETCC(SDNode *N) {
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(N->getValueType(0));
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
unsigned WidenNumElts = WidenVT.getVectorNumElements();
|
||||
|
||||
SDValue InOp1 = N->getOperand(0);
|
||||
EVT InVT = InOp1.getValueType();
|
||||
assert(InVT.isVector() && "can not widen non vector type");
|
||||
EVT WidenInVT = EVT::getVectorVT(InVT.getVectorElementType(), WidenNumElts);
|
||||
EVT WidenInVT = EVT::getVectorVT(*DAG.getContext(), InVT.getVectorElementType(), WidenNumElts);
|
||||
InOp1 = GetWidenedVector(InOp1);
|
||||
SDValue InOp2 = GetWidenedVector(N->getOperand(1));
|
||||
|
||||
@ -1843,7 +1843,7 @@ SDValue DAGTypeLegalizer::WidenVecOp_BIT_CONVERT(SDNode *N) {
|
||||
unsigned Size = VT.getSizeInBits();
|
||||
if (InWidenSize % Size == 0 && !VT.isVector()) {
|
||||
unsigned NewNumElts = InWidenSize / Size;
|
||||
EVT NewVT = EVT::getVectorVT(VT, NewNumElts);
|
||||
EVT NewVT = EVT::getVectorVT(*DAG.getContext(), VT, NewNumElts);
|
||||
if (TLI.isTypeLegal(NewVT)) {
|
||||
SDValue BitOp = DAG.getNode(ISD::BIT_CONVERT, dl, NewVT, InOp);
|
||||
return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, VT, BitOp,
|
||||
@ -1957,7 +1957,8 @@ SDValue DAGTypeLegalizer::WidenVecOp_STORE(SDNode *N) {
|
||||
// VecVT: Vector value type whose size we must match.
|
||||
// Returns NewVecVT and NewEltVT - the vector type and its associated
|
||||
// element type.
|
||||
static void FindAssocWidenVecType(const TargetLowering &TLI, unsigned Width,
|
||||
static void FindAssocWidenVecType(SelectionDAG& DAG,
|
||||
const TargetLowering &TLI, unsigned Width,
|
||||
EVT VecVT,
|
||||
EVT& NewEltVT, EVT& NewVecVT) {
|
||||
unsigned EltWidth = Width + 1;
|
||||
@ -1969,9 +1970,9 @@ static void FindAssocWidenVecType(const TargetLowering &TLI, unsigned Width,
|
||||
do {
|
||||
assert(EltWidth > 0);
|
||||
EltWidth = 1 << Log2_32(EltWidth - 1);
|
||||
NewEltVT = EVT::getIntegerVT(EltWidth);
|
||||
NewEltVT = EVT::getIntegerVT(*DAG.getContext(), EltWidth);
|
||||
unsigned NumElts = VecVT.getSizeInBits() / EltWidth;
|
||||
NewVecVT = EVT::getVectorVT(NewEltVT, NumElts);
|
||||
NewVecVT = EVT::getVectorVT(*DAG.getContext(), NewEltVT, NumElts);
|
||||
} while (!TLI.isTypeLegal(NewVecVT) ||
|
||||
VecVT.getSizeInBits() != NewVecVT.getSizeInBits());
|
||||
} else {
|
||||
@ -1984,9 +1985,9 @@ static void FindAssocWidenVecType(const TargetLowering &TLI, unsigned Width,
|
||||
do {
|
||||
assert(EltWidth > 0);
|
||||
EltWidth = 1 << Log2_32(EltWidth - 1);
|
||||
NewEltVT = EVT::getIntegerVT(EltWidth);
|
||||
NewEltVT = EVT::getIntegerVT(*DAG.getContext(), EltWidth);
|
||||
unsigned NumElts = VecVT.getSizeInBits() / EltWidth;
|
||||
NewVecVT = EVT::getVectorVT(NewEltVT, NumElts);
|
||||
NewVecVT = EVT::getVectorVT(*DAG.getContext(), NewEltVT, NumElts);
|
||||
} while (!TLI.isTypeLegal(NewEltVT) ||
|
||||
VecVT.getSizeInBits() != NewVecVT.getSizeInBits());
|
||||
}
|
||||
@ -2013,7 +2014,7 @@ SDValue DAGTypeLegalizer::GenWidenVectorLoads(SmallVector<SDValue, 16>& LdChain,
|
||||
// Find the vector type that can load from.
|
||||
EVT NewEltVT, NewVecVT;
|
||||
unsigned NewEltVTWidth;
|
||||
FindAssocWidenVecType(TLI, LdWidth, ResType, NewEltVT, NewVecVT);
|
||||
FindAssocWidenVecType(DAG, TLI, LdWidth, ResType, NewEltVT, NewVecVT);
|
||||
NewEltVTWidth = NewEltVT.getSizeInBits();
|
||||
|
||||
SDValue LdOp = DAG.getLoad(NewEltVT, dl, Chain, BasePtr, SV, SVOffset,
|
||||
@ -2040,7 +2041,7 @@ SDValue DAGTypeLegalizer::GenWidenVectorLoads(SmallVector<SDValue, 16>& LdChain,
|
||||
// Our current type we are using is too large, use a smaller size by
|
||||
// using a smaller power of 2
|
||||
unsigned oNewEltVTWidth = NewEltVTWidth;
|
||||
FindAssocWidenVecType(TLI, LdWidth, ResType, NewEltVT, NewVecVT);
|
||||
FindAssocWidenVecType(DAG, TLI, LdWidth, ResType, NewEltVT, NewVecVT);
|
||||
NewEltVTWidth = NewEltVT.getSizeInBits();
|
||||
// Readjust position and vector position based on new load type
|
||||
Idx = Idx * (oNewEltVTWidth/NewEltVTWidth);
|
||||
@ -2078,7 +2079,7 @@ void DAGTypeLegalizer::GenWidenVectorStores(SmallVector<SDValue, 16>& StChain,
|
||||
EVT WidenVT = ValOp.getValueType();
|
||||
EVT NewEltVT, NewVecVT;
|
||||
|
||||
FindAssocWidenVecType(TLI, StWidth, WidenVT, NewEltVT, NewVecVT);
|
||||
FindAssocWidenVecType(DAG, TLI, StWidth, WidenVT, NewEltVT, NewVecVT);
|
||||
unsigned NewEltVTWidth = NewEltVT.getSizeInBits();
|
||||
|
||||
SDValue VecOp = DAG.getNode(ISD::BIT_CONVERT, dl, NewVecVT, ValOp);
|
||||
@ -2107,7 +2108,7 @@ void DAGTypeLegalizer::GenWidenVectorStores(SmallVector<SDValue, 16>& StChain,
|
||||
// Our current type we are using is too large, use a smaller size by
|
||||
// using a smaller power of 2
|
||||
unsigned oNewEltVTWidth = NewEltVTWidth;
|
||||
FindAssocWidenVecType(TLI, StWidth, WidenVT, NewEltVT, NewVecVT);
|
||||
FindAssocWidenVecType(DAG, TLI, StWidth, WidenVT, NewEltVT, NewVecVT);
|
||||
NewEltVTWidth = NewEltVT.getSizeInBits();
|
||||
// Readjust position and vector position based on new load type
|
||||
Idx = Idx * (oNewEltVTWidth/NewEltVTWidth);
|
||||
|
@ -790,7 +790,7 @@ void SelectionDAG::VerifyNode(SDNode *N) {
|
||||
unsigned SelectionDAG::getEVTAlignment(EVT VT) const {
|
||||
const Type *Ty = VT == MVT::iPTR ?
|
||||
PointerType::get(Type::Int8Ty, 0) :
|
||||
VT.getTypeForEVT();
|
||||
VT.getTypeForEVT(*getContext());
|
||||
|
||||
return TLI.getTargetData()->getABITypeAlignment(Ty);
|
||||
}
|
||||
@ -1369,7 +1369,7 @@ SDValue SelectionDAG::getShiftAmountOperand(SDValue Op) {
|
||||
SDValue SelectionDAG::CreateStackTemporary(EVT VT, unsigned minAlign) {
|
||||
MachineFrameInfo *FrameInfo = getMachineFunction().getFrameInfo();
|
||||
unsigned ByteSize = VT.getStoreSizeInBits()/8;
|
||||
const Type *Ty = VT.getTypeForEVT();
|
||||
const Type *Ty = VT.getTypeForEVT(*getContext());
|
||||
unsigned StackAlign =
|
||||
std::max((unsigned)TLI.getTargetData()->getPrefTypeAlignment(Ty), minAlign);
|
||||
|
||||
@ -1382,8 +1382,8 @@ SDValue SelectionDAG::CreateStackTemporary(EVT VT, unsigned minAlign) {
|
||||
SDValue SelectionDAG::CreateStackTemporary(EVT VT1, EVT VT2) {
|
||||
unsigned Bytes = std::max(VT1.getStoreSizeInBits(),
|
||||
VT2.getStoreSizeInBits())/8;
|
||||
const Type *Ty1 = VT1.getTypeForEVT();
|
||||
const Type *Ty2 = VT2.getTypeForEVT();
|
||||
const Type *Ty1 = VT1.getTypeForEVT(*getContext());
|
||||
const Type *Ty2 = VT2.getTypeForEVT(*getContext());
|
||||
const TargetData *TD = TLI.getTargetData();
|
||||
unsigned Align = std::max(TD->getPrefTypeAlignment(Ty1),
|
||||
TD->getPrefTypeAlignment(Ty2));
|
||||
@ -3044,7 +3044,8 @@ static SDValue getMemsetStringVal(EVT VT, DebugLoc dl, SelectionDAG &DAG,
|
||||
unsigned NumElts = VT.getVectorNumElements();
|
||||
MVT EltVT = (VT.getVectorElementType() == MVT::f32) ? MVT::i32 : MVT::i64;
|
||||
return DAG.getNode(ISD::BIT_CONVERT, dl, VT,
|
||||
DAG.getConstant(0, EVT::getVectorVT(EltVT, NumElts)));
|
||||
DAG.getConstant(0,
|
||||
EVT::getVectorVT(*DAG.getContext(), EltVT, NumElts)));
|
||||
}
|
||||
|
||||
assert(!VT.isVector() && "Can't handle vector type here!");
|
||||
@ -3108,7 +3109,8 @@ bool MeetsMaxMemopRequirement(std::vector<EVT> &MemOps,
|
||||
EVT VT = TLI.getOptimalMemOpType(Size, Align, isSrcConst, isSrcStr, DAG);
|
||||
if (VT != MVT::iAny) {
|
||||
unsigned NewAlign = (unsigned)
|
||||
TLI.getTargetData()->getABITypeAlignment(VT.getTypeForEVT());
|
||||
TLI.getTargetData()->getABITypeAlignment(
|
||||
VT.getTypeForEVT(*DAG.getContext()));
|
||||
// If source is a string constant, this will require an unaligned load.
|
||||
if (NewAlign > Align && (isSrcConst || AllowUnalign)) {
|
||||
if (Dst.getOpcode() != ISD::FrameIndex) {
|
||||
@ -3227,7 +3229,7 @@ static SDValue getMemcpyLoadsAndStores(SelectionDAG &DAG, DebugLoc dl,
|
||||
// thing to do is generate a LoadExt/StoreTrunc pair. These simplify
|
||||
// to Load/Store if NVT==VT.
|
||||
// FIXME does the case above also need this?
|
||||
EVT NVT = TLI.getTypeToTransformTo(VT);
|
||||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
|
||||
assert(NVT.bitsGE(VT));
|
||||
Value = DAG.getExtLoad(ISD::EXTLOAD, dl, NVT, Chain,
|
||||
getMemBasePlusOffset(Src, SrcOff, DAG),
|
||||
|
@ -193,14 +193,14 @@ namespace llvm {
|
||||
const SmallVector<EVT, 4> ®vts,
|
||||
const SmallVector<EVT, 4> &valuevts)
|
||||
: TLI(&tli), ValueVTs(valuevts), RegVTs(regvts), Regs(regs) {}
|
||||
RegsForValue(const TargetLowering &tli,
|
||||
RegsForValue(LLVMContext &Context, const TargetLowering &tli,
|
||||
unsigned Reg, const Type *Ty) : TLI(&tli) {
|
||||
ComputeValueVTs(tli, Ty, ValueVTs);
|
||||
|
||||
for (unsigned Value = 0, e = ValueVTs.size(); Value != e; ++Value) {
|
||||
EVT ValueVT = ValueVTs[Value];
|
||||
unsigned NumRegs = TLI->getNumRegisters(ValueVT);
|
||||
EVT RegisterVT = TLI->getRegisterType(ValueVT);
|
||||
unsigned NumRegs = TLI->getNumRegisters(Context, ValueVT);
|
||||
EVT RegisterVT = TLI->getRegisterType(Context, ValueVT);
|
||||
for (unsigned i = 0; i != NumRegs; ++i)
|
||||
Regs.push_back(Reg + i);
|
||||
RegVTs.push_back(RegisterVT);
|
||||
@ -358,7 +358,7 @@ void FunctionLoweringInfo::set(Function &fn, MachineFunction &mf,
|
||||
ComputeValueVTs(TLI, PN->getType(), ValueVTs);
|
||||
for (unsigned vti = 0, vte = ValueVTs.size(); vti != vte; ++vti) {
|
||||
EVT VT = ValueVTs[vti];
|
||||
unsigned NumRegisters = TLI.getNumRegisters(VT);
|
||||
unsigned NumRegisters = TLI.getNumRegisters(*DAG.getContext(), VT);
|
||||
const TargetInstrInfo *TII = MF->getTarget().getInstrInfo();
|
||||
for (unsigned i = 0; i != NumRegisters; ++i)
|
||||
BuildMI(MBB, DL, TII->get(TargetInstrInfo::PHI), PHIReg + i);
|
||||
@ -386,9 +386,9 @@ unsigned FunctionLoweringInfo::CreateRegForValue(const Value *V) {
|
||||
unsigned FirstReg = 0;
|
||||
for (unsigned Value = 0, e = ValueVTs.size(); Value != e; ++Value) {
|
||||
EVT ValueVT = ValueVTs[Value];
|
||||
EVT RegisterVT = TLI.getRegisterType(ValueVT);
|
||||
EVT RegisterVT = TLI.getRegisterType(V->getContext(), ValueVT);
|
||||
|
||||
unsigned NumRegs = TLI.getNumRegisters(ValueVT);
|
||||
unsigned NumRegs = TLI.getNumRegisters(V->getContext(), ValueVT);
|
||||
for (unsigned i = 0; i != NumRegs; ++i) {
|
||||
unsigned R = MakeReg(RegisterVT);
|
||||
if (!FirstReg) FirstReg = R;
|
||||
@ -421,10 +421,10 @@ static SDValue getCopyFromParts(SelectionDAG &DAG, DebugLoc dl,
|
||||
1 << Log2_32(NumParts) : NumParts;
|
||||
unsigned RoundBits = PartBits * RoundParts;
|
||||
EVT RoundVT = RoundBits == ValueBits ?
|
||||
ValueVT : EVT::getIntegerVT(RoundBits);
|
||||
ValueVT : EVT::getIntegerVT(*DAG.getContext(), RoundBits);
|
||||
SDValue Lo, Hi;
|
||||
|
||||
EVT HalfVT = EVT::getIntegerVT(RoundBits/2);
|
||||
EVT HalfVT = EVT::getIntegerVT(*DAG.getContext(), RoundBits/2);
|
||||
|
||||
if (RoundParts > 2) {
|
||||
Lo = getCopyFromParts(DAG, dl, Parts, RoundParts/2, PartVT, HalfVT);
|
||||
@ -441,7 +441,7 @@ static SDValue getCopyFromParts(SelectionDAG &DAG, DebugLoc dl,
|
||||
if (RoundParts < NumParts) {
|
||||
// Assemble the trailing non-power-of-2 part.
|
||||
unsigned OddParts = NumParts - RoundParts;
|
||||
EVT OddVT = EVT::getIntegerVT(OddParts * PartBits);
|
||||
EVT OddVT = EVT::getIntegerVT(*DAG.getContext(), OddParts * PartBits);
|
||||
Hi = getCopyFromParts(DAG, dl,
|
||||
Parts+RoundParts, OddParts, PartVT, OddVT);
|
||||
|
||||
@ -449,7 +449,7 @@ static SDValue getCopyFromParts(SelectionDAG &DAG, DebugLoc dl,
|
||||
Lo = Val;
|
||||
if (TLI.isBigEndian())
|
||||
std::swap(Lo, Hi);
|
||||
EVT TotalVT = EVT::getIntegerVT(NumParts * PartBits);
|
||||
EVT TotalVT = EVT::getIntegerVT(*DAG.getContext(), NumParts * PartBits);
|
||||
Hi = DAG.getNode(ISD::ANY_EXTEND, dl, TotalVT, Hi);
|
||||
Hi = DAG.getNode(ISD::SHL, dl, TotalVT, Hi,
|
||||
DAG.getConstant(Lo.getValueType().getSizeInBits(),
|
||||
@ -462,8 +462,8 @@ static SDValue getCopyFromParts(SelectionDAG &DAG, DebugLoc dl,
|
||||
EVT IntermediateVT, RegisterVT;
|
||||
unsigned NumIntermediates;
|
||||
unsigned NumRegs =
|
||||
TLI.getVectorTypeBreakdown(ValueVT, IntermediateVT, NumIntermediates,
|
||||
RegisterVT);
|
||||
TLI.getVectorTypeBreakdown(*DAG.getContext(), ValueVT, IntermediateVT,
|
||||
NumIntermediates, RegisterVT);
|
||||
assert(NumRegs == NumParts && "Part count doesn't match vector breakdown!");
|
||||
NumParts = NumRegs; // Silence a compiler warning.
|
||||
assert(RegisterVT == PartVT && "Part type doesn't match vector breakdown!");
|
||||
@ -508,7 +508,7 @@ static SDValue getCopyFromParts(SelectionDAG &DAG, DebugLoc dl,
|
||||
// FP split into integer parts (soft fp)
|
||||
assert(ValueVT.isFloatingPoint() && PartVT.isInteger() &&
|
||||
!PartVT.isVector() && "Unexpected split");
|
||||
EVT IntVT = EVT::getIntegerVT(ValueVT.getSizeInBits());
|
||||
EVT IntVT = EVT::getIntegerVT(*DAG.getContext(), ValueVT.getSizeInBits());
|
||||
Val = getCopyFromParts(DAG, dl, Parts, NumParts, PartVT, IntVT);
|
||||
}
|
||||
}
|
||||
@ -590,7 +590,7 @@ static void getCopyToParts(SelectionDAG &DAG, DebugLoc dl, SDValue Val,
|
||||
assert(NumParts == 1 && "Do not know what to promote to!");
|
||||
Val = DAG.getNode(ISD::FP_EXTEND, dl, PartVT, Val);
|
||||
} else if (PartVT.isInteger() && ValueVT.isInteger()) {
|
||||
ValueVT = EVT::getIntegerVT(NumParts * PartBits);
|
||||
ValueVT = EVT::getIntegerVT(*DAG.getContext(), NumParts * PartBits);
|
||||
Val = DAG.getNode(ExtendKind, dl, ValueVT, Val);
|
||||
} else {
|
||||
llvm_unreachable("Unknown mismatch!");
|
||||
@ -602,7 +602,7 @@ static void getCopyToParts(SelectionDAG &DAG, DebugLoc dl, SDValue Val,
|
||||
} else if (NumParts * PartBits < ValueVT.getSizeInBits()) {
|
||||
// If the parts cover less bits than value has, truncate the value.
|
||||
if (PartVT.isInteger() && ValueVT.isInteger()) {
|
||||
ValueVT = EVT::getIntegerVT(NumParts * PartBits);
|
||||
ValueVT = EVT::getIntegerVT(*DAG.getContext(), NumParts * PartBits);
|
||||
Val = DAG.getNode(ISD::TRUNCATE, dl, ValueVT, Val);
|
||||
} else {
|
||||
llvm_unreachable("Unknown mismatch!");
|
||||
@ -636,19 +636,19 @@ static void getCopyToParts(SelectionDAG &DAG, DebugLoc dl, SDValue Val,
|
||||
// The odd parts were reversed by getCopyToParts - unreverse them.
|
||||
std::reverse(Parts + RoundParts, Parts + NumParts);
|
||||
NumParts = RoundParts;
|
||||
ValueVT = EVT::getIntegerVT(NumParts * PartBits);
|
||||
ValueVT = EVT::getIntegerVT(*DAG.getContext(), NumParts * PartBits);
|
||||
Val = DAG.getNode(ISD::TRUNCATE, dl, ValueVT, Val);
|
||||
}
|
||||
|
||||
// The number of parts is a power of 2. Repeatedly bisect the value using
|
||||
// EXTRACT_ELEMENT.
|
||||
Parts[0] = DAG.getNode(ISD::BIT_CONVERT, dl,
|
||||
EVT::getIntegerVT(ValueVT.getSizeInBits()),
|
||||
EVT::getIntegerVT(*DAG.getContext(), ValueVT.getSizeInBits()),
|
||||
Val);
|
||||
for (unsigned StepSize = NumParts; StepSize > 1; StepSize /= 2) {
|
||||
for (unsigned i = 0; i < NumParts; i += StepSize) {
|
||||
unsigned ThisBits = StepSize * PartBits / 2;
|
||||
EVT ThisVT = EVT::getIntegerVT (ThisBits);
|
||||
EVT ThisVT = EVT::getIntegerVT(*DAG.getContext(), ThisBits);
|
||||
SDValue &Part0 = Parts[i];
|
||||
SDValue &Part1 = Parts[i+StepSize/2];
|
||||
|
||||
@ -696,9 +696,8 @@ static void getCopyToParts(SelectionDAG &DAG, DebugLoc dl, SDValue Val,
|
||||
// Handle a multi-element vector.
|
||||
EVT IntermediateVT, RegisterVT;
|
||||
unsigned NumIntermediates;
|
||||
unsigned NumRegs = TLI
|
||||
.getVectorTypeBreakdown(ValueVT, IntermediateVT, NumIntermediates,
|
||||
RegisterVT);
|
||||
unsigned NumRegs = TLI.getVectorTypeBreakdown(*DAG.getContext(), ValueVT,
|
||||
IntermediateVT, NumIntermediates, RegisterVT);
|
||||
unsigned NumElements = ValueVT.getVectorNumElements();
|
||||
|
||||
assert(NumRegs == NumParts && "Part count doesn't match vector breakdown!");
|
||||
@ -929,7 +928,7 @@ SDValue SelectionDAGLowering::getValue(const Value *V) {
|
||||
unsigned InReg = FuncInfo.ValueMap[V];
|
||||
assert(InReg && "Value not in map!");
|
||||
|
||||
RegsForValue RFV(TLI, InReg, V->getType());
|
||||
RegsForValue RFV(*DAG.getContext(), TLI, InReg, V->getType());
|
||||
SDValue Chain = DAG.getEntryNode();
|
||||
return RFV.getCopyFromRegs(DAG, getCurDebugLoc(), Chain, NULL);
|
||||
}
|
||||
@ -961,13 +960,13 @@ void SelectionDAGLowering::visitRet(ReturnInst &I) {
|
||||
// conventions. The frontend should mark functions whose return values
|
||||
// require promoting with signext or zeroext attributes.
|
||||
if (ExtendKind != ISD::ANY_EXTEND && VT.isInteger()) {
|
||||
EVT MinVT = TLI.getRegisterType(MVT::i32);
|
||||
EVT MinVT = TLI.getRegisterType(*DAG.getContext(), MVT::i32);
|
||||
if (VT.bitsLT(MinVT))
|
||||
VT = MinVT;
|
||||
}
|
||||
|
||||
unsigned NumParts = TLI.getNumRegisters(VT);
|
||||
EVT PartVT = TLI.getRegisterType(VT);
|
||||
unsigned NumParts = TLI.getNumRegisters(*DAG.getContext(), VT);
|
||||
EVT PartVT = TLI.getRegisterType(*DAG.getContext(), VT);
|
||||
SmallVector<SDValue, 4> Parts(NumParts);
|
||||
getCopyToParts(DAG, getCurDebugLoc(),
|
||||
SDValue(RetOp.getNode(), RetOp.getResNo() + j),
|
||||
@ -4609,7 +4608,7 @@ SDValue RegsForValue::getCopyFromRegs(SelectionDAG &DAG, DebugLoc dl,
|
||||
for (unsigned Value = 0, Part = 0, e = ValueVTs.size(); Value != e; ++Value) {
|
||||
// Copy the legal parts from the registers.
|
||||
EVT ValueVT = ValueVTs[Value];
|
||||
unsigned NumRegs = TLI->getNumRegisters(ValueVT);
|
||||
unsigned NumRegs = TLI->getNumRegisters(*DAG.getContext(), ValueVT);
|
||||
EVT RegisterVT = RegVTs[Value];
|
||||
|
||||
Parts.resize(NumRegs);
|
||||
@ -4690,7 +4689,7 @@ void RegsForValue::getCopyToRegs(SDValue Val, SelectionDAG &DAG, DebugLoc dl,
|
||||
SmallVector<SDValue, 8> Parts(NumRegs);
|
||||
for (unsigned Value = 0, Part = 0, e = ValueVTs.size(); Value != e; ++Value) {
|
||||
EVT ValueVT = ValueVTs[Value];
|
||||
unsigned NumParts = TLI->getNumRegisters(ValueVT);
|
||||
unsigned NumParts = TLI->getNumRegisters(*DAG.getContext(), ValueVT);
|
||||
EVT RegisterVT = RegVTs[Value];
|
||||
|
||||
getCopyToParts(DAG, dl, Val.getValue(Val.getResNo() + Value),
|
||||
@ -4741,7 +4740,7 @@ void RegsForValue::AddInlineAsmOperands(unsigned Code,
|
||||
Flag |= 0x80000000 | (MatchingIdx << 16);
|
||||
Ops.push_back(DAG.getTargetConstant(Flag, IntPtrTy));
|
||||
for (unsigned Value = 0, Reg = 0, e = ValueVTs.size(); Value != e; ++Value) {
|
||||
unsigned NumRegs = TLI->getNumRegisters(ValueVTs[Value]);
|
||||
unsigned NumRegs = TLI->getNumRegisters(*DAG.getContext(), ValueVTs[Value]);
|
||||
EVT RegisterVT = RegVTs[Value];
|
||||
for (unsigned i = 0; i != NumRegs; ++i) {
|
||||
assert(Reg < Regs.size() && "Mismatch in # registers expected");
|
||||
@ -4899,6 +4898,8 @@ void SelectionDAGLowering::
|
||||
GetRegistersForValue(SDISelAsmOperandInfo &OpInfo,
|
||||
std::set<unsigned> &OutputRegs,
|
||||
std::set<unsigned> &InputRegs) {
|
||||
LLVMContext &Context = CurMBB->getParent()->getFunction()->getContext();
|
||||
|
||||
// Compute whether this value requires an input register, an output register,
|
||||
// or both.
|
||||
bool isOutReg = false;
|
||||
@ -4951,14 +4952,15 @@ GetRegistersForValue(SDISelAsmOperandInfo &OpInfo,
|
||||
// bitcast to the corresponding integer type. This turns an f64 value
|
||||
// into i64, which can be passed with two i32 values on a 32-bit
|
||||
// machine.
|
||||
RegVT = EVT::getIntegerVT(OpInfo.ConstraintVT.getSizeInBits());
|
||||
RegVT = EVT::getIntegerVT(Context,
|
||||
OpInfo.ConstraintVT.getSizeInBits());
|
||||
OpInfo.CallOperand = DAG.getNode(ISD::BIT_CONVERT, getCurDebugLoc(),
|
||||
RegVT, OpInfo.CallOperand);
|
||||
OpInfo.ConstraintVT = RegVT;
|
||||
}
|
||||
}
|
||||
|
||||
NumRegs = TLI.getNumRegisters(OpInfo.ConstraintVT);
|
||||
NumRegs = TLI.getNumRegisters(Context, OpInfo.ConstraintVT);
|
||||
}
|
||||
|
||||
EVT RegVT;
|
||||
@ -5625,7 +5627,7 @@ TargetLowering::LowerCallTo(SDValue Chain, const Type *RetTy,
|
||||
for (unsigned Value = 0, NumValues = ValueVTs.size();
|
||||
Value != NumValues; ++Value) {
|
||||
EVT VT = ValueVTs[Value];
|
||||
const Type *ArgTy = VT.getTypeForEVT();
|
||||
const Type *ArgTy = VT.getTypeForEVT(RetTy->getContext());
|
||||
SDValue Op = SDValue(Args[i].Node.getNode(),
|
||||
Args[i].Node.getResNo() + Value);
|
||||
ISD::ArgFlagsTy Flags;
|
||||
@ -5657,8 +5659,8 @@ TargetLowering::LowerCallTo(SDValue Chain, const Type *RetTy,
|
||||
Flags.setNest();
|
||||
Flags.setOrigAlign(OriginalAlignment);
|
||||
|
||||
EVT PartVT = getRegisterType(VT);
|
||||
unsigned NumParts = getNumRegisters(VT);
|
||||
EVT PartVT = getRegisterType(RetTy->getContext(), VT);
|
||||
unsigned NumParts = getNumRegisters(RetTy->getContext(), VT);
|
||||
SmallVector<SDValue, 4> Parts(NumParts);
|
||||
ISD::NodeType ExtendKind = ISD::ANY_EXTEND;
|
||||
|
||||
@ -5688,8 +5690,8 @@ TargetLowering::LowerCallTo(SDValue Chain, const Type *RetTy,
|
||||
ComputeValueVTs(*this, RetTy, RetTys);
|
||||
for (unsigned I = 0, E = RetTys.size(); I != E; ++I) {
|
||||
EVT VT = RetTys[I];
|
||||
EVT RegisterVT = getRegisterType(VT);
|
||||
unsigned NumRegs = getNumRegisters(VT);
|
||||
EVT RegisterVT = getRegisterType(RetTy->getContext(), VT);
|
||||
unsigned NumRegs = getNumRegisters(RetTy->getContext(), VT);
|
||||
for (unsigned i = 0; i != NumRegs; ++i) {
|
||||
ISD::InputArg MyFlags;
|
||||
MyFlags.VT = RegisterVT;
|
||||
@ -5748,8 +5750,8 @@ TargetLowering::LowerCallTo(SDValue Chain, const Type *RetTy,
|
||||
unsigned CurReg = 0;
|
||||
for (unsigned I = 0, E = RetTys.size(); I != E; ++I) {
|
||||
EVT VT = RetTys[I];
|
||||
EVT RegisterVT = getRegisterType(VT);
|
||||
unsigned NumRegs = getNumRegisters(VT);
|
||||
EVT RegisterVT = getRegisterType(RetTy->getContext(), VT);
|
||||
unsigned NumRegs = getNumRegisters(RetTy->getContext(), VT);
|
||||
|
||||
SDValue ReturnValue =
|
||||
getCopyFromParts(DAG, dl, &InVals[CurReg], NumRegs, RegisterVT, VT,
|
||||
@ -5792,7 +5794,7 @@ void SelectionDAGLowering::CopyValueToVirtualRegister(Value *V, unsigned Reg) {
|
||||
"Copy from a reg to the same reg!");
|
||||
assert(!TargetRegisterInfo::isPhysicalRegister(Reg) && "Is a physreg");
|
||||
|
||||
RegsForValue RFV(TLI, Reg, V->getType());
|
||||
RegsForValue RFV(V->getContext(), TLI, Reg, V->getType());
|
||||
SDValue Chain = DAG.getEntryNode();
|
||||
RFV.getCopyToRegs(Op, DAG, getCurDebugLoc(), Chain, 0);
|
||||
PendingExports.push_back(Chain);
|
||||
@ -5820,7 +5822,7 @@ LowerArguments(BasicBlock *LLVMBB) {
|
||||
for (unsigned Value = 0, NumValues = ValueVTs.size();
|
||||
Value != NumValues; ++Value) {
|
||||
EVT VT = ValueVTs[Value];
|
||||
const Type *ArgTy = VT.getTypeForEVT();
|
||||
const Type *ArgTy = VT.getTypeForEVT(*CurDAG->getContext());
|
||||
ISD::ArgFlagsTy Flags;
|
||||
unsigned OriginalAlignment =
|
||||
TD->getABITypeAlignment(ArgTy);
|
||||
@ -5850,8 +5852,8 @@ LowerArguments(BasicBlock *LLVMBB) {
|
||||
Flags.setNest();
|
||||
Flags.setOrigAlign(OriginalAlignment);
|
||||
|
||||
EVT RegisterVT = TLI.getRegisterType(VT);
|
||||
unsigned NumRegs = TLI.getNumRegisters(VT);
|
||||
EVT RegisterVT = TLI.getRegisterType(*CurDAG->getContext(), VT);
|
||||
unsigned NumRegs = TLI.getNumRegisters(*CurDAG->getContext(), VT);
|
||||
for (unsigned i = 0; i != NumRegs; ++i) {
|
||||
ISD::InputArg MyFlags(Flags, RegisterVT, isArgValueUsed);
|
||||
if (NumRegs > 1 && i == 0)
|
||||
@ -5896,8 +5898,8 @@ LowerArguments(BasicBlock *LLVMBB) {
|
||||
unsigned NumValues = ValueVTs.size();
|
||||
for (unsigned Value = 0; Value != NumValues; ++Value) {
|
||||
EVT VT = ValueVTs[Value];
|
||||
EVT PartVT = TLI.getRegisterType(VT);
|
||||
unsigned NumParts = TLI.getNumRegisters(VT);
|
||||
EVT PartVT = TLI.getRegisterType(*CurDAG->getContext(), VT);
|
||||
unsigned NumParts = TLI.getNumRegisters(*CurDAG->getContext(), VT);
|
||||
|
||||
if (!I->use_empty()) {
|
||||
ISD::NodeType AssertOp = ISD::DELETED_NODE;
|
||||
@ -5988,7 +5990,7 @@ SelectionDAGISel::HandlePHINodesInSuccessorBlocks(BasicBlock *LLVMBB) {
|
||||
ComputeValueVTs(TLI, PN->getType(), ValueVTs);
|
||||
for (unsigned vti = 0, vte = ValueVTs.size(); vti != vte; ++vti) {
|
||||
EVT VT = ValueVTs[vti];
|
||||
unsigned NumRegisters = TLI.getNumRegisters(VT);
|
||||
unsigned NumRegisters = TLI.getNumRegisters(*CurDAG->getContext(), VT);
|
||||
for (unsigned i = 0, e = NumRegisters; i != e; ++i)
|
||||
SDL->PHINodesToUpdate.push_back(std::make_pair(MBBI++, Reg+i));
|
||||
Reg += NumRegisters;
|
||||
@ -6042,7 +6044,7 @@ SelectionDAGISel::HandlePHINodesInSuccessorBlocksFast(BasicBlock *LLVMBB,
|
||||
if (VT == MVT::Other || !TLI.isTypeLegal(VT)) {
|
||||
// Promote MVT::i1.
|
||||
if (VT == MVT::i1)
|
||||
VT = TLI.getTypeToTransformTo(VT);
|
||||
VT = TLI.getTypeToTransformTo(*CurDAG->getContext(), VT);
|
||||
else {
|
||||
SDL->PHINodesToUpdate.resize(OrigNumPHINodesToUpdate);
|
||||
return false;
|
||||
|
@ -532,6 +532,51 @@ TargetLowering::~TargetLowering() {
|
||||
delete &TLOF;
|
||||
}
|
||||
|
||||
static unsigned getVectorTypeBreakdownMVT(MVT VT, MVT &IntermediateVT,
|
||||
unsigned &NumIntermediates,
|
||||
EVT &RegisterVT,
|
||||
TargetLowering* TLI) {
|
||||
// Figure out the right, legal destination reg to copy into.
|
||||
unsigned NumElts = VT.getVectorNumElements();
|
||||
MVT EltTy = VT.getVectorElementType();
|
||||
|
||||
unsigned NumVectorRegs = 1;
|
||||
|
||||
// FIXME: We don't support non-power-of-2-sized vectors for now. Ideally we
|
||||
// could break down into LHS/RHS like LegalizeDAG does.
|
||||
if (!isPowerOf2_32(NumElts)) {
|
||||
NumVectorRegs = NumElts;
|
||||
NumElts = 1;
|
||||
}
|
||||
|
||||
// Divide the input until we get to a supported size. This will always
|
||||
// end with a scalar if the target doesn't support vectors.
|
||||
while (NumElts > 1 && !TLI->isTypeLegal(MVT::getVectorVT(EltTy, NumElts))) {
|
||||
NumElts >>= 1;
|
||||
NumVectorRegs <<= 1;
|
||||
}
|
||||
|
||||
NumIntermediates = NumVectorRegs;
|
||||
|
||||
MVT NewVT = MVT::getVectorVT(EltTy, NumElts);
|
||||
if (!TLI->isTypeLegal(NewVT))
|
||||
NewVT = EltTy;
|
||||
IntermediateVT = NewVT;
|
||||
|
||||
EVT DestVT = TLI->getRegisterType(NewVT);
|
||||
RegisterVT = DestVT;
|
||||
if (EVT(DestVT).bitsLT(NewVT)) {
|
||||
// Value is expanded, e.g. i64 -> i16.
|
||||
return NumVectorRegs*(NewVT.getSizeInBits()/DestVT.getSizeInBits());
|
||||
} else {
|
||||
// Otherwise, promotion or legal types use the same number of registers as
|
||||
// the vector decimated to the appropriate level.
|
||||
return NumVectorRegs;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/// computeRegisterProperties - Once all of the register classes are added,
|
||||
/// this allows us to compute derived properties we expose.
|
||||
void TargetLowering::computeRegisterProperties() {
|
||||
@ -614,14 +659,14 @@ void TargetLowering::computeRegisterProperties() {
|
||||
// Loop over all of the vector value types to see which need transformations.
|
||||
for (unsigned i = MVT::FIRST_VECTOR_VALUETYPE;
|
||||
i <= (unsigned)MVT::LAST_VECTOR_VALUETYPE; ++i) {
|
||||
EVT VT = (MVT::SimpleValueType)i;
|
||||
MVT VT = (MVT::SimpleValueType)i;
|
||||
if (!isTypeLegal(VT)) {
|
||||
EVT IntermediateVT, RegisterVT;
|
||||
MVT IntermediateVT;
|
||||
EVT RegisterVT;
|
||||
unsigned NumIntermediates;
|
||||
NumRegistersForVT[i] =
|
||||
getVectorTypeBreakdown(VT,
|
||||
IntermediateVT, NumIntermediates,
|
||||
RegisterVT);
|
||||
getVectorTypeBreakdownMVT(VT, IntermediateVT, NumIntermediates,
|
||||
RegisterVT, this);
|
||||
RegisterTypeForVT[i] = RegisterVT;
|
||||
|
||||
// Determine if there is a legal wider type.
|
||||
@ -662,7 +707,6 @@ MVT::SimpleValueType TargetLowering::getSetCCResultType(EVT VT) const {
|
||||
return getValueType(TD->getIntPtrType()).getSimpleVT().SimpleTy;
|
||||
}
|
||||
|
||||
|
||||
/// getVectorTypeBreakdown - Vector types are broken down into some number of
|
||||
/// legal first class types. For example, MVT::v8f32 maps to 2 MVT::v4f32
|
||||
/// with Altivec or SSE1, or 8 promoted MVT::f64 values with the X86 FP stack.
|
||||
@ -672,10 +716,10 @@ MVT::SimpleValueType TargetLowering::getSetCCResultType(EVT VT) const {
|
||||
/// register. It also returns the VT and quantity of the intermediate values
|
||||
/// before they are promoted/expanded.
|
||||
///
|
||||
unsigned TargetLowering::getVectorTypeBreakdown(EVT VT,
|
||||
unsigned TargetLowering::getVectorTypeBreakdown(LLVMContext &Context, EVT VT,
|
||||
EVT &IntermediateVT,
|
||||
unsigned &NumIntermediates,
|
||||
EVT &RegisterVT) const {
|
||||
EVT &RegisterVT) const {
|
||||
// Figure out the right, legal destination reg to copy into.
|
||||
unsigned NumElts = VT.getVectorNumElements();
|
||||
EVT EltTy = VT.getVectorElementType();
|
||||
@ -691,19 +735,20 @@ unsigned TargetLowering::getVectorTypeBreakdown(EVT VT,
|
||||
|
||||
// Divide the input until we get to a supported size. This will always
|
||||
// end with a scalar if the target doesn't support vectors.
|
||||
while (NumElts > 1 && !isTypeLegal(EVT::getVectorVT(EltTy, NumElts))) {
|
||||
while (NumElts > 1 && !isTypeLegal(
|
||||
EVT::getVectorVT(Context, EltTy, NumElts))) {
|
||||
NumElts >>= 1;
|
||||
NumVectorRegs <<= 1;
|
||||
}
|
||||
|
||||
NumIntermediates = NumVectorRegs;
|
||||
|
||||
EVT NewVT = EVT::getVectorVT(EltTy, NumElts);
|
||||
EVT NewVT = EVT::getVectorVT(Context, EltTy, NumElts);
|
||||
if (!isTypeLegal(NewVT))
|
||||
NewVT = EltTy;
|
||||
IntermediateVT = NewVT;
|
||||
|
||||
EVT DestVT = getRegisterType(NewVT);
|
||||
EVT DestVT = getRegisterType(Context, NewVT);
|
||||
RegisterVT = DestVT;
|
||||
if (DestVT.bitsLT(NewVT)) {
|
||||
// Value is expanded, e.g. i64 -> i16.
|
||||
@ -830,7 +875,7 @@ TargetLowering::TargetLoweringOpt::ShrinkDemandedOp(SDValue Op,
|
||||
if (!isPowerOf2_32(SmallVTBits))
|
||||
SmallVTBits = NextPowerOf2(SmallVTBits);
|
||||
for (; SmallVTBits < BitWidth; SmallVTBits = NextPowerOf2(SmallVTBits)) {
|
||||
EVT SmallVT = EVT::getIntegerVT(SmallVTBits);
|
||||
EVT SmallVT = EVT::getIntegerVT(*DAG.getContext(), SmallVTBits);
|
||||
if (TLI.isTruncateFree(Op.getValueType(), SmallVT) &&
|
||||
TLI.isZExtFree(SmallVT, Op.getValueType())) {
|
||||
// We found a type with free casts.
|
||||
@ -1516,6 +1561,7 @@ TargetLowering::SimplifySetCC(EVT VT, SDValue N0, SDValue N1,
|
||||
ISD::CondCode Cond, bool foldBooleans,
|
||||
DAGCombinerInfo &DCI, DebugLoc dl) const {
|
||||
SelectionDAG &DAG = DCI.DAG;
|
||||
LLVMContext &Context = *DAG.getContext();
|
||||
|
||||
// These setcc operations always fold.
|
||||
switch (Cond) {
|
||||
@ -1598,7 +1644,7 @@ TargetLowering::SimplifySetCC(EVT VT, SDValue N0, SDValue N1,
|
||||
}
|
||||
}
|
||||
if (bestWidth) {
|
||||
EVT newVT = EVT::getIntegerVT(bestWidth);
|
||||
EVT newVT = EVT::getIntegerVT(Context, bestWidth);
|
||||
if (newVT.isRound()) {
|
||||
EVT PtrType = Lod->getOperand(1).getValueType();
|
||||
SDValue Ptr = Lod->getBasePtr();
|
||||
|
@ -726,8 +726,10 @@ SPUDAGToDAGISel::Select(SDValue Op) {
|
||||
&& OpVT == MVT::i64) {
|
||||
SDValue Op0 = Op.getOperand(0);
|
||||
EVT Op0VT = Op0.getValueType();
|
||||
EVT Op0VecVT = EVT::getVectorVT(Op0VT, (128 / Op0VT.getSizeInBits()));
|
||||
EVT OpVecVT = EVT::getVectorVT(OpVT, (128 / OpVT.getSizeInBits()));
|
||||
EVT Op0VecVT = EVT::getVectorVT(*CurDAG->getContext(),
|
||||
Op0VT, (128 / Op0VT.getSizeInBits()));
|
||||
EVT OpVecVT = EVT::getVectorVT(*CurDAG->getContext(),
|
||||
OpVT, (128 / OpVT.getSizeInBits()));
|
||||
SDValue shufMask;
|
||||
|
||||
switch (Op0VT.getSimpleVT().SimpleTy) {
|
||||
@ -969,7 +971,8 @@ SPUDAGToDAGISel::Select(SDValue Op) {
|
||||
SDNode *
|
||||
SPUDAGToDAGISel::SelectSHLi64(SDValue &Op, EVT OpVT) {
|
||||
SDValue Op0 = Op.getOperand(0);
|
||||
EVT VecVT = EVT::getVectorVT(OpVT, (128 / OpVT.getSizeInBits()));
|
||||
EVT VecVT = EVT::getVectorVT(*CurDAG->getContext(),
|
||||
OpVT, (128 / OpVT.getSizeInBits()));
|
||||
SDValue ShiftAmt = Op.getOperand(1);
|
||||
EVT ShiftAmtVT = ShiftAmt.getValueType();
|
||||
SDNode *VecOp0, *SelMask, *ZeroFill, *Shift = 0;
|
||||
@ -1034,7 +1037,8 @@ SPUDAGToDAGISel::SelectSHLi64(SDValue &Op, EVT OpVT) {
|
||||
SDNode *
|
||||
SPUDAGToDAGISel::SelectSRLi64(SDValue &Op, EVT OpVT) {
|
||||
SDValue Op0 = Op.getOperand(0);
|
||||
EVT VecVT = EVT::getVectorVT(OpVT, (128 / OpVT.getSizeInBits()));
|
||||
EVT VecVT = EVT::getVectorVT(*CurDAG->getContext(),
|
||||
OpVT, (128 / OpVT.getSizeInBits()));
|
||||
SDValue ShiftAmt = Op.getOperand(1);
|
||||
EVT ShiftAmtVT = ShiftAmt.getValueType();
|
||||
SDNode *VecOp0, *Shift = 0;
|
||||
@ -1100,7 +1104,8 @@ SPUDAGToDAGISel::SelectSRLi64(SDValue &Op, EVT OpVT) {
|
||||
SDNode *
|
||||
SPUDAGToDAGISel::SelectSRAi64(SDValue &Op, EVT OpVT) {
|
||||
// Promote Op0 to vector
|
||||
EVT VecVT = EVT::getVectorVT(OpVT, (128 / OpVT.getSizeInBits()));
|
||||
EVT VecVT = EVT::getVectorVT(*CurDAG->getContext(),
|
||||
OpVT, (128 / OpVT.getSizeInBits()));
|
||||
SDValue ShiftAmt = Op.getOperand(1);
|
||||
EVT ShiftAmtVT = ShiftAmt.getValueType();
|
||||
DebugLoc dl = Op.getDebugLoc();
|
||||
@ -1174,7 +1179,7 @@ SDNode *SPUDAGToDAGISel::SelectI64Constant(SDValue& Op, EVT OpVT,
|
||||
|
||||
SDNode *SPUDAGToDAGISel::SelectI64Constant(uint64_t Value64, EVT OpVT,
|
||||
DebugLoc dl) {
|
||||
EVT OpVecVT = EVT::getVectorVT(OpVT, 2);
|
||||
EVT OpVecVT = EVT::getVectorVT(*CurDAG->getContext(), OpVT, 2);
|
||||
SDValue i64vec =
|
||||
SPU::LowerV2I64Splat(OpVecVT, *CurDAG, Value64, dl);
|
||||
|
||||
|
@ -101,7 +101,7 @@ namespace {
|
||||
TargetLowering::ArgListEntry Entry;
|
||||
for (unsigned i = 0, e = Op.getNumOperands(); i != e; ++i) {
|
||||
EVT ArgVT = Op.getOperand(i).getValueType();
|
||||
const Type *ArgTy = ArgVT.getTypeForEVT();
|
||||
const Type *ArgTy = ArgVT.getTypeForEVT(*DAG.getContext());
|
||||
Entry.Node = Op.getOperand(i);
|
||||
Entry.Ty = ArgTy;
|
||||
Entry.isSExt = isSigned;
|
||||
@ -112,7 +112,8 @@ namespace {
|
||||
TLI.getPointerTy());
|
||||
|
||||
// Splice the libcall in wherever FindInputOutputChains tells us to.
|
||||
const Type *RetTy = Op.getNode()->getValueType(0).getTypeForEVT();
|
||||
const Type *RetTy =
|
||||
Op.getNode()->getValueType(0).getTypeForEVT(*DAG.getContext());
|
||||
std::pair<SDValue, SDValue> CallInfo =
|
||||
TLI.LowerCallTo(InChain, RetTy, isSigned, !isSigned, false, false,
|
||||
0, CallingConv::C, false,
|
||||
@ -683,7 +684,8 @@ LowerLOAD(SDValue Op, SelectionDAG &DAG, const SPUSubtarget *ST) {
|
||||
|
||||
// Convert the loaded v16i8 vector to the appropriate vector type
|
||||
// specified by the operand:
|
||||
EVT vecVT = EVT::getVectorVT(InVT, (128 / InVT.getSizeInBits()));
|
||||
EVT vecVT = EVT::getVectorVT(*DAG.getContext(),
|
||||
InVT, (128 / InVT.getSizeInBits()));
|
||||
result = DAG.getNode(SPUISD::VEC2PREFSLOT, dl, InVT,
|
||||
DAG.getNode(ISD::BIT_CONVERT, dl, vecVT, result));
|
||||
|
||||
@ -749,8 +751,10 @@ LowerSTORE(SDValue Op, SelectionDAG &DAG, const SPUSubtarget *ST) {
|
||||
switch (SN->getAddressingMode()) {
|
||||
case ISD::UNINDEXED: {
|
||||
// The vector type we really want to load from the 16-byte chunk.
|
||||
EVT vecVT = EVT::getVectorVT(VT, (128 / VT.getSizeInBits())),
|
||||
stVecVT = EVT::getVectorVT(StVT, (128 / StVT.getSizeInBits()));
|
||||
EVT vecVT = EVT::getVectorVT(*DAG.getContext(),
|
||||
VT, (128 / VT.getSizeInBits())),
|
||||
stVecVT = EVT::getVectorVT(*DAG.getContext(),
|
||||
StVT, (128 / StVT.getSizeInBits()));
|
||||
|
||||
SDValue alignLoadVec;
|
||||
SDValue basePtr = SN->getBasePtr();
|
||||
@ -2252,7 +2256,8 @@ LowerByteImmed(SDValue Op, SelectionDAG &DAG) {
|
||||
*/
|
||||
static SDValue LowerCTPOP(SDValue Op, SelectionDAG &DAG) {
|
||||
EVT VT = Op.getValueType();
|
||||
EVT vecVT = EVT::getVectorVT(VT, (128 / VT.getSizeInBits()));
|
||||
EVT vecVT = EVT::getVectorVT(*DAG.getContext(),
|
||||
VT, (128 / VT.getSizeInBits()));
|
||||
DebugLoc dl = Op.getDebugLoc();
|
||||
|
||||
switch (VT.getSimpleVT().SimpleTy) {
|
||||
@ -2575,7 +2580,8 @@ static SDValue LowerTRUNCATE(SDValue Op, SelectionDAG &DAG)
|
||||
// Type to truncate to
|
||||
EVT VT = Op.getValueType();
|
||||
MVT simpleVT = VT.getSimpleVT();
|
||||
EVT VecVT = EVT::getVectorVT(VT, (128 / VT.getSizeInBits()));
|
||||
EVT VecVT = EVT::getVectorVT(*DAG.getContext(),
|
||||
VT, (128 / VT.getSizeInBits()));
|
||||
DebugLoc dl = Op.getDebugLoc();
|
||||
|
||||
// Type to truncate from
|
||||
|
@ -399,7 +399,7 @@ PIC16TargetLowering::MakePIC16Libcall(PIC16ISD::PIC16Libcall Call,
|
||||
TargetLowering::ArgListEntry Entry;
|
||||
for (unsigned i = 0; i != NumOps; ++i) {
|
||||
Entry.Node = Ops[i];
|
||||
Entry.Ty = Entry.Node.getValueType().getTypeForEVT();
|
||||
Entry.Ty = Entry.Node.getValueType().getTypeForEVT(*DAG.getContext());
|
||||
Entry.isSExt = isSigned;
|
||||
Entry.isZExt = !isSigned;
|
||||
Args.push_back(Entry);
|
||||
@ -407,7 +407,7 @@ PIC16TargetLowering::MakePIC16Libcall(PIC16ISD::PIC16Libcall Call,
|
||||
|
||||
SDValue Callee = DAG.getExternalSymbol(getPIC16LibcallName(Call), MVT::i16);
|
||||
|
||||
const Type *RetTy = RetVT.getTypeForEVT();
|
||||
const Type *RetTy = RetVT.getTypeForEVT(*DAG.getContext());
|
||||
std::pair<SDValue,SDValue> CallInfo =
|
||||
LowerCallTo(DAG.getEntryNode(), RetTy, isSigned, !isSigned, false,
|
||||
false, 0, CallingConv::C, false,
|
||||
@ -691,7 +691,7 @@ void PIC16TargetLowering::GetExpandedParts(SDValue Op, SelectionDAG &DAG,
|
||||
SDValue &Lo, SDValue &Hi) {
|
||||
SDNode *N = Op.getNode();
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
EVT NewVT = getTypeToTransformTo(N->getValueType(0));
|
||||
EVT NewVT = getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
|
||||
// Extract the lo component.
|
||||
Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NewVT, Op,
|
||||
|
@ -1287,7 +1287,7 @@ SDValue PPCTargetLowering::LowerTRAMPOLINE(SDValue Op, SelectionDAG &DAG) {
|
||||
|
||||
// Lower to a call to __trampoline_setup(Trmp, TrampSize, FPtr, ctx_reg)
|
||||
std::pair<SDValue, SDValue> CallResult =
|
||||
LowerCallTo(Chain, Op.getValueType().getTypeForEVT(),
|
||||
LowerCallTo(Chain, Op.getValueType().getTypeForEVT(*DAG.getContext()),
|
||||
false, false, false, false, 0, CallingConv::C, false,
|
||||
/*isReturnValueUsed=*/true,
|
||||
DAG.getExternalSymbol("__trampoline_setup", PtrVT),
|
||||
|
@ -373,7 +373,7 @@ LowerLOAD(SDValue Op, SelectionDAG &DAG)
|
||||
return SDValue();
|
||||
}
|
||||
unsigned ABIAlignment = getTargetData()->
|
||||
getABITypeAlignment(LD->getMemoryVT().getTypeForEVT());
|
||||
getABITypeAlignment(LD->getMemoryVT().getTypeForEVT(*DAG.getContext()));
|
||||
// Leave aligned load alone.
|
||||
if (LD->getAlignment() >= ABIAlignment) {
|
||||
return SDValue();
|
||||
@ -469,7 +469,7 @@ LowerSTORE(SDValue Op, SelectionDAG &DAG)
|
||||
return SDValue();
|
||||
}
|
||||
unsigned ABIAlignment = getTargetData()->
|
||||
getABITypeAlignment(ST->getMemoryVT().getTypeForEVT());
|
||||
getABITypeAlignment(ST->getMemoryVT().getTypeForEVT(*DAG.getContext()));
|
||||
// Leave aligned store alone.
|
||||
if (ST->getAlignment() >= ABIAlignment) {
|
||||
return SDValue();
|
||||
@ -1058,8 +1058,8 @@ SDValue XCoreTargetLowering::PerformDAGCombine(SDNode *N,
|
||||
if (StoreBits % 8) {
|
||||
break;
|
||||
}
|
||||
unsigned ABIAlignment = getTargetData()->
|
||||
getABITypeAlignment(ST->getMemoryVT().getTypeForEVT());
|
||||
unsigned ABIAlignment = getTargetData()->getABITypeAlignment(
|
||||
ST->getMemoryVT().getTypeForEVT(*DCI.DAG.getContext()));
|
||||
unsigned Alignment = ST->getAlignment();
|
||||
if (Alignment >= ABIAlignment) {
|
||||
break;
|
||||
|
@ -423,10 +423,10 @@ static bool OptimizeNoopCopyExpression(CastInst *CI, const TargetLowering &TLI){
|
||||
// If these values will be promoted, find out what they will be promoted
|
||||
// to. This helps us consider truncates on PPC as noop copies when they
|
||||
// are.
|
||||
if (TLI.getTypeAction(SrcVT) == TargetLowering::Promote)
|
||||
SrcVT = TLI.getTypeToTransformTo(SrcVT);
|
||||
if (TLI.getTypeAction(DstVT) == TargetLowering::Promote)
|
||||
DstVT = TLI.getTypeToTransformTo(DstVT);
|
||||
if (TLI.getTypeAction(CI->getContext(), SrcVT) == TargetLowering::Promote)
|
||||
SrcVT = TLI.getTypeToTransformTo(CI->getContext(), SrcVT);
|
||||
if (TLI.getTypeAction(CI->getContext(), DstVT) == TargetLowering::Promote)
|
||||
DstVT = TLI.getTypeToTransformTo(CI->getContext(), DstVT);
|
||||
|
||||
// If, after promotion, these are the same types, this is a noop copy.
|
||||
if (SrcVT != DstVT)
|
||||
|
@ -19,16 +19,17 @@
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
using namespace llvm;
|
||||
|
||||
EVT EVT::getExtendedIntegerVT(unsigned BitWidth) {
|
||||
EVT EVT::getExtendedIntegerVT(LLVMContext &Context, unsigned BitWidth) {
|
||||
EVT VT;
|
||||
VT.LLVMTy = IntegerType::get(BitWidth);
|
||||
assert(VT.isExtended() && "Type is not extended!");
|
||||
return VT;
|
||||
}
|
||||
|
||||
EVT EVT::getExtendedVectorVT(EVT VT, unsigned NumElements) {
|
||||
EVT EVT::getExtendedVectorVT(LLVMContext &Context, EVT VT,
|
||||
unsigned NumElements) {
|
||||
EVT ResultVT;
|
||||
ResultVT.LLVMTy = VectorType::get(VT.getTypeForEVT(), NumElements);
|
||||
ResultVT.LLVMTy = VectorType::get(VT.getTypeForEVT(Context), NumElements);
|
||||
assert(ResultVT.isExtended() && "Type is not extended!");
|
||||
return ResultVT;
|
||||
}
|
||||
@ -131,7 +132,7 @@ std::string EVT::getEVTString() const {
|
||||
/// getTypeForEVT - This method returns an LLVM type corresponding to the
|
||||
/// specified EVT. For integer types, this returns an unsigned type. Note
|
||||
/// that this will abort for types that cannot be represented.
|
||||
const Type *EVT::getTypeForEVT() const {
|
||||
const Type *EVT::getTypeForEVT(LLVMContext &Context) const {
|
||||
switch (V.SimpleTy) {
|
||||
default:
|
||||
assert(isExtended() && "Type is not extended!");
|
||||
@ -179,11 +180,11 @@ EVT EVT::getEVT(const Type *Ty, bool HandleUnknown){
|
||||
default:
|
||||
if (HandleUnknown) return MVT(MVT::Other);
|
||||
llvm_unreachable("Unknown type!");
|
||||
return MVT(MVT::isVoid);
|
||||
return MVT::isVoid;
|
||||
case Type::VoidTyID:
|
||||
return MVT(MVT::isVoid);
|
||||
return MVT::isVoid;
|
||||
case Type::IntegerTyID:
|
||||
return getIntegerVT(cast<IntegerType>(Ty)->getBitWidth());
|
||||
return getIntegerVT(Ty->getContext(), cast<IntegerType>(Ty)->getBitWidth());
|
||||
case Type::FloatTyID: return MVT(MVT::f32);
|
||||
case Type::DoubleTyID: return MVT(MVT::f64);
|
||||
case Type::X86_FP80TyID: return MVT(MVT::f80);
|
||||
@ -192,7 +193,7 @@ EVT EVT::getEVT(const Type *Ty, bool HandleUnknown){
|
||||
case Type::PointerTyID: return MVT(MVT::iPTR);
|
||||
case Type::VectorTyID: {
|
||||
const VectorType *VTy = cast<VectorType>(Ty);
|
||||
return getVectorVT(getEVT(VTy->getElementType(), false),
|
||||
return getVectorVT(Ty->getContext(), getEVT(VTy->getElementType(), false),
|
||||
VTy->getNumElements());
|
||||
}
|
||||
}
|
||||
|
@ -1635,7 +1635,8 @@ bool Verifier::PerformTypeCheck(Intrinsic::ID ID, Function *F, const Type *Ty,
|
||||
"vector elements!", F);
|
||||
return false;
|
||||
}
|
||||
} else if (EVT((MVT::SimpleValueType)VT).getTypeForEVT() != EltTy) {
|
||||
} else if (EVT((MVT::SimpleValueType)VT).getTypeForEVT(Ty->getContext()) !=
|
||||
EltTy) {
|
||||
CheckFailed(IntrinsicParam(ArgNo, NumRets) + " is wrong!", F);
|
||||
return false;
|
||||
} else if (EltTy != Ty) {
|
||||
|
@ -163,12 +163,12 @@ void CallingConvEmitter::EmitAction(Record *Action,
|
||||
O << Size << ", ";
|
||||
else
|
||||
O << "\n" << IndentStr << " State.getTarget().getTargetData()"
|
||||
"->getTypeAllocSize(LocVT.getTypeForEVT()), ";
|
||||
"->getTypeAllocSize(LocVT.getTypeForEVT(State.getContext())), ";
|
||||
if (Align)
|
||||
O << Align;
|
||||
else
|
||||
O << "\n" << IndentStr << " State.getTarget().getTargetData()"
|
||||
"->getABITypeAlignment(LocVT.getTypeForEVT())";
|
||||
"->getABITypeAlignment(LocVT.getTypeForEVT(State.getContext()))";
|
||||
O << ");\n" << IndentStr
|
||||
<< "State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset"
|
||||
<< Counter << ", LocVT, LocInfo));\n";
|
||||
|
@ -64,25 +64,6 @@ static std::map<unsigned, const Type *>
|
||||
static std::map<std::pair<uintptr_t, uintptr_t>, const Type *>
|
||||
ExtendedVectorTypeMap;
|
||||
|
||||
EVT EVT::getExtendedIntegerVT(unsigned BitWidth) {
|
||||
const Type *&ET = ExtendedIntegerTypeMap[BitWidth];
|
||||
if (!ET) ET = new ExtendedIntegerType(BitWidth);
|
||||
EVT VT;
|
||||
VT.LLVMTy = ET;
|
||||
assert(VT.isExtended() && "Type is not extended!");
|
||||
return VT;
|
||||
}
|
||||
|
||||
EVT EVT::getExtendedVectorVT(EVT VT, unsigned NumElements) {
|
||||
const Type *&ET = ExtendedVectorTypeMap[std::make_pair(VT.getRawBits(),
|
||||
NumElements)];
|
||||
if (!ET) ET = new ExtendedVectorType(VT, NumElements);
|
||||
EVT ResultVT;
|
||||
ResultVT.LLVMTy = ET;
|
||||
assert(ResultVT.isExtended() && "Type is not extended!");
|
||||
return ResultVT;
|
||||
}
|
||||
|
||||
bool EVT::isExtendedFloatingPoint() const {
|
||||
assert(isExtended() && "Type is not extended!");
|
||||
// Extended floating-point types are not supported yet.
|
||||
|
Loading…
x
Reference in New Issue
Block a user