[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