Change AsmOperandInfo::ConstraintVT to MVT, instead of EVT.
Accordingly, add MVT::getVT. llvm-svn: 170550
This commit is contained in:
parent
85bd73d259
commit
f9934613e8
|
@ -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);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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".
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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),
|
||||||
|
|
Loading…
Reference in New Issue