[llvm] [ValueTracking] Compute knownbits from known fp classes (PR #86409)

Yingwei Zheng via llvm-commits llvm-commits at lists.llvm.org
Sat Apr 13 10:13:43 PDT 2024


================
@@ -1121,6 +1121,40 @@ static void computeKnownBitsFromOperator(const Operator *I,
       break;
     }
 
+    Value *V;
+    // Handle bitcast from floating point to integer.
+    if (match(const_cast<Operator *>(I), m_ElementWiseBitCast(m_Value(V))) &&
+        V->getType()->isFPOrFPVectorTy()) {
+      KnownFPClass Result = computeKnownFPClass(V, fcAllFlags, Depth + 1, Q);
+      if (Result.SignBit) {
+        if (*Result.SignBit)
+          Known.makeNegative();
+        else
+          Known.makeNonNegative();
+      }
+
+      Type *FPType = V->getType()->getScalarType();
+      if (FPType->isIEEELikeFPTy()) {
+        int MantissaWidth = FPType->getFPMantissaWidth();
+        if (MantissaWidth != -1) {
+          if (Result.isKnownOnly(fcInf)) {
----------------
dtcxzyw wrote:

Isn't it handled by the code above?
```
      if (Result.SignBit) {
         if (*Result.SignBit)
           Known.makeNegative();
         else
           Known.makeNonNegative();
       }
```

https://github.com/llvm/llvm-project/pull/86409


More information about the llvm-commits mailing list