diff options
author | Sanjay Patel <spatel@rotateright.com> | 2021-12-20 16:13:55 -0500 |
---|---|---|
committer | Sanjay Patel <spatel@rotateright.com> | 2021-12-20 17:16:47 -0500 |
commit | a56803b8f8df4f8d866f91d354b82ee9b62e9a60 (patch) | |
tree | 0a7e09084a15b434160cc13ec50ed59e5c5d93f9 /llvm/unittests/Analysis/ValueTrackingTest.cpp | |
parent | 8cb785cad12b2d0fb7de2e13f208dab73f27111a (diff) | |
download | llvm-a56803b8f8df4f8d866f91d354b82ee9b62e9a60.zip llvm-a56803b8f8df4f8d866f91d354b82ee9b62e9a60.tar.gz llvm-a56803b8f8df4f8d866f91d354b82ee9b62e9a60.tar.bz2 |
[Analysis] fix cast in ValueTracking to allow constant expression
The test would crash because a non-instruction negate op made it in here.
Fixes #51506
Diffstat (limited to 'llvm/unittests/Analysis/ValueTrackingTest.cpp')
-rw-r--r-- | llvm/unittests/Analysis/ValueTrackingTest.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/unittests/Analysis/ValueTrackingTest.cpp b/llvm/unittests/Analysis/ValueTrackingTest.cpp index 593100c..0104d32 100644 --- a/llvm/unittests/Analysis/ValueTrackingTest.cpp +++ b/llvm/unittests/Analysis/ValueTrackingTest.cpp @@ -1711,6 +1711,20 @@ TEST_F(ComputeKnownBitsTest, ComputeKnownBitsGEPWithRangeNoOverlap) { EXPECT_EQ(Known.getMaxValue(), 575); } +TEST_F(ComputeKnownBitsTest, ComputeKnownBitsCrash) { + parseAssembly( + "@g.a = external global i16, align 1\n" + "define i16 @test(i16 %i) {\n" + "entry:\n" + " %0 = icmp slt i16 sub (i16 0, i16 trunc (i32 udiv (i32 ptrtoint (i16* @g.a to i32), i32 -1) to i16)), 0\n" + " %A = select i1 %0, i16 trunc (i32 udiv (i32 ptrtoint (i16* @g.a to i32), i32 -1) to i16), i16 sub (i16 0, i16 trunc (i32 udiv (i32 ptrtoint (i16* @g.a to i32), i32 -1) to i16))\n" + " ret i16 %A\n" + "}\n"); + AssumptionCache AC(*F); + KnownBits Known = computeKnownBits( + A, M->getDataLayout(), /* Depth */ 0, &AC, F->front().getTerminator()); +} + class IsBytewiseValueTest : public ValueTrackingTest, public ::testing::WithParamInterface< std::pair<const char *, const char *>> { |