[PATCH] D30543: [JumpThreading] Perform phi-translation in SimplifyPartiallyRedundantLoad.
    Daniel Berlin via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Wed Mar 15 17:38:29 PDT 2017
    
    
  
dberlin added inline comments.
================
Comment at: lib/Transforms/Scalar/JumpThreading.cpp:940
+
+  if (Instruction *PtrOp = dyn_cast<Instruction>(LoadedPtr)) {
+    // If the loaded operand is a phi not inside LoadBB, we can not
----------------
trentxintong wrote:
> dberlin wrote:
> > This logic looks overly complex.
> > 
> > Isn't this all simply 
> > ```
> > TranslateableLoaddedPhiPtr = LoadedPtr->doPhiTranslation(LoadBB, PredBB) 
> > ```
> > 
> > here, and then
> > 
> > 
> > ```
> > if (TranslateableLoadedPhiPtr == LoadedPtr)
> >     if (Instruction *PtrOp = dyn_cast<Instruction>(LoadedPtr))
> >     return false
> > 
> > ```
> > (IE what it was before).
> > 
> Do not we need the PredBB then ? we are not iterating over the predecessors here. Otherwise, I think doPhiTranslation would be a perfect fit for this.
good point, missed that. I would still simplify the logic
I would just define a helper:
```
static bool isOpDefinedInBlock(Value *Op, BasicBlock *BB)
{
  if (Instruction *OpInst = dyn_cast<Instruction>(Op))
     if (OpInst->getParent() == BB)
       return true;
  return false;
}
```
Then here
 if (opDefinedByBlock(LoadedPtr, LoadBB) && !isa<PHINode>(LoadedPtr))
   return false;
and below, just always phi translate (phi translate returns either the original pointer, or the phi translated version, it never returns null)
https://reviews.llvm.org/D30543
    
    
More information about the llvm-commits
mailing list