[llvm] [LLVM][ConstantFold] Ensure scalar type is queried when determining denormal mode. (PR #189600)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 31 04:05:51 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-analysis
Author: Paul Walker (paulwalker-arm)
<details>
<summary>Changes</summary>
Fixes https://github.com/llvm/llvm-project/issues/187928
---
Full diff: https://github.com/llvm/llvm-project/pull/189600.diff
2 Files Affected:
- (modified) llvm/lib/Analysis/ConstantFolding.cpp (+2-1)
- (modified) llvm/test/Transforms/InstSimplify/constant-fold-fp-denormal.ll (+18)
``````````diff
diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp
index e9eea82d60116..3c64ad6f6b369 100644
--- a/llvm/lib/Analysis/ConstantFolding.cpp
+++ b/llvm/lib/Analysis/ConstantFolding.cpp
@@ -1357,7 +1357,8 @@ static ConstantFP *flushDenormalConstant(Type *Ty, const APFloat &APF,
static DenormalMode getInstrDenormalMode(const Instruction *CtxI, Type *Ty) {
if (!CtxI || !CtxI->getParent() || !CtxI->getFunction())
return DenormalMode::getDynamic();
- return CtxI->getFunction()->getDenormalMode(Ty->getFltSemantics());
+ return CtxI->getFunction()->getDenormalMode(
+ Ty->getScalarType()->getFltSemantics());
}
static ConstantFP *flushDenormalConstantFP(ConstantFP *CFP,
diff --git a/llvm/test/Transforms/InstSimplify/constant-fold-fp-denormal.ll b/llvm/test/Transforms/InstSimplify/constant-fold-fp-denormal.ll
index 16d5f0d2871b1..39465bc1e5fe5 100644
--- a/llvm/test/Transforms/InstSimplify/constant-fold-fp-denormal.ll
+++ b/llvm/test/Transforms/InstSimplify/constant-fold-fp-denormal.ll
@@ -1,5 +1,6 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -S -passes=instsimplify < %s | FileCheck %s
+; RUN: opt -S -passes=instsimplify -use-constant-fp-for-fixed-length-splat < %s | FileCheck %s
; Test cases for denormal handling mode when constant folding floating point
; operations. Input and output modes are checked separately.
@@ -1149,6 +1150,14 @@ define i1 @fcmp_double_dynamic_ieee() #9 {
ret i1 %cmp
}
+define <2 x i1> @fcmp_double_dynamic_ieee_vector() #9 {
+; CHECK-LABEL: @fcmp_double_dynamic_ieee_vector(
+; CHECK-NEXT: ret <2 x i1> splat (i1 true)
+;
+ %cmp = fcmp une <2 x double> splat(double 0x0008000000000000), zeroinitializer
+ ret <2 x i1> %cmp
+}
+
define i1 @fcmp_double_ieee_dynamic() #10 {
; CHECK-LABEL: @fcmp_double_ieee_dynamic(
; CHECK-NEXT: [[CMP:%.*]] = fcmp une double 0x8000000000000, 0.000000e+00
@@ -1158,6 +1167,15 @@ define i1 @fcmp_double_ieee_dynamic() #10 {
ret i1 %cmp
}
+define <2 x i1> @fcmp_double_ieee_dynamic_vector() #10 {
+; CHECK-LABEL: @fcmp_double_ieee_dynamic_vector(
+; CHECK-NEXT: [[CMP:%.*]] = fcmp une <2 x double> splat (double 0x8000000000000), zeroinitializer
+; CHECK-NEXT: ret <2 x i1> [[CMP]]
+;
+ %cmp = fcmp une <2 x double> splat(double 0x0008000000000000), zeroinitializer
+ ret <2 x i1> %cmp
+}
+
define i1 @fcmp_double_dynamic_dynamic() #11 {
; CHECK-LABEL: @fcmp_double_dynamic_dynamic(
; CHECK-NEXT: [[CMP:%.*]] = fcmp une double 0x8000000000000, 0.000000e+00
``````````
</details>
https://github.com/llvm/llvm-project/pull/189600
More information about the llvm-commits
mailing list