[llvm] 8e4f7b7 - [Analysis] Fix another issue when querying vscale attributes on functions
David Sherwood via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 24 05:56:12 PDT 2021
Author: David Sherwood
Date: 2021-09-24T13:37:23+01:00
New Revision: 8e4f7b749c2c03809f022c95698686c8584097fc
URL: https://github.com/llvm/llvm-project/commit/8e4f7b749c2c03809f022c95698686c8584097fc
DIFF: https://github.com/llvm/llvm-project/commit/8e4f7b749c2c03809f022c95698686c8584097fc.diff
LOG: [Analysis] Fix another issue when querying vscale attributes on functions
There are several places in the code that are currently broken where
we assume an Instruction is always a member of a BasicBlock that
lives in a Function. This is a problem specifically when
attempting to get the vscale_range attribute. This patch adds checks
that an Instruction's parent also has a parent!
I've added a test for a function-less @llvm.vscale intrinsic call here:
unittests/Analysis/ValueTrackingTest.cpp
Added:
Modified:
llvm/lib/Analysis/ValueTracking.cpp
llvm/unittests/Analysis/ValueTrackingTest.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index ab5c38847518..35178f888980 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -1685,7 +1685,7 @@ static void computeKnownBitsFromOperator(const Operator *I,
Known.Zero.setBitsFrom(31);
break;
case Intrinsic::vscale: {
- if (!II->getParent() ||
+ if (!II->getParent() || !II->getFunction() ||
!II->getFunction()->hasFnAttribute(Attribute::VScaleRange))
break;
diff --git a/llvm/unittests/Analysis/ValueTrackingTest.cpp b/llvm/unittests/Analysis/ValueTrackingTest.cpp
index 8d9df979f57f..593100cbcd43 100644
--- a/llvm/unittests/Analysis/ValueTrackingTest.cpp
+++ b/llvm/unittests/Analysis/ValueTrackingTest.cpp
@@ -1606,12 +1606,22 @@ TEST_F(ComputeKnownBitsTest, ComputeKnownBitsUnknownVScale) {
CallInst *CI = Builder.CreateCall(TheFn, {}, {}, "");
KnownBits Known = computeKnownBits(CI, M.getDataLayout(), /* Depth */ 0);
- delete CI;
+ // There is no parent function so we cannot look up the vscale_range
+ // attribute to determine the number of bits.
+ EXPECT_EQ(Known.One.getZExtValue(), 0u);
+ EXPECT_EQ(Known.Zero.getZExtValue(), 0u);
+ BasicBlock *BB = BasicBlock::Create(Context);
+ BB->getInstList().push_back(CI);
+ Known = computeKnownBits(CI, M.getDataLayout(), /* Depth */ 0);
// There is no parent function so we cannot look up the vscale_range
// attribute to determine the number of bits.
EXPECT_EQ(Known.One.getZExtValue(), 0u);
EXPECT_EQ(Known.Zero.getZExtValue(), 0u);
+
+ CI->removeFromParent();
+ delete CI;
+ delete BB;
}
// 512 + [32, 64) doesn't produce overlapping bits.
More information about the llvm-commits
mailing list