Viewing file: Remarks.h (9.41 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/*===-- 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 */
|