diff options
author | Markus Lavin <markus.lavin@ericsson.com> | 2021-01-13 13:25:14 +0100 |
---|---|---|
committer | Markus Lavin <markus.lavin@ericsson.com> | 2021-01-13 13:39:53 +0100 |
commit | f8cece18630575dccd62ba6a12f21acf5fd38c26 (patch) | |
tree | 406e6814dfdd0aea55be64229f059855491f2297 | |
parent | 2170e0ee60db638175a8c57230d46fbaafa06d4c (diff) | |
download | llvm-f8cece18630575dccd62ba6a12f21acf5fd38c26.tar.gz |
[ValueTracking] Fix one s/dyn_cast/dyn_cast_or_null/
Handle if Constant::getAggregateElement() returns nullptr in
canCreateUndefOrPoison().
Differential Revision: https://reviews.llvm.org/D94494
-rw-r--r-- | llvm/lib/Analysis/ValueTracking.cpp | 2 | ||||
-rw-r--r-- | llvm/unittests/Analysis/ValueTrackingTest.cpp | 7 |
2 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp index 1c75c5fbd0db..b138caa05610 100644 --- a/llvm/lib/Analysis/ValueTracking.cpp +++ b/llvm/lib/Analysis/ValueTracking.cpp @@ -4737,7 +4737,7 @@ static bool canCreateUndefOrPoison(const Operator *Op, bool PoisonOnly) { ShiftAmounts.push_back(C); bool Safe = llvm::all_of(ShiftAmounts, [](Constant *C) { - auto *CI = dyn_cast<ConstantInt>(C); + auto *CI = dyn_cast_or_null<ConstantInt>(C); return CI && CI->getValue().ult(C->getType()->getIntegerBitWidth()); }); return !Safe; diff --git a/llvm/unittests/Analysis/ValueTrackingTest.cpp b/llvm/unittests/Analysis/ValueTrackingTest.cpp index d70fd6eb0ba2..4b3b33b42625 100644 --- a/llvm/unittests/Analysis/ValueTrackingTest.cpp +++ b/llvm/unittests/Analysis/ValueTrackingTest.cpp @@ -943,6 +943,7 @@ TEST_F(ValueTrackingTest, isGuaranteedNotToBeUndefOrPoison_assume) { TEST(ValueTracking, canCreatePoisonOrUndef) { std::string AsmHead = + "@s = external dso_local global i32, align 1\n" "declare i32 @g(i32)\n" "define void @f(i32 %x, i32 %y, float %fx, float %fy, i1 %cond, " "<4 x i32> %vx, <4 x i32> %vx2, <vscale x 4 x i32> %svx, i8* %p) {\n"; @@ -1001,7 +1002,11 @@ TEST(ValueTracking, canCreatePoisonOrUndef) { {{true, false}, "call i32 @g(i32 %x)"}, {{false, false}, "call noundef i32 @g(i32 %x)"}, {{true, false}, "fcmp nnan oeq float %fx, %fy"}, - {{false, false}, "fcmp oeq float %fx, %fy"}}; + {{false, false}, "fcmp oeq float %fx, %fy"}, + {{true, false}, + "ashr <4 x i32> %vx, select (i1 icmp sgt (i32 ptrtoint (i32* @s to " + "i32), i32 1), <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 " + "2, i32 3>)"}}; std::string AssemblyStr = AsmHead; for (auto &Itm : Data) |