llir-opt
0.0.1
Low-Level Post-Link Optimiser for OCaml and C
|
7 #include <llvm/ADT/ilist.h>
10 #include "core/symbol_table.h"
21 template <>
struct llvm::ilist_traits<
Object> {
23 using instr_iterator = simple_ilist<Object>::iterator;
26 void deleteNode(
Object *inst);
27 void addNodeToList(
Object *inst);
28 void removeNodeFromList(
Object *inst);
29 void transferNodesFromList(
43 class Object final :
public llvm::ilist_node_with_parent<Object, Prog> {
49 using iterator = AtomListType::iterator;
50 using const_iterator = AtomListType::const_iterator;
52 using reverse_iterator = AtomListType::reverse_iterator;
53 using const_reverse_iterator = AtomListType::const_reverse_iterator;
57 Object() : parent_(
nullptr), isThreadLocal_(
false) {}
71 void remove(iterator it) { atoms_.remove(it); }
73 void erase(iterator it) { atoms_.erase(it); }
78 bool empty()
const {
return atoms_.empty(); }
79 size_t size()
const {
return atoms_.size(); }
80 iterator begin() {
return atoms_.begin(); }
81 iterator end() {
return atoms_.end(); }
82 const_iterator begin()
const {
return atoms_.begin(); }
83 const_iterator end()
const {
return atoms_.end(); }
84 reverse_iterator rbegin() {
return atoms_.rbegin(); }
85 reverse_iterator rend() {
return atoms_.rend(); }
86 const_reverse_iterator rbegin()
const {
return atoms_.rbegin(); }
87 const_reverse_iterator rend()
const {
return atoms_.rend(); }
90 void dump(llvm::raw_ostream &os = llvm::errs())
const;
103 friend struct llvm::ilist_traits<
Object>;
105 static AtomListType
Object::*getSublistAccess(
Atom *) {
106 return &Object::atoms_;
110 void setParent(
Data *parent) { parent_ = parent; }
122 inline llvm::raw_ostream &operator<<(llvm::raw_ostream &os,
const Object &obj)
bool IsThreadLocal() const
Check whether the object is thread-local.
Definition: object.h:100
Value * Load(uint64_t offset, Type type)
Load a value from an offset.
Definition: object.cpp:190
bool Store(uint64_t offset, Ref< Value > value, Type type)
Store a value to an offset.
Definition: object.cpp:392
void erase(iterator it)
Erases an atom.
Definition: object.h:73
Definition: symbol_table.h:33
void dump(llvm::raw_ostream &os=llvm::errs()) const
Dump the object.
Definition: object.cpp:43
void remove(iterator it)
Removes an atom.
Definition: object.h:71
void removeFromParent()
Removes the segment from the parent.
Definition: object.cpp:21
void AddAtom(Atom *atom, Atom *before=nullptr)
Adds an atom to the atom.
Definition: object.cpp:33
~Object()
Deletes the data segment.
Definition: object.cpp:16
void SetThreadLocal(bool flag=true)
Set the thread local flag.
Definition: object.h:98
void eraseFromParent()
Removes an parent from the data section.
Definition: object.cpp:27
Data * getParent() const
Returns a pointer to the parent section.
Definition: object.h:68