[PATCH] D32433: Compute safety information in a much finer granularity.

Hal Finkel via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 24 15:39:17 PDT 2017


hfinkel added inline comments.


================
Comment at: llvm/trunk/lib/Transforms/Utils/LoopUtils.cpp:1050
+  for (Instruction *ExitInst : SafetyInfo->EarlyExits)
+    if (!DT->dominates(&Inst, ExitInst))
+      return false;
----------------
dberlin wrote:
> efriedma wrote:
> > This could be slow: if the two instructions are in the same basic block, dominates() will iterate over the whole block. And you don't attempt to prune the EarlyExits list, which could make LICM O(N^3) overall for a large loop with a single basic block.
> > 
> > I guess we'll see if it matters in practice.
> Two  fixes, one short term we should do, one longer term
> 
> 1. Let that dominates call take an OBB as an optional argument
> 
> 2. Just provide global + local dominance ordering as an analysis that encapsulates both the OBB + DT solution, and remove that use of dominates in favor of the analysis.
> 
> 
Ack; I forgot about that scanning behavior. Using an OBB is right here. Right now, you need to do:
  if (I1->getParent() == I2->getParent())
    return OBB->dominates(I1, I2);
  else
    return DT->dominates(I1, I2);

I don't think we can yet hand an OBB directly to the DT (although that would certainly be a nice enhancement). I presume that we'd actually need a map of OBBs, as in Utils/PredicateInfo.h. Maybe stick it into LoopSafetyInfo?


Repository:
  rL LLVM

https://reviews.llvm.org/D32433





More information about the llvm-commits mailing list