[llvm] [InstCombine] Support well-defined recurrences in isGuaranteedNotToBeUndefOrPoison (PR #150420)

David Sherwood via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 31 03:32:36 PDT 2025


================
@@ -7657,6 +7720,13 @@ static bool isGuaranteedNotToBeUndefOrPoison(
       }
       if (IsWellDefined)
         return true;
+
+      bool StartNeedsFreeze;
+      if (canFoldFreezeIntoRecurrence(
+              const_cast<PHINode *>(PN), const_cast<DominatorTree *>(DT),
----------------
david-arm wrote:

Is it possible to avoid the `const_cast` if you change the interface `canFoldFreezeIntoRecurrence` to be

```
Use *llvm::canFoldFreezeIntoRecurrence(
    const PHINode *PN, const DominatorTree *DT, bool &StartNeedsFreeze,
```
? I'm just a bit worried that callers of `isGuaranteedNotToBeUndefOrPoison` really expect the `PN` and `DT` objects not to change and by using this cast here you're violating some assumption.

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


More information about the llvm-commits mailing list