mirror of
https://github.com/RPCS3/llvm.git
synced 2025-05-18 03:16:13 +00:00

Summary: Implements AsmWriter support for printing the module summary index to assembly with the format discussed in the RFC "LLVM Assembly format for ThinLTO Summary". Implements just enough of the parsing support to recognize and ignore the summary entries. As agreed in the RFC thread, this will be the behavior when assembling the IR. A follow on change will implement parsing/assembling of the summary entries for use by tools that currently build the summary index from bitcode. Reviewers: dexonsmith, pcc Subscribers: inglorion, eraman, steven_wu, dblaikie, llvm-commits Differential Revision: https://reviews.llvm.org/D46699 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@333335 91177308-0d34-0410-b5e6-96231b3b80d8
99 lines
2.8 KiB
C++
99 lines
2.8 KiB
C++
//===- LLLexer.h - Lexer for LLVM Assembly Files ----------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This class represents the Lexer for .ll files.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_ASMPARSER_LLLEXER_H
|
|
#define LLVM_LIB_ASMPARSER_LLLEXER_H
|
|
|
|
#include "LLToken.h"
|
|
#include "llvm/ADT/APFloat.h"
|
|
#include "llvm/ADT/APSInt.h"
|
|
#include "llvm/Support/SourceMgr.h"
|
|
#include <string>
|
|
|
|
namespace llvm {
|
|
class MemoryBuffer;
|
|
class Type;
|
|
class SMDiagnostic;
|
|
class LLVMContext;
|
|
|
|
class LLLexer {
|
|
const char *CurPtr;
|
|
StringRef CurBuf;
|
|
SMDiagnostic &ErrorInfo;
|
|
SourceMgr &SM;
|
|
LLVMContext &Context;
|
|
|
|
// Information about the current token.
|
|
const char *TokStart;
|
|
lltok::Kind CurKind;
|
|
std::string StrVal;
|
|
unsigned UIntVal;
|
|
Type *TyVal;
|
|
APFloat APFloatVal;
|
|
APSInt APSIntVal;
|
|
|
|
public:
|
|
explicit LLLexer(StringRef StartBuf, SourceMgr &SM, SMDiagnostic &,
|
|
LLVMContext &C);
|
|
|
|
lltok::Kind Lex() {
|
|
return CurKind = LexToken();
|
|
}
|
|
|
|
typedef SMLoc LocTy;
|
|
LocTy getLoc() const { return SMLoc::getFromPointer(TokStart); }
|
|
lltok::Kind getKind() const { return CurKind; }
|
|
const std::string &getStrVal() const { return StrVal; }
|
|
Type *getTyVal() const { return TyVal; }
|
|
unsigned getUIntVal() const { return UIntVal; }
|
|
const APSInt &getAPSIntVal() const { return APSIntVal; }
|
|
const APFloat &getAPFloatVal() const { return APFloatVal; }
|
|
|
|
|
|
bool Error(LocTy L, const Twine &Msg) const;
|
|
bool Error(const Twine &Msg) const { return Error(getLoc(), Msg); }
|
|
|
|
void Warning(LocTy WarningLoc, const Twine &Msg) const;
|
|
void Warning(const Twine &Msg) const { return Warning(getLoc(), Msg); }
|
|
|
|
private:
|
|
lltok::Kind LexToken();
|
|
|
|
int getNextChar();
|
|
void SkipLineComment();
|
|
lltok::Kind ReadString(lltok::Kind kind);
|
|
bool ReadVarName();
|
|
|
|
lltok::Kind LexIdentifier();
|
|
lltok::Kind LexDigitOrNegative();
|
|
lltok::Kind LexPositive();
|
|
lltok::Kind LexAt();
|
|
lltok::Kind LexDollar();
|
|
lltok::Kind LexExclaim();
|
|
lltok::Kind LexPercent();
|
|
lltok::Kind LexUIntID(lltok::Kind Token);
|
|
lltok::Kind LexVar(lltok::Kind Var, lltok::Kind VarID);
|
|
lltok::Kind LexQuote();
|
|
lltok::Kind Lex0x();
|
|
lltok::Kind LexHash();
|
|
lltok::Kind LexCaret();
|
|
|
|
uint64_t atoull(const char *Buffer, const char *End);
|
|
uint64_t HexIntToVal(const char *Buffer, const char *End);
|
|
void HexToIntPair(const char *Buffer, const char *End, uint64_t Pair[2]);
|
|
void FP80HexToIntPair(const char *Buff, const char *End, uint64_t Pair[2]);
|
|
};
|
|
} // end namespace llvm
|
|
|
|
#endif
|