/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/lib/Target/Mips/MCTargetDesc/MipsMCExpr.h
Line | Count | Source (jump to first uncovered line) |
1 | | //===- MipsMCExpr.h - Mips specific MC expression classes -------*- C++ -*-===// |
2 | | // |
3 | | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | | // See https://llvm.org/LICENSE.txt for license information. |
5 | | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | | // |
7 | | //===----------------------------------------------------------------------===// |
8 | | |
9 | | #ifndef LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSMCEXPR_H |
10 | | #define LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSMCEXPR_H |
11 | | |
12 | | #include "llvm/MC/MCAsmLayout.h" |
13 | | #include "llvm/MC/MCExpr.h" |
14 | | #include "llvm/MC/MCValue.h" |
15 | | |
16 | | namespace llvm { |
17 | | |
18 | | class MipsMCExpr : public MCTargetExpr { |
19 | | public: |
20 | | enum MipsExprKind { |
21 | | MEK_None, |
22 | | MEK_CALL_HI16, |
23 | | MEK_CALL_LO16, |
24 | | MEK_DTPREL, |
25 | | MEK_DTPREL_HI, |
26 | | MEK_DTPREL_LO, |
27 | | MEK_GOT, |
28 | | MEK_GOTTPREL, |
29 | | MEK_GOT_CALL, |
30 | | MEK_GOT_DISP, |
31 | | MEK_GOT_HI16, |
32 | | MEK_GOT_LO16, |
33 | | MEK_GOT_OFST, |
34 | | MEK_GOT_PAGE, |
35 | | MEK_GPREL, |
36 | | MEK_HI, |
37 | | MEK_HIGHER, |
38 | | MEK_HIGHEST, |
39 | | MEK_LO, |
40 | | MEK_NEG, |
41 | | MEK_PCREL_HI16, |
42 | | MEK_PCREL_LO16, |
43 | | MEK_TLSGD, |
44 | | MEK_TLSLDM, |
45 | | MEK_TPREL_HI, |
46 | | MEK_TPREL_LO, |
47 | | MEK_Special, |
48 | | }; |
49 | | |
50 | | private: |
51 | | const MipsExprKind Kind; |
52 | | const MCExpr *Expr; |
53 | | |
54 | | explicit MipsMCExpr(MipsExprKind Kind, const MCExpr *Expr) |
55 | 41.7k | : Kind(Kind), Expr(Expr) {} |
56 | | |
57 | | public: |
58 | | static const MipsMCExpr *create(MipsExprKind Kind, const MCExpr *Expr, |
59 | | MCContext &Ctx); |
60 | | static const MipsMCExpr *createGpOff(MipsExprKind Kind, const MCExpr *Expr, |
61 | | MCContext &Ctx); |
62 | | |
63 | | /// Get the kind of this expression. |
64 | 153k | MipsExprKind getKind() const { return Kind; } |
65 | | |
66 | | /// Get the child of this expression. |
67 | 71.0k | const MCExpr *getSubExpr() const { return Expr; } |
68 | | |
69 | | void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override; |
70 | | bool evaluateAsRelocatableImpl(MCValue &Res, const MCAsmLayout *Layout, |
71 | | const MCFixup *Fixup) const override; |
72 | | void visitUsedExpr(MCStreamer &Streamer) const override; |
73 | | |
74 | 0 | MCFragment *findAssociatedFragment() const override { |
75 | 0 | return getSubExpr()->findAssociatedFragment(); |
76 | 0 | } |
77 | | |
78 | | void fixELFSymbolsInTLSFixups(MCAssembler &Asm) const override; |
79 | | |
80 | 15.3k | static bool classof(const MCExpr *E) { |
81 | 15.3k | return E->getKind() == MCExpr::Target; |
82 | 15.3k | } |
83 | | |
84 | | bool isGpOff(MipsExprKind &Kind) const; |
85 | 45.0k | bool isGpOff() const { |
86 | 45.0k | MipsExprKind Kind; |
87 | 45.0k | return isGpOff(Kind); |
88 | 45.0k | } |
89 | | }; |
90 | | |
91 | | } // end namespace llvm |
92 | | |
93 | | #endif // LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSMCEXPR_H |