123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- /*===-- llvm-c/Remarks.h - Remarks Public C Interface -------------*- 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 *|
- |* *|
- |*===----------------------------------------------------------------------===*|
- |* *|
- |* This header provides a public interface to a remark diagnostics library. *|
- |* LLVM provides an implementation of this interface. *|
- |* *|
- \*===----------------------------------------------------------------------===*/
- #ifndef LLVM_C_REMARKS_H
- #define LLVM_C_REMARKS_H
- #include "llvm-c/ExternC.h"
- #include "llvm-c/Types.h"
- #ifdef __cplusplus
- #include <cstddef>
- #else
- #include <stddef.h>
- #endif /* !defined(__cplusplus) */
- LLVM_C_EXTERN_C_BEGIN
- /**
- * @defgroup LLVMCREMARKS Remarks
- * @ingroup LLVMC
- *
- * @{
- */
- // 0 -> 1: Bitstream remarks support.
- #define REMARKS_API_VERSION 1
- /**
- * The type of the emitted remark.
- */
- enum LLVMRemarkType {
- LLVMRemarkTypeUnknown,
- LLVMRemarkTypePassed,
- LLVMRemarkTypeMissed,
- LLVMRemarkTypeAnalysis,
- LLVMRemarkTypeAnalysisFPCommute,
- LLVMRemarkTypeAnalysisAliasing,
- LLVMRemarkTypeFailure
- };
- /**
- * String containing a buffer and a length. The buffer is not guaranteed to be
- * zero-terminated.
- *
- * \since REMARKS_API_VERSION=0
- */
- typedef struct LLVMRemarkOpaqueString *LLVMRemarkStringRef;
- /**
- * Returns the buffer holding the string.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern const char *LLVMRemarkStringGetData(LLVMRemarkStringRef String);
- /**
- * Returns the size of the string.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern uint32_t LLVMRemarkStringGetLen(LLVMRemarkStringRef String);
- /**
- * DebugLoc containing File, Line and Column.
- *
- * \since REMARKS_API_VERSION=0
- */
- typedef struct LLVMRemarkOpaqueDebugLoc *LLVMRemarkDebugLocRef;
- /**
- * Return the path to the source file for a debug location.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern LLVMRemarkStringRef
- LLVMRemarkDebugLocGetSourceFilePath(LLVMRemarkDebugLocRef DL);
- /**
- * Return the line in the source file for a debug location.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern uint32_t LLVMRemarkDebugLocGetSourceLine(LLVMRemarkDebugLocRef DL);
- /**
- * Return the column in the source file for a debug location.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern uint32_t LLVMRemarkDebugLocGetSourceColumn(LLVMRemarkDebugLocRef DL);
- /**
- * Element of the "Args" list. The key might give more information about what
- * the semantics of the value are, e.g. "Callee" will tell you that the value
- * is a symbol that names a function.
- *
- * \since REMARKS_API_VERSION=0
- */
- typedef struct LLVMRemarkOpaqueArg *LLVMRemarkArgRef;
- /**
- * Returns the key of an argument. The key defines what the value is, and the
- * same key can appear multiple times in the list of arguments.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern LLVMRemarkStringRef LLVMRemarkArgGetKey(LLVMRemarkArgRef Arg);
- /**
- * Returns the value of an argument. This is a string that can contain newlines.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern LLVMRemarkStringRef LLVMRemarkArgGetValue(LLVMRemarkArgRef Arg);
- /**
- * Returns the debug location that is attached to the value of this argument.
- *
- * If there is no debug location, the return value will be `NULL`.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern LLVMRemarkDebugLocRef LLVMRemarkArgGetDebugLoc(LLVMRemarkArgRef Arg);
- /**
- * A remark emitted by the compiler.
- *
- * \since REMARKS_API_VERSION=0
- */
- typedef struct LLVMRemarkOpaqueEntry *LLVMRemarkEntryRef;
- /**
- * Free the resources used by the remark entry.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern void LLVMRemarkEntryDispose(LLVMRemarkEntryRef Remark);
- /**
- * The type of the remark. For example, it can allow users to only keep the
- * missed optimizations from the compiler.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern enum LLVMRemarkType LLVMRemarkEntryGetType(LLVMRemarkEntryRef Remark);
- /**
- * Get the name of the pass that emitted this remark.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern LLVMRemarkStringRef
- LLVMRemarkEntryGetPassName(LLVMRemarkEntryRef Remark);
- /**
- * Get an identifier of the remark.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern LLVMRemarkStringRef
- LLVMRemarkEntryGetRemarkName(LLVMRemarkEntryRef Remark);
- /**
- * Get the name of the function being processed when the remark was emitted.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern LLVMRemarkStringRef
- LLVMRemarkEntryGetFunctionName(LLVMRemarkEntryRef Remark);
- /**
- * Returns the debug location that is attached to this remark.
- *
- * If there is no debug location, the return value will be `NULL`.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern LLVMRemarkDebugLocRef
- LLVMRemarkEntryGetDebugLoc(LLVMRemarkEntryRef Remark);
- /**
- * Return the hotness of the remark.
- *
- * A hotness of `0` means this value is not set.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern uint64_t LLVMRemarkEntryGetHotness(LLVMRemarkEntryRef Remark);
- /**
- * The number of arguments the remark holds.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern uint32_t LLVMRemarkEntryGetNumArgs(LLVMRemarkEntryRef Remark);
- /**
- * Get a new iterator to iterate over a remark's argument.
- *
- * If there are no arguments in \p Remark, the return value will be `NULL`.
- *
- * The lifetime of the returned value is bound to the lifetime of \p Remark.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern LLVMRemarkArgRef LLVMRemarkEntryGetFirstArg(LLVMRemarkEntryRef Remark);
- /**
- * Get the next argument in \p Remark from the position of \p It.
- *
- * Returns `NULL` if there are no more arguments available.
- *
- * The lifetime of the returned value is bound to the lifetime of \p Remark.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern LLVMRemarkArgRef LLVMRemarkEntryGetNextArg(LLVMRemarkArgRef It,
- LLVMRemarkEntryRef Remark);
- typedef struct LLVMRemarkOpaqueParser *LLVMRemarkParserRef;
- /**
- * Creates a remark parser that can be used to parse the buffer located in \p
- * Buf of size \p Size bytes.
- *
- * \p Buf cannot be `NULL`.
- *
- * This function should be paired with LLVMRemarkParserDispose() to avoid
- * leaking resources.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern LLVMRemarkParserRef LLVMRemarkParserCreateYAML(const void *Buf,
- uint64_t Size);
- /**
- * Creates a remark parser that can be used to parse the buffer located in \p
- * Buf of size \p Size bytes.
- *
- * \p Buf cannot be `NULL`.
- *
- * This function should be paired with LLVMRemarkParserDispose() to avoid
- * leaking resources.
- *
- * \since REMARKS_API_VERSION=1
- */
- extern LLVMRemarkParserRef LLVMRemarkParserCreateBitstream(const void *Buf,
- uint64_t Size);
- /**
- * Returns the next remark in the file.
- *
- * The value pointed to by the return value needs to be disposed using a call to
- * LLVMRemarkEntryDispose().
- *
- * All the entries in the returned value that are of LLVMRemarkStringRef type
- * will become invalidated once a call to LLVMRemarkParserDispose is made.
- *
- * If the parser reaches the end of the buffer, the return value will be `NULL`.
- *
- * In the case of an error, the return value will be `NULL`, and:
- *
- * 1) LLVMRemarkParserHasError() will return `1`.
- *
- * 2) LLVMRemarkParserGetErrorMessage() will return a descriptive error
- * message.
- *
- * An error may occur if:
- *
- * 1) An argument is invalid.
- *
- * 2) There is a parsing error. This can occur on things like malformed YAML.
- *
- * 3) There is a Remark semantic error. This can occur on well-formed files with
- * missing or extra fields.
- *
- * Here is a quick example of the usage:
- *
- * ```
- * LLVMRemarkParserRef Parser = LLVMRemarkParserCreateYAML(Buf, Size);
- * LLVMRemarkEntryRef Remark = NULL;
- * while ((Remark = LLVMRemarkParserGetNext(Parser))) {
- * // use Remark
- * LLVMRemarkEntryDispose(Remark); // Release memory.
- * }
- * bool HasError = LLVMRemarkParserHasError(Parser);
- * LLVMRemarkParserDispose(Parser);
- * ```
- *
- * \since REMARKS_API_VERSION=0
- */
- extern LLVMRemarkEntryRef LLVMRemarkParserGetNext(LLVMRemarkParserRef Parser);
- /**
- * Returns `1` if the parser encountered an error while parsing the buffer.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern LLVMBool LLVMRemarkParserHasError(LLVMRemarkParserRef Parser);
- /**
- * Returns a null-terminated string containing an error message.
- *
- * In case of no error, the result is `NULL`.
- *
- * The memory of the string is bound to the lifetime of \p Parser. If
- * LLVMRemarkParserDispose() is called, the memory of the string will be
- * released.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern const char *LLVMRemarkParserGetErrorMessage(LLVMRemarkParserRef Parser);
- /**
- * Releases all the resources used by \p Parser.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern void LLVMRemarkParserDispose(LLVMRemarkParserRef Parser);
- /**
- * Returns the version of the remarks library.
- *
- * \since REMARKS_API_VERSION=0
- */
- extern uint32_t LLVMRemarkVersion(void);
- /**
- * @} // endgoup LLVMCREMARKS
- */
- LLVM_C_EXTERN_C_END
- #endif /* LLVM_C_REMARKS_H */
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|