Change AsmOperandInfo::ConstraintVT to MVT, instead of EVT.

Accordingly, add MVT::getVT.

llvm-svn: 170550
This commit is contained in:
Patrik Hagglund 2012-12-19 15:19:11 +00:00
parent 85bd73d259
commit f9934613e8
5 changed files with 38 additions and 14 deletions

View File

@ -499,6 +499,12 @@ namespace llvm {
} }
return (MVT::SimpleValueType)(MVT::INVALID_SIMPLE_VALUE_TYPE); return (MVT::SimpleValueType)(MVT::INVALID_SIMPLE_VALUE_TYPE);
} }
/// Return the value type corresponding to the specified type. This returns
/// all pointers as iPTR. If HandleUnknown is true, unknown types are
/// returned as Other, otherwise they are invalid.
static MVT getVT(Type *Ty, bool HandleUnknown = false);
}; };

View File

@ -1555,7 +1555,7 @@ public:
Value *CallOperandVal; Value *CallOperandVal;
/// ConstraintVT - The ValueType for the operand value. /// ConstraintVT - The ValueType for the operand value.
EVT ConstraintVT; MVT ConstraintVT;
/// isMatchingInputConstraint - Return true of this is an input operand that /// isMatchingInputConstraint - Return true of this is an input operand that
/// is a matching constraint like "4". /// is a matching constraint like "4".

View File

@ -5842,7 +5842,7 @@ void SelectionDAGBuilder::visitInlineAsm(ImmutableCallSite CS) {
ConstraintOperands.push_back(SDISelAsmOperandInfo(TargetConstraints[i])); ConstraintOperands.push_back(SDISelAsmOperandInfo(TargetConstraints[i]));
SDISelAsmOperandInfo &OpInfo = ConstraintOperands.back(); SDISelAsmOperandInfo &OpInfo = ConstraintOperands.back();
EVT OpVT = MVT::Other; MVT OpVT = MVT::Other;
// Compute the value type for each operand. // Compute the value type for each operand.
switch (OpInfo.Type) { switch (OpInfo.Type) {
@ -5857,10 +5857,10 @@ void SelectionDAGBuilder::visitInlineAsm(ImmutableCallSite CS) {
// corresponding argument. // corresponding argument.
assert(!CS.getType()->isVoidTy() && "Bad inline asm!"); assert(!CS.getType()->isVoidTy() && "Bad inline asm!");
if (StructType *STy = dyn_cast<StructType>(CS.getType())) { if (StructType *STy = dyn_cast<StructType>(CS.getType())) {
OpVT = TLI.getValueType(STy->getElementType(ResNo)); OpVT = TLI.getSimpleValueType(STy->getElementType(ResNo));
} else { } else {
assert(ResNo == 0 && "Asm only has one result!"); assert(ResNo == 0 && "Asm only has one result!");
OpVT = TLI.getValueType(CS.getType()); OpVT = TLI.getSimpleValueType(CS.getType());
} }
++ResNo; ++ResNo;
break; break;
@ -5881,7 +5881,8 @@ void SelectionDAGBuilder::visitInlineAsm(ImmutableCallSite CS) {
OpInfo.CallOperand = getValue(OpInfo.CallOperandVal); OpInfo.CallOperand = getValue(OpInfo.CallOperandVal);
} }
OpVT = OpInfo.getCallOperandValEVT(*DAG.getContext(), TLI, TD); OpVT = OpInfo.getCallOperandValEVT(*DAG.getContext(), TLI, TD).
getSimpleVT();
} }
OpInfo.ConstraintVT = OpVT; OpInfo.ConstraintVT = OpVT;

View File

@ -2935,10 +2935,10 @@ TargetLowering::AsmOperandInfoVector TargetLowering::ParseConstraints(
assert(!CS.getType()->isVoidTy() && assert(!CS.getType()->isVoidTy() &&
"Bad inline asm!"); "Bad inline asm!");
if (StructType *STy = dyn_cast<StructType>(CS.getType())) { if (StructType *STy = dyn_cast<StructType>(CS.getType())) {
OpInfo.ConstraintVT = getValueType(STy->getElementType(ResNo)); OpInfo.ConstraintVT = getSimpleValueType(STy->getElementType(ResNo));
} else { } else {
assert(ResNo == 0 && "Asm only has one result!"); assert(ResNo == 0 && "Asm only has one result!");
OpInfo.ConstraintVT = getValueType(CS.getType()); OpInfo.ConstraintVT = getSimpleValueType(CS.getType());
} }
++ResNo; ++ResNo;
break; break;
@ -2977,14 +2977,14 @@ TargetLowering::AsmOperandInfoVector TargetLowering::ParseConstraints(
case 64: case 64:
case 128: case 128:
OpInfo.ConstraintVT = OpInfo.ConstraintVT =
EVT::getEVT(IntegerType::get(OpTy->getContext(), BitSize), true); MVT::getVT(IntegerType::get(OpTy->getContext(), BitSize), true);
break; break;
} }
} else if (PointerType *PT = dyn_cast<PointerType>(OpTy)) { } else if (PointerType *PT = dyn_cast<PointerType>(OpTy)) {
OpInfo.ConstraintVT = MVT::getIntegerVT( OpInfo.ConstraintVT = MVT::getIntegerVT(
8*TD->getPointerSize(PT->getAddressSpace())); 8*TD->getPointerSize(PT->getAddressSpace()));
} else { } else {
OpInfo.ConstraintVT = EVT::getEVT(OpTy, true); OpInfo.ConstraintVT = MVT::getVT(OpTy, true);
} }
} }
} }

