[llvm] r324450 - [LoopPrediction] Introduce utility function getLatchPredicateForGuard. NFC.
Serguei Katkov via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 7 20:45:55 PST 2018
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