Skip to content

Commit

Permalink
fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
alex-s168 committed Feb 4, 2025
1 parent d0910f6 commit 07a1462
Show file tree
Hide file tree
Showing 8 changed files with 19 additions and 11 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ build.exe
build.slowdb
venv/
*.plist
tests/*.asm
6 changes: 1 addition & 5 deletions ir/ir.c
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ vx_IrVar vx_IrBlock_newVar(vx_IrBlock *block, vx_IrOp *decl) {
vx_IrBlock *root = (vx_IrBlock *) vx_IrBlock_root(block);
assert(root != NULL);
vx_IrVar new = root->as_root.vars_len;
vx_IrBlock_putVar(root, new, decl);
vx_IrBlock_putVar(root, new, decl);
return new;
}

Expand Down Expand Up @@ -399,14 +399,10 @@ int vx_CU_compile(vx_CU * cu,

vx_CIrBlock_fix(cu, block); // TODO: why...
vx_CIrBlock_normalize(cu, block);
vx_IrBlock_dump(block, stdout, 0);
vx_CIrBlock_mksa_states(cu, block);
vx_IrBlock_dump(block, stdout, 0);
vx_CIrBlock_mksa_final(cu, block);
vx_IrBlock_dump(block, stdout, 0);
vx_CIrBlock_fix(cu, block); // TODO: why...

vx_IrBlock_dump(block, stdout, 0);
if (vx_ir_verify(cu, block) != 0)
return 1;
});
Expand Down
2 changes: 1 addition & 1 deletion ir/transform/ll_if_invert.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ void vx_IrBlock_ll_if_invert(vx_CU* cu, vx_IrBlock *block)
}

vx_IrValue cond_val = *vx_IrOp_param(op, VX_IR_NAME_COND);
assert(cond_val.type = VX_IR_VAL_BLOCK);
assert(cond_val.type != VX_IR_VAL_BLOCK);

if (then && !els)
{
Expand Down
4 changes: 3 additions & 1 deletion ir/transform/lower_loops.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,13 @@ void vx_IrBlock_llir_preLower_loops(vx_CU* cu, vx_IrBlock *block)
cond->ins = NULL;
cond->ins_len = 0;

vx_IrBlock_addAllOp(newBody, cond);

vx_IrOp* ifOp = vx_IrBlock_addOpBuilding(newBody);
vx_IrOp_init(ifOp, VX_IR_OP_IF, newBody);

body->parent = ifOp->parent;
vx_IrOp_addParam_s(ifOp, VX_IR_NAME_COND, VX_IR_VALUE_BLK(cond));
vx_IrOp_addParam_s(ifOp, VX_IR_NAME_COND, VX_IR_VALUE_VAR(cond->outs[0]));

body->parent = ifOp->parent;
vx_IrOp_addParam_s(ifOp, VX_IR_NAME_COND_THEN, VX_IR_VALUE_BLK(body));
Expand Down
4 changes: 1 addition & 3 deletions ir/transform/ssair_llir_lower.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,9 +116,7 @@ static void lower_into(vx_IrBlock *old, vx_IrBlock *dest, vx_IrBlock *newParent,
}

vx_IrValue cond_val = *vx_IrOp_param(op, VX_IR_NAME_COND);
assert(cond_val.type = VX_IR_VAL_BLOCK);

// lower_into(cond, dest, newParent, continueLabel, breakLabel, loopOP);
assert(cond_val.type != VX_IR_VAL_BLOCK);

if (els && then) {
// cond .then COND
Expand Down
9 changes: 8 additions & 1 deletion s-expr/ir_serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ vx_IrBlock* vx_IrBlock_parseS(vx_CU* cu, struct SNode* s)
struct SNode* rets = snode_expect(snode_kv_get_expect(s, "rets"), S_LIST)->list;

vx_IrBlock* block = vx_IrBlock_initHeap(NULL, NULL);
block->is_root = false;

for (; args; args = args->next) {
vx_IrTypedVar arg = vx_IrTypedVar_parseS(cu, args);
Expand All @@ -165,6 +166,12 @@ vx_IrBlock* vx_IrBlock_parseS(vx_CU* cu, struct SNode* s)
vx_IrOp* op = vx_IrOp_parseS(cu, ops);
op->parent = block;
vx_IrBlock_addOp(block, op);

FOR_INPUTS(op, inp, ({
if (inp.type == VX_IR_VAL_BLOCK) {
inp.block->parent = block;
}
}));
}

for (; rets; rets = rets->next) {
Expand Down Expand Up @@ -207,7 +214,7 @@ void vx_CUBlock_parseS(vx_CU* cu, struct SNode* s)
inner = inner->next;

vx_IrBlock* block = vx_IrBlock_parseS(cu, inner);
vx_IrBlock_makeRoot(block, 0);
block->is_root = true;
vx_CIrBlock_fix(cu, block);

char const* name = snode_expect(snode_kv_get_expect(attribs, "name"), S_STRING)->value;
Expand Down
Empty file modified tests/c3_to_ir.sh
100644 → 100755
Empty file.
4 changes: 4 additions & 0 deletions tests/ir_to_asm.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
set -e
for f in *.s; do
../build/vxcc.exe vs2asm --in=$f > $f.asm
done

0 comments on commit 07a1462

Please sign in to comment.