1 //===-- LanaiMCExpr.cpp - Lanai specific MC expression classes ------------===//
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 #include "LanaiMCExpr.h"
10 #include "llvm/MC/MCAssembler.h"
11 #include "llvm/MC/MCContext.h"
12 #include "llvm/MC/MCStreamer.h"
15 #define DEBUG_TYPE "lanaimcexpr"
17 const LanaiMCExpr
*LanaiMCExpr::create(VariantKind Kind
, const MCExpr
*Expr
,
19 return new (Ctx
) LanaiMCExpr(Kind
, Expr
);
22 void LanaiMCExpr::printImpl(raw_ostream
&OS
, const MCAsmInfo
*MAI
) const {
23 if (Kind
== VK_Lanai_None
) {
30 llvm_unreachable("Invalid kind!");
40 const MCExpr
*Expr
= getSubExpr();
45 void LanaiMCExpr::visitUsedExpr(MCStreamer
&Streamer
) const {
46 Streamer
.visitUsedExpr(*getSubExpr());
49 bool LanaiMCExpr::evaluateAsRelocatableImpl(MCValue
&Res
,
50 const MCAsmLayout
*Layout
,
51 const MCFixup
*Fixup
) const {
52 if (!getSubExpr()->evaluateAsRelocatable(Res
, Layout
, Fixup
))
56 MCValue::get(Res
.getSymA(), Res
.getSymB(), Res
.getConstant(), getKind());