forked from OSchip/llvm-project
Start moving TargetLowering away from using full MVTs and towards SimpleValueType, which will simplify the privatization of IntegerType in the future.
llvm-svn: 78584
This commit is contained in:
parent
2375952a47
commit
c30530d105
|
@ -111,8 +111,8 @@ public:
|
|||
|
||||
bool isBigEndian() const { return !IsLittleEndian; }
|
||||
bool isLittleEndian() const { return IsLittleEndian; }
|
||||
MVT getPointerTy() const { return PointerTy; }
|
||||
MVT getShiftAmountTy() const { return ShiftAmountTy; }
|
||||
MVT::SimpleValueType getPointerTy() const { return PointerTy; }
|
||||
MVT::SimpleValueType getShiftAmountTy() const { return ShiftAmountTy; }
|
||||
|
||||
/// usesGlobalOffsetTable - Return true if this target uses a GOT for PIC
|
||||
/// codegen.
|
||||
|
@ -135,7 +135,8 @@ public:
|
|||
/// the condition operand of SELECT and BRCOND nodes. In the case of
|
||||
/// BRCOND the argument passed is MVT::Other since there are no other
|
||||
/// operands to get a type hint from.
|
||||
virtual MVT getSetCCResultType(MVT VT) const;
|
||||
virtual
|
||||
MVT::SimpleValueType getSetCCResultType(MVT VT) const;
|
||||
|
||||
/// getBooleanContents - For targets without i1 registers, this gives the
|
||||
/// nature of the high-bits of boolean values held in types wider than i1.
|
||||
|
@ -152,7 +153,7 @@ public:
|
|||
/// getRegClassFor - Return the register class that should be used for the
|
||||
/// specified value type. This may only be called on legal types.
|
||||
TargetRegisterClass *getRegClassFor(MVT VT) const {
|
||||
assert((unsigned)VT.getSimpleVT() < array_lengthof(RegClassForVT));
|
||||
assert(VT.isSimple() && "getRegClassFor called on illegal type!");
|
||||
TargetRegisterClass *RC = RegClassForVT[VT.getSimpleVT()];
|
||||
assert(RC && "This value type is not natively supported!");
|
||||
return RC;
|
||||
|
@ -868,7 +869,7 @@ protected:
|
|||
|
||||
/// setShiftAmountType - Describe the type that should be used for shift
|
||||
/// amounts. This type defaults to the pointer type.
|
||||
void setShiftAmountType(MVT VT) { ShiftAmountTy = VT; }
|
||||
void setShiftAmountType(MVT::SimpleValueType VT) { ShiftAmountTy = VT; }
|
||||
|
||||
/// setBooleanContents - Specify how the target extends the result of a
|
||||
/// boolean value from i1 to a wider type. See getBooleanContents.
|
||||
|
@ -1530,7 +1531,7 @@ private:
|
|||
|
||||
/// PointerTy - The type to use for pointers, usually i32 or i64.
|
||||
///
|
||||
MVT PointerTy;
|
||||
MVT::SimpleValueType PointerTy;
|
||||
|
||||
/// IsLittleEndian - True if this is a little endian target.
|
||||
///
|
||||
|
@ -1565,7 +1566,7 @@ private:
|
|||
|
||||
/// ShiftAmountTy - The type to use for shift amounts, usually i8 or whatever
|
||||
/// PointerTy is.
|
||||
MVT ShiftAmountTy;
|
||||
MVT::SimpleValueType ShiftAmountTy;
|
||||
|
||||
/// BooleanContents - Information about the contents of the high-bits in
|
||||
/// boolean values held in a type wider than i1. See getBooleanContents.
|
||||
|
|
|
@ -261,7 +261,7 @@ bool FastISel::SelectGetElementPtr(User *I) {
|
|||
return false;
|
||||
|
||||
const Type *Ty = I->getOperand(0)->getType();
|
||||
MVT::SimpleValueType VT = TLI.getPointerTy().getSimpleVT();
|
||||
MVT::SimpleValueType VT = TLI.getPointerTy();
|
||||
for (GetElementPtrInst::op_iterator OI = I->op_begin()+1, E = I->op_end();
|
||||
OI != E; ++OI) {
|
||||
Value *Idx = *OI;
|
||||
|
|
|
@ -963,7 +963,8 @@ SDValue SelectionDAG::getGlobalAddress(const GlobalValue *GV,
|
|||
"Cannot set target flags on target-independent globals");
|
||||
|
||||
// Truncate (with sign-extension) the offset value to the pointer size.
|
||||
unsigned BitWidth = TLI.getPointerTy().getSizeInBits();
|
||||
MVT PTy = TLI.getPointerTy();
|
||||
unsigned BitWidth = PTy.getSizeInBits();
|
||||
if (BitWidth < 64)
|
||||
Offset = (Offset << (64 - BitWidth) >> (64 - BitWidth));
|
||||
|
||||
|
|
|
@ -1911,7 +1911,8 @@ bool SelectionDAGLowering::handleBitTestsSwitchCase(CaseRec& CR,
|
|||
CaseRecVector& WorkList,
|
||||
Value* SV,
|
||||
MachineBasicBlock* Default){
|
||||
unsigned IntPtrBits = TLI.getPointerTy().getSizeInBits();
|
||||
MVT PTy = TLI.getPointerTy();
|
||||
unsigned IntPtrBits = PTy.getSizeInBits();
|
||||
|
||||
Case& FrontCase = *CR.Range.first;
|
||||
Case& BackCase = *(CR.Range.second-1);
|
||||
|
@ -2187,24 +2188,26 @@ void SelectionDAGLowering::visitShift(User &I, unsigned Opcode) {
|
|||
if (!isa<VectorType>(I.getType()) &&
|
||||
Op2.getValueType() != TLI.getShiftAmountTy()) {
|
||||
// If the operand is smaller than the shift count type, promote it.
|
||||
if (TLI.getShiftAmountTy().bitsGT(Op2.getValueType()))
|
||||
MVT PTy = TLI.getPointerTy();
|
||||
MVT STy = TLI.getShiftAmountTy();
|
||||
if (STy.bitsGT(Op2.getValueType()))
|
||||
Op2 = DAG.getNode(ISD::ANY_EXTEND, getCurDebugLoc(),
|
||||
TLI.getShiftAmountTy(), Op2);
|
||||
// If the operand is larger than the shift count type but the shift
|
||||
// count type has enough bits to represent any shift value, truncate
|
||||
// it now. This is a common case and it exposes the truncate to
|
||||
// optimization early.
|
||||
else if (TLI.getShiftAmountTy().getSizeInBits() >=
|
||||
else if (STy.getSizeInBits() >=
|
||||
Log2_32_Ceil(Op2.getValueType().getSizeInBits()))
|
||||
Op2 = DAG.getNode(ISD::TRUNCATE, getCurDebugLoc(),
|
||||
TLI.getShiftAmountTy(), Op2);
|
||||
// Otherwise we'll need to temporarily settle for some other
|
||||
// convenient type; type legalization will make adjustments as
|
||||
// needed.
|
||||
else if (TLI.getPointerTy().bitsLT(Op2.getValueType()))
|
||||
else if (PTy.bitsLT(Op2.getValueType()))
|
||||
Op2 = DAG.getNode(ISD::TRUNCATE, getCurDebugLoc(),
|
||||
TLI.getPointerTy(), Op2);
|
||||
else if (TLI.getPointerTy().bitsGT(Op2.getValueType()))
|
||||
else if (PTy.bitsGT(Op2.getValueType()))
|
||||
Op2 = DAG.getNode(ISD::ANY_EXTEND, getCurDebugLoc(),
|
||||
TLI.getPointerTy(), Op2);
|
||||
}
|
||||
|
@ -2672,7 +2675,8 @@ void SelectionDAGLowering::visitGetElementPtr(User &I) {
|
|||
uint64_t Offs =
|
||||
TD->getTypeAllocSize(Ty)*cast<ConstantInt>(CI)->getSExtValue();
|
||||
SDValue OffsVal;
|
||||
unsigned PtrBits = TLI.getPointerTy().getSizeInBits();
|
||||
MVT PTy = TLI.getPointerTy();
|
||||
unsigned PtrBits = PTy.getSizeInBits();
|
||||
if (PtrBits < 64) {
|
||||
OffsVal = DAG.getNode(ISD::TRUNCATE, getCurDebugLoc(),
|
||||
TLI.getPointerTy(),
|
||||
|
|
|
@ -496,7 +496,7 @@ TargetLowering::TargetLowering(TargetMachine &tm,TargetLoweringObjectFile *tlof)
|
|||
|
||||
IsLittleEndian = TD->isLittleEndian();
|
||||
UsesGlobalOffsetTable = false;
|
||||
ShiftAmountTy = PointerTy = getValueType(TD->getIntPtrType());
|
||||
ShiftAmountTy = PointerTy = getValueType(TD->getIntPtrType()).getSimpleVT();
|
||||
memset(RegClassForVT, 0,MVT::LAST_VALUETYPE*sizeof(TargetRegisterClass*));
|
||||
memset(TargetDAGCombineArray, 0, array_lengthof(TargetDAGCombineArray));
|
||||
maxStoresPerMemset = maxStoresPerMemcpy = maxStoresPerMemmove = 8;
|
||||
|
@ -657,8 +657,8 @@ const char *TargetLowering::getTargetNodeName(unsigned Opcode) const {
|
|||
}
|
||||
|
||||
|
||||
MVT TargetLowering::getSetCCResultType(MVT VT) const {
|
||||
return getValueType(TD->getIntPtrType());
|
||||
MVT::SimpleValueType TargetLowering::getSetCCResultType(MVT VT) const {
|
||||
return getValueType(TD->getIntPtrType()).getSimpleVT();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -168,7 +168,7 @@ AlphaTargetLowering::AlphaTargetLowering(TargetMachine &TM)
|
|||
computeRegisterProperties();
|
||||
}
|
||||
|
||||
MVT AlphaTargetLowering::getSetCCResultType(MVT VT) const {
|
||||
MVT::SimpleValueType AlphaTargetLowering::getSetCCResultType(MVT VT) const {
|
||||
return MVT::i64;
|
||||
}
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ namespace llvm {
|
|||
explicit AlphaTargetLowering(TargetMachine &TM);
|
||||
|
||||
/// getSetCCResultType - Get the SETCC result ValueType
|
||||
virtual MVT getSetCCResultType(MVT VT) const;
|
||||
virtual MVT::SimpleValueType getSetCCResultType(MVT VT) const;
|
||||
|
||||
/// LowerOperation - Provide custom lowering hooks for some operations.
|
||||
///
|
||||
|
|
|
@ -137,7 +137,7 @@ const char *BlackfinTargetLowering::getTargetNodeName(unsigned Opcode) const {
|
|||
}
|
||||
}
|
||||
|
||||
MVT BlackfinTargetLowering::getSetCCResultType(MVT VT) const {
|
||||
MVT::SimpleValueType BlackfinTargetLowering::getSetCCResultType(MVT VT) const {
|
||||
// SETCC always sets the CC register. Technically that is an i1 register, but
|
||||
// that type is not legal, so we treat it as an i32 register.
|
||||
return MVT::i32;
|
||||
|
|
|
@ -33,7 +33,7 @@ namespace llvm {
|
|||
int VarArgsFrameOffset; // Frame offset to start of varargs area.
|
||||
public:
|
||||
BlackfinTargetLowering(TargetMachine &TM);
|
||||
virtual MVT getSetCCResultType(MVT VT) const;
|
||||
virtual MVT::SimpleValueType getSetCCResultType(MVT VT) const;
|
||||
virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG);
|
||||
virtual void ReplaceNodeResults(SDNode *N,
|
||||
SmallVectorImpl<SDValue> &Results,
|
||||
|
|
|
@ -539,9 +539,11 @@ unsigned SPUTargetLowering::getFunctionAlignment(const Function *) const {
|
|||
// Return the Cell SPU's SETCC result type
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
MVT SPUTargetLowering::getSetCCResultType(MVT VT) const {
|
||||
MVT::SimpleValueType SPUTargetLowering::getSetCCResultType(MVT VT) const {
|
||||
// i16 and i32 are valid SETCC result types
|
||||
return ((VT == MVT::i8 || VT == MVT::i16 || VT == MVT::i32) ? VT : MVT::i32);
|
||||
return ((VT == MVT::i8 || VT == MVT::i16 || VT == MVT::i32) ?
|
||||
VT.getSimpleVT() :
|
||||
MVT::i32);
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -109,7 +109,7 @@ namespace llvm {
|
|||
virtual const char *getTargetNodeName(unsigned Opcode) const;
|
||||
|
||||
/// getSetCCResultType - Return the ValueType for ISD::SETCC
|
||||
virtual MVT getSetCCResultType(MVT VT) const;
|
||||
virtual MVT::SimpleValueType getSetCCResultType(MVT VT) const;
|
||||
|
||||
//! Custom lowering hooks
|
||||
virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG);
|
||||
|
|
|
@ -165,7 +165,7 @@ MipsTargetLowering(MipsTargetMachine &TM)
|
|||
computeRegisterProperties();
|
||||
}
|
||||
|
||||
MVT MipsTargetLowering::getSetCCResultType(MVT VT) const {
|
||||
MVT::SimpleValueType MipsTargetLowering::getSetCCResultType(MVT VT) const {
|
||||
return MVT::i32;
|
||||
}
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@ namespace llvm {
|
|||
virtual const char *getTargetNodeName(unsigned Opcode) const;
|
||||
|
||||
/// getSetCCResultType - get the ISD::SETCC result ValueType
|
||||
MVT getSetCCResultType(MVT VT) const;
|
||||
MVT::SimpleValueType getSetCCResultType(MVT VT) const;
|
||||
|
||||
/// getFunctionAlignment - Return the Log2 alignment of this function.
|
||||
virtual unsigned getFunctionAlignment(const Function *F) const;
|
||||
|
|
|
@ -365,7 +365,8 @@ static void PopulateResults(SDValue N, SmallVectorImpl<SDValue>&Results) {
|
|||
Results.push_back(N);
|
||||
}
|
||||
|
||||
MVT PIC16TargetLowering::getSetCCResultType(MVT ValType) const {
|
||||
MVT::SimpleValueType
|
||||
PIC16TargetLowering::getSetCCResultType(MVT ValType) const {
|
||||
return MVT::i8;
|
||||
}
|
||||
|
||||
|
|
|
@ -82,7 +82,7 @@ namespace llvm {
|
|||
/// DAG node.
|
||||
virtual const char *getTargetNodeName(unsigned Opcode) const;
|
||||
/// getSetCCResultType - Return the ISD::SETCC ValueType
|
||||
virtual MVT getSetCCResultType(MVT ValType) const;
|
||||
virtual MVT::SimpleValueType getSetCCResultType(MVT ValType) const;
|
||||
SDValue LowerShift(SDValue Op, SelectionDAG &DAG);
|
||||
SDValue LowerMUL(SDValue Op, SelectionDAG &DAG);
|
||||
SDValue LowerADD(SDValue Op, SelectionDAG &DAG);
|
||||
|
|
|
@ -449,7 +449,7 @@ const char *PPCTargetLowering::getTargetNodeName(unsigned Opcode) const {
|
|||
}
|
||||
}
|
||||
|
||||
MVT PPCTargetLowering::getSetCCResultType(MVT VT) const {
|
||||
MVT::SimpleValueType PPCTargetLowering::getSetCCResultType(MVT VT) const {
|
||||
return MVT::i32;
|
||||
}
|
||||
|
||||
|
|
|
@ -230,7 +230,7 @@ namespace llvm {
|
|||
virtual const char *getTargetNodeName(unsigned Opcode) const;
|
||||
|
||||
/// getSetCCResultType - Return the ISD::SETCC ValueType
|
||||
virtual MVT getSetCCResultType(MVT VT) const;
|
||||
virtual MVT::SimpleValueType getSetCCResultType(MVT VT) const;
|
||||
|
||||
/// getPreIndexedAddressParts - returns true by value, base pointer and
|
||||
/// offset pointer and addressing mode by reference if the node's address
|
||||
|
|
|
@ -959,7 +959,7 @@ X86TargetLowering::X86TargetLowering(X86TargetMachine &TM)
|
|||
}
|
||||
|
||||
|
||||
MVT X86TargetLowering::getSetCCResultType(MVT VT) const {
|
||||
MVT::SimpleValueType X86TargetLowering::getSetCCResultType(MVT VT) const {
|
||||
return MVT::i8;
|
||||
}
|
||||
|
||||
|
|
|
@ -411,7 +411,7 @@ namespace llvm {
|
|||
virtual const char *getTargetNodeName(unsigned Opcode) const;
|
||||
|
||||
/// getSetCCResultType - Return the ISD::SETCC ValueType
|
||||
virtual MVT getSetCCResultType(MVT VT) const;
|
||||
virtual MVT::SimpleValueType getSetCCResultType(MVT VT) const;
|
||||
|
||||
/// computeMaskedBitsForTargetNode - Determine which of the bits specified
|
||||
/// in Mask are known to be either zero or one and return them in the
|
||||
|
|
Loading…
Reference in New Issue