1#ifndef PROTEUS_FRONTEND_VARSTORAGE_HPP
2#define PROTEUS_FRONTEND_VARSTORAGE_HPP
4#include <llvm/IR/IRBuilder.h>
5#include <llvm/IR/Module.h>
25 virtual std::unique_ptr<VarStorage>
clone()
const = 0;
35 std::unique_ptr<VarStorage>
clone()
const override {
36 return std::make_unique<ScalarStorage>(Slot,
IRB);
39 Value *
getSlot()
const override;
49 Type *PointerElemTy =
nullptr;
53 :
VarStorage(
IRB), PtrSlot(PtrSlot), PointerElemTy(PointerElemTy) {}
56 PointerElemTy(PointerElemTy) {}
57 std::unique_ptr<VarStorage>
clone()
const override {
58 return std::make_unique<PointerStorage>(PtrSlot,
IRB, PointerElemTy);
61 Value *
getSlot()
const override;
74 Value *BasePointer =
nullptr;
79 :
VarStorage(
IRB), BasePointer(BasePointer), ArrayTy(ArrayTy) {}
80 std::unique_ptr<VarStorage>
clone()
const override {
81 return std::make_unique<ArrayStorage>(BasePointer,
IRB, ArrayTy);
83 Value *
getSlot()
const override;
Definition VarStorage.hpp:72
ArrayStorage(Value *BasePointer, IRBuilderBase &IRB, ArrayType *ArrayTy)
Definition VarStorage.hpp:78
Type * getValueType() const override
Definition VarStorage.cpp:59
Value * getSlot() const override
Definition VarStorage.cpp:46
std::unique_ptr< VarStorage > clone() const override
Definition VarStorage.hpp:80
Type * getAllocatedType() const override
Definition VarStorage.cpp:57
void storeValue(Value *Val) override
Definition VarStorage.cpp:52
Value * loadValue() const override
Definition VarStorage.cpp:48
Definition VarStorage.hpp:46
void storePointer(Value *Ptr)
Definition VarStorage.cpp:38
Type * getAllocatedType() const override
Definition VarStorage.cpp:40
void storeValue(Value *Val) override
Definition VarStorage.cpp:28
Value * getSlot() const override
Definition VarStorage.cpp:20
Value * loadPointer() const
Definition VarStorage.cpp:34
Value * loadValue() const override
Definition VarStorage.cpp:23
PointerStorage(Value *PtrSlot, IRBuilderBase &IRB, Type *PointerElemTy)
Definition VarStorage.hpp:54
Type * getValueType() const override
Definition VarStorage.cpp:44
PointerStorage(AllocaInst *PtrSlot, IRBuilderBase &IRB, Type *PointerElemTy)
Definition VarStorage.hpp:52
std::unique_ptr< VarStorage > clone() const override
Definition VarStorage.hpp:57
Definition VarStorage.hpp:28
Type * getAllocatedType() const override
Definition VarStorage.cpp:14
Value * getSlot() const override
Definition VarStorage.cpp:6
void storeValue(Value *Val) override
Definition VarStorage.cpp:12
Type * getValueType() const override
Definition VarStorage.cpp:18
std::unique_ptr< VarStorage > clone() const override
Definition VarStorage.hpp:35
Value * loadValue() const override
Definition VarStorage.cpp:8
ScalarStorage(AllocaInst *Slot, IRBuilderBase &IRB)
Definition VarStorage.hpp:33
Definition VarStorage.hpp:10
IRBuilderBase & IRB
Definition VarStorage.hpp:13
virtual Value * loadValue() 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:16
Definition StorageCache.cpp:24
T getRuntimeConstantValue(void *Arg)
Definition CompilerInterfaceRuntimeConstantInfo.h:114