[llvm] [FuncSpec] Update function specialization to handle phi-chains (PR #71442)

Kiran Chandramohan via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 8 02:33:27 PST 2023


================
@@ -262,30 +267,124 @@ Cost InstCostVisitor::estimateBranchInst(BranchInst &I) {
   return estimateBasicBlocks(WorkList);
 }
 
+// This function is determining if a PHINode is part of a strongly
+// connected component - that is a chain or graph of PHINodes that all
+// link to each other. That means, if the original input to the chain
+// is a constant, all the other values are also that constant.
+//
+// For example:
+//
+// L1:
+// %a = load %0
+//
+// L4:
+// %c = phi [%a, %L1], [%d, %L2]
+//
+// L2:
+// %d = phi [%e, L3] [%c, L4]
+// L3:
+// %e = phi [%c, L4],[%f, L5]
+// L5:
+// %f = phi [%j, L6], [%h, L7]
+// L6:
+// %j = phi [%h:L7, %j, L6]
+// L7:
+// %h = phi [%g:L6, %c:L4]
----------------
kiranchandramohan wrote:

Nit you probably only need L1, L2, L3 for this. More than that it makes it difficult to read. L6 and L7 are formatted differently now.

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


More information about the llvm-commits mailing list