Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//===- OptRemarksParser.cpp -----------------------------------------------===//
//===- RemarkParser.cpp --------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
Expand All @@ -7,11 +7,11 @@
//===----------------------------------------------------------------------===//
//
// This file provides utility methods used by clients that want to use the
// parser for optimization remarks in LLVM.
// parser for remark diagnostics in LLVM.
//
//===----------------------------------------------------------------------===//

#include "llvm-c/OptRemarks.h"
#include "llvm-c/Remarks.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/YAMLTraits.h"
Expand All @@ -31,14 +31,14 @@ struct RemarkParser {
/// Iterator in the YAML stream.
yaml::document_iterator DI;
/// The parsed remark (if any).
Optional<LLVMOptRemarkEntry> LastRemark;
Optional<LLVMRemarkEntry> LastRemark;
/// Temporary parsing buffer for the arguments.
SmallVector<LLVMOptRemarkArg, 8> TmpArgs;
SmallVector<LLVMRemarkArg, 8> TmpArgs;
/// The state used by the parser to parse a remark entry. Invalidated with
/// every call to `parseYAMLElement`.
struct ParseState {
/// Temporary parsing buffer for the arguments.
SmallVectorImpl<LLVMOptRemarkArg> *Args;
SmallVectorImpl<LLVMRemarkArg> *Args;
StringRef Type;
StringRef Pass;
StringRef Name;
Expand All @@ -49,7 +49,7 @@ struct RemarkParser {
Optional<unsigned> Column;
Optional<unsigned> Hotness;

ParseState(SmallVectorImpl<LLVMOptRemarkArg> &Args) : Args(&Args) {}
ParseState(SmallVectorImpl<LLVMRemarkArg> &Args) : Args(&Args) {}
/// Use Args only as a **temporary** buffer.
~ParseState() { Args->clear(); }
};
Expand Down Expand Up @@ -80,7 +80,7 @@ struct RemarkParser {
Error parseDebugLoc(Optional<StringRef> &File, Optional<unsigned> &Line,
Optional<unsigned> &Column, yaml::KeyValueNode &Node);
/// Parse an argument.
Error parseArg(SmallVectorImpl<LLVMOptRemarkArg> &TmpArgs, yaml::Node &Node);
Error parseArg(SmallVectorImpl<LLVMRemarkArg> &TmpArgs, yaml::Node &Node);

/// Handle a diagnostic from the YAML stream. Records the error in the
/// RemarkParser class.
Expand Down Expand Up @@ -114,7 +114,7 @@ class ParseError : public ErrorInfo<ParseError> {

char ParseError::ID = 0;

static LLVMOptRemarkStringRef toOptRemarkStr(StringRef Str) {
static LLVMRemarkStringRef toRemarkStr(StringRef Str) {
return {Str.data(), static_cast<uint32_t>(Str.size())};
}

Expand Down Expand Up @@ -190,7 +190,7 @@ Error RemarkParser::parseDebugLoc(Optional<StringRef> &File,
return Error::success();
}

Error RemarkParser::parseArg(SmallVectorImpl<LLVMOptRemarkArg> &Args,
Error RemarkParser::parseArg(SmallVectorImpl<LLVMRemarkArg> &Args,
yaml::Node &Node) {
auto *ArgMap = dyn_cast<yaml::MappingNode>(&Node);
if (!ArgMap)
Expand Down Expand Up @@ -237,10 +237,10 @@ Error RemarkParser::parseArg(SmallVectorImpl<LLVMOptRemarkArg> &Args,
if (ValueStr.empty())
return make_error<ParseError>("argument value is missing.", *ArgMap);

Args.push_back(LLVMOptRemarkArg{
toOptRemarkStr(KeyStr), toOptRemarkStr(ValueStr),
LLVMOptRemarkDebugLoc{toOptRemarkStr(File.getValueOr(StringRef())),
Line.getValueOr(0), Column.getValueOr(0)}});
Args.push_back(LLVMRemarkArg{
toRemarkStr(KeyStr), toRemarkStr(ValueStr),
LLVMRemarkDebugLoc{toRemarkStr(File.getValueOr(StringRef())),
Line.getValueOr(0), Column.getValueOr(0)}});

return Error::success();
}
Expand Down Expand Up @@ -302,14 +302,13 @@ Error RemarkParser::parseYAMLElement(yaml::Document &Remark) {
return make_error<ParseError>("Type, Pass, Name or Function missing.",
*Remark.getRoot());

LastRemark = LLVMOptRemarkEntry{
toOptRemarkStr(State.Type),
toOptRemarkStr(State.Pass),
toOptRemarkStr(State.Name),
toOptRemarkStr(State.Function),
LLVMOptRemarkDebugLoc{toOptRemarkStr(State.File.getValueOr(StringRef())),
State.Line.getValueOr(0),
State.Column.getValueOr(0)},
LastRemark = LLVMRemarkEntry{
toRemarkStr(State.Type),
toRemarkStr(State.Pass),
toRemarkStr(State.Name),
toRemarkStr(State.Function),
LLVMRemarkDebugLoc{toRemarkStr(State.File.getValueOr(StringRef())),
State.Line.getValueOr(0), State.Column.getValueOr(0)},
State.Hotness.getValueOr(0),
static_cast<uint32_t>(State.Args->size()),
State.Args->data()};
Expand All @@ -319,16 +318,16 @@ Error RemarkParser::parseYAMLElement(yaml::Document &Remark) {
} // namespace

// Create wrappers for C Binding types (see CBindingWrapping.h).
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(RemarkParser, LLVMOptRemarkParserRef)
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(RemarkParser, LLVMRemarkParserRef)

extern "C" LLVMOptRemarkParserRef LLVMOptRemarkParserCreate(const void *Buf,
uint64_t Size) {
extern "C" LLVMRemarkParserRef LLVMRemarkParserCreate(const void *Buf,
uint64_t Size) {
return wrap(
new RemarkParser(StringRef(static_cast<const char *>(Buf), Size)));
}

extern "C" LLVMOptRemarkEntry *
LLVMOptRemarkParserGetNext(LLVMOptRemarkParserRef Parser) {
extern "C" LLVMRemarkEntry *
LLVMRemarkParserGetNext(LLVMRemarkParserRef Parser) {
RemarkParser &TheParser = *unwrap(Parser);
// Check for EOF.
if (TheParser.HadAnyErrors || TheParser.DI == TheParser.Stream.end())
Expand All @@ -348,20 +347,20 @@ LLVMOptRemarkParserGetNext(LLVMOptRemarkParserRef Parser) {
++TheParser.DI;

// Return the just-parsed remark.
if (Optional<LLVMOptRemarkEntry> &Entry = TheParser.LastRemark)
if (Optional<LLVMRemarkEntry> &Entry = TheParser.LastRemark)
return &*Entry;
return nullptr;
}

extern "C" LLVMBool LLVMOptRemarkParserHasError(LLVMOptRemarkParserRef Parser) {
extern "C" LLVMBool LLVMRemarkParserHasError(LLVMRemarkParserRef Parser) {
return unwrap(Parser)->HadAnyErrors;
}

extern "C" const char *
LLVMOptRemarkParserGetErrorMessage(LLVMOptRemarkParserRef Parser) {
LLVMRemarkParserGetErrorMessage(LLVMRemarkParserRef Parser) {
return unwrap(Parser)->ErrorStream.str().c_str();
}

extern "C" void LLVMOptRemarkParserDispose(LLVMOptRemarkParserRef Parser) {
extern "C" void LLVMRemarkParserDispose(LLVMRemarkParserRef Parser) {
delete unwrap(Parser);
}
2 changes: 1 addition & 1 deletion llvm/tools/llvm-opt-report/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set(LLVM_LINK_COMPONENTS Core Demangle Object OptRemarks Support)
set(LLVM_LINK_COMPONENTS Core Demangle Object Remarks Support)

add_llvm_tool(llvm-opt-report
OptReport.cpp
Expand Down
20 changes: 10 additions & 10 deletions llvm/tools/llvm-opt-report/OptReport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
///
//===----------------------------------------------------------------------===//

#include "llvm-c/OptRemarks.h"
#include "llvm-c/Remarks.h"
#include "llvm/Demangle/Demangle.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Error.h"
Expand Down Expand Up @@ -152,11 +152,11 @@ static bool readLocationInfo(LocationInfoTy &LocationInfo) {
}

StringRef Buffer = (*Buf)->getBuffer();
LLVMOptRemarkParserRef Parser =
LLVMOptRemarkParserCreate(Buffer.data(), Buffer.size());
LLVMRemarkParserRef Parser =
LLVMRemarkParserCreate(Buffer.data(), Buffer.size());

LLVMOptRemarkEntry *Remark = nullptr;
while ((Remark = LLVMOptRemarkParserGetNext(Parser))) {
LLVMRemarkEntry *Remark = nullptr;
while ((Remark = LLVMRemarkParserGetNext(Parser))) {
bool Transformed =
StringRef(Remark->RemarkType.Str, Remark->RemarkType.Len) == "!Passed";
StringRef Pass(Remark->PassName.Str, Remark->PassName.Len);
Expand All @@ -165,13 +165,13 @@ static bool readLocationInfo(LocationInfoTy &LocationInfo) {
StringRef Function(Remark->FunctionName.Str, Remark->FunctionName.Len);
uint32_t Line = Remark->DebugLoc.SourceLineNumber;
uint32_t Column = Remark->DebugLoc.SourceColumnNumber;
ArrayRef<LLVMOptRemarkArg> Args(Remark->Args, Remark->NumArgs);
ArrayRef<LLVMRemarkArg> Args(Remark->Args, Remark->NumArgs);

int VectorizationFactor = 1;
int InterleaveCount = 1;
int UnrollCount = 1;

for (const LLVMOptRemarkArg &Arg : Args) {
for (const LLVMRemarkArg &Arg : Args) {
StringRef ArgKeyName(Arg.Key.Str, Arg.Key.Len);
StringRef ArgValue(Arg.Value.Str, Arg.Value.Len);
if (ArgKeyName == "VectorizationFactor")
Expand Down Expand Up @@ -209,11 +209,11 @@ static bool readLocationInfo(LocationInfoTy &LocationInfo) {
}
}

bool HasError = LLVMOptRemarkParserHasError(Parser);
bool HasError = LLVMRemarkParserHasError(Parser);
if (HasError)
WithColor::error() << LLVMOptRemarkParserGetErrorMessage(Parser) << "\n";
WithColor::error() << LLVMRemarkParserGetErrorMessage(Parser) << "\n";

LLVMOptRemarkParserDispose(Parser);
LLVMRemarkParserDispose(Parser);
return !HasError;
}

Expand Down
22 changes: 0 additions & 22 deletions llvm/tools/opt-remarks/CMakeLists.txt

This file was deleted.

6 changes: 0 additions & 6 deletions llvm/tools/opt-remarks/OptRemarks.exports

This file was deleted.

22 changes: 22 additions & 0 deletions llvm/tools/remarks-shlib/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
set(LLVM_LINK_COMPONENTS
Remarks
)

set(SOURCES
libremarks.cpp
)

set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/Remarks.exports)

add_llvm_library(Remarks SHARED ${SOURCES})

install(FILES ${LLVM_MAIN_INCLUDE_DIR}/llvm-c/Remarks.h
DESTINATION include/llvm-c
COMPONENT Remarks)

if (APPLE)
set(REMARKS_VERSION ${LLVM_VERSION_MAJOR})
set_property(TARGET Remarks APPEND_STRING PROPERTY
LINK_FLAGS
" -compatibility_version 1 -current_version ${REMARKS_VERSION}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}")
endif()
6 changes: 6 additions & 0 deletions llvm/tools/remarks-shlib/Remarks.exports
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
LLVMRemarkParserCreate
LLVMRemarkParserGetNext
LLVMRemarkParserHasError
LLVMRemarkParserGetErrorMessage
LLVMRemarkParserDispose
LLVMRemarkVersion
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
//===-liboptremarks.cpp - LLVM Opt-Remarks Shared Library -----------------===//
//===-libremarks.cpp - LLVM Remarks Shared Library ------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//
//
// Provide a library to work with optimization remarks.
// Provide a library to work with remark diagnostics.
//
//===----------------------------------------------------------------------===//

#include "llvm-c/OptRemarks.h"
#include "llvm-c/Remarks.h"

extern uint32_t LLVMOptRemarkVersion(void) {
return OPT_REMARKS_API_VERSION;
extern uint32_t LLVMRemarkVersion(void) {
return REMARKS_API_VERSION;
}
2 changes: 1 addition & 1 deletion llvm/unittests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ add_subdirectory(MI)
add_subdirectory(Object)
add_subdirectory(ObjectYAML)
add_subdirectory(Option)
add_subdirectory(OptRemarks)
add_subdirectory(Remarks)
add_subdirectory(Passes)
add_subdirectory(ProfileData)
add_subdirectory(Support)
Expand Down
8 changes: 0 additions & 8 deletions llvm/unittests/OptRemarks/CMakeLists.txt

This file was deleted.

432 changes: 0 additions & 432 deletions llvm/unittests/OptRemarks/OptRemarksParsingTest.cpp

This file was deleted.

8 changes: 8 additions & 0 deletions llvm/unittests/Remarks/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
set(LLVM_LINK_COMPONENTS
Remarks
Support
)

add_llvm_unittest(RemarksTests
RemarksParsingTest.cpp
)
436 changes: 436 additions & 0 deletions llvm/unittests/Remarks/RemarksParsingTest.cpp

Large diffs are not rendered by default.