xref: /freebsd/contrib/llvm-project/llvm/lib/Target/Xtensa/MCTargetDesc/XtensaMCExpr.h (revision aa1a8ff2d6dbc51ef058f46f3db5a8bb77967145)
1 //===-- XtensaMCExpr.h - Xtensa specific MC expression classes --*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
6 // See https://llvm.org/LICENSE.txt for license information.
7 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
8 //
9 //===----------------------------------------------------------------------===//
10 //
11 // This file describes Xtensa-specific MCExprs
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #ifndef LLVM_LIB_TARGET_XTENSA_MCTARGETDESC_XTENSAMCEXPR_H
16 #define LLVM_LIB_TARGET_XTENSA_MCTARGETDESC_XTENSAMCEXPR_H
17 
18 #include "llvm/MC/MCExpr.h"
19 
20 namespace llvm {
21 
22 class StringRef;
23 class XtensaMCExpr : public MCTargetExpr {
24 public:
25   enum VariantKind { VK_Xtensa_None, VK_Xtensa_Invalid };
26 
27 private:
28   const MCExpr *Expr;
29   const VariantKind Kind;
30 
31   explicit XtensaMCExpr(const MCExpr *Expr, VariantKind Kind)
32       : Expr(Expr), Kind(Kind) {}
33 
34 public:
35   static const XtensaMCExpr *create(const MCExpr *Expr, VariantKind Kind,
36                                     MCContext &Ctx);
37 
38   VariantKind getKind() const { return Kind; }
39 
40   const MCExpr *getSubExpr() const { return Expr; }
41 
42   void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override;
43   bool evaluateAsRelocatableImpl(MCValue &Res, const MCAsmLayout *Layout,
44                                  const MCFixup *Fixup) const override;
45   void visitUsedExpr(MCStreamer &Streamer) const override;
46   MCFragment *findAssociatedFragment() const override {
47     return getSubExpr()->findAssociatedFragment();
48   }
49 
50   void fixELFSymbolsInTLSFixups(MCAssembler &Asm) const override {}
51 
52   static VariantKind getVariantKindForName(StringRef name);
53   static StringRef getVariantKindName(VariantKind Kind);
54 };
55 
56 } // end namespace llvm.
57 
58 #endif // LLVM_LIB_TARGET_XTENSA_MCTARGETDESC_XTENSAMCEXPR_H
59