[polly] r366260 - [NFC][ScopBuilder] Move addRecordedAssumption to ScopBuilder
Michael Kruse via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 16 16:27:05 PDT 2019
Thank you for the contribution.
Michael
Am Di., 16. Juli 2019 um 15:50 Uhr schrieb Dominik Adamski via
llvm-commits <llvm-commits at lists.llvm.org>:
>
> Author: domada
> Date: Tue Jul 16 13:51:04 2019
> New Revision: 366260
>
> URL: http://llvm.org/viewvc/llvm-project?rev=366260&view=rev
> Log:
> [NFC][ScopBuilder] Move addRecordedAssumption to ScopBuilder
>
> Scope of changes:
> 1) Moved addRecordedAssumptions to ScopBuilder.
> 2) Moved Assumption struct outside Scop class.
> 3) Refactored addRecordedAssumptions function. Replaced while loop by
> for range loop.
> 4) Added function to clear processed Assumptions.
>
> Differential Revision: https://reviews.llvm.org/D63572
>
> Modified:
> polly/trunk/include/polly/ScopBuilder.h
> polly/trunk/include/polly/ScopInfo.h
> polly/trunk/lib/Analysis/ScopBuilder.cpp
> polly/trunk/lib/Analysis/ScopInfo.cpp
>
> Modified: polly/trunk/include/polly/ScopBuilder.h
> URL: http://llvm.org/viewvc/llvm-project/polly/trunk/include/polly/ScopBuilder.h?rev=366260&r1=366259&r2=366260&view=diff
> ==============================================================================
> --- polly/trunk/include/polly/ScopBuilder.h (original)
> +++ polly/trunk/include/polly/ScopBuilder.h Tue Jul 16 13:51:04 2019
> @@ -327,6 +327,9 @@ class ScopBuilder {
> BasicBlock *IncomingBlock, Value *IncomingValue,
> bool IsExitBlock);
>
> + /// Add all recorded assumptions to the assumed context.
> + void addRecordedAssumptions();
> +
> /// Create a MemoryAccess for reading the value of a phi.
> ///
> /// The modeling assumes that all incoming blocks write their incoming value
>
> Modified: polly/trunk/include/polly/ScopInfo.h
> URL: http://llvm.org/viewvc/llvm-project/polly/trunk/include/polly/ScopInfo.h?rev=366260&r1=366259&r2=366260&view=diff
> ==============================================================================
> --- polly/trunk/include/polly/ScopInfo.h (original)
> +++ polly/trunk/include/polly/ScopInfo.h Tue Jul 16 13:51:04 2019
> @@ -1624,6 +1624,24 @@ public:
> /// Print ScopStmt S to raw_ostream OS.
> raw_ostream &operator<<(raw_ostream &OS, const ScopStmt &S);
>
> +/// Helper struct to remember assumptions.
> +struct Assumption {
> + /// The kind of the assumption (e.g., WRAPPING).
> + AssumptionKind Kind;
> +
> + /// Flag to distinguish assumptions and restrictions.
> + AssumptionSign Sign;
> +
> + /// The valid/invalid context if this is an assumption/restriction.
> + isl::set Set;
> +
> + /// The location that caused this assumption.
> + DebugLoc Loc;
> +
> + /// An optional block whose domain can simplify the assumption.
> + BasicBlock *BB;
> +};
> +
> /// Static Control Part
> ///
> /// A Scop is the polyhedral representation of a control flow region detected
> @@ -1782,24 +1800,7 @@ private:
> /// need to be "false". Otherwise they behave the same.
> isl::set InvalidContext;
>
> - /// Helper struct to remember assumptions.
> - struct Assumption {
> - /// The kind of the assumption (e.g., WRAPPING).
> - AssumptionKind Kind;
> -
> - /// Flag to distinguish assumptions and restrictions.
> - AssumptionSign Sign;
> -
> - /// The valid/invalid context if this is an assumption/restriction.
> - isl::set Set;
> -
> - /// The location that caused this assumption.
> - DebugLoc Loc;
> -
> - /// An optional block whose domain can simplify the assumption.
> - BasicBlock *BB;
> - };
> -
> + using RecordedAssumptionsTy = SmallVector<Assumption, 8>;
> /// Collection to hold taken assumptions.
> ///
> /// There are two reasons why we want to record assumptions first before we
> @@ -1810,7 +1811,7 @@ private:
> /// construction (basically after we know all parameters), thus the user
> /// might see overly complicated assumptions to be taken while they will
> /// only be simplified later on.
> - SmallVector<Assumption, 8> RecordedAssumptions;
> + RecordedAssumptionsTy RecordedAssumptions;
>
> /// The schedule of the SCoP
> ///
> @@ -2338,6 +2339,12 @@ public:
> InvariantEquivClasses.end());
> }
>
> + /// Return an iterator range containing hold assumptions.
> + iterator_range<RecordedAssumptionsTy::const_iterator>
> + recorded_assumptions() const {
> + return make_range(RecordedAssumptions.begin(), RecordedAssumptions.end());
> + }
> +
> /// Return whether this scop is empty, i.e. contains no statements that
> /// could be executed.
> bool isEmpty() const { return Stmts.empty(); }
> @@ -2494,6 +2501,9 @@ public:
> /// @returns True if the optimized SCoP can be executed.
> bool hasFeasibleRuntimeContext() const;
>
> + /// Clear assumptions which have been already processed.
> + void clearRecordedAssumptions() { return RecordedAssumptions.clear(); }
> +
> /// Check if the assumption in @p Set is trivial or not.
> ///
> /// @param Set The relations between parameters that are assumed to hold.
> @@ -2559,9 +2569,6 @@ public:
> void recordAssumption(AssumptionKind Kind, isl::set Set, DebugLoc Loc,
> AssumptionSign Sign, BasicBlock *BB = nullptr);
>
> - /// Add all recorded assumptions to the assumed context.
> - void addRecordedAssumptions();
> -
> /// Mark the scop as invalid.
> ///
> /// This method adds an assumption to the scop that is always invalid. As a
>
> Modified: polly/trunk/lib/Analysis/ScopBuilder.cpp
> URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopBuilder.cpp?rev=366260&r1=366259&r2=366260&view=diff
> ==============================================================================
> --- polly/trunk/lib/Analysis/ScopBuilder.cpp (original)
> +++ polly/trunk/lib/Analysis/ScopBuilder.cpp Tue Jul 16 13:51:04 2019
> @@ -385,6 +385,40 @@ Value *ScopBuilder::findFADAllocationInv
> return Descriptor;
> }
>
> +void ScopBuilder::addRecordedAssumptions() {
> + for (auto &AS : llvm::reverse(scop->recorded_assumptions())) {
> +
> + if (!AS.BB) {
> + scop->addAssumption(AS.Kind, AS.Set, AS.Loc, AS.Sign,
> + nullptr /* BasicBlock */);
> + continue;
> + }
> +
> + // If the domain was deleted the assumptions are void.
> + isl_set *Dom = scop->getDomainConditions(AS.BB).release();
> + if (!Dom)
> + continue;
> +
> + // If a basic block was given use its domain to simplify the assumption.
> + // In case of restrictions we know they only have to hold on the domain,
> + // thus we can intersect them with the domain of the block. However, for
> + // assumptions the domain has to imply them, thus:
> + // _ _____
> + // Dom => S <==> A v B <==> A - B
> + //
> + // To avoid the complement we will register A - B as a restriction not an
> + // assumption.
> + isl_set *S = AS.Set.copy();
> + if (AS.Sign == AS_RESTRICTION)
> + S = isl_set_params(isl_set_intersect(S, Dom));
> + else /* (AS.Sign == AS_ASSUMPTION) */
> + S = isl_set_params(isl_set_subtract(Dom, S));
> +
> + scop->addAssumption(AS.Kind, isl::manage(S), AS.Loc, AS_RESTRICTION, AS.BB);
> + }
> + scop->clearRecordedAssumptions();
> +}
> +
> bool ScopBuilder::buildAccessMultiDimFixed(MemAccInst Inst, ScopStmt *Stmt) {
> Value *Val = Inst.getValueOperand();
> Type *ElementType = Val->getType();
> @@ -1972,7 +2006,7 @@ void ScopBuilder::buildScop(Region &R, A
> // After the context was fully constructed, thus all our knowledge about
> // the parameters is in there, we add all recorded assumptions to the
> // assumed/invalid context.
> - scop->addRecordedAssumptions();
> + addRecordedAssumptions();
>
> scop->simplifyContexts();
> if (!scop->buildAliasChecks(AA)) {
>
> Modified: polly/trunk/lib/Analysis/ScopInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopInfo.cpp?rev=366260&r1=366259&r2=366260&view=diff
> ==============================================================================
> --- polly/trunk/lib/Analysis/ScopInfo.cpp (original)
> +++ polly/trunk/lib/Analysis/ScopInfo.cpp Tue Jul 16 13:51:04 2019
> @@ -3779,39 +3779,6 @@ void Scop::recordAssumption(AssumptionKi
> RecordedAssumptions.push_back({Kind, Sign, Set, Loc, BB});
> }
>
> -void Scop::addRecordedAssumptions() {
> - while (!RecordedAssumptions.empty()) {
> - Assumption AS = RecordedAssumptions.pop_back_val();
> -
> - if (!AS.BB) {
> - addAssumption(AS.Kind, AS.Set, AS.Loc, AS.Sign, nullptr /* BasicBlock */);
> - continue;
> - }
> -
> - // If the domain was deleted the assumptions are void.
> - isl_set *Dom = getDomainConditions(AS.BB).release();
> - if (!Dom)
> - continue;
> -
> - // If a basic block was given use its domain to simplify the assumption.
> - // In case of restrictions we know they only have to hold on the domain,
> - // thus we can intersect them with the domain of the block. However, for
> - // assumptions the domain has to imply them, thus:
> - // _ _____
> - // Dom => S <==> A v B <==> A - B
> - //
> - // To avoid the complement we will register A - B as a restriction not an
> - // assumption.
> - isl_set *S = AS.Set.copy();
> - if (AS.Sign == AS_RESTRICTION)
> - S = isl_set_params(isl_set_intersect(S, Dom));
> - else /* (AS.Sign == AS_ASSUMPTION) */
> - S = isl_set_params(isl_set_subtract(Dom, S));
> -
> - addAssumption(AS.Kind, isl::manage(S), AS.Loc, AS_RESTRICTION, AS.BB);
> - }
> -}
> -
> void Scop::invalidate(AssumptionKind Kind, DebugLoc Loc, BasicBlock *BB) {
> LLVM_DEBUG(dbgs() << "Invalidate SCoP because of reason " << Kind << "\n");
> addAssumption(Kind, isl::set::empty(getParamSpace()), Loc, AS_ASSUMPTION, BB);
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list