Index: lib/Target/AArch64/AArch64ISelLowering.cpp =================================================================== --- lib/Target/AArch64/AArch64ISelLowering.cpp +++ lib/Target/AArch64/AArch64ISelLowering.cpp @@ -7561,8 +7561,9 @@ // Convert the integer vector to pointer vector if the element is pointer. if (EltTy->isPointerTy()) - SubVec = Builder.CreateIntToPtr(SubVec, SVI->getType()); - + SubVec = Builder.CreateIntToPtr( + SubVec, VectorType::get(SVI->getType()->getVectorElementType(), + VecTy->getVectorNumElements())); SubVecs[SVI].push_back(SubVec); } } Index: test/CodeGen/AArch64/pr33600.ll =================================================================== --- /dev/null +++ test/CodeGen/AArch64/pr33600.ll @@ -0,0 +1,11 @@ +; RUN: llc < %s + +target triple = "aarch64-unknown-linux-gnu" + +define <4 x i1> @foo(<12 x i64 *>* %p) { + %l = load <12 x i64 *>, <12 x i64 *>* %p + %s1 = shufflevector <12 x i64 *> %l, <12 x i64 *> undef, <4 x i32> + %s2 = shufflevector <12 x i64 *> %l, <12 x i64 *> undef, <4 x i32> + %ret = icmp ne <4 x i64 *> %s1, %s2 + ret <4 x i1> %ret +}