[llvm] [ValueTracking] Teach isGuaranteedNotToBePoison to reason about ZExt (PR #228493)
Sayan Sivakumaran via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 2 08:46:20 PDT 2026
https://github.com/sivakusayan created https://github.com/llvm/llvm-project/pull/228493
None
>From 5278e8423ea8c4b63336e375cf97fafb8e845cce Mon Sep 17 00:00:00 2001
From: Sayan Sivakumaran <sivakusayan at gmail.com>
Date: Fri, 2 Oct 2026 10:41:56 -0500
Subject: [PATCH] Precommit tests
---
llvm/unittests/Analysis/ValueTrackingTest.cpp | 24 +++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/llvm/unittests/Analysis/ValueTrackingTest.cpp b/llvm/unittests/Analysis/ValueTrackingTest.cpp
index 75cb0f52b15d5..8495c3878ec95 100644
--- a/llvm/unittests/Analysis/ValueTrackingTest.cpp
+++ b/llvm/unittests/Analysis/ValueTrackingTest.cpp
@@ -1198,6 +1198,30 @@ TEST_F(ValueTrackingTest, isGuaranteedNotToBePoison_phi) {
}
}
+TEST_F(ValueTrackingTest, isGuaranteedNotToBePoison_ZExt_NNeg) {
+ {
+ auto M = parseModule(R"(
+ declare void @llvm.assume(i1)
+
+ define i64 @test(i32 %X, i32 %Y) {
+ %res = icmp sge i32 %X, 0
+ call void @llvm.assume(i1 %res)
+
+ %ExtendX = zext nneg i32 %X to i64
+ %ExtendY = zext nneg i32 %Y to i64
+ ret i64 %ExtendY
+ })");
+ auto *F = M->getFunction("test");
+ auto *ExtendX = &findInstructionByName(F, "ExtendX");
+ auto *ExtendY = &findInstructionByName(F, "ExtendY");
+ AssumptionCache AC(*F);
+ SimplifyQuery SQ(M->getDataLayout(), /*DT=*/nullptr, &AC, /*CtxI=*/ExtendY);
+
+ EXPECT_TRUE(isGuaranteedNotToBePoison(ExtendX, SQ.AC, SQ.CtxI, SQ.DT));
+ EXPECT_FALSE(isGuaranteedNotToBePoison(ExtendY, SQ.AC, SQ.CtxI, SQ.DT));
+ }
+}
+
TEST_F(ValueTrackingTest, isGuaranteedNotToBeUndefOrPoison) {
parseAssembly("declare void @f(i32 noundef)"
"define void @test(i32 %x) {\n"
More information about the llvm-commits
mailing list