================
@@ -892,3 +893,39 @@ VPValue *VPSCEVExpander::tryToExpand(const SCEV *S) {
     return nullptr;
   }
 }
+
+VPValue *VPSCEVExpander::tryToExpandPredicate(const SCEVPredicate *Pred) {
+  if (auto *CmpPred = dyn_cast<SCEVComparePredicate>(Pred)) {
+    VPValue *LHS = tryToExpand(CmpPred->getLHS());
+    if (!LHS)
+      return nullptr;
+    VPValue *RHS = tryToExpand(CmpPred->getRHS());
+    if (!RHS)
+      return nullptr;
+    // Match SCEVExpander::expandComparePredicate behavior:
+    auto InvPred = CmpInst::getInversePredicate(CmpPred->getPredicate());
+    return Builder.createICmp(InvPred, LHS, RHS, DL);
+  }
+
+  if (auto *UnionPred = dyn_cast<SCEVUnionPredicate>(Pred)) {
+    SmallVector<VPValue *, 4> Checks;
+    for (const auto *Pred : UnionPred->getPredicates()) {
+      VPValue *Check = tryToExpandPredicate(Pred);
+      if (!Check)
+        return nullptr;
+      Checks.push_back(Check);
+    }
+
+    if (Checks.empty())
+      return Builder.getPlan().getOrAddLiveIn(
+          ConstantInt::getFalse(Builder.getPlan().getContext()));
+
+    VPValue *Result = Checks[0];
+    for (VPValue *Check : ArrayRef<VPValue *>(Checks).drop_front())
----------------
artagnon wrote:

```suggestion
    for (VPValue *Check : drop_begin(Checks))
```

https://github.com/llvm/llvm-project/pull/182595
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to