calculate index of each instruction in function and calculate block preds and succs

This commit is contained in:
2026-08-05 20:55:35 +10:00
parent d6c448af87
commit 19abc8496f
9 changed files with 46 additions and 40 deletions

44
test.c
View File

@@ -11,54 +11,24 @@ int main(void) {
GravityType mainFuncType = gravityCreateFunctionType(0, NULL, charType);
GravityFunction mainFunc = gravityNewFunction(module, "main", mainFuncType);
GravityBlock entryBlock = gravityStartBlock("entry", mainFunc);
/*
// define blocks
GravityBlock thenBlock = gravityStartBlock("then", mainFunc);
gravityAppendBlockArgument(thenBlock, ptrType);
GravityBlock elseBlock = gravityStartBlock("else", mainFunc);
gravityAppendBlockArgument(elseBlock, ptrType);
GravityBlock mergeBlock = gravityStartBlock("merge", mainFunc);
gravityAppendBlockArgument(mergeBlock, ptrType);
// write entry
gravityBuilderSwitchToBlock(builder, entryBlock);
GravityValue x = gravityBuildAlloc(builder, charType, "x");
GravityValue oneConst = gravityBuildIntConstant(builder, charType, 1, "true");
gravityBuildBr(builder, oneConst, thenBlock, (GravityValue[]){x}, elseBlock, (GravityValue[]){x});
GravityValue oneConst = gravityNewIntConstant(charType, 1);
gravityBuildBr(builder, oneConst, thenBlock, (GravityValue[]){}, elseBlock, (GravityValue[]){});
// then block
gravityBuilderSwitchToBlock(builder, thenBlock);
GravityValue thenValue = gravityGetBlockArg(thenBlock, 0);
GravityValue fiveConst = gravityBuildIntConstant(builder, charType, 5, "five");
gravityBuildStore(builder, thenValue, fiveConst);
gravityBuildJump(builder, mergeBlock, (GravityValue[]){thenValue});
gravityBuildJump(builder, mergeBlock, (GravityValue[]){});
// else block
gravityBuilderSwitchToBlock(builder, elseBlock);
GravityValue elseValue = gravityGetBlockArg(elseBlock, 0);
GravityValue tenConst = gravityBuildIntConstant(builder, charType, 10, "ten");
gravityBuildStore(builder, elseValue, tenConst);
gravityBuildJump(builder, mergeBlock, (GravityValue[]){elseValue});
// merge block
gravityBuildJump(builder, mergeBlock, (GravityValue[]){});
gravityBuilderSwitchToBlock(builder, mergeBlock);
GravityValue xVar = gravityGetBlockArg(mergeBlock, 0);
GravityValue xValue = gravityBuildLoad(builder, xVar, "xValue");
gravityBuildRet(builder, xValue);*/
gravityBuildRet(builder, NULL);
gravityBuilderSwitchToBlock(builder, entryBlock);
GravityValue variable = gravityBuildAlloc(builder, charType, NULL);
GravityValue returnVal = gravityNewIntConstant(charType, 123);//gravityBuildIntConstant(builder, charType, 123, NULL);
gravityBuildStore(builder, variable, returnVal);
GravityValue varValue = gravityBuildLoad(builder, variable, NULL);
gravityBuildRet(builder, varValue);
gravityCompleteFunction(mainFunc);
printf("%s\n", gravityFunctionToCStr(mainFunc));