1 //===-- LanaiMCExpr.h - Lanai specific MC expression classes ----*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_LIB_TARGET_LANAI_MCTARGETDESC_LANAIMCEXPR_H
10 #define LLVM_LIB_TARGET_LANAI_MCTARGETDESC_LANAIMCEXPR_H
12 #include "llvm/MC/MCExpr.h"
13 #include "llvm/MC/MCValue.h"
17 class LanaiMCExpr : public MCTargetExpr {
19 enum VariantKind { VK_Lanai_None, VK_Lanai_ABS_HI, VK_Lanai_ABS_LO };
22 const VariantKind Kind;
25 explicit LanaiMCExpr(VariantKind Kind, const MCExpr *Expr)
26 : Kind(Kind), Expr(Expr) {}
29 static const LanaiMCExpr *create(VariantKind Kind, const MCExpr *Expr,
32 // Returns the kind of this expression.
33 VariantKind getKind() const { return Kind; }
35 // Returns the child of this expression.
36 const MCExpr *getSubExpr() const { return Expr; }
38 void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override;
39 bool evaluateAsRelocatableImpl(MCValue &Res, const MCAsmLayout *Layout,
40 const MCFixup *Fixup) const override;
41 void visitUsedExpr(MCStreamer &Streamer) const override;
42 MCFragment *findAssociatedFragment() const override {
43 return getSubExpr()->findAssociatedFragment();
46 // There are no TLS LanaiMCExprs at the moment.
47 void fixELFSymbolsInTLSFixups(MCAssembler & /*Asm*/) const override {}
49 static bool classof(const MCExpr *E) {
50 return E->getKind() == MCExpr::Target;
53 } // end namespace llvm