ValueTracking: Handle minimumnum/maximumnum in canCreateUndefOrPoison (#138729)
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp index 256e77b..cdedc65 100644 --- a/llvm/lib/Analysis/ValueTracking.cpp +++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -7723,6 +7723,8 @@ case Intrinsic::maxnum: case Intrinsic::minimum: case Intrinsic::maximum: + case Intrinsic::minimumnum: + case Intrinsic::maximumnum: case Intrinsic::is_fpclass: case Intrinsic::ldexp: case Intrinsic::frexp:
diff --git a/llvm/test/Transforms/InstCombine/freeze-fp-ops.ll b/llvm/test/Transforms/InstCombine/freeze-fp-ops.ll index 8bee84f..d1a36dc 100644 --- a/llvm/test/Transforms/InstCombine/freeze-fp-ops.ll +++ b/llvm/test/Transforms/InstCombine/freeze-fp-ops.ll
@@ -508,9 +508,9 @@ define float @freeze_minimumnum(float %arg0, float noundef %arg1) { ; CHECK-LABEL: @freeze_minimumnum( -; CHECK-NEXT: [[OP:%.*]] = call float @llvm.minimumnum.f32(float [[ARG0:%.*]], float noundef [[ARG1:%.*]]) -; CHECK-NEXT: [[FREEZE:%.*]] = freeze float [[OP]] -; CHECK-NEXT: ret float [[FREEZE]] +; CHECK-NEXT: [[FREEZE:%.*]] = freeze float [[OP:%.*]] +; CHECK-NEXT: [[OP1:%.*]] = call float @llvm.minimumnum.f32(float [[FREEZE]], float noundef [[ARG1:%.*]]) +; CHECK-NEXT: ret float [[OP1]] ; %op = call float @llvm.minimumnum.f32(float %arg0, float noundef %arg1) %freeze = freeze float %op @@ -519,9 +519,9 @@ define float @freeze_maximumnum(float %arg0, float noundef %arg1) { ; CHECK-LABEL: @freeze_maximumnum( -; CHECK-NEXT: [[OP:%.*]] = call float @llvm.maximumnum.f32(float [[ARG0:%.*]], float noundef [[ARG1:%.*]]) -; CHECK-NEXT: [[FREEZE:%.*]] = freeze float [[OP]] -; CHECK-NEXT: ret float [[FREEZE]] +; CHECK-NEXT: [[FREEZE:%.*]] = freeze float [[OP:%.*]] +; CHECK-NEXT: [[OP1:%.*]] = call float @llvm.maximumnum.f32(float [[FREEZE]], float noundef [[ARG1:%.*]]) +; CHECK-NEXT: ret float [[OP1]] ; %op = call float @llvm.maximumnum.f32(float %arg0, float noundef %arg1) %freeze = freeze float %op