View File

@ -219,10 +219,10 @@ Type *EVT::getTypeForEVT(LLVMContext &Context) const {
} }
} }
/// getEVT - Return the value type corresponding to the specified type. This /// Return the value type corresponding to the specified type. This returns all
/// returns all pointers as MVT::iPTR. If HandleUnknown is true, unknown types /// pointers as MVT::iPTR. If HandleUnknown is true, unknown types are returned
/// are returned as Other, otherwise they are invalid. /// as Other, otherwise they are invalid.
EVT EVT::getEVT(Type *Ty, bool HandleUnknown){ MVT MVT::getVT(Type *Ty, bool HandleUnknown){
switch (Ty->getTypeID()) { switch (Ty->getTypeID()) {
default: default:
if (HandleUnknown) return MVT(MVT::Other); if (HandleUnknown) return MVT(MVT::Other);
@ -230,7 +230,7 @@ EVT EVT::getEVT(Type *Ty, bool HandleUnknown){
case Type::VoidTyID: case Type::VoidTyID:
return MVT::isVoid; return MVT::isVoid;
case Type::IntegerTyID: case Type::IntegerTyID:
return getIntegerVT(Ty->getContext(), cast<IntegerType>(Ty)->getBitWidth()); return getIntegerVT(cast<IntegerType>(Ty)->getBitWidth());
case Type::HalfTyID: return MVT(MVT::f16); case Type::HalfTyID: return MVT(MVT::f16);
case Type::FloatTyID: return MVT(MVT::f32); case Type::FloatTyID: return MVT(MVT::f32);
case Type::DoubleTyID: return MVT(MVT::f64); case Type::DoubleTyID: return MVT(MVT::f64);
@ -239,6 +239,23 @@ EVT EVT::getEVT(Type *Ty, bool HandleUnknown){
case Type::FP128TyID: return MVT(MVT::f128); case Type::FP128TyID: return MVT(MVT::f128);
case Type::PPC_FP128TyID: return MVT(MVT::ppcf128); case Type::PPC_FP128TyID: return MVT(MVT::ppcf128);
case Type::PointerTyID: return MVT(MVT::iPTR); case Type::PointerTyID: return MVT(MVT::iPTR);
case Type::VectorTyID: {
VectorType *VTy = cast<VectorType>(Ty);
return getVectorVT(
getVT(VTy->getElementType(), false), VTy->getNumElements());
}
}
}
/// getEVT - Return the value type corresponding to the specified type. This
/// returns all pointers as MVT::iPTR. If HandleUnknown is true, unknown types
/// are returned as Other, otherwise they are invalid.
EVT EVT::getEVT(Type *Ty, bool HandleUnknown){
switch (Ty->getTypeID()) {
default:
return MVT::getVT(Ty, HandleUnknown);
case Type::IntegerTyID:
return getIntegerVT(Ty->getContext(), cast<IntegerType>(Ty)->getBitWidth());
case Type::VectorTyID: { case Type::VectorTyID: {
VectorType *VTy = cast<VectorType>(Ty); VectorType *VTy = cast<VectorType>(Ty);
return getVectorVT(Ty->getContext(), getEVT(VTy->getElementType(), false), return getVectorVT(Ty->getContext(), getEVT(VTy->getElementType(), false),