[llvm] [InstCombine] fold (Binop phi(a, b) phi(b, a)) -> (Binop a, b) while Binop is commutative. (PR #75765)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 20 02:11:29 PST 2023


================
@@ -1096,6 +1096,63 @@ Value *InstCombinerImpl::foldUsingDistributiveLaws(BinaryOperator &I) {
   return SimplifySelectsFeedingBinaryOp(I, LHS, RHS);
 }
 
+bool InstCombinerImpl::matchSymmetricPhiNodesPair(PHINode *LHS, PHINode *RHS) {
+
+  if (LHS->getParent() != RHS->getParent())
+    return false;
+
+  if (LHS->getNumIncomingValues() != RHS->getNumIncomingValues())
+    return false;
+
+  if (LHS->getNumIncomingValues() < 2)
+    return false;
+
+  BasicBlock *B0 = LHS->getIncomingBlock(0);
+  if (RHS->getBasicBlockIndex(B0) == -1)
+    return false;
+
+  Value *N1 = LHS->getIncomingValueForBlock(B0);
+  Value *N2 = RHS->getIncomingValueForBlock(B0);
+
+  for (unsigned I = 1, E = LHS->getNumIncomingValues(); I != E; ++I) {
+    BasicBlock *B1 = LHS->getIncomingBlock(I);
+
+    if (RHS->getBasicBlockIndex(B1) == -1)
----------------
nikic wrote:

Same here.

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


More information about the llvm-commits mailing list