[llvm] 9426df9 - [LLVM][IR] Fix assert in ConstantExpr::getPtrToInt so all vector types are supported.
Paul Walker via llvm-commits
llvm-commits at lists.llvm.org
Tue May 24 16:08:26 PDT 2022
Author: Paul Walker
Date: 2022-05-25T00:07:06+01:00
New Revision: 9426df95b1b21ebbad6587ea95c80847fa550c47
URL: https://github.com/llvm/llvm-project/commit/9426df95b1b21ebbad6587ea95c80847fa550c47
DIFF: https://github.com/llvm/llvm-project/commit/9426df95b1b21ebbad6587ea95c80847fa550c47.diff
LOG: [LLVM][IR] Fix assert in ConstantExpr::getPtrToInt so all vector types are supported.
Fixes: #55410
Added:
Modified:
llvm/lib/IR/Constants.cpp
llvm/unittests/IR/ConstantsTest.cpp
Removed:
################################################################################
diff --git a/llvm/lib/IR/Constants.cpp b/llvm/lib/IR/Constants.cpp
index b62d6ec3b1ab6..26da7fae391b6 100644
--- a/llvm/lib/IR/Constants.cpp
+++ b/llvm/lib/IR/Constants.cpp
@@ -2235,8 +2235,8 @@ Constant *ConstantExpr::getPtrToInt(Constant *C, Type *DstTy,
"PtrToInt destination must be integer or integer vector");
assert(isa<VectorType>(C->getType()) == isa<VectorType>(DstTy));
if (isa<VectorType>(C->getType()))
- assert(cast<FixedVectorType>(C->getType())->getNumElements() ==
- cast<FixedVectorType>(DstTy)->getNumElements() &&
+ assert(cast<VectorType>(C->getType())->getElementCount() ==
+ cast<VectorType>(DstTy)->getElementCount() &&
"Invalid cast between a
diff erent number of vector elements");
return getFoldedCast(Instruction::PtrToInt, C, DstTy, OnlyIfReduced);
}
diff --git a/llvm/unittests/IR/ConstantsTest.cpp b/llvm/unittests/IR/ConstantsTest.cpp
index ad43fbcb0531f..b764af6cafae1 100644
--- a/llvm/unittests/IR/ConstantsTest.cpp
+++ b/llvm/unittests/IR/ConstantsTest.cpp
@@ -134,6 +134,9 @@ TEST(ConstantsTest, PointerCast) {
VectorType *Int8PtrVecTy = FixedVectorType::get(Int8PtrTy, 4);
VectorType *Int32PtrVecTy = FixedVectorType::get(Int32PtrTy, 4);
VectorType *Int64VecTy = FixedVectorType::get(Int64Ty, 4);
+ VectorType *Int8PtrScalableVecTy = ScalableVectorType::get(Int8PtrTy, 4);
+ VectorType *Int32PtrScalableVecTy = ScalableVectorType::get(Int32PtrTy, 4);
+ VectorType *Int64ScalableVecTy = ScalableVectorType::get(Int64Ty, 4);
// ptrtoint i8* to i64
EXPECT_EQ(
@@ -150,11 +153,23 @@ TEST(ConstantsTest, PointerCast) {
ConstantExpr::getPointerCast(Constant::getNullValue(Int8PtrVecTy),
Int64VecTy));
+ // ptrtoint <vscale x 4 x i8*> to <vscale x 4 x i64>
+ EXPECT_EQ(
+ Constant::getNullValue(Int64ScalableVecTy),
+ ConstantExpr::getPointerCast(Constant::getNullValue(Int8PtrScalableVecTy),
+ Int64ScalableVecTy));
+
// bitcast <4 x i8*> to <4 x i32*>
EXPECT_EQ(Constant::getNullValue(Int32PtrVecTy),
ConstantExpr::getPointerCast(Constant::getNullValue(Int8PtrVecTy),
Int32PtrVecTy));
+ // bitcast <vscale x 4 x i8*> to <vscale x 4 x i32*>
+ EXPECT_EQ(
+ Constant::getNullValue(Int32PtrScalableVecTy),
+ ConstantExpr::getPointerCast(Constant::getNullValue(Int8PtrScalableVecTy),
+ Int32PtrScalableVecTy));
+
Type *Int32Ptr1Ty = Type::getInt32PtrTy(C, 1);
ConstantInt *K = ConstantInt::get(Type::getInt64Ty(C), 1234);
More information about the llvm-commits
mailing list