|
@@ -1,27 +1,21 @@
|
|
-typedef struct ssaModule ssaModule;
|
|
|
|
-typedef struct ssaValue ssaValue;
|
|
|
|
-typedef struct ssaValueArgs ssaValueArgs;
|
|
|
|
-typedef struct ssaDefer ssaDefer;
|
|
|
|
-typedef struct ssaBlock ssaBlock;
|
|
|
|
-typedef struct ssaProc ssaProc;
|
|
|
|
-typedef struct ssaEdge ssaEdge;
|
|
|
|
-typedef struct ssaRegister ssaRegister;
|
|
|
|
-typedef struct ssaTargetList ssaTargetList;
|
|
|
|
-typedef enum ssaBlockKind ssaBlockKind;
|
|
|
|
-typedef enum ssaBranchPrediction ssaBranchPrediction;
|
|
|
|
-typedef enum ssaDeferExitKind ssaDeferExitKind;
|
|
|
|
|
|
+struct ssaModule;
|
|
|
|
+struct ssaValue;
|
|
|
|
+struct ssaValueArgs;
|
|
|
|
+struct ssaDefer;
|
|
|
|
+struct ssaBlock;
|
|
|
|
+struct ssaProc;
|
|
|
|
+struct ssaEdge;
|
|
|
|
+struct ssaRegister;
|
|
|
|
+struct ssaTargetList;
|
|
|
|
+enum ssaBlockKind;
|
|
|
|
+enum ssaBranchPrediction;
|
|
|
|
+enum ssaDeferExitKind;
|
|
|
|
|
|
|
|
|
|
String ssa_mangle_name(ssaModule *m, String path, Entity *e);
|
|
String ssa_mangle_name(ssaModule *m, String path, Entity *e);
|
|
|
|
|
|
-#define MAP_TYPE ssaValue *
|
|
|
|
-#define MAP_PROC map_ssa_value_
|
|
|
|
-#define MAP_NAME MapSsaValue
|
|
|
|
-#include "map.c"
|
|
|
|
|
|
|
|
-typedef Array(ssaValue *) ssaValueArray;
|
|
|
|
-
|
|
|
|
-#include "ssa_op.c"
|
|
|
|
|
|
+#include "ssa_op.cpp"
|
|
|
|
|
|
#define SSA_DEFAULT_VALUE_ARG_CAPACITY 8
|
|
#define SSA_DEFAULT_VALUE_ARG_CAPACITY 8
|
|
struct ssaValueArgs {
|
|
struct ssaValueArgs {
|
|
@@ -30,6 +24,15 @@ struct ssaValueArgs {
|
|
isize capacity;
|
|
isize capacity;
|
|
ssaValue * backing[SSA_DEFAULT_VALUE_ARG_CAPACITY];
|
|
ssaValue * backing[SSA_DEFAULT_VALUE_ARG_CAPACITY];
|
|
gbAllocator allocator;
|
|
gbAllocator allocator;
|
|
|
|
+
|
|
|
|
+ ssaValue *&operator[](isize i) {
|
|
|
|
+ GB_ASSERT(0 <= i && i <= count);
|
|
|
|
+ return e[i];
|
|
|
|
+ }
|
|
|
|
+ ssaValue * const &operator[](isize i) const {
|
|
|
|
+ GB_ASSERT(0 <= i && i <= count);
|
|
|
|
+ return e[i];
|
|
|
|
+ }
|
|
};
|
|
};
|
|
|
|
|
|
struct ssaValue {
|
|
struct ssaValue {
|
|
@@ -67,10 +70,10 @@ enum ssaBranchPrediction {
|
|
ssaBranch_Unlikely = -1,
|
|
ssaBranch_Unlikely = -1,
|
|
};
|
|
};
|
|
|
|
|
|
-typedef enum ssaDeferKind {
|
|
|
|
|
|
+enum ssaDeferKind {
|
|
ssaDefer_Node,
|
|
ssaDefer_Node,
|
|
ssaDefer_Instr,
|
|
ssaDefer_Instr,
|
|
-} ssaDeferKind;
|
|
|
|
|
|
+};
|
|
|
|
|
|
struct ssaDefer {
|
|
struct ssaDefer {
|
|
ssaDeferKind kind;
|
|
ssaDeferKind kind;
|
|
@@ -97,8 +100,6 @@ struct ssaEdge {
|
|
isize index;
|
|
isize index;
|
|
};
|
|
};
|
|
|
|
|
|
-typedef Array(ssaEdge) ssaEdgeArray;
|
|
|
|
-
|
|
|
|
struct ssaBlock {
|
|
struct ssaBlock {
|
|
i32 id; // Unique identifier but the pointer could be used too
|
|
i32 id; // Unique identifier but the pointer could be used too
|
|
ssaBlockKind kind;
|
|
ssaBlockKind kind;
|
|
@@ -115,9 +116,9 @@ struct ssaBlock {
|
|
// - BlockExit will be a memory control value
|
|
// - BlockExit will be a memory control value
|
|
ssaValue *control;
|
|
ssaValue *control;
|
|
|
|
|
|
- ssaValueArray values;
|
|
|
|
- ssaEdgeArray preds;
|
|
|
|
- ssaEdgeArray succs;
|
|
|
|
|
|
+ Array<ssaValue *> values;
|
|
|
|
+ Array<ssaEdge> preds;
|
|
|
|
+ Array<ssaEdge> succs;
|
|
};
|
|
};
|
|
|
|
|
|
struct ssaTargetList {
|
|
struct ssaTargetList {
|
|
@@ -134,7 +135,7 @@ struct ssaProc {
|
|
Entity * entity;
|
|
Entity * entity;
|
|
DeclInfo * decl_info;
|
|
DeclInfo * decl_info;
|
|
|
|
|
|
- Array(ssaBlock *) blocks;
|
|
|
|
|
|
+ Array<ssaBlock *> blocks;
|
|
ssaBlock * entry; // Entry block
|
|
ssaBlock * entry; // Entry block
|
|
ssaBlock * exit; // Exit block
|
|
ssaBlock * exit; // Exit block
|
|
ssaBlock * curr_block;
|
|
ssaBlock * curr_block;
|
|
@@ -143,9 +144,9 @@ struct ssaProc {
|
|
|
|
|
|
i32 block_id;
|
|
i32 block_id;
|
|
i32 value_id;
|
|
i32 value_id;
|
|
- MapSsaValue values; // Key: Entity *
|
|
|
|
|
|
+ Map<ssaValue *> values; // Key: Entity *
|
|
|
|
|
|
- Array(ssaDefer) defer_stmts;
|
|
|
|
|
|
+ Array<ssaDefer> defer_stmts;
|
|
i32 scope_level;
|
|
i32 scope_level;
|
|
};
|
|
};
|
|
|
|
|
|
@@ -161,10 +162,10 @@ struct ssaModule {
|
|
gbAllocator tmp_allocator;
|
|
gbAllocator tmp_allocator;
|
|
gbArena tmp_arena;
|
|
gbArena tmp_arena;
|
|
|
|
|
|
- MapEntity min_dep_map; // Key: Entity *
|
|
|
|
- MapSsaValue values; // Key: Entity *
|
|
|
|
|
|
+ Map<Entity *> min_dep_map; // Key: Entity *
|
|
|
|
+ Map<ssaValue *> values; // Key: Entity *
|
|
// List of registers for the specific architecture
|
|
// List of registers for the specific architecture
|
|
- Array(ssaRegister) registers;
|
|
|
|
|
|
+ Array<ssaRegister> registers;
|
|
|
|
|
|
ssaProc *proc; // current procedure
|
|
ssaProc *proc; // current procedure
|
|
|
|
|
|
@@ -172,19 +173,19 @@ struct ssaModule {
|
|
|
|
|
|
u32 stmt_state_flags;
|
|
u32 stmt_state_flags;
|
|
|
|
|
|
- Array(ssaProc *) procs;
|
|
|
|
- ssaValueArray procs_to_generate;
|
|
|
|
|
|
+ Array<ssaProc *> procs;
|
|
|
|
+ Array<ssaValue *> procs_to_generate;
|
|
};
|
|
};
|
|
|
|
|
|
-typedef enum ssaAddrKind {
|
|
|
|
|
|
+enum ssaAddrKind {
|
|
ssaAddr_Default,
|
|
ssaAddr_Default,
|
|
ssaAddr_Map,
|
|
ssaAddr_Map,
|
|
-} ssaAddrKind;
|
|
|
|
|
|
+};
|
|
|
|
|
|
-typedef struct ssaAddr {
|
|
|
|
|
|
+struct ssaAddr {
|
|
ssaValue * addr;
|
|
ssaValue * addr;
|
|
ssaAddrKind kind;
|
|
ssaAddrKind kind;
|
|
-} ssaAddr;
|
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -287,7 +288,7 @@ void ssa_add_arg(ssaValueArgs *va, ssaValue *arg) {
|
|
} else {
|
|
} else {
|
|
isize old_cap_size = va->capacity * gb_size_of(ssaValue *);
|
|
isize old_cap_size = va->capacity * gb_size_of(ssaValue *);
|
|
isize new_cap_size = capacity * gb_size_of(ssaValue *);
|
|
isize new_cap_size = capacity * gb_size_of(ssaValue *);
|
|
- va->e = gb_resize(va->allocator, va->e, old_cap_size, new_cap_size);
|
|
|
|
|
|
+ *(cast(void **)&va->e) = gb_resize(va->allocator, va->e, old_cap_size, new_cap_size);
|
|
}
|
|
}
|
|
va->capacity = capacity;
|
|
va->capacity = capacity;
|
|
}
|
|
}
|
|
@@ -378,9 +379,9 @@ ssaValue *ssa_const_i64 (ssaProc *p, Type *t, i64 c) { return ssa
|
|
ssaValue *ssa_const_f32 (ssaProc *p, Type *t, f32 c) { return ssa_const_val(p, ssaOp_Const32F, t, exact_value_float(c)); }
|
|
ssaValue *ssa_const_f32 (ssaProc *p, Type *t, f32 c) { return ssa_const_val(p, ssaOp_Const32F, t, exact_value_float(c)); }
|
|
ssaValue *ssa_const_f64 (ssaProc *p, Type *t, f64 c) { return ssa_const_val(p, ssaOp_Const64F, t, exact_value_float(c)); }
|
|
ssaValue *ssa_const_f64 (ssaProc *p, Type *t, f64 c) { return ssa_const_val(p, ssaOp_Const64F, t, exact_value_float(c)); }
|
|
ssaValue *ssa_const_string (ssaProc *p, Type *t, String c) { return ssa_const_val(p, ssaOp_ConstString, t, exact_value_string(c)); }
|
|
ssaValue *ssa_const_string (ssaProc *p, Type *t, String c) { return ssa_const_val(p, ssaOp_ConstString, t, exact_value_string(c)); }
|
|
-ssaValue *ssa_const_empty_string(ssaProc *p, Type *t) { return ssa_const_val(p, ssaOp_ConstString, t, (ExactValue){0}); }
|
|
|
|
|
|
+ssaValue *ssa_const_empty_string(ssaProc *p, Type *t) { return ssa_const_val(p, ssaOp_ConstString, t, empty_exact_value); }
|
|
ssaValue *ssa_const_slice (ssaProc *p, Type *t, ExactValue v) { return ssa_const_val(p, ssaOp_ConstSlice, t, v); }
|
|
ssaValue *ssa_const_slice (ssaProc *p, Type *t, ExactValue v) { return ssa_const_val(p, ssaOp_ConstSlice, t, v); }
|
|
-ssaValue *ssa_const_nil (ssaProc *p, Type *t) { return ssa_const_val(p, ssaOp_ConstNil, t, (ExactValue){0}); }
|
|
|
|
|
|
+ssaValue *ssa_const_nil (ssaProc *p, Type *t) { return ssa_const_val(p, ssaOp_ConstNil, t, empty_exact_value); }
|
|
|
|
|
|
ssaValue *ssa_const_int(ssaProc *p, Type *t, i64 c) {
|
|
ssaValue *ssa_const_int(ssaProc *p, Type *t, i64 c) {
|
|
switch (8*type_size_of(p->allocator, t)) {
|
|
switch (8*type_size_of(p->allocator, t)) {
|
|
@@ -399,21 +400,21 @@ ssaValue *ssa_const_int(ssaProc *p, Type *t, i64 c) {
|
|
ssaAddr ssa_build_addr (ssaProc *p, AstNode *expr);
|
|
ssaAddr ssa_build_addr (ssaProc *p, AstNode *expr);
|
|
ssaValue *ssa_build_expr (ssaProc *p, AstNode *expr);
|
|
ssaValue *ssa_build_expr (ssaProc *p, AstNode *expr);
|
|
void ssa_build_stmt (ssaProc *p, AstNode *node);
|
|
void ssa_build_stmt (ssaProc *p, AstNode *node);
|
|
-void ssa_build_stmt_list(ssaProc *p, AstNodeArray nodes);
|
|
|
|
|
|
+void ssa_build_stmt_list(ssaProc *p, Array<AstNode *> nodes);
|
|
ssaValue *ssa_emit_deep_field_ptr_index(ssaProc *p, ssaValue *e, Selection sel);
|
|
ssaValue *ssa_emit_deep_field_ptr_index(ssaProc *p, ssaValue *e, Selection sel);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void ssa_reset_value_args(ssaValue *v) {
|
|
void ssa_reset_value_args(ssaValue *v) {
|
|
for_array(i, v->args) {
|
|
for_array(i, v->args) {
|
|
- v->args.e[i]->uses--;
|
|
|
|
|
|
+ v->args[i]->uses--;
|
|
}
|
|
}
|
|
v->args.count = 0;
|
|
v->args.count = 0;
|
|
}
|
|
}
|
|
|
|
|
|
void ssa_reset(ssaValue *v, ssaOp op) {
|
|
void ssa_reset(ssaValue *v, ssaOp op) {
|
|
v->op = op;
|
|
v->op = op;
|
|
- v->exact_value = (ExactValue){0};
|
|
|
|
|
|
+ v->exact_value = empty_exact_value;
|
|
ssa_reset_value_args(v);
|
|
ssa_reset_value_args(v);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -425,7 +426,7 @@ ssaValue *ssa_get_last_value(ssaBlock *b) {
|
|
if (len <= 0) {
|
|
if (len <= 0) {
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
- ssaValue *v = b->values.e[len-1];
|
|
|
|
|
|
+ ssaValue *v = b->values[len-1];
|
|
return v;
|
|
return v;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -451,7 +452,7 @@ void ssa_build_defer_stmt(ssaProc *p, ssaDefer d) {
|
|
void ssa_emit_defer_stmts(ssaProc *p, ssaDeferExitKind kind, ssaBlock *b) {
|
|
void ssa_emit_defer_stmts(ssaProc *p, ssaDeferExitKind kind, ssaBlock *b) {
|
|
isize count = p->defer_stmts.count;
|
|
isize count = p->defer_stmts.count;
|
|
for (isize i = count-1; i >= 0; i--) {
|
|
for (isize i = count-1; i >= 0; i--) {
|
|
- ssaDefer d = p->defer_stmts.e[i];
|
|
|
|
|
|
+ ssaDefer d = p->defer_stmts[i];
|
|
if (kind == ssaDeferExit_Default) {
|
|
if (kind == ssaDeferExit_Default) {
|
|
gb_printf_err("scope_level %d %d\n", p->scope_level, d.scope_level);
|
|
gb_printf_err("scope_level %d %d\n", p->scope_level, d.scope_level);
|
|
if (p->scope_level == d.scope_level &&
|
|
if (p->scope_level == d.scope_level &&
|
|
@@ -579,7 +580,7 @@ ssaProc *ssa_new_proc(ssaModule *m, String name, Entity *entity, DeclInfo *decl_
|
|
|
|
|
|
array_init(&p->blocks, heap_allocator());
|
|
array_init(&p->blocks, heap_allocator());
|
|
array_init(&p->defer_stmts, heap_allocator());
|
|
array_init(&p->defer_stmts, heap_allocator());
|
|
- map_ssa_value_init(&p->values, heap_allocator());
|
|
|
|
|
|
+ map_init(&p->values, heap_allocator());
|
|
|
|
|
|
return p;
|
|
return p;
|
|
}
|
|
}
|
|
@@ -592,14 +593,14 @@ ssaAddr ssa_add_local(ssaProc *p, Entity *e, AstNode *expr) {
|
|
ssaValue *local = ssa_new_value0(p, ssaOp_Local, t);
|
|
ssaValue *local = ssa_new_value0(p, ssaOp_Local, t);
|
|
p->curr_block = cb;
|
|
p->curr_block = cb;
|
|
|
|
|
|
- map_ssa_value_set(&p->values, hash_pointer(e), local);
|
|
|
|
- map_ssa_value_set(&p->module->values, hash_pointer(e), local);
|
|
|
|
|
|
+ map_set(&p->values, hash_pointer(e), local);
|
|
|
|
+ map_set(&p->module->values, hash_pointer(e), local);
|
|
local->comment_string = e->token.string;
|
|
local->comment_string = e->token.string;
|
|
ssa_new_value1(p, ssaOp_Zero, t, local);
|
|
ssa_new_value1(p, ssaOp_Zero, t, local);
|
|
return ssa_addr(local);
|
|
return ssa_addr(local);
|
|
}
|
|
}
|
|
ssaAddr ssa_add_local_for_ident(ssaProc *p, AstNode *name) {
|
|
ssaAddr ssa_add_local_for_ident(ssaProc *p, AstNode *name) {
|
|
- Entity **found = map_entity_get(&p->module->info->definitions, hash_pointer(name));
|
|
|
|
|
|
+ Entity **found = map_get(&p->module->info->definitions, hash_pointer(name));
|
|
if (found) {
|
|
if (found) {
|
|
Entity *e = *found;
|
|
Entity *e = *found;
|
|
return ssa_add_local(p, e, name);
|
|
return ssa_add_local(p, e, name);
|
|
@@ -705,7 +706,7 @@ ssaValue *ssa_get_using_variable(ssaProc *p, Entity *e) {
|
|
Entity *parent = e->using_parent;
|
|
Entity *parent = e->using_parent;
|
|
Selection sel = lookup_field(p->allocator, parent->type, name, false);
|
|
Selection sel = lookup_field(p->allocator, parent->type, name, false);
|
|
GB_ASSERT(sel.entity != NULL);
|
|
GB_ASSERT(sel.entity != NULL);
|
|
- ssaValue **pv = map_ssa_value_get(&p->module->values, hash_pointer(parent));
|
|
|
|
|
|
+ ssaValue **pv = map_get(&p->module->values, hash_pointer(parent));
|
|
ssaValue *v = NULL;
|
|
ssaValue *v = NULL;
|
|
if (pv != NULL) {
|
|
if (pv != NULL) {
|
|
v = *pv;
|
|
v = *pv;
|
|
@@ -721,7 +722,7 @@ ssaAddr ssa_build_addr_from_entity(ssaProc *p, Entity *e, AstNode *expr) {
|
|
GB_ASSERT(e != NULL);
|
|
GB_ASSERT(e != NULL);
|
|
|
|
|
|
ssaValue *v = NULL;
|
|
ssaValue *v = NULL;
|
|
- ssaValue **found = map_ssa_value_get(&p->module->values, hash_pointer(e));
|
|
|
|
|
|
+ ssaValue **found = map_get(&p->module->values, hash_pointer(e));
|
|
if (found) {
|
|
if (found) {
|
|
v = *found;
|
|
v = *found;
|
|
} else if (e->kind == Entity_Variable && e->flags & EntityFlag_Using) {
|
|
} else if (e->kind == Entity_Variable && e->flags & EntityFlag_Using) {
|
|
@@ -782,7 +783,7 @@ ssaValue *ssa_emit_conv(ssaProc *p, ssaValue *v, Type *t) {
|
|
// NOTE(bill): Returns NULL if not possible
|
|
// NOTE(bill): Returns NULL if not possible
|
|
ssaValue *ssa_address_from_load_or_generate_local(ssaProc *p, ssaValue *v) {
|
|
ssaValue *ssa_address_from_load_or_generate_local(ssaProc *p, ssaValue *v) {
|
|
if (v->op == ssaOp_Load) {
|
|
if (v->op == ssaOp_Load) {
|
|
- return v->args.e[0];
|
|
|
|
|
|
+ return v->args[0];
|
|
}
|
|
}
|
|
ssaAddr addr = ssa_add_local_generated(p, v->type);
|
|
ssaAddr addr = ssa_add_local_generated(p, v->type);
|
|
ssa_new_value2(p, ssaOp_Store, addr.addr->type, addr.addr, v);
|
|
ssa_new_value2(p, ssaOp_Store, addr.addr->type, addr.addr, v);
|
|
@@ -863,7 +864,7 @@ ssaValue *ssa_emit_ptr_index(ssaProc *p, ssaValue *s, i64 index) {
|
|
ssaValue *ssa_emit_value_index(ssaProc *p, ssaValue *s, i64 index) {
|
|
ssaValue *ssa_emit_value_index(ssaProc *p, ssaValue *s, i64 index) {
|
|
if (s->op == ssaOp_Load) {
|
|
if (s->op == ssaOp_Load) {
|
|
if (!can_ssa_type(s->type)) {
|
|
if (!can_ssa_type(s->type)) {
|
|
- ssaValue *e = ssa_emit_ptr_index(p, s->args.e[0], index);
|
|
|
|
|
|
+ ssaValue *e = ssa_emit_ptr_index(p, s->args[0], index);
|
|
return ssa_emit_load(p, e);
|
|
return ssa_emit_load(p, e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -930,7 +931,7 @@ ssaValue *ssa_emit_deep_field_ptr_index(ssaProc *p, ssaValue *e, Selection sel)
|
|
Type *type = type_deref(e->type);
|
|
Type *type = type_deref(e->type);
|
|
|
|
|
|
for_array(i, sel.index) {
|
|
for_array(i, sel.index) {
|
|
- i32 index = cast(i32)sel.index.e[i];
|
|
|
|
|
|
+ i32 index = cast(i32)sel.index[i];
|
|
if (is_type_pointer(type)) {
|
|
if (is_type_pointer(type)) {
|
|
type = type_deref(type);
|
|
type = type_deref(type);
|
|
e = ssa_emit_load(p, e);
|
|
e = ssa_emit_load(p, e);
|
|
@@ -994,14 +995,14 @@ ssaValue *ssa_emit_deep_field_value_index(ssaProc *p, ssaValue *e, Selection sel
|
|
Type *type = e->type;
|
|
Type *type = e->type;
|
|
if (e->op == ssaOp_Load) {
|
|
if (e->op == ssaOp_Load) {
|
|
if (!can_ssa_type(e->type)) {
|
|
if (!can_ssa_type(e->type)) {
|
|
- ssaValue *ptr = ssa_emit_deep_field_ptr_index(p, e->args.e[0], sel);
|
|
|
|
|
|
+ ssaValue *ptr = ssa_emit_deep_field_ptr_index(p, e->args[0], sel);
|
|
return ssa_emit_load(p, ptr);
|
|
return ssa_emit_load(p, ptr);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
GB_ASSERT(can_ssa_type(e->type));
|
|
GB_ASSERT(can_ssa_type(e->type));
|
|
|
|
|
|
for_array(i, sel.index) {
|
|
for_array(i, sel.index) {
|
|
- i32 index = cast(i32)sel.index.e[i];
|
|
|
|
|
|
+ i32 index = cast(i32)sel.index[i];
|
|
if (is_type_pointer(type)) {
|
|
if (is_type_pointer(type)) {
|
|
e = ssa_emit_load(p, e);
|
|
e = ssa_emit_load(p, e);
|
|
}
|
|
}
|
|
@@ -1071,7 +1072,7 @@ ssaAddr ssa_build_addr(ssaProc *p, AstNode *expr) {
|
|
// GB_ASSERT(e->kind == Entity_Variable);
|
|
// GB_ASSERT(e->kind == Entity_Variable);
|
|
// GB_ASSERT(e->flags & EntityFlag_TypeField);
|
|
// GB_ASSERT(e->flags & EntityFlag_TypeField);
|
|
// String name = e->token.string;
|
|
// String name = e->token.string;
|
|
- // if (str_eq(name, str_lit("names"))) {
|
|
|
|
|
|
+ // if (name == "names") {
|
|
// ssaValue *ti_ptr = ir_type_info(p, type);
|
|
// ssaValue *ti_ptr = ir_type_info(p, type);
|
|
|
|
|
|
// ssaValue *names_ptr = NULL;
|
|
// ssaValue *names_ptr = NULL;
|
|
@@ -1685,7 +1686,7 @@ ssaValue *ssa_build_expr(ssaProc *p, AstNode *expr) {
|
|
case_end;
|
|
case_end;
|
|
|
|
|
|
case_ast_node(i, Ident, expr);
|
|
case_ast_node(i, Ident, expr);
|
|
- Entity *e = *map_entity_get(&p->module->info->uses, hash_pointer(expr));
|
|
|
|
|
|
+ Entity *e = *map_get(&p->module->info->uses, hash_pointer(expr));
|
|
if (e->kind == Entity_Builtin) {
|
|
if (e->kind == Entity_Builtin) {
|
|
Token token = ast_node_token(expr);
|
|
Token token = ast_node_token(expr);
|
|
GB_PANIC("TODO(bill): ssa_build_expr Entity_Builtin `%.*s`\n"
|
|
GB_PANIC("TODO(bill): ssa_build_expr Entity_Builtin `%.*s`\n"
|
|
@@ -1697,7 +1698,7 @@ ssaValue *ssa_build_expr(ssaProc *p, AstNode *expr) {
|
|
return NULL;
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
|
|
- ssaValue **found = map_ssa_value_get(&p->module->values, hash_pointer(e));
|
|
|
|
|
|
+ ssaValue **found = map_get(&p->module->values, hash_pointer(e));
|
|
if (found) {
|
|
if (found) {
|
|
ssaValue *v = *found;
|
|
ssaValue *v = *found;
|
|
if (v->op == ssaOp_Proc) {
|
|
if (v->op == ssaOp_Proc) {
|
|
@@ -1835,9 +1836,9 @@ ssaValue *ssa_build_expr(ssaProc *p, AstNode *expr) {
|
|
|
|
|
|
|
|
|
|
case_ast_node(ce, CallExpr, expr);
|
|
case_ast_node(ce, CallExpr, expr);
|
|
- if (map_tav_get(&p->module->info->types, hash_pointer(ce->proc))->mode == Addressing_Type) {
|
|
|
|
|
|
+ if (map_get(&p->module->info->types, hash_pointer(ce->proc))->mode == Addressing_Type) {
|
|
GB_ASSERT(ce->args.count == 1);
|
|
GB_ASSERT(ce->args.count == 1);
|
|
- ssaValue *x = ssa_build_expr(p, ce->args.e[0]);
|
|
|
|
|
|
+ ssaValue *x = ssa_build_expr(p, ce->args[0]);
|
|
return ssa_emit_conv(p, x, tv.type);
|
|
return ssa_emit_conv(p, x, tv.type);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1861,9 +1862,9 @@ ssaValue *ssa_build_expr(ssaProc *p, AstNode *expr) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-void ssa_build_stmt_list(ssaProc *p, AstNodeArray nodes) {
|
|
|
|
|
|
+void ssa_build_stmt_list(ssaProc *p, Array<AstNode *> nodes) {
|
|
for_array(i, nodes) {
|
|
for_array(i, nodes) {
|
|
- ssa_build_stmt(p, nodes.e[i]);
|
|
|
|
|
|
+ ssa_build_stmt(p, nodes[i]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1946,7 +1947,7 @@ void ssa_build_stmt_internal(ssaProc *p, AstNode *node) {
|
|
|
|
|
|
case_ast_node(us, UsingStmt, node);
|
|
case_ast_node(us, UsingStmt, node);
|
|
for_array(i, us->list) {
|
|
for_array(i, us->list) {
|
|
- AstNode *decl = unparen_expr(us->list.e[i]);
|
|
|
|
|
|
+ AstNode *decl = unparen_expr(us->list[i]);
|
|
if (decl->kind == AstNode_ValueDecl) {
|
|
if (decl->kind == AstNode_ValueDecl) {
|
|
ssa_build_stmt(p, decl);
|
|
ssa_build_stmt(p, decl);
|
|
}
|
|
}
|
|
@@ -1973,19 +1974,19 @@ void ssa_build_stmt_internal(ssaProc *p, AstNode *node) {
|
|
gbTempArenaMemory tmp = gb_temp_arena_memory_begin(&m->tmp_arena);
|
|
gbTempArenaMemory tmp = gb_temp_arena_memory_begin(&m->tmp_arena);
|
|
if (vd->values.count == 0) {
|
|
if (vd->values.count == 0) {
|
|
for_array(i, vd->names) {
|
|
for_array(i, vd->names) {
|
|
- AstNode *name = vd->names.e[i];
|
|
|
|
|
|
+ AstNode *name = vd->names[i];
|
|
if (!ssa_is_blank_ident(name)) {
|
|
if (!ssa_is_blank_ident(name)) {
|
|
ssa_add_local_for_ident(p, name);
|
|
ssa_add_local_for_ident(p, name);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- Array(ssaAddr) lvals = {0};
|
|
|
|
- ssaValueArray inits = {0};
|
|
|
|
- array_init_reserve(&lvals, m->tmp_allocator, vd->names.count);
|
|
|
|
- array_init_reserve(&inits, m->tmp_allocator, vd->names.count);
|
|
|
|
|
|
+ Array<ssaAddr> lvals = {0};
|
|
|
|
+ Array<ssaValue *> inits = {0};
|
|
|
|
+ array_init(&lvals, m->tmp_allocator, vd->names.count);
|
|
|
|
+ array_init(&inits, m->tmp_allocator, vd->names.count);
|
|
|
|
|
|
for_array(i, vd->names) {
|
|
for_array(i, vd->names) {
|
|
- AstNode *name = vd->names.e[i];
|
|
|
|
|
|
+ AstNode *name = vd->names[i];
|
|
ssaAddr lval = ssa_addr(NULL);
|
|
ssaAddr lval = ssa_addr(NULL);
|
|
if (!ssa_is_blank_ident(name)) {
|
|
if (!ssa_is_blank_ident(name)) {
|
|
lval = ssa_add_local_for_ident(p, name);
|
|
lval = ssa_add_local_for_ident(p, name);
|
|
@@ -1995,7 +1996,7 @@ void ssa_build_stmt_internal(ssaProc *p, AstNode *node) {
|
|
}
|
|
}
|
|
|
|
|
|
for_array(i, vd->values) {
|
|
for_array(i, vd->values) {
|
|
- ssaValue *init = ssa_build_expr(p, vd->values.e[i]);
|
|
|
|
|
|
+ ssaValue *init = ssa_build_expr(p, vd->values[i]);
|
|
if (init == NULL) { // TODO(bill): remove this
|
|
if (init == NULL) { // TODO(bill): remove this
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
@@ -2012,7 +2013,7 @@ void ssa_build_stmt_internal(ssaProc *p, AstNode *node) {
|
|
}
|
|
}
|
|
|
|
|
|
for_array(i, inits) {
|
|
for_array(i, inits) {
|
|
- ssa_addr_store(p, lvals.e[i], inits.e[i]);
|
|
|
|
|
|
+ ssa_addr_store(p, lvals[i], inits[i]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2030,11 +2031,11 @@ void ssa_build_stmt_internal(ssaProc *p, AstNode *node) {
|
|
|
|
|
|
switch (as->op.kind) {
|
|
switch (as->op.kind) {
|
|
case Token_Eq: {
|
|
case Token_Eq: {
|
|
- Array(ssaAddr) lvals = {0};
|
|
|
|
|
|
+ Array<ssaAddr> lvals = {0};
|
|
array_init(&lvals, m->tmp_allocator);
|
|
array_init(&lvals, m->tmp_allocator);
|
|
|
|
|
|
for_array(i, as->lhs) {
|
|
for_array(i, as->lhs) {
|
|
- AstNode *lhs = as->lhs.e[i];
|
|
|
|
|
|
+ AstNode *lhs = as->lhs[i];
|
|
ssaAddr lval = {0};
|
|
ssaAddr lval = {0};
|
|
if (!ssa_is_blank_ident(lhs)) {
|
|
if (!ssa_is_blank_ident(lhs)) {
|
|
lval = ssa_build_addr(p, lhs);
|
|
lval = ssa_build_addr(p, lhs);
|
|
@@ -2044,28 +2045,28 @@ void ssa_build_stmt_internal(ssaProc *p, AstNode *node) {
|
|
|
|
|
|
if (as->lhs.count == as->rhs.count) {
|
|
if (as->lhs.count == as->rhs.count) {
|
|
if (as->lhs.count == 1) {
|
|
if (as->lhs.count == 1) {
|
|
- AstNode *rhs = as->rhs.e[0];
|
|
|
|
|
|
+ AstNode *rhs = as->rhs[0];
|
|
ssaValue *init = ssa_build_expr(p, rhs);
|
|
ssaValue *init = ssa_build_expr(p, rhs);
|
|
- ssa_addr_store(p, lvals.e[0], init);
|
|
|
|
|
|
+ ssa_addr_store(p, lvals[0], init);
|
|
} else {
|
|
} else {
|
|
- ssaValueArray inits;
|
|
|
|
- array_init_reserve(&inits, m->tmp_allocator, lvals.count);
|
|
|
|
|
|
+ Array<ssaValue *> inits;
|
|
|
|
+ array_init(&inits, m->tmp_allocator, lvals.count);
|
|
|
|
|
|
for_array(i, as->rhs) {
|
|
for_array(i, as->rhs) {
|
|
- ssaValue *init = ssa_build_expr(p, as->rhs.e[i]);
|
|
|
|
|
|
+ ssaValue *init = ssa_build_expr(p, as->rhs[i]);
|
|
array_add(&inits, init);
|
|
array_add(&inits, init);
|
|
}
|
|
}
|
|
|
|
|
|
for_array(i, inits) {
|
|
for_array(i, inits) {
|
|
- ssa_addr_store(p, lvals.e[i], inits.e[i]);
|
|
|
|
|
|
+ ssa_addr_store(p, lvals[i], inits[i]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- ssaValueArray inits;
|
|
|
|
- array_init_reserve(&inits, m->tmp_allocator, lvals.count);
|
|
|
|
|
|
+ Array<ssaValue *> inits;
|
|
|
|
+ array_init(&inits, m->tmp_allocator, lvals.count);
|
|
|
|
|
|
for_array(i, as->rhs) {
|
|
for_array(i, as->rhs) {
|
|
- ssaValue *init = ssa_build_expr(p, as->rhs.e[i]);
|
|
|
|
|
|
+ ssaValue *init = ssa_build_expr(p, as->rhs[i]);
|
|
Type *t = base_type(init->type);
|
|
Type *t = base_type(init->type);
|
|
// TODO(bill): refactor for code reuse as this is repeated a bit
|
|
// TODO(bill): refactor for code reuse as this is repeated a bit
|
|
if (t->kind == Type_Tuple) {
|
|
if (t->kind == Type_Tuple) {
|
|
@@ -2080,7 +2081,7 @@ void ssa_build_stmt_internal(ssaProc *p, AstNode *node) {
|
|
}
|
|
}
|
|
|
|
|
|
for_array(i, inits) {
|
|
for_array(i, inits) {
|
|
- ssa_addr_store(p, lvals.e[i], inits.e[i]);
|
|
|
|
|
|
+ ssa_addr_store(p, lvals[i], inits[i]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} break;
|
|
} break;
|
|
@@ -2091,8 +2092,8 @@ void ssa_build_stmt_internal(ssaProc *p, AstNode *node) {
|
|
// +=, -=, etc
|
|
// +=, -=, etc
|
|
i32 op = cast(i32)as->op.kind;
|
|
i32 op = cast(i32)as->op.kind;
|
|
op += Token_Add - Token_AddEq; // Convert += to +
|
|
op += Token_Add - Token_AddEq; // Convert += to +
|
|
- ssaAddr lhs = ssa_build_addr(p, as->lhs.e[0]);
|
|
|
|
- ssaValue *value = ssa_build_expr(p, as->rhs.e[0]);
|
|
|
|
|
|
+ ssaAddr lhs = ssa_build_addr(p, as->lhs[0]);
|
|
|
|
+ ssaValue *value = ssa_build_expr(p, as->rhs[0]);
|
|
ssa_build_assign_op(p, lhs, value, cast(TokenKind)op);
|
|
ssa_build_assign_op(p, lhs, value, cast(TokenKind)op);
|
|
} break;
|
|
} break;
|
|
}
|
|
}
|
|
@@ -2316,7 +2317,7 @@ void ssa_print_reg_value(gbFile *f, ssaValue *v) {
|
|
|
|
|
|
for_array(i, v->args) {
|
|
for_array(i, v->args) {
|
|
gb_fprintf(f, " ");
|
|
gb_fprintf(f, " ");
|
|
- ssa_print_value(f, v->args.e[i]);
|
|
|
|
|
|
+ ssa_print_value(f, v->args[i]);
|
|
}
|
|
}
|
|
|
|
|
|
if (v->comment_string.len > 0) {
|
|
if (v->comment_string.len > 0) {
|
|
@@ -2335,12 +2336,12 @@ void ssa_print_proc(gbFile *f, ssaProc *p) {
|
|
bool *printed = gb_alloc_array(heap_allocator(), bool, p->value_id+1);
|
|
bool *printed = gb_alloc_array(heap_allocator(), bool, p->value_id+1);
|
|
|
|
|
|
for_array(i, p->blocks) {
|
|
for_array(i, p->blocks) {
|
|
- ssaBlock *b = p->blocks.e[i];
|
|
|
|
|
|
+ ssaBlock *b = p->blocks[i];
|
|
gb_fprintf(f, " b%d:", b->id);
|
|
gb_fprintf(f, " b%d:", b->id);
|
|
if (b->preds.count > 0) {
|
|
if (b->preds.count > 0) {
|
|
gb_fprintf(f, " <-");
|
|
gb_fprintf(f, " <-");
|
|
for_array(j, b->preds) {
|
|
for_array(j, b->preds) {
|
|
- ssaBlock *pred = b->preds.e[j].block;
|
|
|
|
|
|
+ ssaBlock *pred = b->preds[j].block;
|
|
gb_fprintf(f, " b%d", pred->id);
|
|
gb_fprintf(f, " b%d", pred->id);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -2351,7 +2352,7 @@ void ssa_print_proc(gbFile *f, ssaProc *p) {
|
|
|
|
|
|
isize n = 0;
|
|
isize n = 0;
|
|
for_array(j, b->values) {
|
|
for_array(j, b->values) {
|
|
- ssaValue *v = b->values.e[j];
|
|
|
|
|
|
+ ssaValue *v = b->values[j];
|
|
if (v->op != ssaOp_Phi) {
|
|
if (v->op != ssaOp_Phi) {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
@@ -2363,13 +2364,13 @@ void ssa_print_proc(gbFile *f, ssaProc *p) {
|
|
while (n < b->values.count) {
|
|
while (n < b->values.count) {
|
|
isize m = 0;
|
|
isize m = 0;
|
|
for_array(j, b->values) {
|
|
for_array(j, b->values) {
|
|
- ssaValue *v = b->values.e[j];
|
|
|
|
|
|
+ ssaValue *v = b->values[j];
|
|
if (printed[v->id]) {
|
|
if (printed[v->id]) {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
bool skip = false;
|
|
bool skip = false;
|
|
for_array(k, v->args) {
|
|
for_array(k, v->args) {
|
|
- ssaValue *w = v->args.e[k];
|
|
|
|
|
|
+ ssaValue *w = v->args[k];
|
|
if (w != NULL && w->block == b && !printed[w->id]) {
|
|
if (w != NULL && w->block == b && !printed[w->id]) {
|
|
skip = true;
|
|
skip = true;
|
|
break;
|
|
break;
|
|
@@ -2387,7 +2388,7 @@ void ssa_print_proc(gbFile *f, ssaProc *p) {
|
|
if (m == n) {
|
|
if (m == n) {
|
|
gb_fprintf(f, "!!!!DepCycle!!!!\n");
|
|
gb_fprintf(f, "!!!!DepCycle!!!!\n");
|
|
for_array(k, b->values) {
|
|
for_array(k, b->values) {
|
|
- ssaValue *v = b->values.e[k];
|
|
|
|
|
|
+ ssaValue *v = b->values[k];
|
|
if (printed[v->id]) {
|
|
if (printed[v->id]) {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
@@ -2401,14 +2402,14 @@ void ssa_print_proc(gbFile *f, ssaProc *p) {
|
|
|
|
|
|
if (b->kind == ssaBlock_Plain) {
|
|
if (b->kind == ssaBlock_Plain) {
|
|
GB_ASSERT(b->succs.count == 1);
|
|
GB_ASSERT(b->succs.count == 1);
|
|
- ssaBlock *next = b->succs.e[0].block;
|
|
|
|
|
|
+ ssaBlock *next = b->succs[0].block;
|
|
gb_fprintf(f, " ");
|
|
gb_fprintf(f, " ");
|
|
gb_fprintf(f, "jump b%d", next->id);
|
|
gb_fprintf(f, "jump b%d", next->id);
|
|
gb_fprintf(f, "\n");
|
|
gb_fprintf(f, "\n");
|
|
} else if (b->kind == ssaBlock_If) {
|
|
} else if (b->kind == ssaBlock_If) {
|
|
GB_ASSERT(b->succs.count == 2);
|
|
GB_ASSERT(b->succs.count == 2);
|
|
- ssaBlock *yes = b->succs.e[0].block;
|
|
|
|
- ssaBlock *no = b->succs.e[1].block;
|
|
|
|
|
|
+ ssaBlock *yes = b->succs[0].block;
|
|
|
|
+ ssaBlock *no = b->succs[1].block;
|
|
gb_fprintf(f, " ");
|
|
gb_fprintf(f, " ");
|
|
gb_fprintf(f, "branch v%d, b%d, b%d", b->control->id, yes->id, no->id);
|
|
gb_fprintf(f, "branch v%d, b%d, b%d", b->control->id, yes->id, no->id);
|
|
gb_fprintf(f, "\n");
|
|
gb_fprintf(f, "\n");
|
|
@@ -2479,7 +2480,7 @@ bool ssa_generate(Parser *parser, CheckerInfo *info) {
|
|
m.tmp_allocator = gb_arena_allocator(&m.tmp_arena);
|
|
m.tmp_allocator = gb_arena_allocator(&m.tmp_arena);
|
|
m.allocator = gb_arena_allocator(&m.arena);
|
|
m.allocator = gb_arena_allocator(&m.arena);
|
|
|
|
|
|
- map_ssa_value_init(&m.values, heap_allocator());
|
|
|
|
|
|
+ map_init(&m.values, heap_allocator());
|
|
array_init(&m.registers, heap_allocator());
|
|
array_init(&m.registers, heap_allocator());
|
|
array_init(&m.procs, heap_allocator());
|
|
array_init(&m.procs, heap_allocator());
|
|
array_init(&m.procs_to_generate, heap_allocator());
|
|
array_init(&m.procs_to_generate, heap_allocator());
|
|
@@ -2491,21 +2492,21 @@ bool ssa_generate(Parser *parser, CheckerInfo *info) {
|
|
bool has_win_main = false;
|
|
bool has_win_main = false;
|
|
|
|
|
|
for_array(i, info->entities.entries) {
|
|
for_array(i, info->entities.entries) {
|
|
- MapDeclInfoEntry *entry = &info->entities.entries.e[i];
|
|
|
|
- Entity *e = cast(Entity *)cast(uintptr)entry->key.key;
|
|
|
|
|
|
+ auto *entry = &info->entities.entries[i];
|
|
|
|
+ Entity *e = cast(Entity *)entry->key.ptr;
|
|
String name = e->token.string;
|
|
String name = e->token.string;
|
|
if (e->kind == Entity_Variable) {
|
|
if (e->kind == Entity_Variable) {
|
|
global_variable_max_count++;
|
|
global_variable_max_count++;
|
|
} else if (e->kind == Entity_Procedure && !e->scope->is_global) {
|
|
} else if (e->kind == Entity_Procedure && !e->scope->is_global) {
|
|
- if (e->scope->is_init && str_eq(name, str_lit("main"))) {
|
|
|
|
|
|
+ if (e->scope->is_init && name == "main") {
|
|
entry_point = e;
|
|
entry_point = e;
|
|
}
|
|
}
|
|
if ((e->Procedure.tags & ProcTag_export) != 0 ||
|
|
if ((e->Procedure.tags & ProcTag_export) != 0 ||
|
|
(e->Procedure.link_name.len > 0) ||
|
|
(e->Procedure.link_name.len > 0) ||
|
|
(e->scope->is_file && e->Procedure.link_name.len > 0)) {
|
|
(e->scope->is_file && e->Procedure.link_name.len > 0)) {
|
|
- if (!has_dll_main && str_eq(name, str_lit("DllMain"))) {
|
|
|
|
|
|
+ if (!has_dll_main && name == "DllMain") {
|
|
has_dll_main = true;
|
|
has_dll_main = true;
|
|
- } else if (!has_win_main && str_eq(name, str_lit("WinMain"))) {
|
|
|
|
|
|
+ } else if (!has_win_main && name == "WinMain") {
|
|
has_win_main = true;
|
|
has_win_main = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -2517,7 +2518,7 @@ bool ssa_generate(Parser *parser, CheckerInfo *info) {
|
|
m.min_dep_map = generate_minimum_dependency_map(info, entry_point);
|
|
m.min_dep_map = generate_minimum_dependency_map(info, entry_point);
|
|
|
|
|
|
for_array(i, info->entities.entries) {
|
|
for_array(i, info->entities.entries) {
|
|
- MapDeclInfoEntry *entry = &info->entities.entries.e[i];
|
|
|
|
|
|
+ auto *entry = &info->entities.entries[i];
|
|
Entity *e = cast(Entity *)entry->key.ptr;
|
|
Entity *e = cast(Entity *)entry->key.ptr;
|
|
String name = e->token.string;
|
|
String name = e->token.string;
|
|
DeclInfo *decl = entry->value;
|
|
DeclInfo *decl = entry->value;
|
|
@@ -2527,7 +2528,7 @@ bool ssa_generate(Parser *parser, CheckerInfo *info) {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
- if (map_entity_get(&m.min_dep_map, hash_pointer(e)) == NULL) {
|
|
|
|
|
|
+ if (map_get(&m.min_dep_map, hash_pointer(e)) == NULL) {
|
|
// NOTE(bill): Nothing depends upon it so doesn't need to be built
|
|
// NOTE(bill): Nothing depends upon it so doesn't need to be built
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
@@ -2536,7 +2537,7 @@ bool ssa_generate(Parser *parser, CheckerInfo *info) {
|
|
if (e->kind == Entity_Procedure && (e->Procedure.tags & ProcTag_export) != 0) {
|
|
if (e->kind == Entity_Procedure && (e->Procedure.tags & ProcTag_export) != 0) {
|
|
} else if (e->kind == Entity_Procedure && e->Procedure.link_name.len > 0) {
|
|
} else if (e->kind == Entity_Procedure && e->Procedure.link_name.len > 0) {
|
|
// Handle later
|
|
// Handle later
|
|
- } else if (scope->is_init && e->kind == Entity_Procedure && str_eq(name, str_lit("main"))) {
|
|
|
|
|
|
+ } else if (scope->is_init && e->kind == Entity_Procedure && name == "main") {
|
|
} else {
|
|
} else {
|
|
name = ssa_mangle_name(&m, e->token.pos.file, e);
|
|
name = ssa_mangle_name(&m, e->token.pos.file, e);
|
|
}
|
|
}
|
|
@@ -2574,8 +2575,8 @@ bool ssa_generate(Parser *parser, CheckerInfo *info) {
|
|
|
|
|
|
// ssa_module_add_value(m, e, p);
|
|
// ssa_module_add_value(m, e, p);
|
|
// HashKey hash_name = hash_string(name);
|
|
// HashKey hash_name = hash_string(name);
|
|
- // if (map_ssa_value_get(&m.members, hash_name) == NULL) {
|
|
|
|
- // map_ssa_value_set(&m.members, hash_name, p);
|
|
|
|
|
|
+ // if (map_get(&m.members, hash_name) == NULL) {
|
|
|
|
+ // map_set(&m.members, hash_name, p);
|
|
// }
|
|
// }
|
|
} break;
|
|
} break;
|
|
}
|
|
}
|
|
@@ -2595,7 +2596,7 @@ String ssa_mangle_name(ssaModule *m, String path, Entity *e) {
|
|
String name = e->token.string;
|
|
String name = e->token.string;
|
|
CheckerInfo *info = m->info;
|
|
CheckerInfo *info = m->info;
|
|
gbAllocator a = m->allocator;
|
|
gbAllocator a = m->allocator;
|
|
- AstFile *file = *map_ast_file_get(&info->files, hash_string(path));
|
|
|
|
|
|
+ AstFile *file = *map_get(&info->files, hash_string(path));
|
|
|
|
|
|
char *str = gb_alloc_array(a, char, path.len+1);
|
|
char *str = gb_alloc_array(a, char, path.len+1);
|
|
gb_memmove(str, path.text, path.len);
|
|
gb_memmove(str, path.text, path.len);
|