2424#include  " mlir/IR/MLIRContext.h" 
2525#include  " mlir/IR/Value.h" 
2626
27- #include  < functional> 
28- 
2927namespace  mlir ::remark {
3028
3129// / Define an the set of categories to accept. By default none are, the provided
@@ -146,7 +144,7 @@ class Remark {
146144
147145 llvm::StringRef getCategoryName () const  { return  categoryName; }
148146
149-  llvm::StringRef getCombinedCategoryName () const  {
147+  llvm::StringRef getFullCategoryName () const  {
150148 if  (categoryName.empty () && subCategoryName.empty ())
151149 return  {};
152150 if  (subCategoryName.empty ())
@@ -320,7 +318,7 @@ class InFlightRemark {
320318};
321319
322320// ===----------------------------------------------------------------------===//
323- //  Pluggable  Remark Utilities 
321+ //  MLIR  Remark Streamer 
324322// ===----------------------------------------------------------------------===//
325323
326324// / Base class for MLIR remark streamers that is used to stream
@@ -340,26 +338,6 @@ class MLIRRemarkStreamerBase {
340338 virtual  void  finalize () {} //  optional
341339};
342340
343- using  ReportFn = llvm::unique_function<void (const  Remark &)>;
344- 
345- // / Base class for MLIR remark emitting policies that is used to emit
346- // / optimization remarks to the underlying remark streamer. The derived classes
347- // / should implement the `reportRemark` method to provide the actual emitting
348- // / implementation.
349- class  RemarkEmittingPolicyBase  {
350- protected: 
351-  ReportFn reportImpl;
352- 
353- public: 
354-  RemarkEmittingPolicyBase () = default ;
355-  virtual  ~RemarkEmittingPolicyBase () = default ;
356- 
357-  void  initialize (ReportFn fn) { reportImpl = std::move (fn); }
358- 
359-  virtual  void  reportRemark (const  Remark &remark) = 0;
360-  virtual  void  finalize () = 0;
361- };
362- 
363341// ===----------------------------------------------------------------------===//
364342//  Remark Engine (MLIR Context will own this class)
365343// ===----------------------------------------------------------------------===//
@@ -377,8 +355,6 @@ class RemarkEngine {
377355 std::optional<llvm::Regex> failedFilter;
378356 // / The MLIR remark streamer that will be used to emit the remarks.
379357 std::unique_ptr<MLIRRemarkStreamerBase> remarkStreamer;
380-  // / The MLIR remark policy that will be used to emit the remarks.
381-  std::unique_ptr<RemarkEmittingPolicyBase> remarkEmittingPolicy;
382358 // / When is enabled, engine also prints remarks as mlir::emitRemarks.
383359 bool  printAsEmitRemarks = false ;
384360
@@ -416,8 +392,6 @@ class RemarkEngine {
416392 InFlightRemark emitIfEnabled (Location loc, RemarkOpts opts,
417393 bool  (RemarkEngine::*isEnabled)(StringRef)
418394 const );
419-  // / Report a remark.
420-  void  reportImpl (const  Remark &remark);
421395
422396public: 
423397 // / Default constructor is deleted, use the other constructor.
@@ -433,10 +407,8 @@ class RemarkEngine {
433407 ~RemarkEngine ();
434408
435409 // / Setup the remark engine with the given output path and format.
436-  LogicalResult
437-  initialize (std::unique_ptr<MLIRRemarkStreamerBase> streamer,
438-  std::unique_ptr<RemarkEmittingPolicyBase> remarkEmittingPolicy,
439-  std::string *errMsg);
410+  LogicalResult initialize (std::unique_ptr<MLIRRemarkStreamerBase> streamer,
411+  std::string *errMsg);
440412
441413 // / Report a remark.
442414 void  report (const  Remark &&remark);
@@ -474,54 +446,6 @@ inline InFlightRemark withEngine(Fn fn, Location loc, Args &&...args) {
474446
475447namespace  mlir ::remark {
476448
477- // ===----------------------------------------------------------------------===//
478- //  Remark Emitting Policies
479- // ===----------------------------------------------------------------------===//
480- 
481- // / Policy that emits all remarks.
482- class  RemarkEmittingPolicyAll  : public  detail ::RemarkEmittingPolicyBase {
483- public: 
484-  RemarkEmittingPolicyAll ();
485- 
486-  void  reportRemark (const  detail::Remark &remark) override  {
487-  reportImpl (remark);
488-  }
489-  void  finalize () override  {}
490- };
491- 
492- // / Policy that emits final remarks.
493- class  RemarkEmittingPolicyFinal  : public  detail ::RemarkEmittingPolicyBase {
494- private: 
495-  // / user can intercept them for custom processing via a registered callback,
496-  // / otherwise they will be reported on engine destruction.
497-  llvm::DenseSet<detail::Remark> postponedRemarks;
498-  // / Optional user callback for intercepting postponed remarks.
499-  std::function<void (const  detail::Remark &)> postponedRemarkCallback;
500- 
501- public: 
502-  RemarkEmittingPolicyFinal ();
503- 
504-  // / Register a callback to intercept postponed remarks before they are
505-  // / reported. The callback will be invoked for each postponed remark in
506-  // / finalize().
507-  void 
508-  setPostponedRemarkCallback (std::function<void (const  detail::Remark &)> cb) {
509-  postponedRemarkCallback = std::move (cb);
510-  }
511- 
512-  void  reportRemark (const  detail::Remark &remark) override  {
513-  postponedRemarks.erase (remark);
514-  postponedRemarks.insert (remark);
515-  }
516-  void  finalize () override  {
517-  for  (auto  &remark : postponedRemarks) {
518-  if  (postponedRemarkCallback)
519-  postponedRemarkCallback (remark);
520-  reportImpl (remark);
521-  }
522-  }
523- };
524- 
525449// / Create a Reason with llvm::formatv formatting.
526450template  <class ... Ts>
527451inline  detail::LazyTextBuild reason (const  char  *fmt, Ts &&...ts) {
@@ -581,72 +505,16 @@ inline detail::InFlightRemark analysis(Location loc, RemarkOpts opts) {
581505
582506// / Setup remarks for the context. This function will enable the remark engine
583507// / and set the streamer to be used for optimization remarks. The remark
584- // / categories are used to filter the remarks that will be emitted by the
585- // / remark  engine. If a category is not specified, it will not be emitted. If
508+ // / categories are used to filter the remarks that will be emitted by the remark 
509+ // / engine. If a category is not specified, it will not be emitted. If
586510// / `printAsEmitRemarks` is true, the remarks will be printed as
587511// / mlir::emitRemarks. 'streamer' must inherit from MLIRRemarkStreamerBase and
588512// / will be used to stream the remarks.
589513LogicalResult enableOptimizationRemarks (
590514 MLIRContext &ctx,
591515 std::unique_ptr<remark::detail::MLIRRemarkStreamerBase> streamer,
592-  std::unique_ptr<remark::detail::RemarkEmittingPolicyBase>
593-  remarkEmittingPolicy,
594516 const  remark::RemarkCategories &cats, bool  printAsEmitRemarks = false );
595517
596518} //  namespace mlir::remark
597519
598- //  DenseMapInfo specialization for Remark
599- namespace  llvm  {
600- template  <>
601- struct  DenseMapInfo <mlir::remark::detail::Remark> {
602-  static  constexpr  StringRef kEmptyKey  = " <EMPTY_KEY>" 
603-  static  constexpr  StringRef kTombstoneKey  = " <TOMBSTONE_KEY>" 
604- 
605-  // / Helper to provide a static dummy context for sentinel keys.
606-  static  mlir::MLIRContext *getStaticDummyContext () {
607-  static  mlir::MLIRContext dummyContext;
608-  return  &dummyContext;
609-  }
610- 
611-  // / Create an empty remark
612-  static  inline  mlir::remark::detail::Remark getEmptyKey () {
613-  return  mlir::remark::detail::Remark (
614-  mlir::remark::RemarkKind::RemarkUnknown, mlir::DiagnosticSeverity::Note,
615-  mlir::UnknownLoc::get (getStaticDummyContext ()),
616-  mlir::remark::RemarkOpts::name (kEmptyKey ));
617-  }
618- 
619-  // / Create a dead remark
620-  static  inline  mlir::remark::detail::Remark getTombstoneKey () {
621-  return  mlir::remark::detail::Remark (
622-  mlir::remark::RemarkKind::RemarkUnknown, mlir::DiagnosticSeverity::Note,
623-  mlir::UnknownLoc::get (getStaticDummyContext ()),
624-  mlir::remark::RemarkOpts::name (kTombstoneKey ));
625-  }
626- 
627-  // / Compute the hash value of the remark
628-  static  unsigned  getHashValue (const  mlir::remark::detail::Remark &remark) {
629-  return  llvm::hash_combine (
630-  remark.getLocation ().getAsOpaquePointer (),
631-  llvm::hash_value (remark.getRemarkName ()),
632-  llvm::hash_value (remark.getCombinedCategoryName ()));
633-  }
634- 
635-  static  bool  isEqual (const  mlir::remark::detail::Remark &lhs,
636-  const  mlir::remark::detail::Remark &rhs) {
637-  //  Check for empty/tombstone keys first
638-  if  (lhs.getRemarkName () == kEmptyKey  ||
639-  lhs.getRemarkName () == kTombstoneKey  ||
640-  rhs.getRemarkName () == kEmptyKey  ||
641-  rhs.getRemarkName () == kTombstoneKey ) {
642-  return  lhs.getRemarkName () == rhs.getRemarkName ();
643-  }
644- 
645-  //  For regular remarks, compare key identifying fields
646-  return  lhs.getLocation () == rhs.getLocation () &&
647-  lhs.getRemarkName () == rhs.getRemarkName () &&
648-  lhs.getCombinedCategoryName () == rhs.getCombinedCategoryName ();
649-  }
650- };
651- } //  namespace llvm
652520#endif //  MLIR_IR_REMARKS_H
0 commit comments