Skip to content

Commit

Permalink
finish stripping EXTLLVM.h
Browse files Browse the repository at this point in the history
  • Loading branch information
nic-donaldson committed Jun 28, 2020
1 parent c7d1a41 commit a800d0f
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 77 deletions.
54 changes: 0 additions & 54 deletions include/EXTLLVM.h
Expand Up @@ -67,61 +67,7 @@ extern "C"
namespace extemp {
namespace EXTLLVM {

inline llvm_zone_stack* llvm_threads_get_zone_stack()
{
return tls_llvm_zone_stack;
}

inline void llvm_threads_set_zone_stack(llvm_zone_stack* Stack)
{
tls_llvm_zone_stack = Stack;
}

inline void llvm_push_zone_stack(llvm_zone_t* Zone)
{
auto stack(reinterpret_cast<llvm_zone_stack*>(malloc(sizeof(llvm_zone_stack))));
stack->head = Zone;
stack->tail = llvm_threads_get_zone_stack();
llvm_threads_set_zone_stack(stack);
return;
}

inline llvm_zone_t* llvm_peek_zone_stack()
{
llvm_zone_t* z = 0;
llvm_zone_stack* stack = llvm_threads_get_zone_stack();
if (unlikely(!stack)) { // for the moment create a "DEFAULT" zone if stack is NULL
#if DEBUG_ZONE_STACK
printf("TRYING TO PEEK AT A NULL ZONE STACK\n");
#endif
llvm_zone_t* z = llvm_zone_create(1024 * 1024 * 1); // default root zone is 1M
llvm_push_zone_stack(z);
stack = llvm_threads_get_zone_stack();
#if DEBUG_ZONE_STACK
printf("Creating new 1M default zone %p:%lld on ZStack:%p\n",z,z->size,stack);
#endif
return z;
}
z = stack->head;
#if DEBUG_ZONE_STACK
printf("%p: peeking at zone %p:%lld\n",stack,z,z->size);
#endif
return z;
}

EXPORT llvm_zone_t* llvm_pop_zone_stack();

inline void llvm_threads_inc_zone_stacksize() {
++tls_llvm_zone_stacksize;
}

inline void llvm_threads_dec_zone_stacksize() {
--tls_llvm_zone_stacksize;
}

inline uint64_t llvm_threads_get_zone_stacksize() {
return tls_llvm_zone_stacksize;
}

void initLLVM();

Expand Down
10 changes: 10 additions & 0 deletions include/EXTZONES.h
Expand Up @@ -45,6 +45,16 @@ llvm_zone_t* llvm_zone_create(uint64_t size);
EXPORT void llvm_zone_destroy(llvm_zone_t* Zone);
llvm_zone_t* llvm_zone_reset(llvm_zone_t* Zone);
EXPORT void* llvm_zone_malloc(llvm_zone_t* zone, uint64_t size);
llvm_zone_stack* llvm_threads_get_zone_stack();
void llvm_threads_set_zone_stack(llvm_zone_stack* Stack);
void llvm_push_zone_stack(llvm_zone_t* Zone);
llvm_zone_t* llvm_peek_zone_stack();

EXPORT llvm_zone_t* llvm_pop_zone_stack();

inline void llvm_threads_inc_zone_stacksize();
inline void llvm_threads_dec_zone_stacksize();
inline uint64_t llvm_threads_get_zone_stacksize();

}
}
24 changes: 1 addition & 23 deletions src/EXTLLVM.cpp
Expand Up @@ -664,29 +664,7 @@ EXPORT void free_after_delay(char* Data, double Delay)



EXPORT llvm_zone_t* llvm_pop_zone_stack()
{
auto stack(llvm_threads_get_zone_stack());
if (unlikely(!stack)) {
#if DEBUG_ZONE_STACK
printf("TRYING TO POP A ZONE FROM AN EMPTY ZONE STACK\n");
#endif
return nullptr;
}
llvm_zone_t* head = stack->head;
llvm_zone_stack* tail = stack->tail;
#if DEBUG_ZONE_STACK
llvm_threads_dec_zone_stacksize();
if (!tail) {
printf("%p: popping zone %p:%lld from stack with no tail\n",stack,head,head->size);
} else {
printf("%p: popping new zone %p:%lld back to old zone %p:%lld\n",stack,head,head->size,tail->head,tail->head->size);
}
#endif
free(stack);
llvm_threads_set_zone_stack(tail);
return head;
}


EXPORT void* llvm_zone_malloc_from_current_zone(uint64_t size)
{
Expand Down
78 changes: 78 additions & 0 deletions src/EXTZONES.cpp
Expand Up @@ -103,5 +103,83 @@ EXPORT void* llvm_zone_malloc(llvm_zone_t* zone, uint64_t size)
return newptr;
}

llvm_zone_stack* llvm_threads_get_zone_stack()
{
return tls_llvm_zone_stack;
}

void llvm_threads_set_zone_stack(llvm_zone_stack* Stack)
{
tls_llvm_zone_stack = Stack;
}

void llvm_push_zone_stack(llvm_zone_t* Zone)
{
auto stack(reinterpret_cast<llvm_zone_stack*>(malloc(sizeof(llvm_zone_stack))));
stack->head = Zone;
stack->tail = llvm_threads_get_zone_stack();
llvm_threads_set_zone_stack(stack);
return;
}

llvm_zone_t* llvm_peek_zone_stack()
{
llvm_zone_t* z = 0;
llvm_zone_stack* stack = llvm_threads_get_zone_stack();
if (unlikely(!stack)) { // for the moment create a "DEFAULT" zone if stack is NULL
#if DEBUG_ZONE_STACK
printf("TRYING TO PEEK AT A NULL ZONE STACK\n");
#endif
llvm_zone_t* z = llvm_zone_create(1024 * 1024 * 1); // default root zone is 1M
llvm_push_zone_stack(z);
stack = llvm_threads_get_zone_stack();
#if DEBUG_ZONE_STACK
printf("Creating new 1M default zone %p:%lld on ZStack:%p\n",z,z->size,stack);
#endif
return z;
}
z = stack->head;
#if DEBUG_ZONE_STACK
printf("%p: peeking at zone %p:%lld\n",stack,z,z->size);
#endif
return z;
}

EXPORT llvm_zone_t* llvm_pop_zone_stack()
{
auto stack(llvm_threads_get_zone_stack());
if (unlikely(!stack)) {
#if DEBUG_ZONE_STACK
printf("TRYING TO POP A ZONE FROM AN EMPTY ZONE STACK\n");
#endif
return nullptr;
}
llvm_zone_t* head = stack->head;
llvm_zone_stack* tail = stack->tail;
#if DEBUG_ZONE_STACK
llvm_threads_dec_zone_stacksize();
if (!tail) {
printf("%p: popping zone %p:%lld from stack with no tail\n",stack,head,head->size);
} else {
printf("%p: popping new zone %p:%lld back to old zone %p:%lld\n",stack,head,head->size,tail->head,tail->head->size);
}
#endif
free(stack);
llvm_threads_set_zone_stack(tail);
return head;
}

void llvm_threads_inc_zone_stacksize() {
++tls_llvm_zone_stacksize;
}

void llvm_threads_dec_zone_stacksize() {
--tls_llvm_zone_stacksize;
}

uint64_t llvm_threads_get_zone_stacksize() {
return tls_llvm_zone_stacksize;
}

} // namespace EXTLLVM
} // namespace extemp

0 comments on commit a800d0f

Please sign in to comment.