[polly] r231593 - Add end user report message for unprofitable regions [NFC]
Tobias Grosser
tobias at grosser.es
Sun Mar 8 08:53:24 PDT 2015
On 08.03.2015 16:11, Johannes Doerfert wrote:
> Author: jdoerfert
> Date: Sun Mar 8 10:11:50 2015
> New Revision: 231593
>
> URL: http://llvm.org/viewvc/llvm-project?rev=231593&view=rev
> Log:
> Add end user report message for unprofitable regions [NFC]
>
> Modified:
> polly/trunk/include/polly/ScopDetectionDiagnostic.h
> polly/trunk/lib/Analysis/ScopDetection.cpp
> polly/trunk/lib/Analysis/ScopDetectionDiagnostic.cpp
> polly/trunk/test/ScopDetectionDiagnostics/ReportUnprofitable.ll
>
> Modified: polly/trunk/include/polly/ScopDetectionDiagnostic.h
> URL: http://llvm.org/viewvc/llvm-project/polly/trunk/include/polly/ScopDetectionDiagnostic.h?rev=231593&r1=231592&r2=231593&view=diff
> ==============================================================================
> --- polly/trunk/include/polly/ScopDetectionDiagnostic.h (original)
> +++ polly/trunk/include/polly/ScopDetectionDiagnostic.h Sun Mar 8 10:11:50 2015
> @@ -835,8 +835,10 @@ public:
> /// @brief Report regions that seem not profitable to be optimized.
> class ReportUnprofitable : public ReportOther {
> //===--------------------------------------------------------------------===//
> + Region *R;
> +
> public:
> - ReportUnprofitable();
> + ReportUnprofitable(Region *R);
>
> /// @name LLVM-RTTI interface
> //@{
> @@ -846,6 +848,8 @@ public:
> /// @name RejectReason interface
> //@{
> virtual std::string getMessage() const override;
> + virtual std::string getEndUserMessage() const override;
> + virtual const DebugLoc &getDebugLoc() const override;
> //@}
> };
>
>
> Modified: polly/trunk/lib/Analysis/ScopDetection.cpp
> URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopDetection.cpp?rev=231593&r1=231592&r2=231593&view=diff
> ==============================================================================
> --- polly/trunk/lib/Analysis/ScopDetection.cpp (original)
> +++ polly/trunk/lib/Analysis/ScopDetection.cpp Sun Mar 8 10:11:50 2015
> @@ -761,12 +761,15 @@ static unsigned eraseAllChildren(ScopDet
> }
>
> void ScopDetection::findScops(Region &R) {
> - if (!DetectRegionsWithoutLoops && regionWithoutLoops(R, LI))
> - return;
> -
> DetectionContext Context(R, *AA, NonAffineSubRegionMap[&R],
> false /*verifying*/);
> - bool RegionIsValid = isValidRegion(Context);
> +
> + bool RegionIsValid = false;
> + if (!DetectRegionsWithoutLoops && regionWithoutLoops(R, LI))
> + invalid<ReportUnprofitable>(Context, /*Assert=*/true, &R);
> + else
> + RegionIsValid = isValidRegion(Context);
> +
> bool HasErrors = !RegionIsValid || Context.Log.size() > 0;
>
> if (PollyTrackFailures && HasErrors)
> @@ -905,7 +908,7 @@ bool ScopDetection::isValidRegion(Detect
> // We can probably not do a lot on scops that only write or only read
> // data.
> if (!DetectUnprofitable && (!Context.hasStores || !Context.hasLoads))
> - invalid<ReportUnprofitable>(Context, /*Assert=*/true);
> + invalid<ReportUnprofitable>(Context, /*Assert=*/true, &CurRegion);
>
> DEBUG(dbgs() << "OK\n");
> return true;
>
> Modified: polly/trunk/lib/Analysis/ScopDetectionDiagnostic.cpp
> URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopDetectionDiagnostic.cpp?rev=231593&r1=231592&r2=231593&view=diff
> ==============================================================================
> --- polly/trunk/lib/Analysis/ScopDetectionDiagnostic.cpp (original)
> +++ polly/trunk/lib/Analysis/ScopDetectionDiagnostic.cpp Sun Mar 8 10:11:50 2015
> @@ -594,12 +594,29 @@ bool ReportEntry::classof(const RejectRe
>
> //===----------------------------------------------------------------------===//
> // ReportUnprofitable.
> -ReportUnprofitable::ReportUnprofitable() : ReportOther(rrkUnprofitable) {}
> +ReportUnprofitable::ReportUnprofitable(Region *R)
> + : ReportOther(rrkUnprofitable), R(R) {}
>
> std::string ReportUnprofitable::getMessage() const {
> return "Region can not profitably be optimized!";
> }
>
> +std::string ReportUnprofitable::getEndUserMessage() const {
> + return "The regions does not seem to be amendable to profitable polyhedral "
> + "optimization";
> +}
> +
> +const DebugLoc &ReportUnprofitable::getDebugLoc() const {
> + for (const BasicBlock *BB : R->blocks())
> + for (const Instruction &Inst : *BB) {
> + const DebugLoc &DL = Inst.getDebugLoc();
> + if (!DL.isUnknown())
> + return DL;
> + }
> +
> + return R->getEntry()->getTerminator()->getDebugLoc();
> +}
> +
> bool ReportUnprofitable::classof(const RejectReason *RR) {
> return RR->getKind() == rrkUnprofitable;
> }
>
> Modified: polly/trunk/test/ScopDetectionDiagnostics/ReportUnprofitable.ll
> URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopDetectionDiagnostics/ReportUnprofitable.ll?rev=231593&r1=231592&r2=231593&view=diff
> ==============================================================================
> --- polly/trunk/test/ScopDetectionDiagnostics/ReportUnprofitable.ll (original)
> +++ polly/trunk/test/ScopDetectionDiagnostics/ReportUnprofitable.ll Sun Mar 8 10:11:50 2015
> @@ -13,9 +13,11 @@ target triple = "x86_64-unknown-linux-gn
> ; }
>
> ; CHECK: remark: /tmp/test.c:2:3: The following errors keep this region from being a Scop.
> +; CHECK: remark: /tmp/test.c:2:3: The regions does not seem to be amendable to profitable polyhedral optimization
'The region' without 's', also
Tobias
More information about the llvm-commits
mailing list