source: icGREP/icgrep-devel/icgrep/IR_Gen/CBuilder.h @ 5239

Last change on this file since 5239 was 5239, checked in by cameron, 2 years ago

CBuilder initial check-in

File size: 2.1 KB
Line 
1/*
2 *  Copyright (c) 2016 International Characters.
3 *  This software is licensed to the public under the Open Software License 3.0.
4 */
5#ifndef CBUILDER_H
6#define CBUILDER_H
7
8#include <llvm/IR/Module.h>
9#include <llvm/IR/Constant.h>
10#include <llvm/IR/Type.h>
11#include <llvm/IR/Value.h>
12#include <llvm/IR/IRBuilder.h>
13#include <llvm/Support/Host.h>
14#include <llvm/ADT/Triple.h>
15#include <IR_Gen/types/streamtype.h>
16#include <boost/container/flat_map.hpp>
17
18using namespace llvm;
19
20
21class CBuilder : public IRBuilder<> {
22   
23public:
24   
25    CBuilder(Module * m, unsigned archBitWidth, unsigned CacheAlignment=64)
26    : IRBuilder<>(m->getContext())
27    , mMod(m)
28    , mCacheLineAlignment(CacheAlignment)
29    , mSizeType(getIntNTy(archBitWidth)) {
30    }
31   
32    virtual ~CBuilder() {}
33
34    Module * getModule() const {
35        return mMod;
36    }
37   
38    void setModule(Module * m)  {
39        mMod = m;
40    }
41   
42    Function * GetPrintf();
43    Value * CreateMalloc(Type * type, Value * size);
44    Value * CreateAlignedMalloc(Type *type, Value * size, const unsigned alignment);
45    void CreateFree(Value * ptr);
46    void CreateAlignedFree(Value * ptr);
47    Value * CreateRealloc(Value * ptr, Value * size);
48    Value * CreateAlignedRealloc(Value * ptr, Value * size, const unsigned alignment);
49    void CreateMemZero(Value * ptr, Value * size, const unsigned alignment = 1);
50   
51    void CallPrintRegister(const std::string & regName, Value * const value);
52    void CallPrintInt(const std::string & name, Value * const value);
53   
54    inline llvm::IntegerType * getSizeTy() const {
55        return mSizeType;
56    }
57   
58    inline llvm::ConstantInt * getSize(const size_t value) const {
59        return ConstantInt::get(getSizeTy(), value);
60    }
61   
62    PointerType * getVoidPtrTy() const;
63   
64    inline unsigned getCacheAlignment() const {
65        return mCacheLineAlignment;
66    }
67   
68    virtual llvm::LoadInst* CreateAtomicLoadAcquire(Value * ptr);
69    virtual llvm::StoreInst *  CreateAtomicStoreRelease(Value * val, Value * ptr);
70   
71protected:
72    Module *            mMod;
73    unsigned            mCacheLineAlignment;
74    IntegerType *       mSizeType;
75};
76
77#endif
Note: See TracBrowser for help on using the repository browser.