diff options
Diffstat (limited to 'llvm/unittests/Analysis/ValueTrackingTest.cpp')
-rw-r--r-- | llvm/unittests/Analysis/ValueTrackingTest.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/unittests/Analysis/ValueTrackingTest.cpp b/llvm/unittests/Analysis/ValueTrackingTest.cpp index a1dedd8..8d9df97 100644 --- a/llvm/unittests/Analysis/ValueTrackingTest.cpp +++ b/llvm/unittests/Analysis/ValueTrackingTest.cpp @@ -12,6 +12,7 @@ #include "llvm/IR/ConstantRange.h" #include "llvm/IR/Dominators.h" #include "llvm/IR/Function.h" +#include "llvm/IR/IRBuilder.h" #include "llvm/IR/InstIterator.h" #include "llvm/IR/Instructions.h" #include "llvm/IR/LLVMContext.h" @@ -1597,6 +1598,22 @@ TEST_F(ComputeKnownBitsTest, ComputeKnownBitsAddWithRange) { EXPECT_EQ(Known.getMaxValue(), 131071); } +TEST_F(ComputeKnownBitsTest, ComputeKnownBitsUnknownVScale) { + Module M("", Context); + IRBuilder<> Builder(Context); + Function *TheFn = + Intrinsic::getDeclaration(&M, Intrinsic::vscale, {Builder.getInt32Ty()}); + 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); +} + // 512 + [32, 64) doesn't produce overlapping bits. // Make sure we get all the individual bits properly. TEST_F(ComputeKnownBitsTest, ComputeKnownBitsAddWithRangeNoOverlap) { |