[llvm] e414ba3 - [ValueTracking] Shufflevector produces poison rather than undef
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 21 06:21:31 PST 2023
Author: Nikita Popov
Date: 2023-12-21T15:21:23+01:00
New Revision: e414ba33b44971d47d24d75b7da94898d2cc8bde
URL: https://github.com/llvm/llvm-project/commit/e414ba33b44971d47d24d75b7da94898d2cc8bde
DIFF: https://github.com/llvm/llvm-project/commit/e414ba33b44971d47d24d75b7da94898d2cc8bde.diff
LOG: [ValueTracking] Shufflevector produces poison rather than undef
Shufflevector semantics have changed so that poison mask elements
return poison rather than undef. Reflect this in the
canCreateUndefOrPoison() implementation.
Added:
Modified:
llvm/lib/Analysis/ValueTracking.cpp
llvm/unittests/Analysis/ValueTrackingTest.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index efdb3fc2858249..2ce660b9a858eb 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -6674,9 +6674,6 @@ static bool canCreateUndefOrPoison(const Operator *Op, bool PoisonOnly,
return false;
}
case Instruction::ShuffleVector: {
- // shufflevector may return undef.
- if (PoisonOnly)
- return false;
ArrayRef<int> Mask = isa<ConstantExpr>(Op)
? cast<ConstantExpr>(Op)->getShuffleMask()
: cast<ShuffleVectorInst>(Op)->getShuffleMask();
diff --git a/llvm/unittests/Analysis/ValueTrackingTest.cpp b/llvm/unittests/Analysis/ValueTrackingTest.cpp
index 0d3a594da0c067..27f631884072b5 100644
--- a/llvm/unittests/Analysis/ValueTrackingTest.cpp
+++ b/llvm/unittests/Analysis/ValueTrackingTest.cpp
@@ -1177,12 +1177,12 @@ TEST(ValueTracking, canCreatePoisonOrUndef) {
{{false, false},
"shufflevector <4 x i32> %vx, <4 x i32> %vx2, "
"<4 x i32> <i32 0, i32 1, i32 2, i32 3>"},
- {{false, true},
+ {{true, false},
"shufflevector <4 x i32> %vx, <4 x i32> %vx2, "
- "<4 x i32> <i32 0, i32 1, i32 2, i32 undef>"},
- {{false, true},
+ "<4 x i32> <i32 0, i32 1, i32 2, i32 poison>"},
+ {{true, false},
"shufflevector <vscale x 4 x i32> %svx, "
- "<vscale x 4 x i32> %svx, <vscale x 4 x i32> undef"},
+ "<vscale x 4 x i32> %svx, <vscale x 4 x i32> poison"},
{{true, false}, "call i32 @g(i32 %x)"},
{{false, false}, "call noundef i32 @g(i32 %x)"},
{{true, false}, "fcmp nnan oeq float %fx, %fy"},
More information about the llvm-commits
mailing list