mini-llvm 0.1.0
Loading...
Searching...
No Matches
PoisonValue.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2
3#pragma once
4
5#include <memory>
6#include <string>
7#include <typeinfo>
8#include <utility>
9
12#include "mini-llvm/ir/Type.h"
13
14namespace mini_llvm::ir {
15
16class PoisonValue final : public Constant {
17public:
18 explicit PoisonValue(std::unique_ptr<Type> type) : type_(std::move(type)) {}
19
20 std::unique_ptr<Type> type() const override {
21 return type_->clone();
22 }
23
24 void accept(ConstantVisitor &visitor) override {
25 visitor.visitPoisonValue(*this);
26 }
27
28 void accept(ConstantVisitor &visitor) const override {
29 visitor.visitPoisonValue(*this);
30 }
31
32 std::string format() const override {
33 return "poison";
34 }
35
36 std::unique_ptr<Value> clone() const override {
37 return std::make_unique<PoisonValue>(type());
38 }
39
40protected:
41 bool equals(const Constant &other) const override {
42 return typeid(*this) == typeid(other);
43 }
44
45private:
46 std::unique_ptr<Type> type_;
47};
48
49} // namespace mini_llvm::ir
Definition ConstantVisitor.h:26
virtual void visitPoisonValue(PoisonValue &C)
Definition ConstantVisitor.h:49
Definition Constant.h:13
PoisonValue(std::unique_ptr< Type > type)
Definition PoisonValue.h:18
std::unique_ptr< Type > type() const override
Definition PoisonValue.h:20
void accept(ConstantVisitor &visitor) override
Definition PoisonValue.h:24
std::string format() const override
Definition PoisonValue.h:32
bool equals(const Constant &other) const override
Definition PoisonValue.h:41
std::unique_ptr< Value > clone() const override
Definition PoisonValue.h:36
void accept(ConstantVisitor &visitor) const override
Definition PoisonValue.h:28
Definition Argument.h:13