[llvm] r324450 - [LoopPrediction] Introduce utility function getLatchPredicateForGuard. NFC.

Serguei Katkov via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 7 21:40:36 PST 2018


Strictness.

Thank you,
Serguei.

> -----Original Message-----
> From: Philip Reames [mailto:listmail at philipreames.com]
> Sent: Thursday, February 8, 2018 12:39 PM
> To: Serguei Katkov <serguei.katkov at azul.com>; llvm-commits at lists.llvm.org
> Subject: Re: [llvm] r324450 - [LoopPrediction] Introduce utility function
> getLatchPredicateForGuard. NFC.
> 
> "Striction"?
> 
> 
> On 02/07/2018 08:45 PM, Serguei Katkov wrote:
> > Hi Philip,
> >
> > how about the name " getFlippedStrictionPredicate" and move it to
> CmpInst class?
> >
> > Thank you,
> > Serguei.
> >
> >> -----Original Message-----
> >> From: Philip Reames [mailto:listmail at philipreames.com]
> >> Sent: Thursday, February 8, 2018 4:28 AM
> >> To: Serguei Katkov <serguei.katkov at azul.com>;
> >> llvm-commits at lists.llvm.org
> >> Subject: Re: [llvm] r324450 - [LoopPrediction] Introduce utility
> >> function getLatchPredicateForGuard. NFC.
> >>
> >> Serguei,
> >>
> >> "Latch predicate" doesn't mean much out of context here.  Can you
> >> either find a more clear name or add a comment explaining the
> >> semantics of the new function?
> >>
> >> Philip
> >>
> >>
> >> On 02/06/2018 10:53 PM, Serguei Katkov via llvm-commits wrote:
> >>> Author: skatkov
> >>> Date: Tue Feb  6 22:53:37 2018
> >>> New Revision: 324450
> >>>
> >>> URL: http://llvm.org/viewvc/llvm-project?rev=324450&view=rev
> >>> Log:
> >>> [LoopPrediction] Introduce utility function getLatchPredicateForGuard.
> >> NFC.
> >>> Factor out getting the predicate for latch condition in a guard to
> >>> utility function getLatchPredicateForGuard.
> >>>
> >>> Modified:
> >>>       llvm/trunk/lib/Transforms/Scalar/LoopPredication.cpp
> >>>
> >>> Modified: llvm/trunk/lib/Transforms/Scalar/LoopPredication.cpp
> >>> URL:
> >>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar
> >>> /L oopPredication.cpp?rev=324450&r1=324449&r2=324450&view=diff
> >>>
> >>
> ==========================================================
> >> ============
> >>> ========
> >>> --- llvm/trunk/lib/Transforms/Scalar/LoopPredication.cpp (original)
> >>> +++ llvm/trunk/lib/Transforms/Scalar/LoopPredication.cpp Tue Feb  6
> >>> +++ 22:53:37 2018
> >>> @@ -266,6 +266,11 @@ class LoopPredication {
> >>>      // Return the loopLatchCheck corresponding to the
> >>> RangeCheckType if
> >> safe to do
> >>>      // so.
> >>>      Optional<LoopICmp> generateLoopLatchCheck(Type
> >> *RangeCheckType);
> >>> +
> >>> +  // Returns the latch predicate for guard. SGT -> SGE, UGT -> UGE,
> >>> + SGE -> SGT,  // UGE -> UGT, etc.
> >>> +  ICmpInst::Predicate getLatchPredicateForGuard(ICmpInst::Predicate
> >>> + Pred);
> >>> +
> >>>    public:
> >>>      LoopPredication(ScalarEvolution *SE) : SE(SE){};
> >>>      bool runOnLoop(Loop *L);
> >>> @@ -391,6 +396,30 @@ bool LoopPredication::CanExpand(const SC
> >>>      return SE->isLoopInvariant(S, L) && isSafeToExpand(S, *SE);
> >>>    }
> >>>
> >>> +ICmpInst::Predicate
> >>> +LoopPredication::getLatchPredicateForGuard(ICmpInst::Predicate
> >>> +Pred) {
> >>> +  switch (LatchCheck.Pred) {
> >>> +  case ICmpInst::ICMP_ULT:
> >>> +    return ICmpInst::ICMP_ULE;
> >>> +  case ICmpInst::ICMP_ULE:
> >>> +    return ICmpInst::ICMP_ULT;
> >>> +  case ICmpInst::ICMP_SLT:
> >>> +    return ICmpInst::ICMP_SLE;
> >>> +  case ICmpInst::ICMP_SLE:
> >>> +    return ICmpInst::ICMP_SLT;
> >>> +  case ICmpInst::ICMP_UGT:
> >>> +    return ICmpInst::ICMP_UGE;
> >>> +  case ICmpInst::ICMP_UGE:
> >>> +    return ICmpInst::ICMP_UGT;
> >>> +  case ICmpInst::ICMP_SGT:
> >>> +    return ICmpInst::ICMP_SGE;
> >>> +  case ICmpInst::ICMP_SGE:
> >>> +    return ICmpInst::ICMP_SGT;
> >>> +  default:
> >>> +    llvm_unreachable("Unsupported loop latch!");
> >>> +  }
> >>> +}
> >>> +
> >>>    Optional<Value *>
> >> LoopPredication::widenICmpRangeCheckIncrementingLoop(
> >>>        LoopPredication::LoopICmp LatchCheck,
> >>> LoopPredication::LoopICmp
> >> RangeCheck,
> >>>        SCEVExpander &Expander, IRBuilder<> &Builder) { @@ -415,23
> >>> +444,7 @@ Optional<Value *> LoopPredication::widen
> >>>        DEBUG(dbgs() << "Can't expand limit check!\n");
> >>>        return None;
> >>>      }
> >>> -  ICmpInst::Predicate LimitCheckPred;
> >>> -  switch (LatchCheck.Pred) {
> >>> -  case ICmpInst::ICMP_ULT:
> >>> -    LimitCheckPred = ICmpInst::ICMP_ULE;
> >>> -    break;
> >>> -  case ICmpInst::ICMP_ULE:
> >>> -    LimitCheckPred = ICmpInst::ICMP_ULT;
> >>> -    break;
> >>> -  case ICmpInst::ICMP_SLT:
> >>> -    LimitCheckPred = ICmpInst::ICMP_SLE;
> >>> -    break;
> >>> -  case ICmpInst::ICMP_SLE:
> >>> -    LimitCheckPred = ICmpInst::ICMP_SLT;
> >>> -    break;
> >>> -  default:
> >>> -    llvm_unreachable("Unsupported loop latch!");
> >>> -  }
> >>> +  auto LimitCheckPred = getLatchPredicateForGuard(LatchCheck.Pred);
> >>>
> >>>      DEBUG(dbgs() << "LHS: " << *LatchLimit << "\n");
> >>>      DEBUG(dbgs() << "RHS: " << *RHS << "\n");
> >>>
> >>>
> >>> _______________________________________________
> >>> llvm-commits mailing list
> >>> llvm-commits at lists.llvm.org
> >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list