llir-opt  0.0.1
Low-Level Post-Link Optimiser for OCaml and C
expr.h
1 // This file if part of the llir-opt project.
2 // Licensing information can be found in the LICENSE file.
3 // (C) 2018 Nandor Licker. All rights reserved.
4 
5 #pragma once
6 
7 #include <cstdint>
8 
9 #include "core/user.h"
10 
11 class Context;
12 class Global;
13 
14 
15 
19 class Expr : public User {
20 public:
22  static constexpr Value::Kind kValueKind = Value::Kind::EXPR;
23 
24 public:
26  enum Kind {
29  };
30 
32  virtual ~Expr();
33 
35  Kind GetKind() const { return kind_; }
36 
38  bool Is(Kind kind) const { return GetKind() == kind; }
39 
40 protected:
42  Expr(Kind kind, unsigned numOps)
43  : User(Value::Kind::EXPR, numOps)
44  , kind_(kind)
45  {
46  }
47 
48 private:
50  const Kind kind_;
51 };
52 
53 
57 class SymbolOffsetExpr final : public Expr {
58 public:
60  static constexpr Expr::Kind kExprKind = Expr::Kind::SYMBOL_OFFSET;
61 
62 public:
64  static SymbolOffsetExpr *Create(Global *sym, int64_t offset);
67 
69  const Global *GetSymbol() const;
71  Global *GetSymbol();
72 
74  int64_t GetOffset() const { return offset_; }
75 
76 private:
78  SymbolOffsetExpr(Global *sym, int64_t offset);
79 
80 private:
82  int64_t offset_;
83 };
SymbolOffsetExpr::Create
static SymbolOffsetExpr * Create(Global *sym, int64_t offset)
Creates a new symbol offset expression.
Definition: expr.cpp:18
Expr::Is
bool Is(Kind kind) const
Checks if the expression is of a given kind.
Definition: expr.h:38
SymbolOffsetExpr::GetSymbol
const Global * GetSymbol() const
Returns the symbol.
Definition: expr.cpp:44
Value
Definition: value.h:22
Expr::SYMBOL_OFFSET
@ SYMBOL_OFFSET
Fixed offset starting at a symbol.
Definition: expr.h:28
Expr
Definition: expr.h:19
Expr::Expr
Expr(Kind kind, unsigned numOps)
Constructs a new expression.
Definition: expr.h:42
SymbolOffsetExpr::~SymbolOffsetExpr
~SymbolOffsetExpr()
Cleanup.
Definition: expr.cpp:39
Expr::kValueKind
static constexpr Value::Kind kValueKind
Kind of the global.
Definition: expr.h:22
Value::Kind
Kind
Enumeration of value types.
Definition: value.h:133
SymbolOffsetExpr::kExprKind
static constexpr Expr::Kind kExprKind
Kind of the expression.
Definition: expr.h:60
SymbolOffsetExpr::GetOffset
int64_t GetOffset() const
Returns the offset.
Definition: expr.h:74
Expr::GetKind
Kind GetKind() const
Returns the expression kind.
Definition: expr.h:35
Expr::Kind
Kind
Enumeration of expression kinds.
Definition: expr.h:26
SymbolOffsetExpr
Definition: expr.h:57
Expr::~Expr
virtual ~Expr()
Destroys the expression.
Definition: expr.cpp:13
User
Definition: user.h:20
Global
Definition: global.h:23