mirror of
https://github.com/RPCS3/llvm.git
synced 2025-03-07 10:07:17 +00:00
Assert that VectorType::getTruncatedElementVectorType is not used with
odd bit-width vector elements. Add a check in the verifier for this also. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61899 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
71c3f45990
commit
850168c370
@ -385,6 +385,8 @@ public:
|
||||
///
|
||||
static VectorType *getTruncatedElementVectorType(const VectorType *VTy) {
|
||||
unsigned EltBits = VTy->getElementType()->getPrimitiveSizeInBits();
|
||||
assert((EltBits & 1) == 0 &&
|
||||
"Cannot truncate vector element with odd bit-width");
|
||||
const Type *EltTy = IntegerType::get(EltBits / 2);
|
||||
return VectorType::get(EltTy, VTy->getNumElements());
|
||||
}
|
||||
|
@ -1395,16 +1395,22 @@ bool Verifier::PerformTypeCheck(Intrinsic::ID ID, Function *F, const Type *Ty,
|
||||
// type.
|
||||
if ((Match & (ExtendedElementVectorType |
|
||||
TruncatedElementVectorType)) != 0) {
|
||||
if (!VTy) {
|
||||
const IntegerType *IEltTy = dyn_cast<IntegerType>(EltTy);
|
||||
if (!VTy || !IEltTy) {
|
||||
CheckFailed("Intrinsic parameter #" + utostr(ArgNo - 1) + " is not "
|
||||
"a vector type.", F);
|
||||
"an integral vector type.", F);
|
||||
return false;
|
||||
}
|
||||
// Adjust the current Ty (in the opposite direction) rather than
|
||||
// the type being matched against.
|
||||
if ((Match & ExtendedElementVectorType) != 0)
|
||||
if ((Match & ExtendedElementVectorType) != 0) {
|
||||
if ((IEltTy->getBitWidth() & 1) != 0) {
|
||||
CheckFailed("Intrinsic parameter #" + utostr(ArgNo - 1) + " vector "
|
||||
"element bit-width is odd.", F);
|
||||
return false;
|
||||
}
|
||||
Ty = VectorType::getTruncatedElementVectorType(VTy);
|
||||
else
|
||||
} else
|
||||
Ty = VectorType::getExtendedElementVectorType(VTy);
|
||||
Match &= ~(ExtendedElementVectorType | TruncatedElementVectorType);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user