[ARM] MVE integer min and max
[llvm-core.git] / lib / Target / Lanai / MCTargetDesc / LanaiMCExpr.h
blobc99af32d91028092a12d6fba271c9931de43bbff
1 //===-- LanaiMCExpr.h - Lanai 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 //===----------------------------------------------------------------------===//
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"
15 namespace llvm {
17 class LanaiMCExpr : public MCTargetExpr {
18 public:
19 enum VariantKind { VK_Lanai_None, VK_Lanai_ABS_HI, VK_Lanai_ABS_LO };
21 private:
22 const VariantKind Kind;
23 const MCExpr *Expr;
25 explicit LanaiMCExpr(VariantKind Kind, const MCExpr *Expr)
26 : Kind(Kind), Expr(Expr) {}
28 public:
29 static const LanaiMCExpr *create(VariantKind Kind, const MCExpr *Expr,
30 MCContext &Ctx);
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
55 #endif