Fixed/added namespace ending comments using clang-tidy. NFC
[oota-llvm.git] / include / llvm / CodeGen / FaultMaps.h
1 //===------------------- FaultMaps.h - StackMaps ----------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef LLVM_CODEGEN_FAULTMAPS_H
11 #define LLVM_CODEGEN_FAULTMAPS_H
12
13 #include "llvm/ADT/DenseMap.h"
14 #include "llvm/MC/MCSymbol.h"
15
16 #include <vector>
17 #include <map>
18
19 namespace llvm {
20
21 class AsmPrinter;
22 class MCExpr;
23 class MCSymbol;
24 class MCStreamer;
25
26 class FaultMaps {
27 public:
28   enum FaultKind { FaultingLoad = 1, FaultKindMax };
29
30   static const char *faultTypeToString(FaultKind);
31
32   explicit FaultMaps(AsmPrinter &AP);
33
34   void recordFaultingOp(FaultKind FaultTy, const MCSymbol *HandlerLabel);
35   void serializeToFaultMapSection();
36
37 private:
38   static const char *WFMP;
39
40   struct FaultInfo {
41     FaultKind Kind;
42     const MCExpr *FaultingOffsetExpr;
43     const MCExpr *HandlerOffsetExpr;
44
45     FaultInfo()
46         : Kind(FaultKindMax), FaultingOffsetExpr(nullptr),
47           HandlerOffsetExpr(nullptr) {}
48
49     explicit FaultInfo(FaultMaps::FaultKind Kind, const MCExpr *FaultingOffset,
50                        const MCExpr *HandlerOffset)
51         : Kind(Kind), FaultingOffsetExpr(FaultingOffset),
52           HandlerOffsetExpr(HandlerOffset) {}
53   };
54
55   typedef std::vector<FaultInfo> FunctionFaultInfos;
56
57   // We'd like to keep a stable iteration order for FunctionInfos to help
58   // FileCheck based testing.
59   struct MCSymbolComparator {
60     bool operator()(const MCSymbol *LHS, const MCSymbol *RHS) const {
61       return LHS->getName() < RHS->getName();
62     }
63   };
64
65   std::map<const MCSymbol *, FunctionFaultInfos, MCSymbolComparator>
66       FunctionInfos;
67   AsmPrinter &AP;
68
69   void emitFunctionInfo(const MCSymbol *FnLabel, const FunctionFaultInfos &FFI);
70 };
71 } // namespace llvm
72
73 #endif