1#ifndef PROTEUS_FRONTEND_VARSTORAGE_HPP
2#define PROTEUS_FRONTEND_VARSTORAGE_HPP
32 virtual std::unique_ptr<VarStorage>
clone()
const = 0;
36 Value *Slot =
nullptr;
41 std::unique_ptr<VarStorage>
clone()
const override {
42 return std::make_unique<ScalarStorage>(Slot,
IRB);
45 Value *
getSlot()
const override;
55 Value *PtrSlot =
nullptr;
56 Type *PointerElemTy =
nullptr;
60 :
VarStorage(
IRB), PtrSlot(PtrSlot), PointerElemTy(PointerElemTy) {}
61 std::unique_ptr<VarStorage>
clone()
const override {
62 return std::make_unique<PointerStorage>(PtrSlot,
IRB, PointerElemTy);
65 Value *
getSlot()
const override;
79 Value *BasePointer =
nullptr;
84 :
VarStorage(
IRB), BasePointer(BasePointer), ArrayTy(ArrayTy) {}
85 std::unique_ptr<VarStorage>
clone()
const override {
86 return std::make_unique<ArrayStorage>(BasePointer,
IRB, ArrayTy);
88 Value *
getSlot()
const override;
Definition VarStorage.hpp:77
ArrayStorage(Value *BasePointer, IRBuilderBase &IRB, ArrayType *ArrayTy)
Definition VarStorage.hpp:83
Type * getValueType() const override
Definition VarStorage.cpp:72
Value * getSlot() const override
Definition VarStorage.cpp:58
std::unique_ptr< VarStorage > clone() const override
Definition VarStorage.hpp:85
Type * getAllocatedType() const override
Definition VarStorage.cpp:70
Type * getSlotType() const override
Definition VarStorage.cpp:68
void storeValue(Value *Val) override
Definition VarStorage.cpp:64
Value * loadValue() const override
Definition VarStorage.cpp:60
Definition VarStorage.hpp:53
void storePointer(Value *Ptr)
Definition VarStorage.cpp:47
Type * getAllocatedType() const override
Definition VarStorage.cpp:49
void storeValue(Value *Val) override
Definition VarStorage.cpp:37
Value * getSlot() const override
Definition VarStorage.cpp:27
Value * loadPointer() const
Definition VarStorage.cpp:43
Value * loadValue() const override
Definition VarStorage.cpp:32
PointerStorage(Value *PtrSlot, IRBuilderBase &IRB, Type *PointerElemTy)
Definition VarStorage.hpp:59
Type * getValueType() const override
Definition VarStorage.cpp:56
Type * getSlotType() const override
Definition VarStorage.cpp:29
std::unique_ptr< VarStorage > clone() const override
Definition VarStorage.hpp:61
Definition VarStorage.hpp:35
Type * getAllocatedType() const override
Definition VarStorage.cpp:18
Value * getSlot() const override
Definition VarStorage.cpp:8
ScalarStorage(Value *Slot, IRBuilderBase &IRB)
Definition VarStorage.hpp:39
void storeValue(Value *Val) override
Definition VarStorage.cpp:14
Type * getValueType() const override
Definition VarStorage.cpp:25
Type * getSlotType() const override
Definition VarStorage.cpp:16
std::unique_ptr< VarStorage > clone() const override
Definition VarStorage.hpp:41
Value * loadValue() const override
Definition VarStorage.cpp:10
Definition VarStorage.hpp:16
IRBuilderBase & IRB
Definition VarStorage.hpp:19
virtual Value * loadValue() const =0
virtual Type * getSlotType() const =0
virtual Value * getSlot() const =0
virtual std::unique_ptr< VarStorage > clone() const =0
virtual Type * getAllocatedType() const =0
virtual void storeValue(Value *Val)=0
virtual ~VarStorage()=default
virtual Type * getValueType() const =0
VarStorage(IRBuilderBase &IRB)
Definition VarStorage.hpp:22
Definition ObjectCacheChain.cpp:26
T getRuntimeConstantValue(void *Arg)
Definition CompilerInterfaceRuntimeConstantInfo.h:113