aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Analysis/ValueTrackingTest.cpp
diff options
context:
space:
mode:
authorDavid Sherwood <david.sherwood@arm.com>2021-09-24 13:31:38 +0100
committerDavid Sherwood <david.sherwood@arm.com>2021-09-24 13:37:23 +0100
commit8e4f7b749c2c03809f022c95698686c8584097fc (patch)
treec5e48dc71342d3889fab3154dd2b5f646e74752b /llvm/unittests/Analysis/ValueTrackingTest.cpp
parent3593ae4312f6156c9ca50d46cdb55a8dfad782d0 (diff)
downloadllvm-8e4f7b749c2c03809f022c95698686c8584097fc.zip
llvm-8e4f7b749c2c03809f022c95698686c8584097fc.tar.gz
llvm-8e4f7b749c2c03809f022c95698686c8584097fc.tar.bz2
[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
Diffstat (limited to 'llvm/unittests/Analysis/ValueTrackingTest.cpp')
-rw-r--r--llvm/unittests/Analysis/ValueTrackingTest.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/llvm/unittests/Analysis/ValueTrackingTest.cpp b/llvm/unittests/Analysis/ValueTrackingTest.cpp
index 8d9df97..593100c 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.