mini-llvm 0.1.0
Loading...
Searching...
No Matches
StackOffsetImmediate.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2
3#pragma once
4
5#include <cstdint>
6#include <memory>
7
10
11namespace mini_llvm::mir {
12
13class StackOffsetImmediate final : public Immediate {
14public:
16 : baseSlot_(baseSlot), slot_(slot), displacement_(displacement) {}
17
19 return baseSlot_;
20 }
21
22 StackSlot *slot() const {
23 return slot_;
24 }
25
26 int displacement() const {
27 return displacement_;
28 }
29
30 int64_t value() const override {
31 return slot()->offset() - baseSlot()->offset() + displacement();
32 }
33
34 std::unique_ptr<Immediate> clone() const override {
35 return std::make_unique<StackOffsetImmediate>(baseSlot(), slot(), displacement());
36 }
37
38private:
39 StackSlot *baseSlot_, *slot_;
40 int displacement_;
41};
42
43} // namespace mini_llvm::mir
Immediate(const Immediate &)=delete
int64_t value() const override
Definition StackOffsetImmediate.h:30
StackSlot * slot() const
Definition StackOffsetImmediate.h:22
StackOffsetImmediate(StackSlot *baseSlot, StackSlot *slot, int displacement=0)
Definition StackOffsetImmediate.h:15
int displacement() const
Definition StackOffsetImmediate.h:26
std::unique_ptr< Immediate > clone() const override
Definition StackOffsetImmediate.h:34
StackSlot * baseSlot() const
Definition StackOffsetImmediate.h:18
Definition StackSlot.h:11
Definition BasicBlock.h:22