From 2c4ea761fed3d65e0dfe812fbdd6e891d6a94db3 Mon Sep 17 00:00:00 2001 From: Pedro Lobo Date: Wed, 4 Dec 2024 17:12:37 +0000 Subject: [PATCH] [InstSimplify] Refine `abs(min/undef, true)` to `poison` instead of `undef` --- llvm/lib/Analysis/ConstantFolding.cpp | 4 ++-- llvm/test/Transforms/InstSimplify/ConstProp/abs.ll | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp index 47b96e00c7765..efbccee76f2c5 100644 --- a/llvm/lib/Analysis/ConstantFolding.cpp +++ b/llvm/lib/Analysis/ConstantFolding.cpp @@ -3018,9 +3018,9 @@ static Constant *ConstantFoldIntrinsicCall2(Intrinsic::ID IntrinsicID, Type *Ty, assert(C1 && "Must be constant int"); assert((C1->isOne() || C1->isZero()) && "Must be 0 or 1"); - // Undef or minimum val operand with poison min --> undef + // Undef or minimum val operand with poison min --> poison if (C1->isOne() && (!C0 || C0->isMinSignedValue())) - return UndefValue::get(Ty); + return PoisonValue::get(Ty); // Undef operand with no poison min --> 0 (sign bit must be clear) if (!C0) diff --git a/llvm/test/Transforms/InstSimplify/ConstProp/abs.ll b/llvm/test/Transforms/InstSimplify/ConstProp/abs.ll index e313bd453a152..37233b0f29342 100644 --- a/llvm/test/Transforms/InstSimplify/ConstProp/abs.ll +++ b/llvm/test/Transforms/InstSimplify/ConstProp/abs.ll @@ -6,7 +6,7 @@ declare <8 x i8> @llvm.abs.v8i8(<8 x i8>, i1) define i8 @undef_val_min_poison() { ; CHECK-LABEL: @undef_val_min_poison( -; CHECK-NEXT: ret i8 undef +; CHECK-NEXT: ret i8 poison ; %r = call i8 @llvm.abs.i8(i8 undef, i1 true) ret i8 %r @@ -22,7 +22,7 @@ define i8 @undef_val_min_not_poison() { define i8 @min_val_min_poison() { ; CHECK-LABEL: @min_val_min_poison( -; CHECK-NEXT: ret i8 undef +; CHECK-NEXT: ret i8 poison ; %r = call i8 @llvm.abs.i8(i8 -128, i1 true) ret i8 %r