1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-18 18:42:46 +02:00

Arrays and vectors with different numbers of elements are not equivalent.

llvm-svn: 108517
This commit is contained in:
Nick Lewycky 2010-07-16 06:31:12 +00:00
parent 00c613aebe
commit 1b4a83430b
2 changed files with 28 additions and 4 deletions

View File

@ -216,11 +216,17 @@ static bool isEquivalentType(const Type *Ty1, const Type *Ty2) {
return true;
}
case Type::ArrayTyID:
case Type::ArrayTyID: {
const ArrayType *ATy1 = cast<ArrayType>(Ty1);
const ArrayType *ATy2 = cast<ArrayType>(Ty2);
return ATy1->getNumElements() == ATy2->getNumElements() &&
isEquivalentType(ATy1->getElementType(), ATy2->getElementType());
}
case Type::VectorTyID: {
const SequentialType *STy1 = cast<SequentialType>(Ty1);
const SequentialType *STy2 = cast<SequentialType>(Ty2);
return isEquivalentType(STy1->getElementType(), STy2->getElementType());
const VectorType *VTy1 = cast<VectorType>(Ty1);
const VectorType *VTy2 = cast<VectorType>(Ty2);
return VTy1->getNumElements() == VTy2->getNumElements() &&
isEquivalentType(VTy1->getElementType(), VTy2->getElementType());
}
}
}

View File

@ -0,0 +1,18 @@
; RUN: opt -mergefunc < %s -disable-output -stats | not grep merged
; This used to crash with an assert.
define <2 x i8> @v1(<2 x i8> %x) {
ret <2 x i8> %x
}
define <4 x i8> @v2(<4 x i8> %x) {
ret <4 x i8> %x
}
define [2 x i8] @a1([2 x i8] %x) {
ret [2 x i8] %x
}
define [4 x i8] @a2([4 x i8] %x) {
ret [4 x i8] %x
}