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