Skip to content

Commit 2615e69

Browse files
committed
[IR] AutoUpgrade.cpp - don't directly dereference pointers from dyn_cast
Static analysis was reporting that dyn_cast<> can return null on failure - use cast<> instead
1 parent f9fc6f6 commit 2615e69

File tree

1 file changed

+8
-12
lines changed

1 file changed

+8
-12
lines changed

llvm/lib/IR/AutoUpgrade.cpp

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -863,9 +863,9 @@ static bool upgradeArmOrAarch64IntrinsicFunction(bool IsArm, Function *F,
863863
static const Regex LdRegex("^[234](.nxv[a-z0-9]+|$)");
864864
if (LdRegex.match(Name)) {
865865
Type *ScalarTy =
866-
dyn_cast<VectorType>(F->getReturnType())->getElementType();
867-
ElementCount EC = dyn_cast<VectorType>(F->arg_begin()->getType())
868-
->getElementCount();
866+
cast<VectorType>(F->getReturnType())->getElementType();
867+
ElementCount EC =
868+
cast<VectorType>(F->arg_begin()->getType())->getElementCount();
869869
Type *Ty = VectorType::get(ScalarTy, EC);
870870
static const Intrinsic::ID LoadIDs[] = {
871871
Intrinsic::aarch64_sve_ld2_sret,
@@ -4385,8 +4385,7 @@ void llvm::UpgradeIntrinsicCall(CallBase *CI, Function *NewFn) {
43854385
.StartsWith("aarch64.sve.ld3", 3)
43864386
.StartsWith("aarch64.sve.ld4", 4)
43874387
.Default(0);
4388-
ScalableVectorType *RetTy =
4389-
dyn_cast<ScalableVectorType>(F->getReturnType());
4388+
auto *RetTy = cast<ScalableVectorType>(F->getReturnType());
43904389
unsigned MinElts = RetTy->getMinNumElements() / N;
43914390
SmallVector<Value *, 2> Args(CI->args());
43924391
Value *NewLdCall = Builder.CreateCall(NewFn, Args);
@@ -4414,8 +4413,7 @@ void llvm::UpgradeIntrinsicCall(CallBase *CI, Function *NewFn) {
44144413
DefaultCase();
44154414
return;
44164415
}
4417-
ScalableVectorType *RetTy =
4418-
dyn_cast<ScalableVectorType>(F->getReturnType());
4416+
auto *RetTy = cast<ScalableVectorType>(F->getReturnType());
44194417
unsigned MinElts = RetTy->getMinNumElements();
44204418
unsigned I = cast<ConstantInt>(CI->getArgOperand(1))->getZExtValue();
44214419
Value *NewIdx = ConstantInt::get(Type::getInt64Ty(C), I * MinElts);
@@ -4431,9 +4429,8 @@ void llvm::UpgradeIntrinsicCall(CallBase *CI, Function *NewFn) {
44314429
return;
44324430
}
44334431
if (Name.starts_with("aarch64.sve.tuple.set")) {
4434-
unsigned I = dyn_cast<ConstantInt>(CI->getArgOperand(1))->getZExtValue();
4435-
ScalableVectorType *Ty =
4436-
dyn_cast<ScalableVectorType>(CI->getArgOperand(2)->getType());
4432+
unsigned I = cast<ConstantInt>(CI->getArgOperand(1))->getZExtValue();
4433+
auto *Ty = cast<ScalableVectorType>(CI->getArgOperand(2)->getType());
44374434
Value *NewIdx =
44384435
ConstantInt::get(Type::getInt64Ty(C), I * Ty->getMinNumElements());
44394436
NewCall = Builder.CreateCall(
@@ -4447,8 +4444,7 @@ void llvm::UpgradeIntrinsicCall(CallBase *CI, Function *NewFn) {
44474444
.StartsWith("aarch64.sve.tuple.create4", 4)
44484445
.Default(0);
44494446
assert(N > 1 && "Create is expected to be between 2-4");
4450-
ScalableVectorType *RetTy =
4451-
dyn_cast<ScalableVectorType>(F->getReturnType());
4447+
auto *RetTy = cast<ScalableVectorType>(F->getReturnType());
44524448
Value *Ret = llvm::PoisonValue::get(RetTy);
44534449
unsigned MinElts = RetTy->getMinNumElements() / N;
44544450
for (unsigned I = 0; I < N; I++) {

0 commit comments

Comments
 (0)