mirror of
https://github.com/ziglang/zig.git
synced 2026-01-14 03:15:14 +00:00
stage1: rename IrBasicBlockSrc to Stage1ZirBasicBlock
This commit is contained in:
parent
548ef78070
commit
01e0a4b2f0
@ -38,7 +38,7 @@ struct IrInstGenCast;
|
||||
struct IrInstGenAlloca;
|
||||
struct IrInstGenCall;
|
||||
struct IrInstGenAwait;
|
||||
struct IrBasicBlockSrc;
|
||||
struct Stage1ZirBasicBlock;
|
||||
struct IrBasicBlockGen;
|
||||
struct ScopeDecls;
|
||||
struct ZigWindowsSDK;
|
||||
@ -111,7 +111,7 @@ enum X64CABIClass {
|
||||
};
|
||||
|
||||
struct Stage1Zir {
|
||||
ZigList<IrBasicBlockSrc *> basic_block_list;
|
||||
ZigList<Stage1ZirBasicBlock *> basic_block_list;
|
||||
Buf *name;
|
||||
ZigFn *name_fn;
|
||||
Scope *begin_scope;
|
||||
@ -2255,11 +2255,11 @@ struct ScopeBlock {
|
||||
Scope base;
|
||||
|
||||
Buf *name;
|
||||
IrBasicBlockSrc *end_block;
|
||||
Stage1ZirBasicBlock *end_block;
|
||||
IrInstSrc *is_comptime;
|
||||
ResultLocPeerParent *peer_parent;
|
||||
ZigList<IrInstSrc *> *incoming_values;
|
||||
ZigList<IrBasicBlockSrc *> *incoming_blocks;
|
||||
ZigList<Stage1ZirBasicBlock *> *incoming_blocks;
|
||||
|
||||
AstNode *safety_set_node;
|
||||
AstNode *fast_math_set_node;
|
||||
@ -2311,11 +2311,11 @@ struct ScopeLoop {
|
||||
|
||||
LVal lval;
|
||||
Buf *name;
|
||||
IrBasicBlockSrc *break_block;
|
||||
IrBasicBlockSrc *continue_block;
|
||||
Stage1ZirBasicBlock *break_block;
|
||||
Stage1ZirBasicBlock *continue_block;
|
||||
IrInstSrc *is_comptime;
|
||||
ZigList<IrInstSrc *> *incoming_values;
|
||||
ZigList<IrBasicBlockSrc *> *incoming_blocks;
|
||||
ZigList<Stage1ZirBasicBlock *> *incoming_blocks;
|
||||
ResultLocPeerParent *peer_parent;
|
||||
ScopeExpr *spill_scope;
|
||||
|
||||
@ -2426,7 +2426,7 @@ enum AtomicRmwOp {
|
||||
// to another basic block.
|
||||
// Phi instructions must be first in a basic block.
|
||||
// The last instruction in a basic block must be of type unreachable.
|
||||
struct IrBasicBlockSrc {
|
||||
struct Stage1ZirBasicBlock {
|
||||
ZigList<IrInstSrc *> instruction_list;
|
||||
IrBasicBlockGen *child;
|
||||
Scope *scope;
|
||||
@ -2729,7 +2729,7 @@ struct IrInstSrc {
|
||||
// can find the instruction that corresponds to this value in the "new ir"
|
||||
// with this child field.
|
||||
IrInstGen *child;
|
||||
IrBasicBlockSrc *owner_bb;
|
||||
Stage1ZirBasicBlock *owner_bb;
|
||||
|
||||
// for debugging purposes, these are useful to call to inspect the instruction
|
||||
void dump();
|
||||
@ -2774,8 +2774,8 @@ struct IrInstSrcCondBr {
|
||||
IrInstSrc base;
|
||||
|
||||
IrInstSrc *condition;
|
||||
IrBasicBlockSrc *then_block;
|
||||
IrBasicBlockSrc *else_block;
|
||||
Stage1ZirBasicBlock *then_block;
|
||||
Stage1ZirBasicBlock *else_block;
|
||||
IrInstSrc *is_comptime;
|
||||
ResultLoc *result_loc;
|
||||
};
|
||||
@ -2791,7 +2791,7 @@ struct IrInstGenCondBr {
|
||||
struct IrInstSrcBr {
|
||||
IrInstSrc base;
|
||||
|
||||
IrBasicBlockSrc *dest_block;
|
||||
Stage1ZirBasicBlock *dest_block;
|
||||
IrInstSrc *is_comptime;
|
||||
};
|
||||
|
||||
@ -2803,14 +2803,14 @@ struct IrInstGenBr {
|
||||
|
||||
struct IrInstSrcSwitchBrCase {
|
||||
IrInstSrc *value;
|
||||
IrBasicBlockSrc *block;
|
||||
Stage1ZirBasicBlock *block;
|
||||
};
|
||||
|
||||
struct IrInstSrcSwitchBr {
|
||||
IrInstSrc base;
|
||||
|
||||
IrInstSrc *target_value;
|
||||
IrBasicBlockSrc *else_block;
|
||||
Stage1ZirBasicBlock *else_block;
|
||||
size_t case_count;
|
||||
IrInstSrcSwitchBrCase *cases;
|
||||
IrInstSrc *is_comptime;
|
||||
@ -2856,7 +2856,7 @@ struct IrInstSrcPhi {
|
||||
IrInstSrc base;
|
||||
|
||||
size_t incoming_count;
|
||||
IrBasicBlockSrc **incoming_blocks;
|
||||
Stage1ZirBasicBlock **incoming_blocks;
|
||||
IrInstSrc **incoming_values;
|
||||
ResultLocPeerParent *peer_parent;
|
||||
};
|
||||
@ -4520,7 +4520,7 @@ struct ResultLocPeerParent {
|
||||
|
||||
bool skipped;
|
||||
bool done_resuming;
|
||||
IrBasicBlockSrc *end_bb;
|
||||
Stage1ZirBasicBlock *end_bb;
|
||||
ResultLoc *parent;
|
||||
ZigList<ResultLocPeer *> peers;
|
||||
ZigType *resolved_type;
|
||||
@ -4531,7 +4531,7 @@ struct ResultLocPeer {
|
||||
ResultLoc base;
|
||||
|
||||
ResultLocPeerParent *parent;
|
||||
IrBasicBlockSrc *next_bb;
|
||||
Stage1ZirBasicBlock *next_bb;
|
||||
IrSuspendPosition suspend_pos;
|
||||
};
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
struct Stage1AstGen {
|
||||
CodeGen *codegen;
|
||||
Stage1Zir *exec;
|
||||
IrBasicBlockSrc *current_basic_block;
|
||||
Stage1ZirBasicBlock *current_basic_block;
|
||||
AstNode *main_block_node;
|
||||
size_t next_debug_id;
|
||||
ZigFn *fn;
|
||||
@ -358,7 +358,7 @@ bool ir_should_inline(Stage1Zir *exec, Scope *scope) {
|
||||
return false;
|
||||
}
|
||||
|
||||
static void ir_instruction_append(IrBasicBlockSrc *basic_block, IrInstSrc *instruction) {
|
||||
static void ir_instruction_append(Stage1ZirBasicBlock *basic_block, IrInstSrc *instruction) {
|
||||
assert(basic_block);
|
||||
assert(instruction);
|
||||
basic_block->instruction_list.append(instruction);
|
||||
@ -370,11 +370,11 @@ static size_t irb_next_debug_id(Stage1AstGen *ag) {
|
||||
return result;
|
||||
}
|
||||
|
||||
static void ir_ref_bb(IrBasicBlockSrc *bb) {
|
||||
static void ir_ref_bb(Stage1ZirBasicBlock *bb) {
|
||||
bb->ref_count += 1;
|
||||
}
|
||||
|
||||
static void ir_ref_instruction(IrInstSrc *instruction, IrBasicBlockSrc *cur_bb) {
|
||||
static void ir_ref_instruction(IrInstSrc *instruction, Stage1ZirBasicBlock *cur_bb) {
|
||||
assert(instruction->id != IrInstSrcIdInvalid);
|
||||
instruction->base.ref_count += 1;
|
||||
if (instruction->owner_bb != cur_bb && !instr_is_unreachable(instruction)
|
||||
@ -384,8 +384,8 @@ static void ir_ref_instruction(IrInstSrc *instruction, IrBasicBlockSrc *cur_bb)
|
||||
}
|
||||
}
|
||||
|
||||
static IrBasicBlockSrc *ir_create_basic_block(Stage1AstGen *ag, Scope *scope, const char *name_hint) {
|
||||
IrBasicBlockSrc *result = heap::c_allocator.create<IrBasicBlockSrc>();
|
||||
static Stage1ZirBasicBlock *ir_create_basic_block(Stage1AstGen *ag, Scope *scope, const char *name_hint) {
|
||||
Stage1ZirBasicBlock *result = heap::c_allocator.create<Stage1ZirBasicBlock>();
|
||||
result->scope = scope;
|
||||
result->name_hint = name_hint;
|
||||
result->debug_id = irb_next_debug_id(ag);
|
||||
@ -944,7 +944,7 @@ static T *ir_build_instruction(Stage1AstGen *ag, Scope *scope, AstNode *source_n
|
||||
}
|
||||
|
||||
static IrInstSrc *ir_build_cond_br(Stage1AstGen *ag, Scope *scope, AstNode *source_node, IrInstSrc *condition,
|
||||
IrBasicBlockSrc *then_block, IrBasicBlockSrc *else_block, IrInstSrc *is_comptime)
|
||||
Stage1ZirBasicBlock *then_block, Stage1ZirBasicBlock *else_block, IrInstSrc *is_comptime)
|
||||
{
|
||||
IrInstSrcCondBr *inst = ir_build_instruction<IrInstSrcCondBr>(ag, scope, source_node);
|
||||
inst->base.is_noreturn = true;
|
||||
@ -1279,7 +1279,7 @@ static IrInstSrc *ir_build_call_src(Stage1AstGen *ag, Scope *scope, AstNode *sou
|
||||
}
|
||||
|
||||
static IrInstSrc *ir_build_phi(Stage1AstGen *ag, Scope *scope, AstNode *source_node,
|
||||
size_t incoming_count, IrBasicBlockSrc **incoming_blocks, IrInstSrc **incoming_values,
|
||||
size_t incoming_count, Stage1ZirBasicBlock **incoming_blocks, IrInstSrc **incoming_values,
|
||||
ResultLocPeerParent *peer_parent)
|
||||
{
|
||||
assert(incoming_count != 0);
|
||||
@ -1300,7 +1300,7 @@ static IrInstSrc *ir_build_phi(Stage1AstGen *ag, Scope *scope, AstNode *source_n
|
||||
}
|
||||
|
||||
static IrInstSrc *ir_build_br(Stage1AstGen *ag, Scope *scope, AstNode *source_node,
|
||||
IrBasicBlockSrc *dest_block, IrInstSrc *is_comptime)
|
||||
Stage1ZirBasicBlock *dest_block, IrInstSrc *is_comptime)
|
||||
{
|
||||
IrInstSrcBr *inst = ir_build_instruction<IrInstSrcBr>(ag, scope, source_node);
|
||||
inst->base.is_noreturn = true;
|
||||
@ -1714,7 +1714,7 @@ static IrInstSrc *ir_build_bit_reverse(Stage1AstGen *ag, Scope *scope, AstNode *
|
||||
}
|
||||
|
||||
static IrInstSrcSwitchBr *ir_build_switch_br_src(Stage1AstGen *ag, Scope *scope, AstNode *source_node,
|
||||
IrInstSrc *target_value, IrBasicBlockSrc *else_block, size_t case_count, IrInstSrcSwitchBrCase *cases,
|
||||
IrInstSrc *target_value, Stage1ZirBasicBlock *else_block, size_t case_count, IrInstSrcSwitchBrCase *cases,
|
||||
IrInstSrc *is_comptime, IrInstSrc *switch_prongs_void)
|
||||
{
|
||||
IrInstSrcSwitchBr *instruction = ir_build_instruction<IrInstSrcSwitchBr>(ag, scope, source_node);
|
||||
@ -2976,12 +2976,12 @@ static bool ir_gen_defers_for_block(Stage1AstGen *ag, Scope *inner_scope, Scope
|
||||
return true;
|
||||
}
|
||||
|
||||
static void ir_set_cursor_at_end(Stage1AstGen *ag, IrBasicBlockSrc *basic_block) {
|
||||
static void ir_set_cursor_at_end(Stage1AstGen *ag, Stage1ZirBasicBlock *basic_block) {
|
||||
assert(basic_block);
|
||||
ag->current_basic_block = basic_block;
|
||||
}
|
||||
|
||||
static void ir_set_cursor_at_end_and_append_block(Stage1AstGen *ag, IrBasicBlockSrc *basic_block) {
|
||||
static void ir_set_cursor_at_end_and_append_block(Stage1AstGen *ag, Stage1ZirBasicBlock *basic_block) {
|
||||
basic_block->index = ag->exec->basic_block_list.length;
|
||||
ag->exec->basic_block_list.append(basic_block);
|
||||
ir_set_cursor_at_end(ag, basic_block);
|
||||
@ -3062,8 +3062,8 @@ static IrInstSrc *ir_gen_return(Stage1AstGen *ag, Scope *scope, AstNode *node, L
|
||||
}
|
||||
bool should_inline = ir_should_inline(ag->exec, scope);
|
||||
|
||||
IrBasicBlockSrc *err_block = ir_create_basic_block(ag, scope, "ErrRetErr");
|
||||
IrBasicBlockSrc *ok_block = ir_create_basic_block(ag, scope, "ErrRetOk");
|
||||
Stage1ZirBasicBlock *err_block = ir_create_basic_block(ag, scope, "ErrRetErr");
|
||||
Stage1ZirBasicBlock *ok_block = ir_create_basic_block(ag, scope, "ErrRetOk");
|
||||
|
||||
IrInstSrc *is_err = ir_build_test_err_src(ag, scope, node, return_value, false, true);
|
||||
|
||||
@ -3075,7 +3075,7 @@ static IrInstSrc *ir_gen_return(Stage1AstGen *ag, Scope *scope, AstNode *node, L
|
||||
}
|
||||
|
||||
ir_mark_gen(ir_build_cond_br(ag, scope, node, is_err, err_block, ok_block, is_comptime));
|
||||
IrBasicBlockSrc *ret_stmt_block = ir_create_basic_block(ag, scope, "RetStmt");
|
||||
Stage1ZirBasicBlock *ret_stmt_block = ir_create_basic_block(ag, scope, "RetStmt");
|
||||
|
||||
ir_set_cursor_at_end_and_append_block(ag, err_block);
|
||||
if (!ir_gen_defers_for_block(ag, scope, outer_scope, nullptr, return_value))
|
||||
@ -3103,8 +3103,8 @@ static IrInstSrc *ir_gen_return(Stage1AstGen *ag, Scope *scope, AstNode *node, L
|
||||
return ag->codegen->invalid_inst_src;
|
||||
IrInstSrc *is_err_val = ir_build_test_err_src(ag, scope, node, err_union_ptr, true, false);
|
||||
|
||||
IrBasicBlockSrc *return_block = ir_create_basic_block(ag, scope, "ErrRetReturn");
|
||||
IrBasicBlockSrc *continue_block = ir_create_basic_block(ag, scope, "ErrRetContinue");
|
||||
Stage1ZirBasicBlock *return_block = ir_create_basic_block(ag, scope, "ErrRetReturn");
|
||||
Stage1ZirBasicBlock *continue_block = ir_create_basic_block(ag, scope, "ErrRetContinue");
|
||||
IrInstSrc *is_comptime;
|
||||
bool should_inline = ir_should_inline(ag->exec, scope);
|
||||
if (should_inline) {
|
||||
@ -3266,7 +3266,7 @@ static IrInstSrc *ir_gen_block(Stage1AstGen *ag, Scope *parent_scope, AstNode *b
|
||||
assert(block_node->type == NodeTypeBlock);
|
||||
|
||||
ZigList<IrInstSrc *> incoming_values = {0};
|
||||
ZigList<IrBasicBlockSrc *> incoming_blocks = {0};
|
||||
ZigList<Stage1ZirBasicBlock *> incoming_blocks = {0};
|
||||
|
||||
if (is_duplicate_label(ag->codegen, parent_scope, block_node, block_node->data.block.name))
|
||||
return ag->codegen->invalid_inst_src;
|
||||
@ -3479,7 +3479,7 @@ static IrInstSrc *ir_gen_bool_or(Stage1AstGen *ag, Scope *scope, AstNode *node)
|
||||
IrInstSrc *val1 = ir_gen_node(ag, node->data.bin_op_expr.op1, scope);
|
||||
if (val1 == ag->codegen->invalid_inst_src)
|
||||
return ag->codegen->invalid_inst_src;
|
||||
IrBasicBlockSrc *post_val1_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *post_val1_block = ag->current_basic_block;
|
||||
|
||||
IrInstSrc *is_comptime;
|
||||
if (ir_should_inline(ag->exec, scope)) {
|
||||
@ -3489,9 +3489,9 @@ static IrInstSrc *ir_gen_bool_or(Stage1AstGen *ag, Scope *scope, AstNode *node)
|
||||
}
|
||||
|
||||
// block for when val1 == false
|
||||
IrBasicBlockSrc *false_block = ir_create_basic_block(ag, scope, "BoolOrFalse");
|
||||
Stage1ZirBasicBlock *false_block = ir_create_basic_block(ag, scope, "BoolOrFalse");
|
||||
// block for when val1 == true (don't even evaluate the second part)
|
||||
IrBasicBlockSrc *true_block = ir_create_basic_block(ag, scope, "BoolOrTrue");
|
||||
Stage1ZirBasicBlock *true_block = ir_create_basic_block(ag, scope, "BoolOrTrue");
|
||||
|
||||
ir_build_cond_br(ag, scope, node, val1, true_block, false_block, is_comptime);
|
||||
|
||||
@ -3499,7 +3499,7 @@ static IrInstSrc *ir_gen_bool_or(Stage1AstGen *ag, Scope *scope, AstNode *node)
|
||||
IrInstSrc *val2 = ir_gen_node(ag, node->data.bin_op_expr.op2, scope);
|
||||
if (val2 == ag->codegen->invalid_inst_src)
|
||||
return ag->codegen->invalid_inst_src;
|
||||
IrBasicBlockSrc *post_val2_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *post_val2_block = ag->current_basic_block;
|
||||
|
||||
ir_build_br(ag, scope, node, true_block, is_comptime);
|
||||
|
||||
@ -3508,7 +3508,7 @@ static IrInstSrc *ir_gen_bool_or(Stage1AstGen *ag, Scope *scope, AstNode *node)
|
||||
IrInstSrc **incoming_values = heap::c_allocator.allocate<IrInstSrc *>(2);
|
||||
incoming_values[0] = val1;
|
||||
incoming_values[1] = val2;
|
||||
IrBasicBlockSrc **incoming_blocks = heap::c_allocator.allocate<IrBasicBlockSrc *>(2);
|
||||
Stage1ZirBasicBlock **incoming_blocks = heap::c_allocator.allocate<Stage1ZirBasicBlock *>(2);
|
||||
incoming_blocks[0] = post_val1_block;
|
||||
incoming_blocks[1] = post_val2_block;
|
||||
|
||||
@ -3521,7 +3521,7 @@ static IrInstSrc *ir_gen_bool_and(Stage1AstGen *ag, Scope *scope, AstNode *node)
|
||||
IrInstSrc *val1 = ir_gen_node(ag, node->data.bin_op_expr.op1, scope);
|
||||
if (val1 == ag->codegen->invalid_inst_src)
|
||||
return ag->codegen->invalid_inst_src;
|
||||
IrBasicBlockSrc *post_val1_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *post_val1_block = ag->current_basic_block;
|
||||
|
||||
IrInstSrc *is_comptime;
|
||||
if (ir_should_inline(ag->exec, scope)) {
|
||||
@ -3531,9 +3531,9 @@ static IrInstSrc *ir_gen_bool_and(Stage1AstGen *ag, Scope *scope, AstNode *node)
|
||||
}
|
||||
|
||||
// block for when val1 == true
|
||||
IrBasicBlockSrc *true_block = ir_create_basic_block(ag, scope, "BoolAndTrue");
|
||||
Stage1ZirBasicBlock *true_block = ir_create_basic_block(ag, scope, "BoolAndTrue");
|
||||
// block for when val1 == false (don't even evaluate the second part)
|
||||
IrBasicBlockSrc *false_block = ir_create_basic_block(ag, scope, "BoolAndFalse");
|
||||
Stage1ZirBasicBlock *false_block = ir_create_basic_block(ag, scope, "BoolAndFalse");
|
||||
|
||||
ir_build_cond_br(ag, scope, node, val1, true_block, false_block, is_comptime);
|
||||
|
||||
@ -3541,7 +3541,7 @@ static IrInstSrc *ir_gen_bool_and(Stage1AstGen *ag, Scope *scope, AstNode *node)
|
||||
IrInstSrc *val2 = ir_gen_node(ag, node->data.bin_op_expr.op2, scope);
|
||||
if (val2 == ag->codegen->invalid_inst_src)
|
||||
return ag->codegen->invalid_inst_src;
|
||||
IrBasicBlockSrc *post_val2_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *post_val2_block = ag->current_basic_block;
|
||||
|
||||
ir_build_br(ag, scope, node, false_block, is_comptime);
|
||||
|
||||
@ -3550,7 +3550,7 @@ static IrInstSrc *ir_gen_bool_and(Stage1AstGen *ag, Scope *scope, AstNode *node)
|
||||
IrInstSrc **incoming_values = heap::c_allocator.allocate<IrInstSrc *>(2);
|
||||
incoming_values[0] = val1;
|
||||
incoming_values[1] = val2;
|
||||
IrBasicBlockSrc **incoming_blocks = heap::c_allocator.allocate<IrBasicBlockSrc *>(2);
|
||||
Stage1ZirBasicBlock **incoming_blocks = heap::c_allocator.allocate<Stage1ZirBasicBlock *>(2);
|
||||
incoming_blocks[0] = post_val1_block;
|
||||
incoming_blocks[1] = post_val2_block;
|
||||
|
||||
@ -3558,7 +3558,7 @@ static IrInstSrc *ir_gen_bool_and(Stage1AstGen *ag, Scope *scope, AstNode *node)
|
||||
}
|
||||
|
||||
static ResultLocPeerParent *ir_build_result_peers(Stage1AstGen *ag, IrInstSrc *cond_br_inst,
|
||||
IrBasicBlockSrc *end_block, ResultLoc *parent, IrInstSrc *is_comptime)
|
||||
Stage1ZirBasicBlock *end_block, ResultLoc *parent, IrInstSrc *is_comptime)
|
||||
{
|
||||
ResultLocPeerParent *peer_parent = heap::c_allocator.create<ResultLocPeerParent>();
|
||||
peer_parent->base.id = ResultLocIdPeerParent;
|
||||
@ -3578,7 +3578,7 @@ static ResultLocPeerParent *ir_build_result_peers(Stage1AstGen *ag, IrInstSrc *c
|
||||
}
|
||||
|
||||
static ResultLocPeerParent *ir_build_binary_result_peers(Stage1AstGen *ag, IrInstSrc *cond_br_inst,
|
||||
IrBasicBlockSrc *else_block, IrBasicBlockSrc *end_block, ResultLoc *parent, IrInstSrc *is_comptime)
|
||||
Stage1ZirBasicBlock *else_block, Stage1ZirBasicBlock *end_block, ResultLoc *parent, IrInstSrc *is_comptime)
|
||||
{
|
||||
ResultLocPeerParent *peer_parent = ir_build_result_peers(ag, cond_br_inst, end_block, parent, is_comptime);
|
||||
|
||||
@ -3613,9 +3613,9 @@ static IrInstSrc *ir_gen_orelse(Stage1AstGen *ag, Scope *parent_scope, AstNode *
|
||||
is_comptime = ir_build_test_comptime(ag, parent_scope, node, is_non_null);
|
||||
}
|
||||
|
||||
IrBasicBlockSrc *ok_block = ir_create_basic_block(ag, parent_scope, "OptionalNonNull");
|
||||
IrBasicBlockSrc *null_block = ir_create_basic_block(ag, parent_scope, "OptionalNull");
|
||||
IrBasicBlockSrc *end_block = ir_create_basic_block(ag, parent_scope, "OptionalEnd");
|
||||
Stage1ZirBasicBlock *ok_block = ir_create_basic_block(ag, parent_scope, "OptionalNonNull");
|
||||
Stage1ZirBasicBlock *null_block = ir_create_basic_block(ag, parent_scope, "OptionalNull");
|
||||
Stage1ZirBasicBlock *end_block = ir_create_basic_block(ag, parent_scope, "OptionalEnd");
|
||||
IrInstSrc *cond_br_inst = ir_build_cond_br(ag, parent_scope, node, is_non_null, ok_block, null_block, is_comptime);
|
||||
|
||||
ResultLocPeerParent *peer_parent = ir_build_binary_result_peers(ag, cond_br_inst, ok_block, end_block,
|
||||
@ -3626,7 +3626,7 @@ static IrInstSrc *ir_gen_orelse(Stage1AstGen *ag, Scope *parent_scope, AstNode *
|
||||
&peer_parent->peers.at(0)->base);
|
||||
if (null_result == ag->codegen->invalid_inst_src)
|
||||
return ag->codegen->invalid_inst_src;
|
||||
IrBasicBlockSrc *after_null_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_null_block = ag->current_basic_block;
|
||||
if (!instr_is_unreachable(null_result))
|
||||
ir_mark_gen(ir_build_br(ag, parent_scope, node, end_block, is_comptime));
|
||||
|
||||
@ -3634,14 +3634,14 @@ static IrInstSrc *ir_gen_orelse(Stage1AstGen *ag, Scope *parent_scope, AstNode *
|
||||
IrInstSrc *unwrapped_ptr = ir_build_optional_unwrap_ptr(ag, parent_scope, node, maybe_ptr, false);
|
||||
IrInstSrc *unwrapped_payload = ir_build_load_ptr(ag, parent_scope, node, unwrapped_ptr);
|
||||
ir_build_end_expr(ag, parent_scope, node, unwrapped_payload, &peer_parent->peers.at(1)->base);
|
||||
IrBasicBlockSrc *after_ok_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_ok_block = ag->current_basic_block;
|
||||
ir_build_br(ag, parent_scope, node, end_block, is_comptime);
|
||||
|
||||
ir_set_cursor_at_end_and_append_block(ag, end_block);
|
||||
IrInstSrc **incoming_values = heap::c_allocator.allocate<IrInstSrc *>(2);
|
||||
incoming_values[0] = null_result;
|
||||
incoming_values[1] = unwrapped_payload;
|
||||
IrBasicBlockSrc **incoming_blocks = heap::c_allocator.allocate<IrBasicBlockSrc *>(2);
|
||||
Stage1ZirBasicBlock **incoming_blocks = heap::c_allocator.allocate<Stage1ZirBasicBlock *>(2);
|
||||
incoming_blocks[0] = after_null_block;
|
||||
incoming_blocks[1] = after_ok_block;
|
||||
IrInstSrc *phi = ir_build_phi(ag, parent_scope, node, 2, incoming_blocks, incoming_values, peer_parent);
|
||||
@ -5372,9 +5372,9 @@ static IrInstSrc *ir_gen_if_bool_expr(Stage1AstGen *ag, Scope *scope, AstNode *n
|
||||
AstNode *then_node = node->data.if_bool_expr.then_block;
|
||||
AstNode *else_node = node->data.if_bool_expr.else_node;
|
||||
|
||||
IrBasicBlockSrc *then_block = ir_create_basic_block(ag, scope, "Then");
|
||||
IrBasicBlockSrc *else_block = ir_create_basic_block(ag, scope, "Else");
|
||||
IrBasicBlockSrc *endif_block = ir_create_basic_block(ag, scope, "EndIf");
|
||||
Stage1ZirBasicBlock *then_block = ir_create_basic_block(ag, scope, "Then");
|
||||
Stage1ZirBasicBlock *else_block = ir_create_basic_block(ag, scope, "Else");
|
||||
Stage1ZirBasicBlock *endif_block = ir_create_basic_block(ag, scope, "EndIf");
|
||||
|
||||
IrInstSrc *cond_br_inst = ir_build_cond_br(ag, scope, node, condition,
|
||||
then_block, else_block, is_comptime);
|
||||
@ -5388,7 +5388,7 @@ static IrInstSrc *ir_gen_if_bool_expr(Stage1AstGen *ag, Scope *scope, AstNode *n
|
||||
&peer_parent->peers.at(0)->base);
|
||||
if (then_expr_result == ag->codegen->invalid_inst_src)
|
||||
return ag->codegen->invalid_inst_src;
|
||||
IrBasicBlockSrc *after_then_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_then_block = ag->current_basic_block;
|
||||
if (!instr_is_unreachable(then_expr_result))
|
||||
ir_mark_gen(ir_build_br(ag, scope, node, endif_block, is_comptime));
|
||||
|
||||
@ -5402,7 +5402,7 @@ static IrInstSrc *ir_gen_if_bool_expr(Stage1AstGen *ag, Scope *scope, AstNode *n
|
||||
else_expr_result = ir_build_const_void(ag, scope, node);
|
||||
ir_build_end_expr(ag, scope, node, else_expr_result, &peer_parent->peers.at(1)->base);
|
||||
}
|
||||
IrBasicBlockSrc *after_else_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_else_block = ag->current_basic_block;
|
||||
if (!instr_is_unreachable(else_expr_result))
|
||||
ir_mark_gen(ir_build_br(ag, scope, node, endif_block, is_comptime));
|
||||
|
||||
@ -5410,7 +5410,7 @@ static IrInstSrc *ir_gen_if_bool_expr(Stage1AstGen *ag, Scope *scope, AstNode *n
|
||||
IrInstSrc **incoming_values = heap::c_allocator.allocate<IrInstSrc *>(2);
|
||||
incoming_values[0] = then_expr_result;
|
||||
incoming_values[1] = else_expr_result;
|
||||
IrBasicBlockSrc **incoming_blocks = heap::c_allocator.allocate<IrBasicBlockSrc *>(2);
|
||||
Stage1ZirBasicBlock **incoming_blocks = heap::c_allocator.allocate<Stage1ZirBasicBlock *>(2);
|
||||
incoming_blocks[0] = after_then_block;
|
||||
incoming_blocks[1] = after_else_block;
|
||||
|
||||
@ -5912,12 +5912,12 @@ static IrInstSrc *ir_gen_while_expr(Stage1AstGen *ag, Scope *scope, AstNode *nod
|
||||
AstNode *continue_expr_node = node->data.while_expr.continue_expr;
|
||||
AstNode *else_node = node->data.while_expr.else_node;
|
||||
|
||||
IrBasicBlockSrc *cond_block = ir_create_basic_block(ag, scope, "WhileCond");
|
||||
IrBasicBlockSrc *body_block = ir_create_basic_block(ag, scope, "WhileBody");
|
||||
IrBasicBlockSrc *continue_block = continue_expr_node ?
|
||||
Stage1ZirBasicBlock *cond_block = ir_create_basic_block(ag, scope, "WhileCond");
|
||||
Stage1ZirBasicBlock *body_block = ir_create_basic_block(ag, scope, "WhileBody");
|
||||
Stage1ZirBasicBlock *continue_block = continue_expr_node ?
|
||||
ir_create_basic_block(ag, scope, "WhileContinue") : cond_block;
|
||||
IrBasicBlockSrc *end_block = ir_create_basic_block(ag, scope, "WhileEnd");
|
||||
IrBasicBlockSrc *else_block = else_node ?
|
||||
Stage1ZirBasicBlock *end_block = ir_create_basic_block(ag, scope, "WhileEnd");
|
||||
Stage1ZirBasicBlock *else_block = else_node ?
|
||||
ir_create_basic_block(ag, scope, "WhileElse") : end_block;
|
||||
|
||||
IrInstSrc *is_comptime = ir_build_const_bool(ag, scope, node,
|
||||
@ -5948,7 +5948,7 @@ static IrInstSrc *ir_gen_while_expr(Stage1AstGen *ag, Scope *scope, AstNode *nod
|
||||
return err_val_ptr;
|
||||
IrInstSrc *is_err = ir_build_test_err_src(ag, scope, node->data.while_expr.condition, err_val_ptr,
|
||||
true, false);
|
||||
IrBasicBlockSrc *after_cond_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_cond_block = ag->current_basic_block;
|
||||
IrInstSrc *void_else_result = else_node ? nullptr : ir_mark_gen(ir_build_const_void(ag, scope, node));
|
||||
IrInstSrc *cond_br_inst;
|
||||
if (!instr_is_unreachable(is_err)) {
|
||||
@ -5973,7 +5973,7 @@ static IrInstSrc *ir_gen_while_expr(Stage1AstGen *ag, Scope *scope, AstNode *nod
|
||||
}
|
||||
|
||||
ZigList<IrInstSrc *> incoming_values = {0};
|
||||
ZigList<IrBasicBlockSrc *> incoming_blocks = {0};
|
||||
ZigList<Stage1ZirBasicBlock *> incoming_blocks = {0};
|
||||
|
||||
if (is_duplicate_label(ag->codegen, payload_scope, node, node->data.while_expr.name))
|
||||
return ag->codegen->invalid_inst_src;
|
||||
@ -6037,7 +6037,7 @@ static IrInstSrc *ir_gen_while_expr(Stage1AstGen *ag, Scope *scope, AstNode *nod
|
||||
return else_result;
|
||||
if (!instr_is_unreachable(else_result))
|
||||
ir_mark_gen(ir_build_br(ag, scope, node, end_block, is_comptime));
|
||||
IrBasicBlockSrc *after_else_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_else_block = ag->current_basic_block;
|
||||
ir_set_cursor_at_end_and_append_block(ag, end_block);
|
||||
if (else_result) {
|
||||
incoming_blocks.append(after_else_block);
|
||||
@ -6069,7 +6069,7 @@ static IrInstSrc *ir_gen_while_expr(Stage1AstGen *ag, Scope *scope, AstNode *nod
|
||||
return maybe_val_ptr;
|
||||
IrInstSrc *maybe_val = ir_build_load_ptr(ag, scope, node->data.while_expr.condition, maybe_val_ptr);
|
||||
IrInstSrc *is_non_null = ir_build_test_non_null_src(ag, scope, node->data.while_expr.condition, maybe_val);
|
||||
IrBasicBlockSrc *after_cond_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_cond_block = ag->current_basic_block;
|
||||
IrInstSrc *void_else_result = else_node ? nullptr : ir_mark_gen(ir_build_const_void(ag, scope, node));
|
||||
IrInstSrc *cond_br_inst;
|
||||
if (!instr_is_unreachable(is_non_null)) {
|
||||
@ -6091,7 +6091,7 @@ static IrInstSrc *ir_gen_while_expr(Stage1AstGen *ag, Scope *scope, AstNode *nod
|
||||
build_decl_var_and_init(ag, child_scope, symbol_node, payload_var, var_value, buf_ptr(var_symbol), is_comptime);
|
||||
|
||||
ZigList<IrInstSrc *> incoming_values = {0};
|
||||
ZigList<IrBasicBlockSrc *> incoming_blocks = {0};
|
||||
ZigList<Stage1ZirBasicBlock *> incoming_blocks = {0};
|
||||
|
||||
if (is_duplicate_label(ag->codegen, child_scope, node, node->data.while_expr.name))
|
||||
return ag->codegen->invalid_inst_src;
|
||||
@ -6148,7 +6148,7 @@ static IrInstSrc *ir_gen_while_expr(Stage1AstGen *ag, Scope *scope, AstNode *nod
|
||||
if (!instr_is_unreachable(else_result))
|
||||
ir_mark_gen(ir_build_br(ag, scope, node, end_block, is_comptime));
|
||||
}
|
||||
IrBasicBlockSrc *after_else_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_else_block = ag->current_basic_block;
|
||||
ir_set_cursor_at_end_and_append_block(ag, end_block);
|
||||
if (else_result) {
|
||||
incoming_blocks.append(after_else_block);
|
||||
@ -6169,7 +6169,7 @@ static IrInstSrc *ir_gen_while_expr(Stage1AstGen *ag, Scope *scope, AstNode *nod
|
||||
IrInstSrc *cond_val = ir_gen_node(ag, node->data.while_expr.condition, scope);
|
||||
if (cond_val == ag->codegen->invalid_inst_src)
|
||||
return cond_val;
|
||||
IrBasicBlockSrc *after_cond_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_cond_block = ag->current_basic_block;
|
||||
IrInstSrc *void_else_result = else_node ? nullptr : ir_mark_gen(ir_build_const_void(ag, scope, node));
|
||||
IrInstSrc *cond_br_inst;
|
||||
if (!instr_is_unreachable(cond_val)) {
|
||||
@ -6186,7 +6186,7 @@ static IrInstSrc *ir_gen_while_expr(Stage1AstGen *ag, Scope *scope, AstNode *nod
|
||||
ir_set_cursor_at_end_and_append_block(ag, body_block);
|
||||
|
||||
ZigList<IrInstSrc *> incoming_values = {0};
|
||||
ZigList<IrBasicBlockSrc *> incoming_blocks = {0};
|
||||
ZigList<Stage1ZirBasicBlock *> incoming_blocks = {0};
|
||||
|
||||
Scope *subexpr_scope = create_runtime_scope(ag->codegen, node, scope, is_comptime);
|
||||
|
||||
@ -6245,7 +6245,7 @@ static IrInstSrc *ir_gen_while_expr(Stage1AstGen *ag, Scope *scope, AstNode *nod
|
||||
if (!instr_is_unreachable(else_result))
|
||||
ir_mark_gen(ir_build_br(ag, scope, node, end_block, is_comptime));
|
||||
}
|
||||
IrBasicBlockSrc *after_else_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_else_block = ag->current_basic_block;
|
||||
ir_set_cursor_at_end_and_append_block(ag, end_block);
|
||||
if (else_result) {
|
||||
incoming_blocks.append(after_else_block);
|
||||
@ -6312,11 +6312,11 @@ static IrInstSrc *ir_gen_for_expr(Stage1AstGen *ag, Scope *parent_scope, AstNode
|
||||
IrInstSrc *index_ptr = ir_build_var_ptr(ag, parent_scope, node, index_var);
|
||||
|
||||
|
||||
IrBasicBlockSrc *cond_block = ir_create_basic_block(ag, parent_scope, "ForCond");
|
||||
IrBasicBlockSrc *body_block = ir_create_basic_block(ag, parent_scope, "ForBody");
|
||||
IrBasicBlockSrc *end_block = ir_create_basic_block(ag, parent_scope, "ForEnd");
|
||||
IrBasicBlockSrc *else_block = else_node ? ir_create_basic_block(ag, parent_scope, "ForElse") : end_block;
|
||||
IrBasicBlockSrc *continue_block = ir_create_basic_block(ag, parent_scope, "ForContinue");
|
||||
Stage1ZirBasicBlock *cond_block = ir_create_basic_block(ag, parent_scope, "ForCond");
|
||||
Stage1ZirBasicBlock *body_block = ir_create_basic_block(ag, parent_scope, "ForBody");
|
||||
Stage1ZirBasicBlock *end_block = ir_create_basic_block(ag, parent_scope, "ForEnd");
|
||||
Stage1ZirBasicBlock *else_block = else_node ? ir_create_basic_block(ag, parent_scope, "ForElse") : end_block;
|
||||
Stage1ZirBasicBlock *continue_block = ir_create_basic_block(ag, parent_scope, "ForContinue");
|
||||
|
||||
Buf *len_field_name = buf_create_from_str("len");
|
||||
IrInstSrc *len_ref = ir_build_field_ptr(ag, parent_scope, node, array_val_ptr, len_field_name, false);
|
||||
@ -6326,7 +6326,7 @@ static IrInstSrc *ir_gen_for_expr(Stage1AstGen *ag, Scope *parent_scope, AstNode
|
||||
ir_set_cursor_at_end_and_append_block(ag, cond_block);
|
||||
IrInstSrc *index_val = ir_build_load_ptr(ag, &spill_scope->base, node, index_ptr);
|
||||
IrInstSrc *cond = ir_build_bin_op(ag, parent_scope, node, IrBinOpCmpLessThan, index_val, len_val, false);
|
||||
IrBasicBlockSrc *after_cond_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_cond_block = ag->current_basic_block;
|
||||
IrInstSrc *void_else_value = else_node ? nullptr : ir_mark_gen(ir_build_const_void(ag, parent_scope, node));
|
||||
IrInstSrc *cond_br_inst = ir_mark_gen(ir_build_cond_br(ag, parent_scope, node, cond,
|
||||
body_block, else_block, is_comptime));
|
||||
@ -6349,7 +6349,7 @@ static IrInstSrc *ir_gen_for_expr(Stage1AstGen *ag, Scope *parent_scope, AstNode
|
||||
return ag->codegen->invalid_inst_src;
|
||||
|
||||
ZigList<IrInstSrc *> incoming_values = {0};
|
||||
ZigList<IrBasicBlockSrc *> incoming_blocks = {0};
|
||||
ZigList<Stage1ZirBasicBlock *> incoming_blocks = {0};
|
||||
ScopeLoop *loop_scope = create_loop_scope(ag->codegen, node, child_scope);
|
||||
loop_scope->break_block = end_block;
|
||||
loop_scope->continue_block = continue_block;
|
||||
@ -6396,7 +6396,7 @@ static IrInstSrc *ir_gen_for_expr(Stage1AstGen *ag, Scope *parent_scope, AstNode
|
||||
if (!instr_is_unreachable(else_result))
|
||||
ir_mark_gen(ir_build_br(ag, parent_scope, node, end_block, is_comptime));
|
||||
}
|
||||
IrBasicBlockSrc *after_else_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_else_block = ag->current_basic_block;
|
||||
ir_set_cursor_at_end_and_append_block(ag, end_block);
|
||||
|
||||
if (else_result) {
|
||||
@ -6667,9 +6667,9 @@ static IrInstSrc *ir_gen_if_optional_expr(Stage1AstGen *ag, Scope *scope, AstNod
|
||||
IrInstSrc *maybe_val = ir_build_load_ptr(ag, scope, node, maybe_val_ptr);
|
||||
IrInstSrc *is_non_null = ir_build_test_non_null_src(ag, scope, node, maybe_val);
|
||||
|
||||
IrBasicBlockSrc *then_block = ir_create_basic_block(ag, scope, "OptionalThen");
|
||||
IrBasicBlockSrc *else_block = ir_create_basic_block(ag, scope, "OptionalElse");
|
||||
IrBasicBlockSrc *endif_block = ir_create_basic_block(ag, scope, "OptionalEndIf");
|
||||
Stage1ZirBasicBlock *then_block = ir_create_basic_block(ag, scope, "OptionalThen");
|
||||
Stage1ZirBasicBlock *else_block = ir_create_basic_block(ag, scope, "OptionalElse");
|
||||
Stage1ZirBasicBlock *endif_block = ir_create_basic_block(ag, scope, "OptionalEndIf");
|
||||
|
||||
IrInstSrc *is_comptime;
|
||||
if (ir_should_inline(ag->exec, scope)) {
|
||||
@ -6705,7 +6705,7 @@ static IrInstSrc *ir_gen_if_optional_expr(Stage1AstGen *ag, Scope *scope, AstNod
|
||||
&peer_parent->peers.at(0)->base);
|
||||
if (then_expr_result == ag->codegen->invalid_inst_src)
|
||||
return then_expr_result;
|
||||
IrBasicBlockSrc *after_then_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_then_block = ag->current_basic_block;
|
||||
if (!instr_is_unreachable(then_expr_result))
|
||||
ir_mark_gen(ir_build_br(ag, scope, node, endif_block, is_comptime));
|
||||
|
||||
@ -6719,7 +6719,7 @@ static IrInstSrc *ir_gen_if_optional_expr(Stage1AstGen *ag, Scope *scope, AstNod
|
||||
else_expr_result = ir_build_const_void(ag, scope, node);
|
||||
ir_build_end_expr(ag, scope, node, else_expr_result, &peer_parent->peers.at(1)->base);
|
||||
}
|
||||
IrBasicBlockSrc *after_else_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_else_block = ag->current_basic_block;
|
||||
if (!instr_is_unreachable(else_expr_result))
|
||||
ir_mark_gen(ir_build_br(ag, scope, node, endif_block, is_comptime));
|
||||
|
||||
@ -6727,7 +6727,7 @@ static IrInstSrc *ir_gen_if_optional_expr(Stage1AstGen *ag, Scope *scope, AstNod
|
||||
IrInstSrc **incoming_values = heap::c_allocator.allocate<IrInstSrc *>(2);
|
||||
incoming_values[0] = then_expr_result;
|
||||
incoming_values[1] = else_expr_result;
|
||||
IrBasicBlockSrc **incoming_blocks = heap::c_allocator.allocate<IrBasicBlockSrc *>(2);
|
||||
Stage1ZirBasicBlock **incoming_blocks = heap::c_allocator.allocate<Stage1ZirBasicBlock *>(2);
|
||||
incoming_blocks[0] = after_then_block;
|
||||
incoming_blocks[1] = after_else_block;
|
||||
|
||||
@ -6755,9 +6755,9 @@ static IrInstSrc *ir_gen_if_err_expr(Stage1AstGen *ag, Scope *scope, AstNode *no
|
||||
IrInstSrc *err_val = ir_build_load_ptr(ag, scope, node, err_val_ptr);
|
||||
IrInstSrc *is_err = ir_build_test_err_src(ag, scope, node, err_val_ptr, true, false);
|
||||
|
||||
IrBasicBlockSrc *ok_block = ir_create_basic_block(ag, scope, "TryOk");
|
||||
IrBasicBlockSrc *else_block = ir_create_basic_block(ag, scope, "TryElse");
|
||||
IrBasicBlockSrc *endif_block = ir_create_basic_block(ag, scope, "TryEnd");
|
||||
Stage1ZirBasicBlock *ok_block = ir_create_basic_block(ag, scope, "TryOk");
|
||||
Stage1ZirBasicBlock *else_block = ir_create_basic_block(ag, scope, "TryElse");
|
||||
Stage1ZirBasicBlock *endif_block = ir_create_basic_block(ag, scope, "TryEnd");
|
||||
|
||||
bool force_comptime = ir_should_inline(ag->exec, scope);
|
||||
IrInstSrc *is_comptime = force_comptime ? ir_build_const_bool(ag, scope, node, true) : ir_build_test_comptime(ag, scope, node, is_err);
|
||||
@ -6788,7 +6788,7 @@ static IrInstSrc *ir_gen_if_err_expr(Stage1AstGen *ag, Scope *scope, AstNode *no
|
||||
&peer_parent->peers.at(0)->base);
|
||||
if (then_expr_result == ag->codegen->invalid_inst_src)
|
||||
return then_expr_result;
|
||||
IrBasicBlockSrc *after_then_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_then_block = ag->current_basic_block;
|
||||
if (!instr_is_unreachable(then_expr_result))
|
||||
ir_mark_gen(ir_build_br(ag, scope, node, endif_block, is_comptime));
|
||||
|
||||
@ -6817,7 +6817,7 @@ static IrInstSrc *ir_gen_if_err_expr(Stage1AstGen *ag, Scope *scope, AstNode *no
|
||||
else_expr_result = ir_build_const_void(ag, scope, node);
|
||||
ir_build_end_expr(ag, scope, node, else_expr_result, &peer_parent->peers.at(1)->base);
|
||||
}
|
||||
IrBasicBlockSrc *after_else_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_else_block = ag->current_basic_block;
|
||||
if (!instr_is_unreachable(else_expr_result))
|
||||
ir_mark_gen(ir_build_br(ag, scope, node, endif_block, is_comptime));
|
||||
|
||||
@ -6825,7 +6825,7 @@ static IrInstSrc *ir_gen_if_err_expr(Stage1AstGen *ag, Scope *scope, AstNode *no
|
||||
IrInstSrc **incoming_values = heap::c_allocator.allocate<IrInstSrc *>(2);
|
||||
incoming_values[0] = then_expr_result;
|
||||
incoming_values[1] = else_expr_result;
|
||||
IrBasicBlockSrc **incoming_blocks = heap::c_allocator.allocate<IrBasicBlockSrc *>(2);
|
||||
Stage1ZirBasicBlock **incoming_blocks = heap::c_allocator.allocate<Stage1ZirBasicBlock *>(2);
|
||||
incoming_blocks[0] = after_then_block;
|
||||
incoming_blocks[1] = after_else_block;
|
||||
|
||||
@ -6834,9 +6834,9 @@ static IrInstSrc *ir_gen_if_err_expr(Stage1AstGen *ag, Scope *scope, AstNode *no
|
||||
}
|
||||
|
||||
static bool ir_gen_switch_prong_expr(Stage1AstGen *ag, Scope *scope, AstNode *switch_node, AstNode *prong_node,
|
||||
IrBasicBlockSrc *end_block, IrInstSrc *is_comptime, IrInstSrc *var_is_comptime,
|
||||
Stage1ZirBasicBlock *end_block, IrInstSrc *is_comptime, IrInstSrc *var_is_comptime,
|
||||
IrInstSrc *target_value_ptr, IrInstSrc **prong_values, size_t prong_values_len,
|
||||
ZigList<IrBasicBlockSrc *> *incoming_blocks, ZigList<IrInstSrc *> *incoming_values,
|
||||
ZigList<Stage1ZirBasicBlock *> *incoming_blocks, ZigList<IrInstSrc *> *incoming_values,
|
||||
IrInstSrcSwitchElseVar **out_switch_else_var, LVal lval, ResultLoc *result_loc)
|
||||
{
|
||||
assert(switch_node->type == NodeTypeSwitchExpr);
|
||||
@ -6898,8 +6898,8 @@ static IrInstSrc *ir_gen_switch_expr(Stage1AstGen *ag, Scope *scope, AstNode *no
|
||||
return target_value_ptr;
|
||||
IrInstSrc *target_value = ir_build_switch_target(ag, scope, node, target_value_ptr);
|
||||
|
||||
IrBasicBlockSrc *else_block = ir_create_basic_block(ag, scope, "SwitchElse");
|
||||
IrBasicBlockSrc *end_block = ir_create_basic_block(ag, scope, "SwitchEnd");
|
||||
Stage1ZirBasicBlock *else_block = ir_create_basic_block(ag, scope, "SwitchElse");
|
||||
Stage1ZirBasicBlock *end_block = ir_create_basic_block(ag, scope, "SwitchEnd");
|
||||
|
||||
size_t prong_count = node->data.switch_expr.prongs.length;
|
||||
ZigList<IrInstSrcSwitchBrCase> cases = {0};
|
||||
@ -6915,7 +6915,7 @@ static IrInstSrc *ir_gen_switch_expr(Stage1AstGen *ag, Scope *scope, AstNode *no
|
||||
}
|
||||
|
||||
ZigList<IrInstSrc *> incoming_values = {0};
|
||||
ZigList<IrBasicBlockSrc *> incoming_blocks = {0};
|
||||
ZigList<Stage1ZirBasicBlock *> incoming_blocks = {0};
|
||||
ZigList<IrInstSrcCheckSwitchProngsRange> check_ranges = {0};
|
||||
|
||||
IrInstSrcSwitchElseVar *switch_else_var = nullptr;
|
||||
@ -6991,8 +6991,8 @@ static IrInstSrc *ir_gen_switch_expr(Stage1AstGen *ag, Scope *scope, AstNode *no
|
||||
}
|
||||
}
|
||||
|
||||
IrBasicBlockSrc *range_block_yes = ir_create_basic_block(ag, scope, "SwitchRangeYes");
|
||||
IrBasicBlockSrc *range_block_no = ir_create_basic_block(ag, scope, "SwitchRangeNo");
|
||||
Stage1ZirBasicBlock *range_block_yes = ir_create_basic_block(ag, scope, "SwitchRangeYes");
|
||||
Stage1ZirBasicBlock *range_block_no = ir_create_basic_block(ag, scope, "SwitchRangeNo");
|
||||
|
||||
assert(ok_bit);
|
||||
assert(last_item_node);
|
||||
@ -7052,7 +7052,7 @@ static IrInstSrc *ir_gen_switch_expr(Stage1AstGen *ag, Scope *scope, AstNode *no
|
||||
}
|
||||
ResultLocPeer *this_peer_result_loc = create_peer_result(peer_parent);
|
||||
|
||||
IrBasicBlockSrc *prev_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *prev_block = ag->current_basic_block;
|
||||
if (peer_parent->peers.length > 0) {
|
||||
peer_parent->peers.last()->next_bb = else_block;
|
||||
}
|
||||
@ -7081,7 +7081,7 @@ static IrInstSrc *ir_gen_switch_expr(Stage1AstGen *ag, Scope *scope, AstNode *no
|
||||
|
||||
ResultLocPeer *this_peer_result_loc = create_peer_result(peer_parent);
|
||||
|
||||
IrBasicBlockSrc *prong_block = ir_create_basic_block(ag, scope, "SwitchProng");
|
||||
Stage1ZirBasicBlock *prong_block = ir_create_basic_block(ag, scope, "SwitchProng");
|
||||
IrInstSrc **items = heap::c_allocator.allocate<IrInstSrc *>(prong_item_count);
|
||||
|
||||
for (size_t item_i = 0; item_i < prong_item_count; item_i += 1) {
|
||||
@ -7103,7 +7103,7 @@ static IrInstSrc *ir_gen_switch_expr(Stage1AstGen *ag, Scope *scope, AstNode *no
|
||||
items[item_i] = item_value;
|
||||
}
|
||||
|
||||
IrBasicBlockSrc *prev_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *prev_block = ag->current_basic_block;
|
||||
if (peer_parent->peers.length > 0) {
|
||||
peer_parent->peers.last()->next_bb = prong_block;
|
||||
}
|
||||
@ -7202,7 +7202,7 @@ static IrInstSrc *ir_gen_return_from_block(Stage1AstGen *ag, Scope *break_scope,
|
||||
result_value = ir_build_const_void(ag, break_scope, node);
|
||||
}
|
||||
|
||||
IrBasicBlockSrc *dest_block = block_scope->end_block;
|
||||
Stage1ZirBasicBlock *dest_block = block_scope->end_block;
|
||||
if (!ir_gen_defers_for_block(ag, break_scope, dest_block->scope, nullptr, nullptr))
|
||||
return ag->codegen->invalid_inst_src;
|
||||
|
||||
@ -7279,7 +7279,7 @@ static IrInstSrc *ir_gen_break(Stage1AstGen *ag, Scope *break_scope, AstNode *no
|
||||
result_value = ir_build_const_void(ag, break_scope, node);
|
||||
}
|
||||
|
||||
IrBasicBlockSrc *dest_block = loop_scope->break_block;
|
||||
Stage1ZirBasicBlock *dest_block = loop_scope->break_block;
|
||||
if (!ir_gen_defers_for_block(ag, break_scope, dest_block->scope, nullptr, nullptr))
|
||||
return ag->codegen->invalid_inst_src;
|
||||
|
||||
@ -7341,7 +7341,7 @@ static IrInstSrc *ir_gen_continue(Stage1AstGen *ag, Scope *continue_scope, AstNo
|
||||
}
|
||||
runtime_scopes.deinit();
|
||||
|
||||
IrBasicBlockSrc *dest_block = loop_scope->continue_block;
|
||||
Stage1ZirBasicBlock *dest_block = loop_scope->continue_block;
|
||||
if (!ir_gen_defers_for_block(ag, continue_scope, dest_block->scope, nullptr, nullptr))
|
||||
return ag->codegen->invalid_inst_src;
|
||||
return ir_mark_gen(ir_build_br(ag, continue_scope, node, dest_block, is_comptime));
|
||||
@ -7440,9 +7440,9 @@ static IrInstSrc *ir_gen_catch(Stage1AstGen *ag, Scope *parent_scope, AstNode *n
|
||||
is_comptime = ir_build_test_comptime(ag, parent_scope, node, is_err);
|
||||
}
|
||||
|
||||
IrBasicBlockSrc *ok_block = ir_create_basic_block(ag, parent_scope, "UnwrapErrOk");
|
||||
IrBasicBlockSrc *err_block = ir_create_basic_block(ag, parent_scope, "UnwrapErrError");
|
||||
IrBasicBlockSrc *end_block = ir_create_basic_block(ag, parent_scope, "UnwrapErrEnd");
|
||||
Stage1ZirBasicBlock *ok_block = ir_create_basic_block(ag, parent_scope, "UnwrapErrOk");
|
||||
Stage1ZirBasicBlock *err_block = ir_create_basic_block(ag, parent_scope, "UnwrapErrError");
|
||||
Stage1ZirBasicBlock *end_block = ir_create_basic_block(ag, parent_scope, "UnwrapErrEnd");
|
||||
IrInstSrc *cond_br_inst = ir_build_cond_br(ag, parent_scope, node, is_err, err_block, ok_block, is_comptime);
|
||||
|
||||
ResultLocPeerParent *peer_parent = ir_build_binary_result_peers(ag, cond_br_inst, ok_block, end_block, result_loc,
|
||||
@ -7468,7 +7468,7 @@ static IrInstSrc *ir_gen_catch(Stage1AstGen *ag, Scope *parent_scope, AstNode *n
|
||||
IrInstSrc *err_result = ir_gen_node_extra(ag, op2_node, err_scope, LValNone, &peer_parent->peers.at(0)->base);
|
||||
if (err_result == ag->codegen->invalid_inst_src)
|
||||
return ag->codegen->invalid_inst_src;
|
||||
IrBasicBlockSrc *after_err_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_err_block = ag->current_basic_block;
|
||||
if (!instr_is_unreachable(err_result))
|
||||
ir_mark_gen(ir_build_br(ag, parent_scope, node, end_block, is_comptime));
|
||||
|
||||
@ -7476,14 +7476,14 @@ static IrInstSrc *ir_gen_catch(Stage1AstGen *ag, Scope *parent_scope, AstNode *n
|
||||
IrInstSrc *unwrapped_ptr = ir_build_unwrap_err_payload_src(ag, parent_scope, node, err_union_ptr, false, false);
|
||||
IrInstSrc *unwrapped_payload = ir_build_load_ptr(ag, parent_scope, node, unwrapped_ptr);
|
||||
ir_build_end_expr(ag, parent_scope, node, unwrapped_payload, &peer_parent->peers.at(1)->base);
|
||||
IrBasicBlockSrc *after_ok_block = ag->current_basic_block;
|
||||
Stage1ZirBasicBlock *after_ok_block = ag->current_basic_block;
|
||||
ir_build_br(ag, parent_scope, node, end_block, is_comptime);
|
||||
|
||||
ir_set_cursor_at_end_and_append_block(ag, end_block);
|
||||
IrInstSrc **incoming_values = heap::c_allocator.allocate<IrInstSrc *>(2);
|
||||
incoming_values[0] = err_result;
|
||||
incoming_values[1] = unwrapped_payload;
|
||||
IrBasicBlockSrc **incoming_blocks = heap::c_allocator.allocate<IrBasicBlockSrc *>(2);
|
||||
Stage1ZirBasicBlock **incoming_blocks = heap::c_allocator.allocate<Stage1ZirBasicBlock *>(2);
|
||||
incoming_blocks[0] = after_err_block;
|
||||
incoming_blocks[1] = after_ok_block;
|
||||
IrInstSrc *phi = ir_build_phi(ag, parent_scope, node, 2, incoming_blocks, incoming_values, peer_parent);
|
||||
@ -8045,7 +8045,7 @@ bool stage1_astgen(CodeGen *codegen, AstNode *node, Scope *scope, Stage1Zir *sta
|
||||
ag->exec = stage1_zir;
|
||||
ag->main_block_node = node;
|
||||
|
||||
IrBasicBlockSrc *entry_block = ir_create_basic_block(ag, scope, "Entry");
|
||||
Stage1ZirBasicBlock *entry_block = ir_create_basic_block(ag, scope, "Entry");
|
||||
ir_set_cursor_at_end_and_append_block(ag, entry_block);
|
||||
// Entry block gets a reference because we enter it to begin.
|
||||
ir_ref_bb(ag->current_basic_block);
|
||||
|
||||
@ -34,7 +34,7 @@ struct IrBuilderGen {
|
||||
struct IrAnalyze {
|
||||
CodeGen *codegen;
|
||||
Stage1Zir *zir;
|
||||
IrBasicBlockSrc *zir_current_basic_block;
|
||||
Stage1ZirBasicBlock *zir_current_basic_block;
|
||||
IrBuilderGen new_irb;
|
||||
size_t old_bb_index;
|
||||
size_t instruction_index;
|
||||
@ -42,7 +42,7 @@ struct IrAnalyze {
|
||||
AstNode *explicit_return_type_source_node;
|
||||
ZigList<IrInstGen *> src_implicit_return_type_list;
|
||||
ZigList<IrSuspendPosition> resume_stack;
|
||||
IrBasicBlockSrc *const_predecessor_bb;
|
||||
Stage1ZirBasicBlock *const_predecessor_bb;
|
||||
size_t ref_count;
|
||||
size_t break_debug_id; // for debugging purposes
|
||||
IrInstGen *return_ptr;
|
||||
@ -482,7 +482,7 @@ static void ira_deref(IrAnalyze *ira) {
|
||||
assert(ira->ref_count != 0);
|
||||
|
||||
for (size_t bb_i = 0; bb_i < ira->zir->basic_block_list.length; bb_i += 1) {
|
||||
IrBasicBlockSrc *pass1_bb = ira->zir->basic_block_list.items[bb_i];
|
||||
Stage1ZirBasicBlock *pass1_bb = ira->zir->basic_block_list.items[bb_i];
|
||||
for (size_t inst_i = 0; inst_i < pass1_bb->instruction_list.length; inst_i += 1) {
|
||||
IrInstSrc *pass1_inst = pass1_bb->instruction_list.items[inst_i];
|
||||
destroy_instruction_src(pass1_inst);
|
||||
@ -742,7 +742,7 @@ static IrBasicBlockGen *ir_create_basic_block_gen(IrAnalyze *ira, Scope *scope,
|
||||
return result;
|
||||
}
|
||||
|
||||
static IrBasicBlockGen *ir_build_bb_from(IrAnalyze *ira, IrBasicBlockSrc *other_bb) {
|
||||
static IrBasicBlockGen *ir_build_bb_from(IrAnalyze *ira, Stage1ZirBasicBlock *other_bb) {
|
||||
IrBasicBlockGen *new_bb = ir_create_basic_block_gen(ira, other_bb->scope, other_bb->name_hint);
|
||||
other_bb->child = new_bb;
|
||||
return new_bb;
|
||||
@ -5261,7 +5261,7 @@ static IrInstGen *ir_resolve_ptr_of_array_to_slice(IrAnalyze *ira, IrInst* sourc
|
||||
return ir_build_ptr_of_array_to_slice(ira, source_instr, wanted_type, array_ptr, result_loc_inst);
|
||||
}
|
||||
|
||||
static IrBasicBlockGen *ir_get_new_bb(IrAnalyze *ira, IrBasicBlockSrc *old_bb, IrInst *ref_old_instruction) {
|
||||
static IrBasicBlockGen *ir_get_new_bb(IrAnalyze *ira, Stage1ZirBasicBlock *old_bb, IrInst *ref_old_instruction) {
|
||||
assert(old_bb);
|
||||
|
||||
if (old_bb->child) {
|
||||
@ -5276,7 +5276,7 @@ static IrBasicBlockGen *ir_get_new_bb(IrAnalyze *ira, IrBasicBlockSrc *old_bb, I
|
||||
return new_bb;
|
||||
}
|
||||
|
||||
static IrBasicBlockGen *ir_get_new_bb_runtime(IrAnalyze *ira, IrBasicBlockSrc *old_bb, IrInst *ref_old_instruction) {
|
||||
static IrBasicBlockGen *ir_get_new_bb_runtime(IrAnalyze *ira, Stage1ZirBasicBlock *old_bb, IrInst *ref_old_instruction) {
|
||||
assert(ref_old_instruction != nullptr);
|
||||
IrBasicBlockGen *new_bb = ir_get_new_bb(ira, old_bb, ref_old_instruction);
|
||||
if (new_bb->must_be_comptime_source_instr) {
|
||||
@ -5289,7 +5289,7 @@ static IrBasicBlockGen *ir_get_new_bb_runtime(IrAnalyze *ira, IrBasicBlockSrc *o
|
||||
return new_bb;
|
||||
}
|
||||
|
||||
static void ir_start_bb(IrAnalyze *ira, IrBasicBlockSrc *old_bb, IrBasicBlockSrc *const_predecessor_bb) {
|
||||
static void ir_start_bb(IrAnalyze *ira, Stage1ZirBasicBlock *old_bb, Stage1ZirBasicBlock *const_predecessor_bb) {
|
||||
ir_assert(!old_bb->suspended, (old_bb->instruction_list.length != 0) ? &old_bb->instruction_list.at(0)->base : nullptr);
|
||||
ira->instruction_index = 0;
|
||||
ira->zir_current_basic_block = old_bb;
|
||||
@ -5297,7 +5297,7 @@ static void ir_start_bb(IrAnalyze *ira, IrBasicBlockSrc *old_bb, IrBasicBlockSrc
|
||||
ira->old_bb_index = old_bb->index;
|
||||
}
|
||||
|
||||
static IrInstGen *ira_suspend(IrAnalyze *ira, IrInst *old_instruction, IrBasicBlockSrc *next_bb,
|
||||
static IrInstGen *ira_suspend(IrAnalyze *ira, IrInst *old_instruction, Stage1ZirBasicBlock *next_bb,
|
||||
IrSuspendPosition *suspend_pos)
|
||||
{
|
||||
if (ira->codegen->verbose_ir) {
|
||||
@ -5356,7 +5356,7 @@ static void ir_start_next_bb(IrAnalyze *ira) {
|
||||
bool need_repeat = true;
|
||||
for (;;) {
|
||||
while (ira->old_bb_index < ira->zir->basic_block_list.length) {
|
||||
IrBasicBlockSrc *old_bb = ira->zir->basic_block_list.at(ira->old_bb_index);
|
||||
Stage1ZirBasicBlock *old_bb = ira->zir->basic_block_list.at(ira->old_bb_index);
|
||||
if (old_bb->child == nullptr && old_bb->suspend_instruction_ref == nullptr) {
|
||||
ira->old_bb_index += 1;
|
||||
continue;
|
||||
@ -5447,7 +5447,7 @@ static bool ir_emit_backward_branch(IrAnalyze *ira, IrInst* source_instruction)
|
||||
return true;
|
||||
}
|
||||
|
||||
static IrInstGen *ir_inline_bb(IrAnalyze *ira, IrInst* source_instruction, IrBasicBlockSrc *old_bb) {
|
||||
static IrInstGen *ir_inline_bb(IrAnalyze *ira, IrInst* source_instruction, Stage1ZirBasicBlock *old_bb) {
|
||||
if (old_bb->debug_id <= ira->zir_current_basic_block->debug_id) {
|
||||
if (!ir_emit_backward_branch(ira, source_instruction))
|
||||
return ir_unreach_error(ira);
|
||||
@ -13776,20 +13776,20 @@ static IrInstGen *ir_analyze_instruction_un_op(IrAnalyze *ira, IrInstSrcUnOp *in
|
||||
}
|
||||
|
||||
static void ir_push_resume(IrAnalyze *ira, IrSuspendPosition pos) {
|
||||
IrBasicBlockSrc *old_bb = ira->zir->basic_block_list.at(pos.basic_block_index);
|
||||
Stage1ZirBasicBlock *old_bb = ira->zir->basic_block_list.at(pos.basic_block_index);
|
||||
if (old_bb->in_resume_stack) return;
|
||||
ira->resume_stack.append(pos);
|
||||
old_bb->in_resume_stack = true;
|
||||
}
|
||||
|
||||
static void ir_push_resume_block(IrAnalyze *ira, IrBasicBlockSrc *old_bb) {
|
||||
static void ir_push_resume_block(IrAnalyze *ira, Stage1ZirBasicBlock *old_bb) {
|
||||
if (ira->resume_stack.length != 0) {
|
||||
ir_push_resume(ira, {old_bb->index, 0});
|
||||
}
|
||||
}
|
||||
|
||||
static IrInstGen *ir_analyze_instruction_br(IrAnalyze *ira, IrInstSrcBr *br_instruction) {
|
||||
IrBasicBlockSrc *old_dest_block = br_instruction->dest_block;
|
||||
Stage1ZirBasicBlock *old_dest_block = br_instruction->dest_block;
|
||||
|
||||
bool is_comptime;
|
||||
if (!ir_resolve_comptime(ira, br_instruction->is_comptime->child, &is_comptime))
|
||||
@ -13827,7 +13827,7 @@ static IrInstGen *ir_analyze_instruction_cond_br(IrAnalyze *ira, IrInstSrcCondBr
|
||||
if (!ir_resolve_bool(ira, casted_condition, &cond_is_true))
|
||||
return ir_unreach_error(ira);
|
||||
|
||||
IrBasicBlockSrc *old_dest_block = cond_is_true ?
|
||||
Stage1ZirBasicBlock *old_dest_block = cond_is_true ?
|
||||
cond_br_instruction->then_block : cond_br_instruction->else_block;
|
||||
|
||||
if (is_comptime || (old_dest_block->ref_count == 1 && old_dest_block->suspend_instruction_ref == nullptr))
|
||||
@ -13877,7 +13877,7 @@ static IrInstGen *ir_analyze_instruction_phi(IrAnalyze *ira, IrInstSrcPhi *phi_i
|
||||
|
||||
if (ira->const_predecessor_bb) {
|
||||
for (size_t i = 0; i < phi_instruction->incoming_count; i += 1) {
|
||||
IrBasicBlockSrc *predecessor = phi_instruction->incoming_blocks[i];
|
||||
Stage1ZirBasicBlock *predecessor = phi_instruction->incoming_blocks[i];
|
||||
if (predecessor != ira->const_predecessor_bb)
|
||||
continue;
|
||||
IrInstGen *value = phi_instruction->incoming_values[i]->child;
|
||||
@ -13977,7 +13977,7 @@ static IrInstGen *ir_analyze_instruction_phi(IrAnalyze *ira, IrInstSrcPhi *phi_i
|
||||
ZigList<IrInstGen*> new_incoming_values = {0};
|
||||
|
||||
for (size_t i = 0; i < phi_instruction->incoming_count; i += 1) {
|
||||
IrBasicBlockSrc *predecessor = phi_instruction->incoming_blocks[i];
|
||||
Stage1ZirBasicBlock *predecessor = phi_instruction->incoming_blocks[i];
|
||||
if (predecessor->ref_count == 0)
|
||||
continue;
|
||||
|
||||
@ -15996,7 +15996,7 @@ static IrInstGen *ir_analyze_instruction_switch_br(IrAnalyze *ira,
|
||||
if (!target_val)
|
||||
return ir_unreach_error(ira);
|
||||
|
||||
IrBasicBlockSrc *old_dest_block = switch_br_instruction->else_block;
|
||||
Stage1ZirBasicBlock *old_dest_block = switch_br_instruction->else_block;
|
||||
for (size_t i = 0; i < case_count; i += 1) {
|
||||
IrInstSrcSwitchBrCase *old_case = &switch_br_instruction->cases[i];
|
||||
IrInstGen *case_value = old_case->value->child;
|
||||
@ -24488,7 +24488,7 @@ ZigType *ir_analyze(CodeGen *codegen, Stage1Zir *stage1_zir, Stage1Air *stage1_a
|
||||
ira->new_irb.codegen = codegen;
|
||||
ira->new_irb.exec = stage1_air;
|
||||
|
||||
IrBasicBlockSrc *old_entry_bb = ira->zir->basic_block_list.at(0);
|
||||
Stage1ZirBasicBlock *old_entry_bb = ira->zir->basic_block_list.at(0);
|
||||
IrBasicBlockGen *new_entry_bb = ir_get_new_bb(ira, old_entry_bb, nullptr);
|
||||
ira->new_irb.current_basic_block = new_entry_bb;
|
||||
ira->old_bb_index = 0;
|
||||
|
||||
@ -633,7 +633,7 @@ static void ir_print_other_inst_gen(IrPrintGen *irp, IrInstGen *inst) {
|
||||
}
|
||||
}
|
||||
|
||||
static void ir_print_other_block(IrPrintSrc *irp, IrBasicBlockSrc *bb) {
|
||||
static void ir_print_other_block(IrPrintSrc *irp, Stage1ZirBasicBlock *bb) {
|
||||
if (bb == nullptr) {
|
||||
fprintf(irp->f, "(null block)");
|
||||
} else {
|
||||
@ -1006,7 +1006,7 @@ static void ir_print_phi(IrPrintSrc *irp, IrInstSrcPhi *phi_instruction) {
|
||||
assert(phi_instruction->incoming_count != 0);
|
||||
assert(phi_instruction->incoming_count != SIZE_MAX);
|
||||
for (size_t i = 0; i < phi_instruction->incoming_count; i += 1) {
|
||||
IrBasicBlockSrc *incoming_block = phi_instruction->incoming_blocks[i];
|
||||
Stage1ZirBasicBlock *incoming_block = phi_instruction->incoming_blocks[i];
|
||||
IrInstSrc *incoming_value = phi_instruction->incoming_values[i];
|
||||
if (i != 0)
|
||||
fprintf(irp->f, " ");
|
||||
@ -3350,7 +3350,7 @@ static void ir_print_inst_gen(IrPrintGen *irp, IrInstGen *instruction, bool trai
|
||||
fprintf(irp->f, "\n");
|
||||
}
|
||||
|
||||
static void irp_print_basic_block_src(IrPrintSrc *irp, IrBasicBlockSrc *current_block) {
|
||||
static void irp_print_basic_block_src(IrPrintSrc *irp, Stage1ZirBasicBlock *current_block) {
|
||||
fprintf(irp->f, "%s_%" PRIu32 ":\n", current_block->name_hint, current_block->debug_id);
|
||||
for (size_t instr_i = 0; instr_i < current_block->instruction_list.length; instr_i += 1) {
|
||||
IrInstSrc *instruction = current_block->instruction_list.at(instr_i);
|
||||
@ -3370,7 +3370,7 @@ static void irp_print_basic_block_gen(IrPrintGen *irp, IrBasicBlockGen *current_
|
||||
}
|
||||
}
|
||||
|
||||
void ir_print_basic_block_src(CodeGen *codegen, FILE *f, IrBasicBlockSrc *bb, int indent_size) {
|
||||
void ir_print_basic_block_src(CodeGen *codegen, FILE *f, Stage1ZirBasicBlock *bb, int indent_size) {
|
||||
IrPrintSrc ir_print = {};
|
||||
ir_print.codegen = codegen;
|
||||
ir_print.f = f;
|
||||
|
||||
@ -16,7 +16,7 @@ void ir_print_src(CodeGen *codegen, FILE *f, Stage1Zir *executable, int indent_s
|
||||
void ir_print_gen(CodeGen *codegen, FILE *f, Stage1Air *executable, int indent_size);
|
||||
void ir_print_inst_src(CodeGen *codegen, FILE *f, IrInstSrc *inst, int indent_size);
|
||||
void ir_print_inst_gen(CodeGen *codegen, FILE *f, IrInstGen *inst, int indent_size);
|
||||
void ir_print_basic_block_src(CodeGen *codegen, FILE *f, IrBasicBlockSrc *bb, int indent_size);
|
||||
void ir_print_basic_block_src(CodeGen *codegen, FILE *f, Stage1ZirBasicBlock *bb, int indent_size);
|
||||
void ir_print_basic_block_gen(CodeGen *codegen, FILE *f, IrBasicBlockGen *bb, int indent_size);
|
||||
|
||||
const char* ir_inst_src_type_str(IrInstSrcId id);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user