//===- HotnessThresholdParser.h - Parser for hotness threshold --*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
///
/// \file
/// This file implements a simple parser to decode commandline option for
/// remarks hotness threshold that supports both int and a special 'auto' value.
///
//===----------------------------------------------------------------------===//

#ifndef LLVM_REMARKS_HOTNESSTHRESHOLDPARSER_H
#define LLVM_REMARKS_HOTNESSTHRESHOLDPARSER_H

#include "llvm/ADT/Optional.h"
#include "llvm/Support/CommandLine.h"

namespace llvm {
namespace remarks {

// Parse remarks hotness threshold argument value.
// Valid option values are
// 1. integer: manually specified threshold; or
// 2. string 'auto': automatically get threshold from profile summary.
//
// Return None Optional if 'auto' is specified, indicating the value will
// be filled later during PSI.
inline Expected<Optional<uint64_t>> parseHotnessThresholdOption(StringRef Arg) {
  if (Arg == "auto")
    return None;

  int64_t Val;
  if (Arg.getAsInteger(10, Val))
    return createStringError(llvm::inconvertibleErrorCode(),
                             "Not an integer: %s", Arg.data());

  // Negative integer effectively means no threshold
  return Val < 0 ? 0 : Val;
}

// A simple CL parser for '*-remarks-hotness-threshold='
class HotnessThresholdParser : public cl::parser<Optional<uint64_t>> {
public:
  HotnessThresholdParser(cl::Option &O) : cl::parser<Optional<uint64_t>>(O) {}

  bool parse(cl::Option &O, StringRef ArgName, StringRef Arg,
             Optional<uint64_t> &V) {
    auto ResultOrErr = parseHotnessThresholdOption(Arg);
    if (!ResultOrErr)
      return O.error("Invalid argument '" + Arg +
                     "', only integer or 'auto' is supported.");

    V = *ResultOrErr;
    return false;
  }
};

} // namespace remarks
} // namespace llvm
#endif // LLVM_REMARKS_HOTNESSTHRESHOLDPARSER_H
