[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