diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll index db80d5a31a69..bf56a121821c 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll @@ -1338,6 +1338,24 @@ class CoAwaitExpr extends UnaryOperation, @co_await { override string getOperator() { result = "co_await" } override int getPrecedence() { result = 16 } + + /** + * Gets the Boolean expression that is used to decide if the enclosing + * coroutine should be suspended. + */ + Expr getAwaitReady() { result = this.getChild(1) } + + /** + * Gets the expression that represents the resume point if the enclosing + * coroutine was suspended. + */ + Expr getAwaitResume() { result = this.getChild(2) } + + /** + * Gets the expression that is evaluated when the enclosing coroutine is + * suspended. + */ + Expr getAwaitSuspend() { result = this.getChild(3) } } /** @@ -1352,6 +1370,24 @@ class CoYieldExpr extends UnaryOperation, @co_yield { override string getOperator() { result = "co_yield" } override int getPrecedence() { result = 2 } + + /** + * Gets the Boolean expression that is used to decide if the enclosing + * coroutine should be suspended. + */ + Expr getAwaitReady() { result = this.getChild(1) } + + /** + * Gets the expression that represents the resume point if the enclosing + * coroutine was suspended. + */ + Expr getAwaitResume() { result = this.getChild(2) } + + /** + * Gets the expression that is evaluated when the enclosing coroutine is + * suspended. + */ + Expr getAwaitSuspend() { result = this.getChild(3) } } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll index f9315a36bcf0..06e6ffa654ab 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll @@ -89,7 +89,8 @@ newtype TInstructionTag = ImplicitDestructorTag(int index) { exists(Expr e | exists(e.getImplicitDestructorCall(index))) or exists(Stmt s | exists(s.getImplicitDestructorCall(index))) - } + } or + CoAwaitBranchTag() class InstructionTag extends TInstructionTag { final string toString() { result = getInstructionTagId(this) } @@ -186,6 +187,8 @@ string getInstructionTagId(TInstructionTag tag) { or tag = BoolConversionCompareTag() and result = "BoolConvComp" or + tag = ResultCopyTag() and result = "ResultCopy" + or tag = LoadTag() and result = "Load" // Implicit load due to lvalue-to-rvalue conversion or tag = CatchTag() and result = "Catch" @@ -263,4 +266,6 @@ string getInstructionTagId(TInstructionTag tag) { exists(int index | tag = ImplicitDestructorTag(index) and result = "ImplicitDestructor(" + index + ")" ) + or + tag = CoAwaitBranchTag() and result = "CoAwaitBranch" } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll index 49cbe866833a..3f4039ebb346 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll @@ -1259,9 +1259,7 @@ class TranslatedUnaryExpr extends TranslatedSingleInstructionExpr { expr instanceof NotExpr or expr instanceof ComplementExpr or expr instanceof UnaryPlusExpr or - expr instanceof UnaryMinusExpr or - expr instanceof CoAwaitExpr or - expr instanceof CoYieldExpr + expr instanceof UnaryMinusExpr } final override Instruction getFirstInstruction(EdgeKind kind) { @@ -1301,12 +1299,6 @@ class TranslatedUnaryExpr extends TranslatedSingleInstructionExpr { expr instanceof UnaryPlusExpr and result instanceof Opcode::CopyValue or expr instanceof UnaryMinusExpr and result instanceof Opcode::Negate - or - // TODO: Use a new opcode to represent "awaiting the value" - expr instanceof CoAwaitExpr and result instanceof Opcode::CopyValue - or - // TODO: Use a new opcode to represent "awaiting the value" - expr instanceof CoYieldExpr and result instanceof Opcode::CopyValue } private TranslatedExpr getOperand() { @@ -1314,6 +1306,146 @@ class TranslatedUnaryExpr extends TranslatedSingleInstructionExpr { } } +/** + * IR translation of a `co_await` or `co_yield` expression. + * + * The translation of `x = co_await ...` is essentially: + * ```cpp + * if (!awaiter.await_ready()) { + * awaiter.await_suspend(); + * } + * x = awaiter.await_resume(); + * ``` + * where `awaiter` is an object constructed from programmer-supplied + * input, and for IR construction purposes these are resolved by the C/C++ + * front-end. + * + * See https://en.cppreference.com/w/cpp/language/coroutines#co_await for the + * specification on how `awaiter` is obtained. + */ +abstract private class TranslatedCoExpr extends TranslatedNonConstantExpr { + /** Gets the operand of this operation. */ + abstract Expr getOperand(); + + /** + * Gets the expression that decides if the enclosing coroutine should be + * suspended. + */ + abstract Expr getAwaitReady(); + + /** + * Gets the expression that is evaluated when the enclosing coroutine is + * suspended. + */ + abstract Expr getAwaitSuspend(); + + /** + * Gets the expression that represents the resume point if the enclosing + * coroutine was suspended. + */ + abstract Expr getAwaitResume(); + + final override Instruction getFirstInstruction(EdgeKind kind) { + result = this.getTranslatedOperand().getFirstInstruction(kind) + } + + override Instruction getALastInstructionInternal() { + result = this.getTranslatedAwaitResume().getALastInstruction() + } + + final override TranslatedElement getChildInternal(int id) { + id = 0 and result = this.getTranslatedOperand() + or + id = 1 and result = this.getTranslatedAwaitReady() + or + id = 2 and result = this.getTranslatedAwaitResume() + or + id = 3 and result = this.getTranslatedAwaitSuspend() + } + + final override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) { + tag = CoAwaitBranchTag() and + ( + kind instanceof TrueEdge and + result = this.getTranslatedAwaitResume().getFirstInstruction(any(GotoEdge goto)) + or + kind instanceof FalseEdge and + result = this.getTranslatedAwaitSuspend().getFirstInstruction(any(GotoEdge goto)) + ) + } + + override Instruction getResult() { result = this.getTranslatedAwaitResume().getResult() } + + final override Instruction getChildSuccessorInternal(TranslatedElement child, EdgeKind kind) { + child = this.getTranslatedOperand() and + result = this.getTranslatedAwaitReady().getFirstInstruction(kind) + or + child = this.getTranslatedAwaitReady() and + kind instanceof GotoEdge and + result = this.getInstruction(CoAwaitBranchTag()) + or + child = this.getTranslatedAwaitSuspend() and + result = this.getTranslatedAwaitResume().getFirstInstruction(kind) + or + child = this.getTranslatedAwaitResume() and + result = this.getParent().getChildSuccessor(this, kind) + } + + override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { + tag = CoAwaitBranchTag() and + opcode instanceof Opcode::ConditionalBranch and + resultType = getVoidType() + } + + override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) { + tag = CoAwaitBranchTag() and + operandTag instanceof ConditionOperandTag and + result = this.getTranslatedAwaitReady().getResult() + } + + private TranslatedExpr getTranslatedOperand() { + result = getTranslatedExpr(this.getOperand().getFullyConverted()) + } + + private TranslatedExpr getTranslatedAwaitReady() { + result = getTranslatedExpr(this.getAwaitReady().getFullyConverted()) + } + + private TranslatedExpr getTranslatedAwaitResume() { + result = getTranslatedExpr(this.getAwaitResume().getFullyConverted()) + } + + private TranslatedExpr getTranslatedAwaitSuspend() { + result = getTranslatedExpr(this.getAwaitSuspend().getFullyConverted()) + } +} + +/** IR translation of `co_await`. */ +class TranslatedCoAwaitExpr extends TranslatedCoExpr { + override CoAwaitExpr expr; + + final override Expr getOperand() { result = expr.getOperand() } + + final override Expr getAwaitReady() { result = expr.getAwaitReady() } + + final override Expr getAwaitSuspend() { result = expr.getAwaitSuspend() } + + final override Expr getAwaitResume() { result = expr.getAwaitResume() } +} + +/** IR translation of `co_yield`. */ +class TranslatedCoYieldxpr extends TranslatedCoExpr { + override CoYieldExpr expr; + + final override Expr getOperand() { result = expr.getOperand() } + + final override Expr getAwaitReady() { result = expr.getAwaitReady() } + + final override Expr getAwaitSuspend() { result = expr.getAwaitSuspend() } + + final override Expr getAwaitResume() { result = expr.getAwaitResume() } +} + abstract class TranslatedConversion extends TranslatedNonConstantExpr { override Conversion expr; diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index 38e21d14835b..51e12b7a6e5d 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -741,346 +741,1344 @@ complex.c: coroutines.cpp: # 87| co_returnable_void co_return_void() # 87| Block 0 -# 87| v87_1(void) = EnterFunction : -# 87| m87_2(unknown) = AliasedDefinition : -# 87| m87_3(unknown) = InitializeNonLocal : -# 87| m87_4(unknown) = Chi : total:m87_2, partial:m87_3 -# 87| r87_5(glval) = VariableAddress[(unnamed local variable)] : -# 87| m87_6(promise_type) = Uninitialized[(unnamed local variable)] : &:r87_5 -# 87| m87_7(unknown) = Chi : total:m87_4, partial:m87_6 -# 87| r87_8(glval) = VariableAddress[(unnamed local variable)] : -# 87| r87_9(glval) = FunctionAddress[initial_suspend] : -# 87| r87_10(suspend_always) = Call[initial_suspend] : func:r87_9, this:r87_8 -# 87| m87_11(unknown) = ^CallSideEffect : ~m87_7 -# 87| m87_12(unknown) = Chi : total:m87_7, partial:m87_11 -# 87| v87_13(void) = ^IndirectReadSideEffect[-1] : &:r87_8, ~m87_12 -# 87| m87_14(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_8 -# 87| m87_15(unknown) = Chi : total:m87_12, partial:m87_14 -#-----| v0_1(void) = CopyValue : r87_10 -#-----| r0_2(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_3(glval) = FunctionAddress[return_void] : -#-----| v0_4(void) = Call[return_void] : func:r0_3, this:r0_2 -#-----| m0_5(unknown) = ^CallSideEffect : ~m87_15 -#-----| m0_6(unknown) = Chi : total:m87_15, partial:m0_5 -#-----| v0_7(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m0_6 -#-----| m0_8(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_2 -#-----| m0_9(unknown) = Chi : total:m0_6, partial:m0_8 -# 88| v88_1(void) = NoOp : -#-----| v0_10(void) = NoOp : -#-----| Goto (back edge) -> Block 1 +# 87| v87_1(void) = EnterFunction : +# 87| m87_2(unknown) = AliasedDefinition : +# 87| m87_3(unknown) = InitializeNonLocal : +# 87| m87_4(unknown) = Chi : total:m87_2, partial:m87_3 +# 87| r87_5(glval) = VariableAddress[(unnamed local variable)] : +# 87| m87_6(promise_type) = Uninitialized[(unnamed local variable)] : &:r87_5 +# 87| m87_7(unknown) = Chi : total:m87_4, partial:m87_6 +# 87| r87_8(glval) = VariableAddress[(unnamed local variable)] : +# 87| r87_9(glval) = FunctionAddress[initial_suspend] : +# 87| r87_10(suspend_always) = Call[initial_suspend] : func:r87_9, this:r87_8 +# 87| m87_11(unknown) = ^CallSideEffect : ~m87_7 +# 87| m87_12(unknown) = Chi : total:m87_7, partial:m87_11 +# 87| v87_13(void) = ^IndirectReadSideEffect[-1] : &:r87_8, ~m87_12 +# 87| m87_14(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_8 +# 87| m87_15(unknown) = Chi : total:m87_12, partial:m87_14 +#-----| r0_1(glval) = VariableAddress[#temp0:0] : +# 87| r87_16(glval) = VariableAddress[#temp87:20] : +# 87| r87_17(glval) = VariableAddress[(unnamed local variable)] : +# 87| r87_18(glval) = FunctionAddress[initial_suspend] : +# 87| r87_19(suspend_always) = Call[initial_suspend] : func:r87_18, this:r87_17 +# 87| m87_20(unknown) = ^CallSideEffect : ~m87_15 +# 87| m87_21(unknown) = Chi : total:m87_15, partial:m87_20 +# 87| v87_22(void) = ^IndirectReadSideEffect[-1] : &:r87_17, ~m87_21 +# 87| m87_23(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_17 +# 87| m87_24(unknown) = Chi : total:m87_21, partial:m87_23 +# 87| m87_25(suspend_always) = Store[#temp87:20] : &:r87_16, r87_19 +# 87| m87_26(unknown) = Chi : total:m87_24, partial:m87_25 +# 87| r87_27(suspend_always *) = CopyValue : r87_16 +# 87| m87_28(suspend_always *) = Store[#temp0:0] : &:r0_1, r87_27 +#-----| r0_2(suspend_always *) = Load[#temp0:0] : &:r0_1, m87_28 +# 87| r87_29(glval) = CopyValue : r0_2 +# 87| r87_30(glval) = Convert : r87_29 +# 87| r87_31(glval) = FunctionAddress[await_ready] : +# 87| r87_32(bool) = Call[await_ready] : func:r87_31, this:r87_30 +# 87| m87_33(unknown) = ^CallSideEffect : ~m87_26 +# 87| m87_34(unknown) = Chi : total:m87_26, partial:m87_33 +# 87| v87_35(void) = ^IndirectReadSideEffect[-1] : &:r87_30, ~m87_34 +#-----| v0_3(void) = ConditionalBranch : r87_32 +#-----| False -> Block 2 +#-----| True -> Block 1 #-----| Block 1 -#-----| v0_11(void) = NoOp : -# 87| r87_16(glval) = VariableAddress[(unnamed local variable)] : -# 87| r87_17(glval) = FunctionAddress[final_suspend] : -# 87| r87_18(suspend_always) = Call[final_suspend] : func:r87_17, this:r87_16 -# 87| m87_19(unknown) = ^CallSideEffect : ~m0_9 -# 87| m87_20(unknown) = Chi : total:m0_9, partial:m87_19 -# 87| v87_21(void) = ^IndirectReadSideEffect[-1] : &:r87_16, ~m87_20 -# 87| m87_22(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_16 -# 87| m87_23(unknown) = Chi : total:m87_20, partial:m87_22 -#-----| v0_12(void) = CopyValue : r87_18 -# 87| r87_24(glval) = VariableAddress[#return] : -# 87| v87_25(void) = ReturnValue : &:r87_24, ~m87_23 -# 87| v87_26(void) = AliasedUse : ~m87_20 -# 87| v87_27(void) = ExitFunction : +#-----| m0_4(unknown) = Phi : from 0:~m87_34, from 2:~m87_61 +#-----| r0_5(bool) = Constant[1] : +#-----| r0_6(glval) = VariableAddress : +#-----| m0_7(bool) = Store[?] : &:r0_6, r0_5 +#-----| m0_8(unknown) = Chi : total:m0_4, partial:m0_7 +# 87| r87_36(suspend_always *) = CopyValue : r87_27 +# 87| r87_37(glval) = CopyValue : r87_36 +#-----| r0_9(glval) = Convert : r87_37 +# 87| r87_38(glval) = FunctionAddress[await_resume] : +# 87| v87_39(void) = Call[await_resume] : func:r87_38, this:r0_9 +# 87| m87_40(unknown) = ^CallSideEffect : ~m0_8 +# 87| m87_41(unknown) = Chi : total:m0_8, partial:m87_40 +#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, ~m87_41 +#-----| v0_11(void) = CopyValue : v87_39 +#-----| r0_12(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_13(glval) = FunctionAddress[return_void] : +#-----| v0_14(void) = Call[return_void] : func:r0_13, this:r0_12 +#-----| m0_15(unknown) = ^CallSideEffect : ~m87_41 +#-----| m0_16(unknown) = Chi : total:m87_41, partial:m0_15 +#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_12, ~m0_16 +#-----| m0_18(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_12 +#-----| m0_19(unknown) = Chi : total:m0_16, partial:m0_18 +# 88| v88_1(void) = NoOp : +#-----| v0_20(void) = NoOp : +#-----| Goto (back edge) -> Block 3 + +# 87| Block 2 +# 87| r87_42(suspend_always *) = CopyValue : r87_27 +# 87| r87_43(glval) = CopyValue : r87_42 +#-----| r0_21(glval) = Convert : r87_43 +# 87| r87_44(glval) = FunctionAddress[await_suspend] : +# 87| r87_45(glval>) = VariableAddress[#temp87:20] : +# 87| m87_46(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_45 +# 87| m87_47(unknown) = Chi : total:m87_34, partial:m87_46 +# 87| r87_48(glval) = FunctionAddress[coroutine_handle] : +# 87| r87_49(glval>) = VariableAddress : +# 87| r87_50(glval>) = Convert : r87_49 +# 87| r87_51(coroutine_handle &) = CopyValue : r87_50 +# 87| v87_52(void) = Call[coroutine_handle] : func:r87_48, this:r87_45, 0:r87_51 +# 87| m87_53(unknown) = ^CallSideEffect : ~m87_47 +# 87| m87_54(unknown) = Chi : total:m87_47, partial:m87_53 +# 87| v87_55(void) = ^BufferReadSideEffect[0] : &:r87_51, ~m87_54 +# 87| m87_56(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_45 +# 87| m87_57(unknown) = Chi : total:m87_54, partial:m87_56 +# 87| r87_58(coroutine_handle) = Load[#temp87:20] : &:r87_45, ~m87_57 +# 87| v87_59(void) = Call[await_suspend] : func:r87_44, this:r0_21, 0:r87_58 +# 87| m87_60(unknown) = ^CallSideEffect : ~m87_57 +# 87| m87_61(unknown) = Chi : total:m87_57, partial:m87_60 +#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m87_61 +#-----| Goto -> Block 1 + +#-----| Block 3 +#-----| v0_23(void) = NoOp : +# 87| r87_62(glval) = VariableAddress[(unnamed local variable)] : +# 87| r87_63(glval) = FunctionAddress[final_suspend] : +# 87| r87_64(suspend_always) = Call[final_suspend] : func:r87_63, this:r87_62 +# 87| m87_65(unknown) = ^CallSideEffect : ~m0_19 +# 87| m87_66(unknown) = Chi : total:m0_19, partial:m87_65 +# 87| v87_67(void) = ^IndirectReadSideEffect[-1] : &:r87_62, ~m87_66 +# 87| m87_68(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_62 +# 87| m87_69(unknown) = Chi : total:m87_66, partial:m87_68 +#-----| r0_24(glval) = VariableAddress[#temp0:0] : +# 87| r87_70(glval) = VariableAddress[#temp87:20] : +# 87| r87_71(glval) = VariableAddress[(unnamed local variable)] : +# 87| r87_72(glval) = FunctionAddress[final_suspend] : +# 87| r87_73(suspend_always) = Call[final_suspend] : func:r87_72, this:r87_71 +# 87| m87_74(unknown) = ^CallSideEffect : ~m87_69 +# 87| m87_75(unknown) = Chi : total:m87_69, partial:m87_74 +# 87| v87_76(void) = ^IndirectReadSideEffect[-1] : &:r87_71, ~m87_75 +# 87| m87_77(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_71 +# 87| m87_78(unknown) = Chi : total:m87_75, partial:m87_77 +# 87| m87_79(suspend_always) = Store[#temp87:20] : &:r87_70, r87_73 +# 87| m87_80(unknown) = Chi : total:m87_78, partial:m87_79 +# 87| r87_81(suspend_always *) = CopyValue : r87_70 +# 87| m87_82(suspend_always *) = Store[#temp0:0] : &:r0_24, r87_81 +#-----| r0_25(suspend_always *) = Load[#temp0:0] : &:r0_24, m87_82 +# 87| r87_83(glval) = CopyValue : r0_25 +# 87| r87_84(glval) = Convert : r87_83 +# 87| r87_85(glval) = FunctionAddress[await_ready] : +# 87| r87_86(bool) = Call[await_ready] : func:r87_85, this:r87_84 +# 87| m87_87(unknown) = ^CallSideEffect : ~m87_80 +# 87| m87_88(unknown) = Chi : total:m87_80, partial:m87_87 +# 87| v87_89(void) = ^IndirectReadSideEffect[-1] : &:r87_84, ~m87_88 +#-----| v0_26(void) = ConditionalBranch : r87_86 +#-----| False -> Block 5 +#-----| True -> Block 4 + +# 87| Block 4 +# 87| m87_90(unknown) = Phi : from 3:~m87_88, from 5:~m87_120 +# 87| r87_91(suspend_always *) = CopyValue : r87_81 +# 87| r87_92(glval) = CopyValue : r87_91 +#-----| r0_27(glval) = Convert : r87_92 +# 87| r87_93(glval) = FunctionAddress[await_resume] : +# 87| v87_94(void) = Call[await_resume] : func:r87_93, this:r0_27 +# 87| m87_95(unknown) = ^CallSideEffect : ~m87_90 +# 87| m87_96(unknown) = Chi : total:m87_90, partial:m87_95 +#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m87_96 +# 87| r87_97(glval) = VariableAddress[#return] : +# 87| v87_98(void) = ReturnValue : &:r87_97, ~m87_96 +# 87| v87_99(void) = AliasedUse : ~m87_96 +# 87| v87_100(void) = ExitFunction : + +# 87| Block 5 +# 87| r87_101(suspend_always *) = CopyValue : r87_81 +# 87| r87_102(glval) = CopyValue : r87_101 +#-----| r0_29(glval) = Convert : r87_102 +# 87| r87_103(glval) = FunctionAddress[await_suspend] : +# 87| r87_104(glval>) = VariableAddress[#temp87:20] : +# 87| m87_105(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_104 +# 87| m87_106(unknown) = Chi : total:m87_88, partial:m87_105 +# 87| r87_107(glval) = FunctionAddress[coroutine_handle] : +# 87| r87_108(glval>) = VariableAddress : +# 87| r87_109(glval>) = Convert : r87_108 +# 87| r87_110(coroutine_handle &) = CopyValue : r87_109 +# 87| v87_111(void) = Call[coroutine_handle] : func:r87_107, this:r87_104, 0:r87_110 +# 87| m87_112(unknown) = ^CallSideEffect : ~m87_106 +# 87| m87_113(unknown) = Chi : total:m87_106, partial:m87_112 +# 87| v87_114(void) = ^BufferReadSideEffect[0] : &:r87_110, ~m87_113 +# 87| m87_115(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_104 +# 87| m87_116(unknown) = Chi : total:m87_113, partial:m87_115 +# 87| r87_117(coroutine_handle) = Load[#temp87:20] : &:r87_104, ~m87_116 +# 87| v87_118(void) = Call[await_suspend] : func:r87_103, this:r0_29, 0:r87_117 +# 87| m87_119(unknown) = ^CallSideEffect : ~m87_116 +# 87| m87_120(unknown) = Chi : total:m87_116, partial:m87_119 +#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_29, ~m87_120 +#-----| Goto -> Block 4 # 91| co_returnable_value co_return_int(int) # 91| Block 0 -# 91| v91_1(void) = EnterFunction : -# 91| m91_2(unknown) = AliasedDefinition : -# 91| m91_3(unknown) = InitializeNonLocal : -# 91| m91_4(unknown) = Chi : total:m91_2, partial:m91_3 -# 91| r91_5(glval) = VariableAddress[i] : -# 91| m91_6(int) = InitializeParameter[i] : &:r91_5 -#-----| r0_1(glval) = VariableAddress[i] : -#-----| r0_2(glval) = VariableAddress[i] : -#-----| r0_3(int) = Load[i] : &:r0_2, m91_6 -#-----| m0_4(int) = Store[i] : &:r0_1, r0_3 -# 91| r91_7(glval) = VariableAddress[(unnamed local variable)] : -# 91| m91_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r91_7 -# 91| m91_9(unknown) = Chi : total:m91_4, partial:m91_8 -# 91| r91_10(glval) = VariableAddress[(unnamed local variable)] : -# 91| r91_11(glval) = FunctionAddress[initial_suspend] : -# 91| r91_12(suspend_always) = Call[initial_suspend] : func:r91_11, this:r91_10 -# 91| m91_13(unknown) = ^CallSideEffect : ~m91_9 -# 91| m91_14(unknown) = Chi : total:m91_9, partial:m91_13 -# 91| v91_15(void) = ^IndirectReadSideEffect[-1] : &:r91_10, ~m91_14 -# 91| m91_16(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_10 -# 91| m91_17(unknown) = Chi : total:m91_14, partial:m91_16 -#-----| v0_5(void) = CopyValue : r91_12 -#-----| r0_6(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_7(glval) = FunctionAddress[return_value] : -# 92| r92_1(glval) = VariableAddress[i] : -# 92| r92_2(int) = Load[i] : &:r92_1, m0_4 -#-----| v0_8(void) = Call[return_value] : func:r0_7, this:r0_6, 0:r92_2 -#-----| m0_9(unknown) = ^CallSideEffect : ~m91_17 -#-----| m0_10(unknown) = Chi : total:m91_17, partial:m0_9 -#-----| v0_11(void) = ^IndirectReadSideEffect[-1] : &:r0_6, ~m0_10 -#-----| m0_12(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 -#-----| m0_13(unknown) = Chi : total:m0_10, partial:m0_12 -# 92| v92_3(void) = NoOp : -#-----| v0_14(void) = NoOp : -#-----| Goto (back edge) -> Block 1 +# 91| v91_1(void) = EnterFunction : +# 91| m91_2(unknown) = AliasedDefinition : +# 91| m91_3(unknown) = InitializeNonLocal : +# 91| m91_4(unknown) = Chi : total:m91_2, partial:m91_3 +# 91| r91_5(glval) = VariableAddress[i] : +# 91| m91_6(int) = InitializeParameter[i] : &:r91_5 +#-----| r0_1(glval) = VariableAddress[i] : +#-----| r0_2(glval) = VariableAddress[i] : +#-----| r0_3(int) = Load[i] : &:r0_2, m91_6 +#-----| m0_4(int) = Store[i] : &:r0_1, r0_3 +# 91| r91_7(glval) = VariableAddress[(unnamed local variable)] : +# 91| m91_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r91_7 +# 91| m91_9(unknown) = Chi : total:m91_4, partial:m91_8 +# 91| r91_10(glval) = VariableAddress[(unnamed local variable)] : +# 91| r91_11(glval) = FunctionAddress[initial_suspend] : +# 91| r91_12(suspend_always) = Call[initial_suspend] : func:r91_11, this:r91_10 +# 91| m91_13(unknown) = ^CallSideEffect : ~m91_9 +# 91| m91_14(unknown) = Chi : total:m91_9, partial:m91_13 +# 91| v91_15(void) = ^IndirectReadSideEffect[-1] : &:r91_10, ~m91_14 +# 91| m91_16(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_10 +# 91| m91_17(unknown) = Chi : total:m91_14, partial:m91_16 +#-----| r0_5(glval) = VariableAddress[#temp0:0] : +# 91| r91_18(glval) = VariableAddress[#temp91:21] : +# 91| r91_19(glval) = VariableAddress[(unnamed local variable)] : +# 91| r91_20(glval) = FunctionAddress[initial_suspend] : +# 91| r91_21(suspend_always) = Call[initial_suspend] : func:r91_20, this:r91_19 +# 91| m91_22(unknown) = ^CallSideEffect : ~m91_17 +# 91| m91_23(unknown) = Chi : total:m91_17, partial:m91_22 +# 91| v91_24(void) = ^IndirectReadSideEffect[-1] : &:r91_19, ~m91_23 +# 91| m91_25(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_19 +# 91| m91_26(unknown) = Chi : total:m91_23, partial:m91_25 +# 91| m91_27(suspend_always) = Store[#temp91:21] : &:r91_18, r91_21 +# 91| m91_28(unknown) = Chi : total:m91_26, partial:m91_27 +# 91| r91_29(suspend_always *) = CopyValue : r91_18 +# 91| m91_30(suspend_always *) = Store[#temp0:0] : &:r0_5, r91_29 +#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, m91_30 +# 91| r91_31(glval) = CopyValue : r0_6 +# 91| r91_32(glval) = Convert : r91_31 +# 91| r91_33(glval) = FunctionAddress[await_ready] : +# 91| r91_34(bool) = Call[await_ready] : func:r91_33, this:r91_32 +# 91| m91_35(unknown) = ^CallSideEffect : ~m91_28 +# 91| m91_36(unknown) = Chi : total:m91_28, partial:m91_35 +# 91| v91_37(void) = ^IndirectReadSideEffect[-1] : &:r91_32, ~m91_36 +#-----| v0_7(void) = ConditionalBranch : r91_34 +#-----| False -> Block 2 +#-----| True -> Block 1 #-----| Block 1 -#-----| v0_15(void) = NoOp : -# 91| r91_18(glval) = VariableAddress[(unnamed local variable)] : -# 91| r91_19(glval) = FunctionAddress[final_suspend] : -# 91| r91_20(suspend_always) = Call[final_suspend] : func:r91_19, this:r91_18 -# 91| m91_21(unknown) = ^CallSideEffect : ~m0_13 -# 91| m91_22(unknown) = Chi : total:m0_13, partial:m91_21 -# 91| v91_23(void) = ^IndirectReadSideEffect[-1] : &:r91_18, ~m91_22 -# 91| m91_24(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_18 -# 91| m91_25(unknown) = Chi : total:m91_22, partial:m91_24 -#-----| v0_16(void) = CopyValue : r91_20 -# 91| r91_26(glval) = VariableAddress[#return] : -# 91| v91_27(void) = ReturnValue : &:r91_26, ~m91_25 -# 91| v91_28(void) = AliasedUse : ~m91_22 -# 91| v91_29(void) = ExitFunction : +#-----| m0_8(unknown) = Phi : from 0:~m91_36, from 2:~m91_63 +#-----| r0_9(bool) = Constant[1] : +#-----| r0_10(glval) = VariableAddress : +#-----| m0_11(bool) = Store[?] : &:r0_10, r0_9 +#-----| m0_12(unknown) = Chi : total:m0_8, partial:m0_11 +# 91| r91_38(suspend_always *) = CopyValue : r91_29 +# 91| r91_39(glval) = CopyValue : r91_38 +#-----| r0_13(glval) = Convert : r91_39 +# 91| r91_40(glval) = FunctionAddress[await_resume] : +# 91| v91_41(void) = Call[await_resume] : func:r91_40, this:r0_13 +# 91| m91_42(unknown) = ^CallSideEffect : ~m0_12 +# 91| m91_43(unknown) = Chi : total:m0_12, partial:m91_42 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m91_43 +#-----| v0_15(void) = CopyValue : v91_41 +#-----| r0_16(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_17(glval) = FunctionAddress[return_value] : +# 92| r92_1(glval) = VariableAddress[i] : +# 92| r92_2(int) = Load[i] : &:r92_1, m0_4 +#-----| v0_18(void) = Call[return_value] : func:r0_17, this:r0_16, 0:r92_2 +#-----| m0_19(unknown) = ^CallSideEffect : ~m91_43 +#-----| m0_20(unknown) = Chi : total:m91_43, partial:m0_19 +#-----| v0_21(void) = ^IndirectReadSideEffect[-1] : &:r0_16, ~m0_20 +#-----| m0_22(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_16 +#-----| m0_23(unknown) = Chi : total:m0_20, partial:m0_22 +# 92| v92_3(void) = NoOp : +#-----| v0_24(void) = NoOp : +#-----| Goto (back edge) -> Block 3 + +# 91| Block 2 +# 91| r91_44(suspend_always *) = CopyValue : r91_29 +# 91| r91_45(glval) = CopyValue : r91_44 +#-----| r0_25(glval) = Convert : r91_45 +# 91| r91_46(glval) = FunctionAddress[await_suspend] : +# 91| r91_47(glval>) = VariableAddress[#temp91:21] : +# 91| m91_48(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_47 +# 91| m91_49(unknown) = Chi : total:m91_36, partial:m91_48 +# 91| r91_50(glval) = FunctionAddress[coroutine_handle] : +# 91| r91_51(glval>) = VariableAddress : +# 91| r91_52(glval>) = Convert : r91_51 +# 91| r91_53(coroutine_handle &) = CopyValue : r91_52 +# 91| v91_54(void) = Call[coroutine_handle] : func:r91_50, this:r91_47, 0:r91_53 +# 91| m91_55(unknown) = ^CallSideEffect : ~m91_49 +# 91| m91_56(unknown) = Chi : total:m91_49, partial:m91_55 +# 91| v91_57(void) = ^BufferReadSideEffect[0] : &:r91_53, ~m91_56 +# 91| m91_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_47 +# 91| m91_59(unknown) = Chi : total:m91_56, partial:m91_58 +# 91| r91_60(coroutine_handle) = Load[#temp91:21] : &:r91_47, ~m91_59 +# 91| v91_61(void) = Call[await_suspend] : func:r91_46, this:r0_25, 0:r91_60 +# 91| m91_62(unknown) = ^CallSideEffect : ~m91_59 +# 91| m91_63(unknown) = Chi : total:m91_59, partial:m91_62 +#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_25, ~m91_63 +#-----| Goto -> Block 1 + +#-----| Block 3 +#-----| v0_27(void) = NoOp : +# 91| r91_64(glval) = VariableAddress[(unnamed local variable)] : +# 91| r91_65(glval) = FunctionAddress[final_suspend] : +# 91| r91_66(suspend_always) = Call[final_suspend] : func:r91_65, this:r91_64 +# 91| m91_67(unknown) = ^CallSideEffect : ~m0_23 +# 91| m91_68(unknown) = Chi : total:m0_23, partial:m91_67 +# 91| v91_69(void) = ^IndirectReadSideEffect[-1] : &:r91_64, ~m91_68 +# 91| m91_70(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_64 +# 91| m91_71(unknown) = Chi : total:m91_68, partial:m91_70 +#-----| r0_28(glval) = VariableAddress[#temp0:0] : +# 91| r91_72(glval) = VariableAddress[#temp91:21] : +# 91| r91_73(glval) = VariableAddress[(unnamed local variable)] : +# 91| r91_74(glval) = FunctionAddress[final_suspend] : +# 91| r91_75(suspend_always) = Call[final_suspend] : func:r91_74, this:r91_73 +# 91| m91_76(unknown) = ^CallSideEffect : ~m91_71 +# 91| m91_77(unknown) = Chi : total:m91_71, partial:m91_76 +# 91| v91_78(void) = ^IndirectReadSideEffect[-1] : &:r91_73, ~m91_77 +# 91| m91_79(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_73 +# 91| m91_80(unknown) = Chi : total:m91_77, partial:m91_79 +# 91| m91_81(suspend_always) = Store[#temp91:21] : &:r91_72, r91_75 +# 91| m91_82(unknown) = Chi : total:m91_80, partial:m91_81 +# 91| r91_83(suspend_always *) = CopyValue : r91_72 +# 91| m91_84(suspend_always *) = Store[#temp0:0] : &:r0_28, r91_83 +#-----| r0_29(suspend_always *) = Load[#temp0:0] : &:r0_28, m91_84 +# 91| r91_85(glval) = CopyValue : r0_29 +# 91| r91_86(glval) = Convert : r91_85 +# 91| r91_87(glval) = FunctionAddress[await_ready] : +# 91| r91_88(bool) = Call[await_ready] : func:r91_87, this:r91_86 +# 91| m91_89(unknown) = ^CallSideEffect : ~m91_82 +# 91| m91_90(unknown) = Chi : total:m91_82, partial:m91_89 +# 91| v91_91(void) = ^IndirectReadSideEffect[-1] : &:r91_86, ~m91_90 +#-----| v0_30(void) = ConditionalBranch : r91_88 +#-----| False -> Block 5 +#-----| True -> Block 4 + +# 91| Block 4 +# 91| m91_92(unknown) = Phi : from 3:~m91_90, from 5:~m91_122 +# 91| r91_93(suspend_always *) = CopyValue : r91_83 +# 91| r91_94(glval) = CopyValue : r91_93 +#-----| r0_31(glval) = Convert : r91_94 +# 91| r91_95(glval) = FunctionAddress[await_resume] : +# 91| v91_96(void) = Call[await_resume] : func:r91_95, this:r0_31 +# 91| m91_97(unknown) = ^CallSideEffect : ~m91_92 +# 91| m91_98(unknown) = Chi : total:m91_92, partial:m91_97 +#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m91_98 +# 91| r91_99(glval) = VariableAddress[#return] : +# 91| v91_100(void) = ReturnValue : &:r91_99, ~m91_98 +# 91| v91_101(void) = AliasedUse : ~m91_98 +# 91| v91_102(void) = ExitFunction : + +# 91| Block 5 +# 91| r91_103(suspend_always *) = CopyValue : r91_83 +# 91| r91_104(glval) = CopyValue : r91_103 +#-----| r0_33(glval) = Convert : r91_104 +# 91| r91_105(glval) = FunctionAddress[await_suspend] : +# 91| r91_106(glval>) = VariableAddress[#temp91:21] : +# 91| m91_107(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_106 +# 91| m91_108(unknown) = Chi : total:m91_90, partial:m91_107 +# 91| r91_109(glval) = FunctionAddress[coroutine_handle] : +# 91| r91_110(glval>) = VariableAddress : +# 91| r91_111(glval>) = Convert : r91_110 +# 91| r91_112(coroutine_handle &) = CopyValue : r91_111 +# 91| v91_113(void) = Call[coroutine_handle] : func:r91_109, this:r91_106, 0:r91_112 +# 91| m91_114(unknown) = ^CallSideEffect : ~m91_108 +# 91| m91_115(unknown) = Chi : total:m91_108, partial:m91_114 +# 91| v91_116(void) = ^BufferReadSideEffect[0] : &:r91_112, ~m91_115 +# 91| m91_117(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_106 +# 91| m91_118(unknown) = Chi : total:m91_115, partial:m91_117 +# 91| r91_119(coroutine_handle) = Load[#temp91:21] : &:r91_106, ~m91_118 +# 91| v91_120(void) = Call[await_suspend] : func:r91_105, this:r0_33, 0:r91_119 +# 91| m91_121(unknown) = ^CallSideEffect : ~m91_118 +# 91| m91_122(unknown) = Chi : total:m91_118, partial:m91_121 +#-----| v0_34(void) = ^IndirectReadSideEffect[-1] : &:r0_33, ~m91_122 +#-----| Goto -> Block 4 # 95| co_returnable_void co_yield_value_void(int) # 95| Block 0 -# 95| v95_1(void) = EnterFunction : -# 95| m95_2(unknown) = AliasedDefinition : -# 95| m95_3(unknown) = InitializeNonLocal : -# 95| m95_4(unknown) = Chi : total:m95_2, partial:m95_3 -# 95| r95_5(glval) = VariableAddress[i] : -# 95| m95_6(int) = InitializeParameter[i] : &:r95_5 -#-----| r0_1(glval) = VariableAddress[i] : -#-----| r0_2(glval) = VariableAddress[i] : -#-----| r0_3(int) = Load[i] : &:r0_2, m95_6 -#-----| m0_4(int) = Store[i] : &:r0_1, r0_3 -# 95| r95_7(glval) = VariableAddress[(unnamed local variable)] : -# 95| m95_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r95_7 -# 95| m95_9(unknown) = Chi : total:m95_4, partial:m95_8 -# 95| r95_10(glval) = VariableAddress[(unnamed local variable)] : -# 95| r95_11(glval) = FunctionAddress[initial_suspend] : -# 95| r95_12(suspend_always) = Call[initial_suspend] : func:r95_11, this:r95_10 -# 95| m95_13(unknown) = ^CallSideEffect : ~m95_9 -# 95| m95_14(unknown) = Chi : total:m95_9, partial:m95_13 -# 95| v95_15(void) = ^IndirectReadSideEffect[-1] : &:r95_10, ~m95_14 -# 95| m95_16(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_10 -# 95| m95_17(unknown) = Chi : total:m95_14, partial:m95_16 -#-----| v0_5(void) = CopyValue : r95_12 -# 96| r96_1(glval) = VariableAddress[(unnamed local variable)] : -# 96| r96_2(glval) = FunctionAddress[yield_value] : -# 96| r96_3(glval) = VariableAddress[i] : -# 96| r96_4(int) = Load[i] : &:r96_3, m0_4 -# 96| r96_5(suspend_always) = Call[yield_value] : func:r96_2, this:r96_1, 0:r96_4 -# 96| m96_6(unknown) = ^CallSideEffect : ~m95_17 -# 96| m96_7(unknown) = Chi : total:m95_17, partial:m96_6 -# 96| v96_8(void) = ^IndirectReadSideEffect[-1] : &:r96_1, ~m96_7 -# 96| m96_9(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r96_1 -# 96| m96_10(unknown) = Chi : total:m96_7, partial:m96_9 -# 96| v96_11(void) = CopyValue : r96_5 -#-----| r0_6(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_7(glval) = FunctionAddress[return_void] : -#-----| v0_8(void) = Call[return_void] : func:r0_7, this:r0_6 -#-----| m0_9(unknown) = ^CallSideEffect : ~m96_10 -#-----| m0_10(unknown) = Chi : total:m96_10, partial:m0_9 -#-----| v0_11(void) = ^IndirectReadSideEffect[-1] : &:r0_6, ~m0_10 -#-----| m0_12(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 -#-----| m0_13(unknown) = Chi : total:m0_10, partial:m0_12 -# 97| v97_1(void) = NoOp : -#-----| v0_14(void) = NoOp : -#-----| Goto (back edge) -> Block 1 +# 95| v95_1(void) = EnterFunction : +# 95| m95_2(unknown) = AliasedDefinition : +# 95| m95_3(unknown) = InitializeNonLocal : +# 95| m95_4(unknown) = Chi : total:m95_2, partial:m95_3 +# 95| r95_5(glval) = VariableAddress[i] : +# 95| m95_6(int) = InitializeParameter[i] : &:r95_5 +#-----| r0_1(glval) = VariableAddress[i] : +#-----| r0_2(glval) = VariableAddress[i] : +#-----| r0_3(int) = Load[i] : &:r0_2, m95_6 +#-----| m0_4(int) = Store[i] : &:r0_1, r0_3 +# 95| r95_7(glval) = VariableAddress[(unnamed local variable)] : +# 95| m95_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r95_7 +# 95| m95_9(unknown) = Chi : total:m95_4, partial:m95_8 +# 95| r95_10(glval) = VariableAddress[(unnamed local variable)] : +# 95| r95_11(glval) = FunctionAddress[initial_suspend] : +# 95| r95_12(suspend_always) = Call[initial_suspend] : func:r95_11, this:r95_10 +# 95| m95_13(unknown) = ^CallSideEffect : ~m95_9 +# 95| m95_14(unknown) = Chi : total:m95_9, partial:m95_13 +# 95| v95_15(void) = ^IndirectReadSideEffect[-1] : &:r95_10, ~m95_14 +# 95| m95_16(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_10 +# 95| m95_17(unknown) = Chi : total:m95_14, partial:m95_16 +#-----| r0_5(glval) = VariableAddress[#temp0:0] : +# 95| r95_18(glval) = VariableAddress[#temp95:20] : +# 95| r95_19(glval) = VariableAddress[(unnamed local variable)] : +# 95| r95_20(glval) = FunctionAddress[initial_suspend] : +# 95| r95_21(suspend_always) = Call[initial_suspend] : func:r95_20, this:r95_19 +# 95| m95_22(unknown) = ^CallSideEffect : ~m95_17 +# 95| m95_23(unknown) = Chi : total:m95_17, partial:m95_22 +# 95| v95_24(void) = ^IndirectReadSideEffect[-1] : &:r95_19, ~m95_23 +# 95| m95_25(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_19 +# 95| m95_26(unknown) = Chi : total:m95_23, partial:m95_25 +# 95| m95_27(suspend_always) = Store[#temp95:20] : &:r95_18, r95_21 +# 95| m95_28(unknown) = Chi : total:m95_26, partial:m95_27 +# 95| r95_29(suspend_always *) = CopyValue : r95_18 +# 95| m95_30(suspend_always *) = Store[#temp0:0] : &:r0_5, r95_29 +#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, m95_30 +# 95| r95_31(glval) = CopyValue : r0_6 +# 95| r95_32(glval) = Convert : r95_31 +# 95| r95_33(glval) = FunctionAddress[await_ready] : +# 95| r95_34(bool) = Call[await_ready] : func:r95_33, this:r95_32 +# 95| m95_35(unknown) = ^CallSideEffect : ~m95_28 +# 95| m95_36(unknown) = Chi : total:m95_28, partial:m95_35 +# 95| v95_37(void) = ^IndirectReadSideEffect[-1] : &:r95_32, ~m95_36 +#-----| v0_7(void) = ConditionalBranch : r95_34 +#-----| False -> Block 2 +#-----| True -> Block 1 #-----| Block 1 -#-----| v0_15(void) = NoOp : -# 95| r95_18(glval) = VariableAddress[(unnamed local variable)] : -# 95| r95_19(glval) = FunctionAddress[final_suspend] : -# 95| r95_20(suspend_always) = Call[final_suspend] : func:r95_19, this:r95_18 -# 95| m95_21(unknown) = ^CallSideEffect : ~m0_13 -# 95| m95_22(unknown) = Chi : total:m0_13, partial:m95_21 -# 95| v95_23(void) = ^IndirectReadSideEffect[-1] : &:r95_18, ~m95_22 -# 95| m95_24(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_18 -# 95| m95_25(unknown) = Chi : total:m95_22, partial:m95_24 -#-----| v0_16(void) = CopyValue : r95_20 -# 95| r95_26(glval) = VariableAddress[#return] : -# 95| v95_27(void) = ReturnValue : &:r95_26, ~m95_25 -# 95| v95_28(void) = AliasedUse : ~m95_22 -# 95| v95_29(void) = ExitFunction : +#-----| m0_8(unknown) = Phi : from 0:~m95_36, from 2:~m95_63 +#-----| r0_9(bool) = Constant[1] : +#-----| r0_10(glval) = VariableAddress : +#-----| m0_11(bool) = Store[?] : &:r0_10, r0_9 +#-----| m0_12(unknown) = Chi : total:m0_8, partial:m0_11 +# 95| r95_38(suspend_always *) = CopyValue : r95_29 +# 95| r95_39(glval) = CopyValue : r95_38 +#-----| r0_13(glval) = Convert : r95_39 +# 95| r95_40(glval) = FunctionAddress[await_resume] : +# 95| v95_41(void) = Call[await_resume] : func:r95_40, this:r0_13 +# 95| m95_42(unknown) = ^CallSideEffect : ~m0_12 +# 95| m95_43(unknown) = Chi : total:m0_12, partial:m95_42 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m95_43 +#-----| v0_15(void) = CopyValue : v95_41 +# 96| r96_1(glval) = VariableAddress[(unnamed local variable)] : +# 96| r96_2(glval) = FunctionAddress[yield_value] : +# 96| r96_3(glval) = VariableAddress[i] : +# 96| r96_4(int) = Load[i] : &:r96_3, m0_4 +# 96| r96_5(suspend_always) = Call[yield_value] : func:r96_2, this:r96_1, 0:r96_4 +# 96| m96_6(unknown) = ^CallSideEffect : ~m95_43 +# 96| m96_7(unknown) = Chi : total:m95_43, partial:m96_6 +# 96| v96_8(void) = ^IndirectReadSideEffect[-1] : &:r96_1, ~m96_7 +# 96| m96_9(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r96_1 +# 96| m96_10(unknown) = Chi : total:m96_7, partial:m96_9 +#-----| r0_16(glval) = VariableAddress[#temp0:0] : +# 96| r96_11(glval) = VariableAddress[#temp96:13] : +# 96| r96_12(glval) = VariableAddress[(unnamed local variable)] : +# 96| r96_13(glval) = FunctionAddress[yield_value] : +# 96| r96_14(glval) = VariableAddress[i] : +# 96| r96_15(int) = Load[i] : &:r96_14, m0_4 +# 96| r96_16(suspend_always) = Call[yield_value] : func:r96_13, this:r96_12, 0:r96_15 +# 96| m96_17(unknown) = ^CallSideEffect : ~m96_10 +# 96| m96_18(unknown) = Chi : total:m96_10, partial:m96_17 +# 96| v96_19(void) = ^IndirectReadSideEffect[-1] : &:r96_12, ~m96_18 +# 96| m96_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r96_12 +# 96| m96_21(unknown) = Chi : total:m96_18, partial:m96_20 +# 96| m96_22(suspend_always) = Store[#temp96:13] : &:r96_11, r96_16 +# 96| m96_23(unknown) = Chi : total:m96_21, partial:m96_22 +# 96| r96_24(suspend_always *) = CopyValue : r96_11 +# 96| m96_25(suspend_always *) = Store[#temp0:0] : &:r0_16, r96_24 +#-----| r0_17(suspend_always *) = Load[#temp0:0] : &:r0_16, m96_25 +# 96| r96_26(glval) = CopyValue : r0_17 +# 96| r96_27(glval) = Convert : r96_26 +# 96| r96_28(glval) = FunctionAddress[await_ready] : +# 96| r96_29(bool) = Call[await_ready] : func:r96_28, this:r96_27 +# 96| m96_30(unknown) = ^CallSideEffect : ~m96_23 +# 96| m96_31(unknown) = Chi : total:m96_23, partial:m96_30 +# 96| v96_32(void) = ^IndirectReadSideEffect[-1] : &:r96_27, ~m96_31 +# 96| v96_33(void) = ConditionalBranch : r96_29 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 95| Block 2 +# 95| r95_44(suspend_always *) = CopyValue : r95_29 +# 95| r95_45(glval) = CopyValue : r95_44 +#-----| r0_18(glval) = Convert : r95_45 +# 95| r95_46(glval) = FunctionAddress[await_suspend] : +# 95| r95_47(glval>) = VariableAddress[#temp95:20] : +# 95| m95_48(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_47 +# 95| m95_49(unknown) = Chi : total:m95_36, partial:m95_48 +# 95| r95_50(glval) = FunctionAddress[coroutine_handle] : +# 95| r95_51(glval>) = VariableAddress : +# 95| r95_52(glval>) = Convert : r95_51 +# 95| r95_53(coroutine_handle &) = CopyValue : r95_52 +# 95| v95_54(void) = Call[coroutine_handle] : func:r95_50, this:r95_47, 0:r95_53 +# 95| m95_55(unknown) = ^CallSideEffect : ~m95_49 +# 95| m95_56(unknown) = Chi : total:m95_49, partial:m95_55 +# 95| v95_57(void) = ^BufferReadSideEffect[0] : &:r95_53, ~m95_56 +# 95| m95_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_47 +# 95| m95_59(unknown) = Chi : total:m95_56, partial:m95_58 +# 95| r95_60(coroutine_handle) = Load[#temp95:20] : &:r95_47, ~m95_59 +# 95| v95_61(void) = Call[await_suspend] : func:r95_46, this:r0_18, 0:r95_60 +# 95| m95_62(unknown) = ^CallSideEffect : ~m95_59 +# 95| m95_63(unknown) = Chi : total:m95_59, partial:m95_62 +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m95_63 +#-----| Goto -> Block 1 + +# 96| Block 3 +# 96| m96_34(unknown) = Phi : from 1:~m96_31, from 4:~m96_60 +# 96| r96_35(suspend_always *) = CopyValue : r96_24 +# 96| r96_36(glval) = CopyValue : r96_35 +#-----| r0_20(glval) = Convert : r96_36 +# 96| r96_37(glval) = FunctionAddress[await_resume] : +# 96| v96_38(void) = Call[await_resume] : func:r96_37, this:r0_20 +# 96| m96_39(unknown) = ^CallSideEffect : ~m96_34 +# 96| m96_40(unknown) = Chi : total:m96_34, partial:m96_39 +#-----| v0_21(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m96_40 +#-----| r0_22(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_23(glval) = FunctionAddress[return_void] : +#-----| v0_24(void) = Call[return_void] : func:r0_23, this:r0_22 +#-----| m0_25(unknown) = ^CallSideEffect : ~m96_40 +#-----| m0_26(unknown) = Chi : total:m96_40, partial:m0_25 +#-----| v0_27(void) = ^IndirectReadSideEffect[-1] : &:r0_22, ~m0_26 +#-----| m0_28(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_22 +#-----| m0_29(unknown) = Chi : total:m0_26, partial:m0_28 +# 97| v97_1(void) = NoOp : +#-----| v0_30(void) = NoOp : +#-----| Goto (back edge) -> Block 5 + +# 96| Block 4 +# 96| r96_41(suspend_always *) = CopyValue : r96_24 +# 96| r96_42(glval) = CopyValue : r96_41 +#-----| r0_31(glval) = Convert : r96_42 +# 96| r96_43(glval) = FunctionAddress[await_suspend] : +# 96| r96_44(glval>) = VariableAddress[#temp96:3] : +# 96| m96_45(coroutine_handle) = Uninitialized[#temp96:3] : &:r96_44 +# 96| m96_46(unknown) = Chi : total:m96_31, partial:m96_45 +# 96| r96_47(glval) = FunctionAddress[coroutine_handle] : +# 96| r96_48(glval>) = VariableAddress : +# 96| r96_49(glval>) = Convert : r96_48 +# 96| r96_50(coroutine_handle &) = CopyValue : r96_49 +# 96| v96_51(void) = Call[coroutine_handle] : func:r96_47, this:r96_44, 0:r96_50 +# 96| m96_52(unknown) = ^CallSideEffect : ~m96_46 +# 96| m96_53(unknown) = Chi : total:m96_46, partial:m96_52 +# 96| v96_54(void) = ^BufferReadSideEffect[0] : &:r96_50, ~m96_53 +# 96| m96_55(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r96_44 +# 96| m96_56(unknown) = Chi : total:m96_53, partial:m96_55 +# 96| r96_57(coroutine_handle) = Load[#temp96:3] : &:r96_44, ~m96_56 +# 96| v96_58(void) = Call[await_suspend] : func:r96_43, this:r0_31, 0:r96_57 +# 96| m96_59(unknown) = ^CallSideEffect : ~m96_56 +# 96| m96_60(unknown) = Chi : total:m96_56, partial:m96_59 +#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m96_60 +#-----| Goto -> Block 3 + +#-----| Block 5 +#-----| v0_33(void) = NoOp : +# 95| r95_64(glval) = VariableAddress[(unnamed local variable)] : +# 95| r95_65(glval) = FunctionAddress[final_suspend] : +# 95| r95_66(suspend_always) = Call[final_suspend] : func:r95_65, this:r95_64 +# 95| m95_67(unknown) = ^CallSideEffect : ~m0_29 +# 95| m95_68(unknown) = Chi : total:m0_29, partial:m95_67 +# 95| v95_69(void) = ^IndirectReadSideEffect[-1] : &:r95_64, ~m95_68 +# 95| m95_70(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_64 +# 95| m95_71(unknown) = Chi : total:m95_68, partial:m95_70 +#-----| r0_34(glval) = VariableAddress[#temp0:0] : +# 95| r95_72(glval) = VariableAddress[#temp95:20] : +# 95| r95_73(glval) = VariableAddress[(unnamed local variable)] : +# 95| r95_74(glval) = FunctionAddress[final_suspend] : +# 95| r95_75(suspend_always) = Call[final_suspend] : func:r95_74, this:r95_73 +# 95| m95_76(unknown) = ^CallSideEffect : ~m95_71 +# 95| m95_77(unknown) = Chi : total:m95_71, partial:m95_76 +# 95| v95_78(void) = ^IndirectReadSideEffect[-1] : &:r95_73, ~m95_77 +# 95| m95_79(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_73 +# 95| m95_80(unknown) = Chi : total:m95_77, partial:m95_79 +# 95| m95_81(suspend_always) = Store[#temp95:20] : &:r95_72, r95_75 +# 95| m95_82(unknown) = Chi : total:m95_80, partial:m95_81 +# 95| r95_83(suspend_always *) = CopyValue : r95_72 +# 95| m95_84(suspend_always *) = Store[#temp0:0] : &:r0_34, r95_83 +#-----| r0_35(suspend_always *) = Load[#temp0:0] : &:r0_34, m95_84 +# 95| r95_85(glval) = CopyValue : r0_35 +# 95| r95_86(glval) = Convert : r95_85 +# 95| r95_87(glval) = FunctionAddress[await_ready] : +# 95| r95_88(bool) = Call[await_ready] : func:r95_87, this:r95_86 +# 95| m95_89(unknown) = ^CallSideEffect : ~m95_82 +# 95| m95_90(unknown) = Chi : total:m95_82, partial:m95_89 +# 95| v95_91(void) = ^IndirectReadSideEffect[-1] : &:r95_86, ~m95_90 +#-----| v0_36(void) = ConditionalBranch : r95_88 +#-----| False -> Block 7 +#-----| True -> Block 6 + +# 95| Block 6 +# 95| m95_92(unknown) = Phi : from 5:~m95_90, from 7:~m95_122 +# 95| r95_93(suspend_always *) = CopyValue : r95_83 +# 95| r95_94(glval) = CopyValue : r95_93 +#-----| r0_37(glval) = Convert : r95_94 +# 95| r95_95(glval) = FunctionAddress[await_resume] : +# 95| v95_96(void) = Call[await_resume] : func:r95_95, this:r0_37 +# 95| m95_97(unknown) = ^CallSideEffect : ~m95_92 +# 95| m95_98(unknown) = Chi : total:m95_92, partial:m95_97 +#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, ~m95_98 +# 95| r95_99(glval) = VariableAddress[#return] : +# 95| v95_100(void) = ReturnValue : &:r95_99, ~m95_98 +# 95| v95_101(void) = AliasedUse : ~m95_98 +# 95| v95_102(void) = ExitFunction : + +# 95| Block 7 +# 95| r95_103(suspend_always *) = CopyValue : r95_83 +# 95| r95_104(glval) = CopyValue : r95_103 +#-----| r0_39(glval) = Convert : r95_104 +# 95| r95_105(glval) = FunctionAddress[await_suspend] : +# 95| r95_106(glval>) = VariableAddress[#temp95:20] : +# 95| m95_107(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_106 +# 95| m95_108(unknown) = Chi : total:m95_90, partial:m95_107 +# 95| r95_109(glval) = FunctionAddress[coroutine_handle] : +# 95| r95_110(glval>) = VariableAddress : +# 95| r95_111(glval>) = Convert : r95_110 +# 95| r95_112(coroutine_handle &) = CopyValue : r95_111 +# 95| v95_113(void) = Call[coroutine_handle] : func:r95_109, this:r95_106, 0:r95_112 +# 95| m95_114(unknown) = ^CallSideEffect : ~m95_108 +# 95| m95_115(unknown) = Chi : total:m95_108, partial:m95_114 +# 95| v95_116(void) = ^BufferReadSideEffect[0] : &:r95_112, ~m95_115 +# 95| m95_117(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_106 +# 95| m95_118(unknown) = Chi : total:m95_115, partial:m95_117 +# 95| r95_119(coroutine_handle) = Load[#temp95:20] : &:r95_106, ~m95_118 +# 95| v95_120(void) = Call[await_suspend] : func:r95_105, this:r0_39, 0:r95_119 +# 95| m95_121(unknown) = ^CallSideEffect : ~m95_118 +# 95| m95_122(unknown) = Chi : total:m95_118, partial:m95_121 +#-----| v0_40(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m95_122 +#-----| Goto -> Block 6 # 99| co_returnable_value co_yield_value_value(int) # 99| Block 0 -# 99| v99_1(void) = EnterFunction : -# 99| m99_2(unknown) = AliasedDefinition : -# 99| m99_3(unknown) = InitializeNonLocal : -# 99| m99_4(unknown) = Chi : total:m99_2, partial:m99_3 -# 99| r99_5(glval) = VariableAddress[i] : -# 99| m99_6(int) = InitializeParameter[i] : &:r99_5 -#-----| r0_1(glval) = VariableAddress[i] : -#-----| r0_2(glval) = VariableAddress[i] : -#-----| r0_3(int) = Load[i] : &:r0_2, m99_6 -#-----| m0_4(int) = Store[i] : &:r0_1, r0_3 -# 99| r99_7(glval) = VariableAddress[(unnamed local variable)] : -# 99| m99_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r99_7 -# 99| m99_9(unknown) = Chi : total:m99_4, partial:m99_8 -# 99| r99_10(glval) = VariableAddress[(unnamed local variable)] : -# 99| r99_11(glval) = FunctionAddress[initial_suspend] : -# 99| r99_12(suspend_always) = Call[initial_suspend] : func:r99_11, this:r99_10 -# 99| m99_13(unknown) = ^CallSideEffect : ~m99_9 -# 99| m99_14(unknown) = Chi : total:m99_9, partial:m99_13 -# 99| v99_15(void) = ^IndirectReadSideEffect[-1] : &:r99_10, ~m99_14 -# 99| m99_16(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_10 -# 99| m99_17(unknown) = Chi : total:m99_14, partial:m99_16 -#-----| v0_5(void) = CopyValue : r99_12 -# 100| r100_1(glval) = VariableAddress[(unnamed local variable)] : -# 100| r100_2(glval) = FunctionAddress[yield_value] : -# 100| r100_3(glval) = VariableAddress[i] : -# 100| r100_4(int) = Load[i] : &:r100_3, m0_4 -# 100| r100_5(suspend_always) = Call[yield_value] : func:r100_2, this:r100_1, 0:r100_4 -# 100| m100_6(unknown) = ^CallSideEffect : ~m99_17 -# 100| m100_7(unknown) = Chi : total:m99_17, partial:m100_6 -# 100| v100_8(void) = ^IndirectReadSideEffect[-1] : &:r100_1, ~m100_7 -# 100| m100_9(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r100_1 -# 100| m100_10(unknown) = Chi : total:m100_7, partial:m100_9 -# 100| v100_11(void) = CopyValue : r100_5 -#-----| v0_6(void) = NoOp : -# 99| r99_18(glval) = VariableAddress[(unnamed local variable)] : -# 99| r99_19(glval) = FunctionAddress[final_suspend] : -# 99| r99_20(suspend_always) = Call[final_suspend] : func:r99_19, this:r99_18 -# 99| m99_21(unknown) = ^CallSideEffect : ~m100_10 -# 99| m99_22(unknown) = Chi : total:m100_10, partial:m99_21 -# 99| v99_23(void) = ^IndirectReadSideEffect[-1] : &:r99_18, ~m99_22 -# 99| m99_24(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_18 -# 99| m99_25(unknown) = Chi : total:m99_22, partial:m99_24 -#-----| v0_7(void) = CopyValue : r99_20 -# 99| r99_26(glval) = VariableAddress[#return] : -# 99| v99_27(void) = ReturnValue : &:r99_26, ~m99_25 -# 99| v99_28(void) = AliasedUse : ~m99_22 -# 99| v99_29(void) = ExitFunction : +# 99| v99_1(void) = EnterFunction : +# 99| m99_2(unknown) = AliasedDefinition : +# 99| m99_3(unknown) = InitializeNonLocal : +# 99| m99_4(unknown) = Chi : total:m99_2, partial:m99_3 +# 99| r99_5(glval) = VariableAddress[i] : +# 99| m99_6(int) = InitializeParameter[i] : &:r99_5 +#-----| r0_1(glval) = VariableAddress[i] : +#-----| r0_2(glval) = VariableAddress[i] : +#-----| r0_3(int) = Load[i] : &:r0_2, m99_6 +#-----| m0_4(int) = Store[i] : &:r0_1, r0_3 +# 99| r99_7(glval) = VariableAddress[(unnamed local variable)] : +# 99| m99_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r99_7 +# 99| m99_9(unknown) = Chi : total:m99_4, partial:m99_8 +# 99| r99_10(glval) = VariableAddress[(unnamed local variable)] : +# 99| r99_11(glval) = FunctionAddress[initial_suspend] : +# 99| r99_12(suspend_always) = Call[initial_suspend] : func:r99_11, this:r99_10 +# 99| m99_13(unknown) = ^CallSideEffect : ~m99_9 +# 99| m99_14(unknown) = Chi : total:m99_9, partial:m99_13 +# 99| v99_15(void) = ^IndirectReadSideEffect[-1] : &:r99_10, ~m99_14 +# 99| m99_16(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_10 +# 99| m99_17(unknown) = Chi : total:m99_14, partial:m99_16 +#-----| r0_5(glval) = VariableAddress[#temp0:0] : +# 99| r99_18(glval) = VariableAddress[#temp99:21] : +# 99| r99_19(glval) = VariableAddress[(unnamed local variable)] : +# 99| r99_20(glval) = FunctionAddress[initial_suspend] : +# 99| r99_21(suspend_always) = Call[initial_suspend] : func:r99_20, this:r99_19 +# 99| m99_22(unknown) = ^CallSideEffect : ~m99_17 +# 99| m99_23(unknown) = Chi : total:m99_17, partial:m99_22 +# 99| v99_24(void) = ^IndirectReadSideEffect[-1] : &:r99_19, ~m99_23 +# 99| m99_25(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_19 +# 99| m99_26(unknown) = Chi : total:m99_23, partial:m99_25 +# 99| m99_27(suspend_always) = Store[#temp99:21] : &:r99_18, r99_21 +# 99| m99_28(unknown) = Chi : total:m99_26, partial:m99_27 +# 99| r99_29(suspend_always *) = CopyValue : r99_18 +# 99| m99_30(suspend_always *) = Store[#temp0:0] : &:r0_5, r99_29 +#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, m99_30 +# 99| r99_31(glval) = CopyValue : r0_6 +# 99| r99_32(glval) = Convert : r99_31 +# 99| r99_33(glval) = FunctionAddress[await_ready] : +# 99| r99_34(bool) = Call[await_ready] : func:r99_33, this:r99_32 +# 99| m99_35(unknown) = ^CallSideEffect : ~m99_28 +# 99| m99_36(unknown) = Chi : total:m99_28, partial:m99_35 +# 99| v99_37(void) = ^IndirectReadSideEffect[-1] : &:r99_32, ~m99_36 +#-----| v0_7(void) = ConditionalBranch : r99_34 +#-----| False -> Block 2 +#-----| True -> Block 1 + +#-----| Block 1 +#-----| m0_8(unknown) = Phi : from 0:~m99_36, from 2:~m99_63 +#-----| r0_9(bool) = Constant[1] : +#-----| r0_10(glval) = VariableAddress : +#-----| m0_11(bool) = Store[?] : &:r0_10, r0_9 +#-----| m0_12(unknown) = Chi : total:m0_8, partial:m0_11 +# 99| r99_38(suspend_always *) = CopyValue : r99_29 +# 99| r99_39(glval) = CopyValue : r99_38 +#-----| r0_13(glval) = Convert : r99_39 +# 99| r99_40(glval) = FunctionAddress[await_resume] : +# 99| v99_41(void) = Call[await_resume] : func:r99_40, this:r0_13 +# 99| m99_42(unknown) = ^CallSideEffect : ~m0_12 +# 99| m99_43(unknown) = Chi : total:m0_12, partial:m99_42 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m99_43 +#-----| v0_15(void) = CopyValue : v99_41 +# 100| r100_1(glval) = VariableAddress[(unnamed local variable)] : +# 100| r100_2(glval) = FunctionAddress[yield_value] : +# 100| r100_3(glval) = VariableAddress[i] : +# 100| r100_4(int) = Load[i] : &:r100_3, m0_4 +# 100| r100_5(suspend_always) = Call[yield_value] : func:r100_2, this:r100_1, 0:r100_4 +# 100| m100_6(unknown) = ^CallSideEffect : ~m99_43 +# 100| m100_7(unknown) = Chi : total:m99_43, partial:m100_6 +# 100| v100_8(void) = ^IndirectReadSideEffect[-1] : &:r100_1, ~m100_7 +# 100| m100_9(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r100_1 +# 100| m100_10(unknown) = Chi : total:m100_7, partial:m100_9 +#-----| r0_16(glval) = VariableAddress[#temp0:0] : +# 100| r100_11(glval) = VariableAddress[#temp100:13] : +# 100| r100_12(glval) = VariableAddress[(unnamed local variable)] : +# 100| r100_13(glval) = FunctionAddress[yield_value] : +# 100| r100_14(glval) = VariableAddress[i] : +# 100| r100_15(int) = Load[i] : &:r100_14, m0_4 +# 100| r100_16(suspend_always) = Call[yield_value] : func:r100_13, this:r100_12, 0:r100_15 +# 100| m100_17(unknown) = ^CallSideEffect : ~m100_10 +# 100| m100_18(unknown) = Chi : total:m100_10, partial:m100_17 +# 100| v100_19(void) = ^IndirectReadSideEffect[-1] : &:r100_12, ~m100_18 +# 100| m100_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r100_12 +# 100| m100_21(unknown) = Chi : total:m100_18, partial:m100_20 +# 100| m100_22(suspend_always) = Store[#temp100:13] : &:r100_11, r100_16 +# 100| m100_23(unknown) = Chi : total:m100_21, partial:m100_22 +# 100| r100_24(suspend_always *) = CopyValue : r100_11 +# 100| m100_25(suspend_always *) = Store[#temp0:0] : &:r0_16, r100_24 +#-----| r0_17(suspend_always *) = Load[#temp0:0] : &:r0_16, m100_25 +# 100| r100_26(glval) = CopyValue : r0_17 +# 100| r100_27(glval) = Convert : r100_26 +# 100| r100_28(glval) = FunctionAddress[await_ready] : +# 100| r100_29(bool) = Call[await_ready] : func:r100_28, this:r100_27 +# 100| m100_30(unknown) = ^CallSideEffect : ~m100_23 +# 100| m100_31(unknown) = Chi : total:m100_23, partial:m100_30 +# 100| v100_32(void) = ^IndirectReadSideEffect[-1] : &:r100_27, ~m100_31 +# 100| v100_33(void) = ConditionalBranch : r100_29 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 99| Block 2 +# 99| r99_44(suspend_always *) = CopyValue : r99_29 +# 99| r99_45(glval) = CopyValue : r99_44 +#-----| r0_18(glval) = Convert : r99_45 +# 99| r99_46(glval) = FunctionAddress[await_suspend] : +# 99| r99_47(glval>) = VariableAddress[#temp99:21] : +# 99| m99_48(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_47 +# 99| m99_49(unknown) = Chi : total:m99_36, partial:m99_48 +# 99| r99_50(glval) = FunctionAddress[coroutine_handle] : +# 99| r99_51(glval>) = VariableAddress : +# 99| r99_52(glval>) = Convert : r99_51 +# 99| r99_53(coroutine_handle &) = CopyValue : r99_52 +# 99| v99_54(void) = Call[coroutine_handle] : func:r99_50, this:r99_47, 0:r99_53 +# 99| m99_55(unknown) = ^CallSideEffect : ~m99_49 +# 99| m99_56(unknown) = Chi : total:m99_49, partial:m99_55 +# 99| v99_57(void) = ^BufferReadSideEffect[0] : &:r99_53, ~m99_56 +# 99| m99_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_47 +# 99| m99_59(unknown) = Chi : total:m99_56, partial:m99_58 +# 99| r99_60(coroutine_handle) = Load[#temp99:21] : &:r99_47, ~m99_59 +# 99| v99_61(void) = Call[await_suspend] : func:r99_46, this:r0_18, 0:r99_60 +# 99| m99_62(unknown) = ^CallSideEffect : ~m99_59 +# 99| m99_63(unknown) = Chi : total:m99_59, partial:m99_62 +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m99_63 +#-----| Goto -> Block 1 + +# 100| Block 3 +# 100| m100_34(unknown) = Phi : from 1:~m100_31, from 4:~m100_60 +# 100| r100_35(suspend_always *) = CopyValue : r100_24 +# 100| r100_36(glval) = CopyValue : r100_35 +#-----| r0_20(glval) = Convert : r100_36 +# 100| r100_37(glval) = FunctionAddress[await_resume] : +# 100| v100_38(void) = Call[await_resume] : func:r100_37, this:r0_20 +# 100| m100_39(unknown) = ^CallSideEffect : ~m100_34 +# 100| m100_40(unknown) = Chi : total:m100_34, partial:m100_39 +#-----| v0_21(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m100_40 +#-----| v0_22(void) = NoOp : +# 99| r99_64(glval) = VariableAddress[(unnamed local variable)] : +# 99| r99_65(glval) = FunctionAddress[final_suspend] : +# 99| r99_66(suspend_always) = Call[final_suspend] : func:r99_65, this:r99_64 +# 99| m99_67(unknown) = ^CallSideEffect : ~m100_40 +# 99| m99_68(unknown) = Chi : total:m100_40, partial:m99_67 +# 99| v99_69(void) = ^IndirectReadSideEffect[-1] : &:r99_64, ~m99_68 +# 99| m99_70(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_64 +# 99| m99_71(unknown) = Chi : total:m99_68, partial:m99_70 +#-----| r0_23(glval) = VariableAddress[#temp0:0] : +# 99| r99_72(glval) = VariableAddress[#temp99:21] : +# 99| r99_73(glval) = VariableAddress[(unnamed local variable)] : +# 99| r99_74(glval) = FunctionAddress[final_suspend] : +# 99| r99_75(suspend_always) = Call[final_suspend] : func:r99_74, this:r99_73 +# 99| m99_76(unknown) = ^CallSideEffect : ~m99_71 +# 99| m99_77(unknown) = Chi : total:m99_71, partial:m99_76 +# 99| v99_78(void) = ^IndirectReadSideEffect[-1] : &:r99_73, ~m99_77 +# 99| m99_79(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_73 +# 99| m99_80(unknown) = Chi : total:m99_77, partial:m99_79 +# 99| m99_81(suspend_always) = Store[#temp99:21] : &:r99_72, r99_75 +# 99| m99_82(unknown) = Chi : total:m99_80, partial:m99_81 +# 99| r99_83(suspend_always *) = CopyValue : r99_72 +# 99| m99_84(suspend_always *) = Store[#temp0:0] : &:r0_23, r99_83 +#-----| r0_24(suspend_always *) = Load[#temp0:0] : &:r0_23, m99_84 +# 99| r99_85(glval) = CopyValue : r0_24 +# 99| r99_86(glval) = Convert : r99_85 +# 99| r99_87(glval) = FunctionAddress[await_ready] : +# 99| r99_88(bool) = Call[await_ready] : func:r99_87, this:r99_86 +# 99| m99_89(unknown) = ^CallSideEffect : ~m99_82 +# 99| m99_90(unknown) = Chi : total:m99_82, partial:m99_89 +# 99| v99_91(void) = ^IndirectReadSideEffect[-1] : &:r99_86, ~m99_90 +#-----| v0_25(void) = ConditionalBranch : r99_88 +#-----| False -> Block 6 +#-----| True -> Block 5 + +# 100| Block 4 +# 100| r100_41(suspend_always *) = CopyValue : r100_24 +# 100| r100_42(glval) = CopyValue : r100_41 +#-----| r0_26(glval) = Convert : r100_42 +# 100| r100_43(glval) = FunctionAddress[await_suspend] : +# 100| r100_44(glval>) = VariableAddress[#temp100:3] : +# 100| m100_45(coroutine_handle) = Uninitialized[#temp100:3] : &:r100_44 +# 100| m100_46(unknown) = Chi : total:m100_31, partial:m100_45 +# 100| r100_47(glval) = FunctionAddress[coroutine_handle] : +# 100| r100_48(glval>) = VariableAddress : +# 100| r100_49(glval>) = Convert : r100_48 +# 100| r100_50(coroutine_handle &) = CopyValue : r100_49 +# 100| v100_51(void) = Call[coroutine_handle] : func:r100_47, this:r100_44, 0:r100_50 +# 100| m100_52(unknown) = ^CallSideEffect : ~m100_46 +# 100| m100_53(unknown) = Chi : total:m100_46, partial:m100_52 +# 100| v100_54(void) = ^BufferReadSideEffect[0] : &:r100_50, ~m100_53 +# 100| m100_55(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r100_44 +# 100| m100_56(unknown) = Chi : total:m100_53, partial:m100_55 +# 100| r100_57(coroutine_handle) = Load[#temp100:3] : &:r100_44, ~m100_56 +# 100| v100_58(void) = Call[await_suspend] : func:r100_43, this:r0_26, 0:r100_57 +# 100| m100_59(unknown) = ^CallSideEffect : ~m100_56 +# 100| m100_60(unknown) = Chi : total:m100_56, partial:m100_59 +#-----| v0_27(void) = ^IndirectReadSideEffect[-1] : &:r0_26, ~m100_60 +#-----| Goto -> Block 3 + +# 99| Block 5 +# 99| m99_92(unknown) = Phi : from 3:~m99_90, from 6:~m99_122 +# 99| r99_93(suspend_always *) = CopyValue : r99_83 +# 99| r99_94(glval) = CopyValue : r99_93 +#-----| r0_28(glval) = Convert : r99_94 +# 99| r99_95(glval) = FunctionAddress[await_resume] : +# 99| v99_96(void) = Call[await_resume] : func:r99_95, this:r0_28 +# 99| m99_97(unknown) = ^CallSideEffect : ~m99_92 +# 99| m99_98(unknown) = Chi : total:m99_92, partial:m99_97 +#-----| v0_29(void) = ^IndirectReadSideEffect[-1] : &:r0_28, ~m99_98 +# 99| r99_99(glval) = VariableAddress[#return] : +# 99| v99_100(void) = ReturnValue : &:r99_99, ~m99_98 +# 99| v99_101(void) = AliasedUse : ~m99_98 +# 99| v99_102(void) = ExitFunction : + +# 99| Block 6 +# 99| r99_103(suspend_always *) = CopyValue : r99_83 +# 99| r99_104(glval) = CopyValue : r99_103 +#-----| r0_30(glval) = Convert : r99_104 +# 99| r99_105(glval) = FunctionAddress[await_suspend] : +# 99| r99_106(glval>) = VariableAddress[#temp99:21] : +# 99| m99_107(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_106 +# 99| m99_108(unknown) = Chi : total:m99_90, partial:m99_107 +# 99| r99_109(glval) = FunctionAddress[coroutine_handle] : +# 99| r99_110(glval>) = VariableAddress : +# 99| r99_111(glval>) = Convert : r99_110 +# 99| r99_112(coroutine_handle &) = CopyValue : r99_111 +# 99| v99_113(void) = Call[coroutine_handle] : func:r99_109, this:r99_106, 0:r99_112 +# 99| m99_114(unknown) = ^CallSideEffect : ~m99_108 +# 99| m99_115(unknown) = Chi : total:m99_108, partial:m99_114 +# 99| v99_116(void) = ^BufferReadSideEffect[0] : &:r99_112, ~m99_115 +# 99| m99_117(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_106 +# 99| m99_118(unknown) = Chi : total:m99_115, partial:m99_117 +# 99| r99_119(coroutine_handle) = Load[#temp99:21] : &:r99_106, ~m99_118 +# 99| v99_120(void) = Call[await_suspend] : func:r99_105, this:r0_30, 0:r99_119 +# 99| m99_121(unknown) = ^CallSideEffect : ~m99_118 +# 99| m99_122(unknown) = Chi : total:m99_118, partial:m99_121 +#-----| v0_31(void) = ^IndirectReadSideEffect[-1] : &:r0_30, ~m99_122 +#-----| Goto -> Block 5 # 103| co_returnable_void co_yield_and_return_void(int) # 103| Block 0 -# 103| v103_1(void) = EnterFunction : -# 103| m103_2(unknown) = AliasedDefinition : -# 103| m103_3(unknown) = InitializeNonLocal : -# 103| m103_4(unknown) = Chi : total:m103_2, partial:m103_3 -# 103| r103_5(glval) = VariableAddress[i] : -# 103| m103_6(int) = InitializeParameter[i] : &:r103_5 -#-----| r0_1(glval) = VariableAddress[i] : -#-----| r0_2(glval) = VariableAddress[i] : -#-----| r0_3(int) = Load[i] : &:r0_2, m103_6 -#-----| m0_4(int) = Store[i] : &:r0_1, r0_3 -# 103| r103_7(glval) = VariableAddress[(unnamed local variable)] : -# 103| m103_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r103_7 -# 103| m103_9(unknown) = Chi : total:m103_4, partial:m103_8 -# 103| r103_10(glval) = VariableAddress[(unnamed local variable)] : -# 103| r103_11(glval) = FunctionAddress[initial_suspend] : -# 103| r103_12(suspend_always) = Call[initial_suspend] : func:r103_11, this:r103_10 -# 103| m103_13(unknown) = ^CallSideEffect : ~m103_9 -# 103| m103_14(unknown) = Chi : total:m103_9, partial:m103_13 -# 103| v103_15(void) = ^IndirectReadSideEffect[-1] : &:r103_10, ~m103_14 -# 103| m103_16(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_10 -# 103| m103_17(unknown) = Chi : total:m103_14, partial:m103_16 -#-----| v0_5(void) = CopyValue : r103_12 -# 104| r104_1(glval) = VariableAddress[(unnamed local variable)] : -# 104| r104_2(glval) = FunctionAddress[yield_value] : -# 104| r104_3(glval) = VariableAddress[i] : -# 104| r104_4(int) = Load[i] : &:r104_3, m0_4 -# 104| r104_5(suspend_always) = Call[yield_value] : func:r104_2, this:r104_1, 0:r104_4 -# 104| m104_6(unknown) = ^CallSideEffect : ~m103_17 -# 104| m104_7(unknown) = Chi : total:m103_17, partial:m104_6 -# 104| v104_8(void) = ^IndirectReadSideEffect[-1] : &:r104_1, ~m104_7 -# 104| m104_9(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r104_1 -# 104| m104_10(unknown) = Chi : total:m104_7, partial:m104_9 -# 104| v104_11(void) = CopyValue : r104_5 -#-----| r0_6(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_7(glval) = FunctionAddress[return_void] : -#-----| v0_8(void) = Call[return_void] : func:r0_7, this:r0_6 -#-----| m0_9(unknown) = ^CallSideEffect : ~m104_10 -#-----| m0_10(unknown) = Chi : total:m104_10, partial:m0_9 -#-----| v0_11(void) = ^IndirectReadSideEffect[-1] : &:r0_6, ~m0_10 -#-----| m0_12(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 -#-----| m0_13(unknown) = Chi : total:m0_10, partial:m0_12 -# 105| v105_1(void) = NoOp : -#-----| v0_14(void) = NoOp : -#-----| Goto (back edge) -> Block 1 +# 103| v103_1(void) = EnterFunction : +# 103| m103_2(unknown) = AliasedDefinition : +# 103| m103_3(unknown) = InitializeNonLocal : +# 103| m103_4(unknown) = Chi : total:m103_2, partial:m103_3 +# 103| r103_5(glval) = VariableAddress[i] : +# 103| m103_6(int) = InitializeParameter[i] : &:r103_5 +#-----| r0_1(glval) = VariableAddress[i] : +#-----| r0_2(glval) = VariableAddress[i] : +#-----| r0_3(int) = Load[i] : &:r0_2, m103_6 +#-----| m0_4(int) = Store[i] : &:r0_1, r0_3 +# 103| r103_7(glval) = VariableAddress[(unnamed local variable)] : +# 103| m103_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r103_7 +# 103| m103_9(unknown) = Chi : total:m103_4, partial:m103_8 +# 103| r103_10(glval) = VariableAddress[(unnamed local variable)] : +# 103| r103_11(glval) = FunctionAddress[initial_suspend] : +# 103| r103_12(suspend_always) = Call[initial_suspend] : func:r103_11, this:r103_10 +# 103| m103_13(unknown) = ^CallSideEffect : ~m103_9 +# 103| m103_14(unknown) = Chi : total:m103_9, partial:m103_13 +# 103| v103_15(void) = ^IndirectReadSideEffect[-1] : &:r103_10, ~m103_14 +# 103| m103_16(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_10 +# 103| m103_17(unknown) = Chi : total:m103_14, partial:m103_16 +#-----| r0_5(glval) = VariableAddress[#temp0:0] : +# 103| r103_18(glval) = VariableAddress[#temp103:20] : +# 103| r103_19(glval) = VariableAddress[(unnamed local variable)] : +# 103| r103_20(glval) = FunctionAddress[initial_suspend] : +# 103| r103_21(suspend_always) = Call[initial_suspend] : func:r103_20, this:r103_19 +# 103| m103_22(unknown) = ^CallSideEffect : ~m103_17 +# 103| m103_23(unknown) = Chi : total:m103_17, partial:m103_22 +# 103| v103_24(void) = ^IndirectReadSideEffect[-1] : &:r103_19, ~m103_23 +# 103| m103_25(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_19 +# 103| m103_26(unknown) = Chi : total:m103_23, partial:m103_25 +# 103| m103_27(suspend_always) = Store[#temp103:20] : &:r103_18, r103_21 +# 103| m103_28(unknown) = Chi : total:m103_26, partial:m103_27 +# 103| r103_29(suspend_always *) = CopyValue : r103_18 +# 103| m103_30(suspend_always *) = Store[#temp0:0] : &:r0_5, r103_29 +#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, m103_30 +# 103| r103_31(glval) = CopyValue : r0_6 +# 103| r103_32(glval) = Convert : r103_31 +# 103| r103_33(glval) = FunctionAddress[await_ready] : +# 103| r103_34(bool) = Call[await_ready] : func:r103_33, this:r103_32 +# 103| m103_35(unknown) = ^CallSideEffect : ~m103_28 +# 103| m103_36(unknown) = Chi : total:m103_28, partial:m103_35 +# 103| v103_37(void) = ^IndirectReadSideEffect[-1] : &:r103_32, ~m103_36 +#-----| v0_7(void) = ConditionalBranch : r103_34 +#-----| False -> Block 2 +#-----| True -> Block 1 #-----| Block 1 -#-----| v0_15(void) = NoOp : -# 103| r103_18(glval) = VariableAddress[(unnamed local variable)] : -# 103| r103_19(glval) = FunctionAddress[final_suspend] : -# 103| r103_20(suspend_always) = Call[final_suspend] : func:r103_19, this:r103_18 -# 103| m103_21(unknown) = ^CallSideEffect : ~m0_13 -# 103| m103_22(unknown) = Chi : total:m0_13, partial:m103_21 -# 103| v103_23(void) = ^IndirectReadSideEffect[-1] : &:r103_18, ~m103_22 -# 103| m103_24(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_18 -# 103| m103_25(unknown) = Chi : total:m103_22, partial:m103_24 -#-----| v0_16(void) = CopyValue : r103_20 -# 103| r103_26(glval) = VariableAddress[#return] : -# 103| v103_27(void) = ReturnValue : &:r103_26, ~m103_25 -# 103| v103_28(void) = AliasedUse : ~m103_22 -# 103| v103_29(void) = ExitFunction : +#-----| m0_8(unknown) = Phi : from 0:~m103_36, from 2:~m103_63 +#-----| r0_9(bool) = Constant[1] : +#-----| r0_10(glval) = VariableAddress : +#-----| m0_11(bool) = Store[?] : &:r0_10, r0_9 +#-----| m0_12(unknown) = Chi : total:m0_8, partial:m0_11 +# 103| r103_38(suspend_always *) = CopyValue : r103_29 +# 103| r103_39(glval) = CopyValue : r103_38 +#-----| r0_13(glval) = Convert : r103_39 +# 103| r103_40(glval) = FunctionAddress[await_resume] : +# 103| v103_41(void) = Call[await_resume] : func:r103_40, this:r0_13 +# 103| m103_42(unknown) = ^CallSideEffect : ~m0_12 +# 103| m103_43(unknown) = Chi : total:m0_12, partial:m103_42 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m103_43 +#-----| v0_15(void) = CopyValue : v103_41 +# 104| r104_1(glval) = VariableAddress[(unnamed local variable)] : +# 104| r104_2(glval) = FunctionAddress[yield_value] : +# 104| r104_3(glval) = VariableAddress[i] : +# 104| r104_4(int) = Load[i] : &:r104_3, m0_4 +# 104| r104_5(suspend_always) = Call[yield_value] : func:r104_2, this:r104_1, 0:r104_4 +# 104| m104_6(unknown) = ^CallSideEffect : ~m103_43 +# 104| m104_7(unknown) = Chi : total:m103_43, partial:m104_6 +# 104| v104_8(void) = ^IndirectReadSideEffect[-1] : &:r104_1, ~m104_7 +# 104| m104_9(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r104_1 +# 104| m104_10(unknown) = Chi : total:m104_7, partial:m104_9 +#-----| r0_16(glval) = VariableAddress[#temp0:0] : +# 104| r104_11(glval) = VariableAddress[#temp104:13] : +# 104| r104_12(glval) = VariableAddress[(unnamed local variable)] : +# 104| r104_13(glval) = FunctionAddress[yield_value] : +# 104| r104_14(glval) = VariableAddress[i] : +# 104| r104_15(int) = Load[i] : &:r104_14, m0_4 +# 104| r104_16(suspend_always) = Call[yield_value] : func:r104_13, this:r104_12, 0:r104_15 +# 104| m104_17(unknown) = ^CallSideEffect : ~m104_10 +# 104| m104_18(unknown) = Chi : total:m104_10, partial:m104_17 +# 104| v104_19(void) = ^IndirectReadSideEffect[-1] : &:r104_12, ~m104_18 +# 104| m104_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r104_12 +# 104| m104_21(unknown) = Chi : total:m104_18, partial:m104_20 +# 104| m104_22(suspend_always) = Store[#temp104:13] : &:r104_11, r104_16 +# 104| m104_23(unknown) = Chi : total:m104_21, partial:m104_22 +# 104| r104_24(suspend_always *) = CopyValue : r104_11 +# 104| m104_25(suspend_always *) = Store[#temp0:0] : &:r0_16, r104_24 +#-----| r0_17(suspend_always *) = Load[#temp0:0] : &:r0_16, m104_25 +# 104| r104_26(glval) = CopyValue : r0_17 +# 104| r104_27(glval) = Convert : r104_26 +# 104| r104_28(glval) = FunctionAddress[await_ready] : +# 104| r104_29(bool) = Call[await_ready] : func:r104_28, this:r104_27 +# 104| m104_30(unknown) = ^CallSideEffect : ~m104_23 +# 104| m104_31(unknown) = Chi : total:m104_23, partial:m104_30 +# 104| v104_32(void) = ^IndirectReadSideEffect[-1] : &:r104_27, ~m104_31 +# 104| v104_33(void) = ConditionalBranch : r104_29 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 103| Block 2 +# 103| r103_44(suspend_always *) = CopyValue : r103_29 +# 103| r103_45(glval) = CopyValue : r103_44 +#-----| r0_18(glval) = Convert : r103_45 +# 103| r103_46(glval) = FunctionAddress[await_suspend] : +# 103| r103_47(glval>) = VariableAddress[#temp103:20] : +# 103| m103_48(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_47 +# 103| m103_49(unknown) = Chi : total:m103_36, partial:m103_48 +# 103| r103_50(glval) = FunctionAddress[coroutine_handle] : +# 103| r103_51(glval>) = VariableAddress : +# 103| r103_52(glval>) = Convert : r103_51 +# 103| r103_53(coroutine_handle &) = CopyValue : r103_52 +# 103| v103_54(void) = Call[coroutine_handle] : func:r103_50, this:r103_47, 0:r103_53 +# 103| m103_55(unknown) = ^CallSideEffect : ~m103_49 +# 103| m103_56(unknown) = Chi : total:m103_49, partial:m103_55 +# 103| v103_57(void) = ^BufferReadSideEffect[0] : &:r103_53, ~m103_56 +# 103| m103_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_47 +# 103| m103_59(unknown) = Chi : total:m103_56, partial:m103_58 +# 103| r103_60(coroutine_handle) = Load[#temp103:20] : &:r103_47, ~m103_59 +# 103| v103_61(void) = Call[await_suspend] : func:r103_46, this:r0_18, 0:r103_60 +# 103| m103_62(unknown) = ^CallSideEffect : ~m103_59 +# 103| m103_63(unknown) = Chi : total:m103_59, partial:m103_62 +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m103_63 +#-----| Goto -> Block 1 + +# 104| Block 3 +# 104| m104_34(unknown) = Phi : from 1:~m104_31, from 4:~m104_60 +# 104| r104_35(suspend_always *) = CopyValue : r104_24 +# 104| r104_36(glval) = CopyValue : r104_35 +#-----| r0_20(glval) = Convert : r104_36 +# 104| r104_37(glval) = FunctionAddress[await_resume] : +# 104| v104_38(void) = Call[await_resume] : func:r104_37, this:r0_20 +# 104| m104_39(unknown) = ^CallSideEffect : ~m104_34 +# 104| m104_40(unknown) = Chi : total:m104_34, partial:m104_39 +#-----| v0_21(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m104_40 +#-----| r0_22(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_23(glval) = FunctionAddress[return_void] : +#-----| v0_24(void) = Call[return_void] : func:r0_23, this:r0_22 +#-----| m0_25(unknown) = ^CallSideEffect : ~m104_40 +#-----| m0_26(unknown) = Chi : total:m104_40, partial:m0_25 +#-----| v0_27(void) = ^IndirectReadSideEffect[-1] : &:r0_22, ~m0_26 +#-----| m0_28(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_22 +#-----| m0_29(unknown) = Chi : total:m0_26, partial:m0_28 +# 105| v105_1(void) = NoOp : +#-----| v0_30(void) = NoOp : +#-----| Goto (back edge) -> Block 5 + +# 104| Block 4 +# 104| r104_41(suspend_always *) = CopyValue : r104_24 +# 104| r104_42(glval) = CopyValue : r104_41 +#-----| r0_31(glval) = Convert : r104_42 +# 104| r104_43(glval) = FunctionAddress[await_suspend] : +# 104| r104_44(glval>) = VariableAddress[#temp104:3] : +# 104| m104_45(coroutine_handle) = Uninitialized[#temp104:3] : &:r104_44 +# 104| m104_46(unknown) = Chi : total:m104_31, partial:m104_45 +# 104| r104_47(glval) = FunctionAddress[coroutine_handle] : +# 104| r104_48(glval>) = VariableAddress : +# 104| r104_49(glval>) = Convert : r104_48 +# 104| r104_50(coroutine_handle &) = CopyValue : r104_49 +# 104| v104_51(void) = Call[coroutine_handle] : func:r104_47, this:r104_44, 0:r104_50 +# 104| m104_52(unknown) = ^CallSideEffect : ~m104_46 +# 104| m104_53(unknown) = Chi : total:m104_46, partial:m104_52 +# 104| v104_54(void) = ^BufferReadSideEffect[0] : &:r104_50, ~m104_53 +# 104| m104_55(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r104_44 +# 104| m104_56(unknown) = Chi : total:m104_53, partial:m104_55 +# 104| r104_57(coroutine_handle) = Load[#temp104:3] : &:r104_44, ~m104_56 +# 104| v104_58(void) = Call[await_suspend] : func:r104_43, this:r0_31, 0:r104_57 +# 104| m104_59(unknown) = ^CallSideEffect : ~m104_56 +# 104| m104_60(unknown) = Chi : total:m104_56, partial:m104_59 +#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m104_60 +#-----| Goto -> Block 3 + +#-----| Block 5 +#-----| v0_33(void) = NoOp : +# 103| r103_64(glval) = VariableAddress[(unnamed local variable)] : +# 103| r103_65(glval) = FunctionAddress[final_suspend] : +# 103| r103_66(suspend_always) = Call[final_suspend] : func:r103_65, this:r103_64 +# 103| m103_67(unknown) = ^CallSideEffect : ~m0_29 +# 103| m103_68(unknown) = Chi : total:m0_29, partial:m103_67 +# 103| v103_69(void) = ^IndirectReadSideEffect[-1] : &:r103_64, ~m103_68 +# 103| m103_70(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_64 +# 103| m103_71(unknown) = Chi : total:m103_68, partial:m103_70 +#-----| r0_34(glval) = VariableAddress[#temp0:0] : +# 103| r103_72(glval) = VariableAddress[#temp103:20] : +# 103| r103_73(glval) = VariableAddress[(unnamed local variable)] : +# 103| r103_74(glval) = FunctionAddress[final_suspend] : +# 103| r103_75(suspend_always) = Call[final_suspend] : func:r103_74, this:r103_73 +# 103| m103_76(unknown) = ^CallSideEffect : ~m103_71 +# 103| m103_77(unknown) = Chi : total:m103_71, partial:m103_76 +# 103| v103_78(void) = ^IndirectReadSideEffect[-1] : &:r103_73, ~m103_77 +# 103| m103_79(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_73 +# 103| m103_80(unknown) = Chi : total:m103_77, partial:m103_79 +# 103| m103_81(suspend_always) = Store[#temp103:20] : &:r103_72, r103_75 +# 103| m103_82(unknown) = Chi : total:m103_80, partial:m103_81 +# 103| r103_83(suspend_always *) = CopyValue : r103_72 +# 103| m103_84(suspend_always *) = Store[#temp0:0] : &:r0_34, r103_83 +#-----| r0_35(suspend_always *) = Load[#temp0:0] : &:r0_34, m103_84 +# 103| r103_85(glval) = CopyValue : r0_35 +# 103| r103_86(glval) = Convert : r103_85 +# 103| r103_87(glval) = FunctionAddress[await_ready] : +# 103| r103_88(bool) = Call[await_ready] : func:r103_87, this:r103_86 +# 103| m103_89(unknown) = ^CallSideEffect : ~m103_82 +# 103| m103_90(unknown) = Chi : total:m103_82, partial:m103_89 +# 103| v103_91(void) = ^IndirectReadSideEffect[-1] : &:r103_86, ~m103_90 +#-----| v0_36(void) = ConditionalBranch : r103_88 +#-----| False -> Block 7 +#-----| True -> Block 6 + +# 103| Block 6 +# 103| m103_92(unknown) = Phi : from 5:~m103_90, from 7:~m103_122 +# 103| r103_93(suspend_always *) = CopyValue : r103_83 +# 103| r103_94(glval) = CopyValue : r103_93 +#-----| r0_37(glval) = Convert : r103_94 +# 103| r103_95(glval) = FunctionAddress[await_resume] : +# 103| v103_96(void) = Call[await_resume] : func:r103_95, this:r0_37 +# 103| m103_97(unknown) = ^CallSideEffect : ~m103_92 +# 103| m103_98(unknown) = Chi : total:m103_92, partial:m103_97 +#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, ~m103_98 +# 103| r103_99(glval) = VariableAddress[#return] : +# 103| v103_100(void) = ReturnValue : &:r103_99, ~m103_98 +# 103| v103_101(void) = AliasedUse : ~m103_98 +# 103| v103_102(void) = ExitFunction : + +# 103| Block 7 +# 103| r103_103(suspend_always *) = CopyValue : r103_83 +# 103| r103_104(glval) = CopyValue : r103_103 +#-----| r0_39(glval) = Convert : r103_104 +# 103| r103_105(glval) = FunctionAddress[await_suspend] : +# 103| r103_106(glval>) = VariableAddress[#temp103:20] : +# 103| m103_107(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_106 +# 103| m103_108(unknown) = Chi : total:m103_90, partial:m103_107 +# 103| r103_109(glval) = FunctionAddress[coroutine_handle] : +# 103| r103_110(glval>) = VariableAddress : +# 103| r103_111(glval>) = Convert : r103_110 +# 103| r103_112(coroutine_handle &) = CopyValue : r103_111 +# 103| v103_113(void) = Call[coroutine_handle] : func:r103_109, this:r103_106, 0:r103_112 +# 103| m103_114(unknown) = ^CallSideEffect : ~m103_108 +# 103| m103_115(unknown) = Chi : total:m103_108, partial:m103_114 +# 103| v103_116(void) = ^BufferReadSideEffect[0] : &:r103_112, ~m103_115 +# 103| m103_117(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_106 +# 103| m103_118(unknown) = Chi : total:m103_115, partial:m103_117 +# 103| r103_119(coroutine_handle) = Load[#temp103:20] : &:r103_106, ~m103_118 +# 103| v103_120(void) = Call[await_suspend] : func:r103_105, this:r0_39, 0:r103_119 +# 103| m103_121(unknown) = ^CallSideEffect : ~m103_118 +# 103| m103_122(unknown) = Chi : total:m103_118, partial:m103_121 +#-----| v0_40(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m103_122 +#-----| Goto -> Block 6 # 108| co_returnable_value co_yield_and_return_value(int) # 108| Block 0 -# 108| v108_1(void) = EnterFunction : -# 108| m108_2(unknown) = AliasedDefinition : -# 108| m108_3(unknown) = InitializeNonLocal : -# 108| m108_4(unknown) = Chi : total:m108_2, partial:m108_3 -# 108| r108_5(glval) = VariableAddress[i] : -# 108| m108_6(int) = InitializeParameter[i] : &:r108_5 -#-----| r0_1(glval) = VariableAddress[i] : -#-----| r0_2(glval) = VariableAddress[i] : -#-----| r0_3(int) = Load[i] : &:r0_2, m108_6 -#-----| m0_4(int) = Store[i] : &:r0_1, r0_3 -# 108| r108_7(glval) = VariableAddress[(unnamed local variable)] : -# 108| m108_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r108_7 -# 108| m108_9(unknown) = Chi : total:m108_4, partial:m108_8 -# 108| r108_10(glval) = VariableAddress[(unnamed local variable)] : -# 108| r108_11(glval) = FunctionAddress[initial_suspend] : -# 108| r108_12(suspend_always) = Call[initial_suspend] : func:r108_11, this:r108_10 -# 108| m108_13(unknown) = ^CallSideEffect : ~m108_9 -# 108| m108_14(unknown) = Chi : total:m108_9, partial:m108_13 -# 108| v108_15(void) = ^IndirectReadSideEffect[-1] : &:r108_10, ~m108_14 -# 108| m108_16(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_10 -# 108| m108_17(unknown) = Chi : total:m108_14, partial:m108_16 -#-----| v0_5(void) = CopyValue : r108_12 -# 109| r109_1(glval) = VariableAddress[(unnamed local variable)] : -# 109| r109_2(glval) = FunctionAddress[yield_value] : -# 109| r109_3(glval) = VariableAddress[i] : -# 109| r109_4(int) = Load[i] : &:r109_3, m0_4 -# 109| r109_5(suspend_always) = Call[yield_value] : func:r109_2, this:r109_1, 0:r109_4 -# 109| m109_6(unknown) = ^CallSideEffect : ~m108_17 -# 109| m109_7(unknown) = Chi : total:m108_17, partial:m109_6 -# 109| v109_8(void) = ^IndirectReadSideEffect[-1] : &:r109_1, ~m109_7 -# 109| m109_9(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r109_1 -# 109| m109_10(unknown) = Chi : total:m109_7, partial:m109_9 -# 109| v109_11(void) = CopyValue : r109_5 -#-----| r0_6(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_7(glval) = FunctionAddress[return_value] : -# 110| r110_1(glval) = VariableAddress[i] : -# 110| r110_2(int) = Load[i] : &:r110_1, m0_4 -# 110| r110_3(int) = Constant[1] : -# 110| r110_4(int) = Add : r110_2, r110_3 -#-----| v0_8(void) = Call[return_value] : func:r0_7, this:r0_6, 0:r110_4 -#-----| m0_9(unknown) = ^CallSideEffect : ~m109_10 -#-----| m0_10(unknown) = Chi : total:m109_10, partial:m0_9 -#-----| v0_11(void) = ^IndirectReadSideEffect[-1] : &:r0_6, ~m0_10 -#-----| m0_12(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 -#-----| m0_13(unknown) = Chi : total:m0_10, partial:m0_12 -# 110| v110_5(void) = NoOp : -#-----| v0_14(void) = NoOp : -#-----| Goto (back edge) -> Block 1 +# 108| v108_1(void) = EnterFunction : +# 108| m108_2(unknown) = AliasedDefinition : +# 108| m108_3(unknown) = InitializeNonLocal : +# 108| m108_4(unknown) = Chi : total:m108_2, partial:m108_3 +# 108| r108_5(glval) = VariableAddress[i] : +# 108| m108_6(int) = InitializeParameter[i] : &:r108_5 +#-----| r0_1(glval) = VariableAddress[i] : +#-----| r0_2(glval) = VariableAddress[i] : +#-----| r0_3(int) = Load[i] : &:r0_2, m108_6 +#-----| m0_4(int) = Store[i] : &:r0_1, r0_3 +# 108| r108_7(glval) = VariableAddress[(unnamed local variable)] : +# 108| m108_8(promise_type) = Uninitialized[(unnamed local variable)] : &:r108_7 +# 108| m108_9(unknown) = Chi : total:m108_4, partial:m108_8 +# 108| r108_10(glval) = VariableAddress[(unnamed local variable)] : +# 108| r108_11(glval) = FunctionAddress[initial_suspend] : +# 108| r108_12(suspend_always) = Call[initial_suspend] : func:r108_11, this:r108_10 +# 108| m108_13(unknown) = ^CallSideEffect : ~m108_9 +# 108| m108_14(unknown) = Chi : total:m108_9, partial:m108_13 +# 108| v108_15(void) = ^IndirectReadSideEffect[-1] : &:r108_10, ~m108_14 +# 108| m108_16(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_10 +# 108| m108_17(unknown) = Chi : total:m108_14, partial:m108_16 +#-----| r0_5(glval) = VariableAddress[#temp0:0] : +# 108| r108_18(glval) = VariableAddress[#temp108:21] : +# 108| r108_19(glval) = VariableAddress[(unnamed local variable)] : +# 108| r108_20(glval) = FunctionAddress[initial_suspend] : +# 108| r108_21(suspend_always) = Call[initial_suspend] : func:r108_20, this:r108_19 +# 108| m108_22(unknown) = ^CallSideEffect : ~m108_17 +# 108| m108_23(unknown) = Chi : total:m108_17, partial:m108_22 +# 108| v108_24(void) = ^IndirectReadSideEffect[-1] : &:r108_19, ~m108_23 +# 108| m108_25(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_19 +# 108| m108_26(unknown) = Chi : total:m108_23, partial:m108_25 +# 108| m108_27(suspend_always) = Store[#temp108:21] : &:r108_18, r108_21 +# 108| m108_28(unknown) = Chi : total:m108_26, partial:m108_27 +# 108| r108_29(suspend_always *) = CopyValue : r108_18 +# 108| m108_30(suspend_always *) = Store[#temp0:0] : &:r0_5, r108_29 +#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, m108_30 +# 108| r108_31(glval) = CopyValue : r0_6 +# 108| r108_32(glval) = Convert : r108_31 +# 108| r108_33(glval) = FunctionAddress[await_ready] : +# 108| r108_34(bool) = Call[await_ready] : func:r108_33, this:r108_32 +# 108| m108_35(unknown) = ^CallSideEffect : ~m108_28 +# 108| m108_36(unknown) = Chi : total:m108_28, partial:m108_35 +# 108| v108_37(void) = ^IndirectReadSideEffect[-1] : &:r108_32, ~m108_36 +#-----| v0_7(void) = ConditionalBranch : r108_34 +#-----| False -> Block 2 +#-----| True -> Block 1 #-----| Block 1 -#-----| v0_15(void) = NoOp : -# 108| r108_18(glval) = VariableAddress[(unnamed local variable)] : -# 108| r108_19(glval) = FunctionAddress[final_suspend] : -# 108| r108_20(suspend_always) = Call[final_suspend] : func:r108_19, this:r108_18 -# 108| m108_21(unknown) = ^CallSideEffect : ~m0_13 -# 108| m108_22(unknown) = Chi : total:m0_13, partial:m108_21 -# 108| v108_23(void) = ^IndirectReadSideEffect[-1] : &:r108_18, ~m108_22 -# 108| m108_24(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_18 -# 108| m108_25(unknown) = Chi : total:m108_22, partial:m108_24 -#-----| v0_16(void) = CopyValue : r108_20 -# 108| r108_26(glval) = VariableAddress[#return] : -# 108| v108_27(void) = ReturnValue : &:r108_26, ~m108_25 -# 108| v108_28(void) = AliasedUse : ~m108_22 -# 108| v108_29(void) = ExitFunction : +#-----| m0_8(unknown) = Phi : from 0:~m108_36, from 2:~m108_63 +#-----| r0_9(bool) = Constant[1] : +#-----| r0_10(glval) = VariableAddress : +#-----| m0_11(bool) = Store[?] : &:r0_10, r0_9 +#-----| m0_12(unknown) = Chi : total:m0_8, partial:m0_11 +# 108| r108_38(suspend_always *) = CopyValue : r108_29 +# 108| r108_39(glval) = CopyValue : r108_38 +#-----| r0_13(glval) = Convert : r108_39 +# 108| r108_40(glval) = FunctionAddress[await_resume] : +# 108| v108_41(void) = Call[await_resume] : func:r108_40, this:r0_13 +# 108| m108_42(unknown) = ^CallSideEffect : ~m0_12 +# 108| m108_43(unknown) = Chi : total:m0_12, partial:m108_42 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m108_43 +#-----| v0_15(void) = CopyValue : v108_41 +# 109| r109_1(glval) = VariableAddress[(unnamed local variable)] : +# 109| r109_2(glval) = FunctionAddress[yield_value] : +# 109| r109_3(glval) = VariableAddress[i] : +# 109| r109_4(int) = Load[i] : &:r109_3, m0_4 +# 109| r109_5(suspend_always) = Call[yield_value] : func:r109_2, this:r109_1, 0:r109_4 +# 109| m109_6(unknown) = ^CallSideEffect : ~m108_43 +# 109| m109_7(unknown) = Chi : total:m108_43, partial:m109_6 +# 109| v109_8(void) = ^IndirectReadSideEffect[-1] : &:r109_1, ~m109_7 +# 109| m109_9(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r109_1 +# 109| m109_10(unknown) = Chi : total:m109_7, partial:m109_9 +#-----| r0_16(glval) = VariableAddress[#temp0:0] : +# 109| r109_11(glval) = VariableAddress[#temp109:13] : +# 109| r109_12(glval) = VariableAddress[(unnamed local variable)] : +# 109| r109_13(glval) = FunctionAddress[yield_value] : +# 109| r109_14(glval) = VariableAddress[i] : +# 109| r109_15(int) = Load[i] : &:r109_14, m0_4 +# 109| r109_16(suspend_always) = Call[yield_value] : func:r109_13, this:r109_12, 0:r109_15 +# 109| m109_17(unknown) = ^CallSideEffect : ~m109_10 +# 109| m109_18(unknown) = Chi : total:m109_10, partial:m109_17 +# 109| v109_19(void) = ^IndirectReadSideEffect[-1] : &:r109_12, ~m109_18 +# 109| m109_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r109_12 +# 109| m109_21(unknown) = Chi : total:m109_18, partial:m109_20 +# 109| m109_22(suspend_always) = Store[#temp109:13] : &:r109_11, r109_16 +# 109| m109_23(unknown) = Chi : total:m109_21, partial:m109_22 +# 109| r109_24(suspend_always *) = CopyValue : r109_11 +# 109| m109_25(suspend_always *) = Store[#temp0:0] : &:r0_16, r109_24 +#-----| r0_17(suspend_always *) = Load[#temp0:0] : &:r0_16, m109_25 +# 109| r109_26(glval) = CopyValue : r0_17 +# 109| r109_27(glval) = Convert : r109_26 +# 109| r109_28(glval) = FunctionAddress[await_ready] : +# 109| r109_29(bool) = Call[await_ready] : func:r109_28, this:r109_27 +# 109| m109_30(unknown) = ^CallSideEffect : ~m109_23 +# 109| m109_31(unknown) = Chi : total:m109_23, partial:m109_30 +# 109| v109_32(void) = ^IndirectReadSideEffect[-1] : &:r109_27, ~m109_31 +# 109| v109_33(void) = ConditionalBranch : r109_29 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 108| Block 2 +# 108| r108_44(suspend_always *) = CopyValue : r108_29 +# 108| r108_45(glval) = CopyValue : r108_44 +#-----| r0_18(glval) = Convert : r108_45 +# 108| r108_46(glval) = FunctionAddress[await_suspend] : +# 108| r108_47(glval>) = VariableAddress[#temp108:21] : +# 108| m108_48(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_47 +# 108| m108_49(unknown) = Chi : total:m108_36, partial:m108_48 +# 108| r108_50(glval) = FunctionAddress[coroutine_handle] : +# 108| r108_51(glval>) = VariableAddress : +# 108| r108_52(glval>) = Convert : r108_51 +# 108| r108_53(coroutine_handle &) = CopyValue : r108_52 +# 108| v108_54(void) = Call[coroutine_handle] : func:r108_50, this:r108_47, 0:r108_53 +# 108| m108_55(unknown) = ^CallSideEffect : ~m108_49 +# 108| m108_56(unknown) = Chi : total:m108_49, partial:m108_55 +# 108| v108_57(void) = ^BufferReadSideEffect[0] : &:r108_53, ~m108_56 +# 108| m108_58(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_47 +# 108| m108_59(unknown) = Chi : total:m108_56, partial:m108_58 +# 108| r108_60(coroutine_handle) = Load[#temp108:21] : &:r108_47, ~m108_59 +# 108| v108_61(void) = Call[await_suspend] : func:r108_46, this:r0_18, 0:r108_60 +# 108| m108_62(unknown) = ^CallSideEffect : ~m108_59 +# 108| m108_63(unknown) = Chi : total:m108_59, partial:m108_62 +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m108_63 +#-----| Goto -> Block 1 + +# 109| Block 3 +# 109| m109_34(unknown) = Phi : from 1:~m109_31, from 4:~m109_60 +# 109| r109_35(suspend_always *) = CopyValue : r109_24 +# 109| r109_36(glval) = CopyValue : r109_35 +#-----| r0_20(glval) = Convert : r109_36 +# 109| r109_37(glval) = FunctionAddress[await_resume] : +# 109| v109_38(void) = Call[await_resume] : func:r109_37, this:r0_20 +# 109| m109_39(unknown) = ^CallSideEffect : ~m109_34 +# 109| m109_40(unknown) = Chi : total:m109_34, partial:m109_39 +#-----| v0_21(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m109_40 +#-----| r0_22(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_23(glval) = FunctionAddress[return_value] : +# 110| r110_1(glval) = VariableAddress[i] : +# 110| r110_2(int) = Load[i] : &:r110_1, m0_4 +# 110| r110_3(int) = Constant[1] : +# 110| r110_4(int) = Add : r110_2, r110_3 +#-----| v0_24(void) = Call[return_value] : func:r0_23, this:r0_22, 0:r110_4 +#-----| m0_25(unknown) = ^CallSideEffect : ~m109_40 +#-----| m0_26(unknown) = Chi : total:m109_40, partial:m0_25 +#-----| v0_27(void) = ^IndirectReadSideEffect[-1] : &:r0_22, ~m0_26 +#-----| m0_28(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_22 +#-----| m0_29(unknown) = Chi : total:m0_26, partial:m0_28 +# 110| v110_5(void) = NoOp : +#-----| v0_30(void) = NoOp : +#-----| Goto (back edge) -> Block 5 + +# 109| Block 4 +# 109| r109_41(suspend_always *) = CopyValue : r109_24 +# 109| r109_42(glval) = CopyValue : r109_41 +#-----| r0_31(glval) = Convert : r109_42 +# 109| r109_43(glval) = FunctionAddress[await_suspend] : +# 109| r109_44(glval>) = VariableAddress[#temp109:3] : +# 109| m109_45(coroutine_handle) = Uninitialized[#temp109:3] : &:r109_44 +# 109| m109_46(unknown) = Chi : total:m109_31, partial:m109_45 +# 109| r109_47(glval) = FunctionAddress[coroutine_handle] : +# 109| r109_48(glval>) = VariableAddress : +# 109| r109_49(glval>) = Convert : r109_48 +# 109| r109_50(coroutine_handle &) = CopyValue : r109_49 +# 109| v109_51(void) = Call[coroutine_handle] : func:r109_47, this:r109_44, 0:r109_50 +# 109| m109_52(unknown) = ^CallSideEffect : ~m109_46 +# 109| m109_53(unknown) = Chi : total:m109_46, partial:m109_52 +# 109| v109_54(void) = ^BufferReadSideEffect[0] : &:r109_50, ~m109_53 +# 109| m109_55(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r109_44 +# 109| m109_56(unknown) = Chi : total:m109_53, partial:m109_55 +# 109| r109_57(coroutine_handle) = Load[#temp109:3] : &:r109_44, ~m109_56 +# 109| v109_58(void) = Call[await_suspend] : func:r109_43, this:r0_31, 0:r109_57 +# 109| m109_59(unknown) = ^CallSideEffect : ~m109_56 +# 109| m109_60(unknown) = Chi : total:m109_56, partial:m109_59 +#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m109_60 +#-----| Goto -> Block 3 + +#-----| Block 5 +#-----| v0_33(void) = NoOp : +# 108| r108_64(glval) = VariableAddress[(unnamed local variable)] : +# 108| r108_65(glval) = FunctionAddress[final_suspend] : +# 108| r108_66(suspend_always) = Call[final_suspend] : func:r108_65, this:r108_64 +# 108| m108_67(unknown) = ^CallSideEffect : ~m0_29 +# 108| m108_68(unknown) = Chi : total:m0_29, partial:m108_67 +# 108| v108_69(void) = ^IndirectReadSideEffect[-1] : &:r108_64, ~m108_68 +# 108| m108_70(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_64 +# 108| m108_71(unknown) = Chi : total:m108_68, partial:m108_70 +#-----| r0_34(glval) = VariableAddress[#temp0:0] : +# 108| r108_72(glval) = VariableAddress[#temp108:21] : +# 108| r108_73(glval) = VariableAddress[(unnamed local variable)] : +# 108| r108_74(glval) = FunctionAddress[final_suspend] : +# 108| r108_75(suspend_always) = Call[final_suspend] : func:r108_74, this:r108_73 +# 108| m108_76(unknown) = ^CallSideEffect : ~m108_71 +# 108| m108_77(unknown) = Chi : total:m108_71, partial:m108_76 +# 108| v108_78(void) = ^IndirectReadSideEffect[-1] : &:r108_73, ~m108_77 +# 108| m108_79(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_73 +# 108| m108_80(unknown) = Chi : total:m108_77, partial:m108_79 +# 108| m108_81(suspend_always) = Store[#temp108:21] : &:r108_72, r108_75 +# 108| m108_82(unknown) = Chi : total:m108_80, partial:m108_81 +# 108| r108_83(suspend_always *) = CopyValue : r108_72 +# 108| m108_84(suspend_always *) = Store[#temp0:0] : &:r0_34, r108_83 +#-----| r0_35(suspend_always *) = Load[#temp0:0] : &:r0_34, m108_84 +# 108| r108_85(glval) = CopyValue : r0_35 +# 108| r108_86(glval) = Convert : r108_85 +# 108| r108_87(glval) = FunctionAddress[await_ready] : +# 108| r108_88(bool) = Call[await_ready] : func:r108_87, this:r108_86 +# 108| m108_89(unknown) = ^CallSideEffect : ~m108_82 +# 108| m108_90(unknown) = Chi : total:m108_82, partial:m108_89 +# 108| v108_91(void) = ^IndirectReadSideEffect[-1] : &:r108_86, ~m108_90 +#-----| v0_36(void) = ConditionalBranch : r108_88 +#-----| False -> Block 7 +#-----| True -> Block 6 + +# 108| Block 6 +# 108| m108_92(unknown) = Phi : from 5:~m108_90, from 7:~m108_122 +# 108| r108_93(suspend_always *) = CopyValue : r108_83 +# 108| r108_94(glval) = CopyValue : r108_93 +#-----| r0_37(glval) = Convert : r108_94 +# 108| r108_95(glval) = FunctionAddress[await_resume] : +# 108| v108_96(void) = Call[await_resume] : func:r108_95, this:r0_37 +# 108| m108_97(unknown) = ^CallSideEffect : ~m108_92 +# 108| m108_98(unknown) = Chi : total:m108_92, partial:m108_97 +#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, ~m108_98 +# 108| r108_99(glval) = VariableAddress[#return] : +# 108| v108_100(void) = ReturnValue : &:r108_99, ~m108_98 +# 108| v108_101(void) = AliasedUse : ~m108_98 +# 108| v108_102(void) = ExitFunction : + +# 108| Block 7 +# 108| r108_103(suspend_always *) = CopyValue : r108_83 +# 108| r108_104(glval) = CopyValue : r108_103 +#-----| r0_39(glval) = Convert : r108_104 +# 108| r108_105(glval) = FunctionAddress[await_suspend] : +# 108| r108_106(glval>) = VariableAddress[#temp108:21] : +# 108| m108_107(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_106 +# 108| m108_108(unknown) = Chi : total:m108_90, partial:m108_107 +# 108| r108_109(glval) = FunctionAddress[coroutine_handle] : +# 108| r108_110(glval>) = VariableAddress : +# 108| r108_111(glval>) = Convert : r108_110 +# 108| r108_112(coroutine_handle &) = CopyValue : r108_111 +# 108| v108_113(void) = Call[coroutine_handle] : func:r108_109, this:r108_106, 0:r108_112 +# 108| m108_114(unknown) = ^CallSideEffect : ~m108_108 +# 108| m108_115(unknown) = Chi : total:m108_108, partial:m108_114 +# 108| v108_116(void) = ^BufferReadSideEffect[0] : &:r108_112, ~m108_115 +# 108| m108_117(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_106 +# 108| m108_118(unknown) = Chi : total:m108_115, partial:m108_117 +# 108| r108_119(coroutine_handle) = Load[#temp108:21] : &:r108_106, ~m108_118 +# 108| v108_120(void) = Call[await_suspend] : func:r108_105, this:r0_39, 0:r108_119 +# 108| m108_121(unknown) = ^CallSideEffect : ~m108_118 +# 108| m108_122(unknown) = Chi : total:m108_118, partial:m108_121 +#-----| v0_40(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m108_122 +#-----| Goto -> Block 6 destructors_for_temps.cpp: # 9| void ClassWithConstructor::ClassWithConstructor(ClassWithConstructor&&) diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected index b93c7d2649f8..8f472b49f273 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected @@ -28,4 +28,26 @@ nonUniqueEnclosingIRFunction fieldAddressOnNonPointer thisArgumentIsNonPointer nonUniqueIRVariable +| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | +| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | +| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | +| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | +| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | +| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | +| coroutines.cpp:96:3:96:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | +| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | +| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | +| coroutines.cpp:100:3:100:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | +| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | +| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | +| coroutines.cpp:104:3:104:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | +| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | +| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | +| coroutines.cpp:109:3:109:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected index b93c7d2649f8..8f472b49f273 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected @@ -28,4 +28,26 @@ nonUniqueEnclosingIRFunction fieldAddressOnNonPointer thisArgumentIsNonPointer nonUniqueIRVariable +| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | +| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | +| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | +| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | +| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | +| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | +| coroutines.cpp:96:3:96:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | +| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | +| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | +| coroutines.cpp:100:3:100:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | +| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | +| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | +| coroutines.cpp:104:3:104:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | +| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | +| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | +| coroutines.cpp:109:3:109:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected index 0675b7bbbd6c..11dd363ebc52 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected @@ -6,54 +6,6 @@ missingOperandType duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor -| coroutines.cpp:87:20:88:11 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| coroutines.cpp:87:20:88:11 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| coroutines.cpp:91:21:92:11 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| coroutines.cpp:91:21:92:11 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| coroutines.cpp:95:20:96:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:95:20:96:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:96:13:96:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:99:21:100:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:99:21:100:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:100:13:100:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:103:20:104:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:103:20:104:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:104:13:104:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:108:21:109:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| coroutines.cpp:108:21:109:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| coroutines.cpp:109:13:109:13 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| file://:0:0:0:0 | CopyValue: ... , ... | Instruction 'CopyValue: ... , ...' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| file://:0:0:0:0 | CopyValue: ... , ... | Instruction 'CopyValue: ... , ...' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| file://:0:0:0:0 | CopyValue: ... , ... | Instruction 'CopyValue: ... , ...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| file://:0:0:0:0 | CopyValue: ... , ... | Instruction 'CopyValue: ... , ...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| file://:0:0:0:0 | CopyValue: ... , ... | Instruction 'CopyValue: ... , ...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| file://:0:0:0:0 | CopyValue: ... , ... | Instruction 'CopyValue: ... , ...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| file://:0:0:0:0 | IndirectReadSideEffect: (const suspend_always)... | Instruction 'IndirectReadSideEffect: (const suspend_always)...' has no successors in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | ambiguousSuccessors unexplainedLoop unnecessaryPhiInstruction @@ -68,38 +20,6 @@ multipleIRTypes lostReachability backEdgeCountMismatch useNotDominatedByDefinition -| coroutines.cpp:87:20:88:11 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| coroutines.cpp:87:20:88:11 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| coroutines.cpp:87:20:88:11 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| coroutines.cpp:87:20:88:11 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | -| coroutines.cpp:91:21:92:11 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| coroutines.cpp:91:21:92:11 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| coroutines.cpp:91:21:92:11 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| coroutines.cpp:91:21:92:11 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | -| coroutines.cpp:95:20:96:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:95:20:96:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:95:20:96:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:95:20:96:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:96:13:96:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:96:13:96:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | -| coroutines.cpp:99:21:100:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:99:21:100:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:99:21:100:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:99:21:100:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:100:13:100:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:100:13:100:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | -| coroutines.cpp:103:20:104:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:103:20:104:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:103:20:104:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:103:20:104:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:104:13:104:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:104:13:104:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | -| coroutines.cpp:108:21:109:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| coroutines.cpp:108:21:109:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| coroutines.cpp:108:21:109:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| coroutines.cpp:108:21:109:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| coroutines.cpp:109:13:109:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | -| coroutines.cpp:109:13:109:13 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | | ir.cpp:1535:8:1535:8 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | ir.cpp:1535:8:1535:8 | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | | try_except.c:13:13:13:13 | Left | Operand 'Left' is not dominated by its definition in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() | | try_except.c:13:13:13:13 | Left | Operand 'Left' is not dominated by its definition in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() | diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index 5fc35c05d031..7c0a525d0ca0 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -727,1286 +727,1302 @@ complex.c: coroutines.cpp: # 87| co_returnable_void co_return_void() # 87| Block 0 -# 87| v87_1(void) = EnterFunction : -# 87| mu87_2(unknown) = AliasedDefinition : -# 87| mu87_3(unknown) = InitializeNonLocal : -# 87| r87_4(glval) = VariableAddress[(unnamed local variable)] : -# 87| mu87_5(promise_type) = Uninitialized[(unnamed local variable)] : &:r87_4 -# 87| r87_6(glval) = VariableAddress[(unnamed local variable)] : -# 87| r87_7(glval) = FunctionAddress[initial_suspend] : -# 87| r87_8(suspend_always) = Call[initial_suspend] : func:r87_7, this:r87_6 -# 87| mu87_9(unknown) = ^CallSideEffect : ~m? -# 87| v87_10(void) = ^IndirectReadSideEffect[-1] : &:r87_6, ~m? -# 87| mu87_11(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_6 -#-----| v0_1(void) = CopyValue : r87_8 -#-----| r0_2(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_3(glval) = FunctionAddress[return_void] : -#-----| v0_4(void) = Call[return_void] : func:r0_3, this:r0_2 -#-----| mu0_5(unknown) = ^CallSideEffect : ~m? -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? -#-----| mu0_7(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_2 -# 88| v88_1(void) = NoOp : -#-----| v0_8(void) = NoOp : -#-----| Goto (back edge) -> Block 12 +# 87| v87_1(void) = EnterFunction : +# 87| mu87_2(unknown) = AliasedDefinition : +# 87| mu87_3(unknown) = InitializeNonLocal : +# 87| r87_4(glval) = VariableAddress[(unnamed local variable)] : +# 87| mu87_5(promise_type) = Uninitialized[(unnamed local variable)] : &:r87_4 +# 87| r87_6(glval) = VariableAddress[(unnamed local variable)] : +# 87| r87_7(glval) = FunctionAddress[initial_suspend] : +# 87| r87_8(suspend_always) = Call[initial_suspend] : func:r87_7, this:r87_6 +# 87| mu87_9(unknown) = ^CallSideEffect : ~m? +# 87| v87_10(void) = ^IndirectReadSideEffect[-1] : &:r87_6, ~m? +# 87| mu87_11(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_6 +#-----| r0_1(glval) = VariableAddress[#temp0:0] : +# 87| r87_12(glval) = VariableAddress[#temp87:20] : +# 87| r87_13(glval) = VariableAddress[(unnamed local variable)] : +# 87| r87_14(glval) = FunctionAddress[initial_suspend] : +# 87| r87_15(suspend_always) = Call[initial_suspend] : func:r87_14, this:r87_13 +# 87| mu87_16(unknown) = ^CallSideEffect : ~m? +# 87| v87_17(void) = ^IndirectReadSideEffect[-1] : &:r87_13, ~m? +# 87| mu87_18(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_13 +# 87| mu87_19(suspend_always) = Store[#temp87:20] : &:r87_12, r87_15 +# 87| r87_20(suspend_always *) = CopyValue : r87_12 +# 87| mu87_21(suspend_always *) = Store[#temp0:0] : &:r0_1, r87_20 +#-----| r0_2(suspend_always *) = Load[#temp0:0] : &:r0_1, ~m? +# 87| r87_22(glval) = CopyValue : r0_2 +# 87| r87_23(glval) = Convert : r87_22 +# 87| r87_24(glval) = FunctionAddress[await_ready] : +# 87| r87_25(bool) = Call[await_ready] : func:r87_24, this:r87_23 +# 87| mu87_26(unknown) = ^CallSideEffect : ~m? +# 87| v87_27(void) = ^IndirectReadSideEffect[-1] : &:r87_23, ~m? +#-----| v0_3(void) = ConditionalBranch : r87_25 +#-----| False -> Block 4 +#-----| True -> Block 3 # 87| Block 1 -# 87| v87_12(void) = AliasedUse : ~m? -# 87| v87_13(void) = ExitFunction : +# 87| v87_28(void) = AliasedUse : ~m? +# 87| v87_29(void) = ExitFunction : # 87| Block 2 -# 87| v87_14(void) = Unwind : +# 87| v87_30(void) = Unwind : #-----| Goto -> Block 1 #-----| Block 3 -#-----| r0_9(bool) = Constant[1] : -#-----| r0_10(glval) = VariableAddress : -#-----| mu0_11(bool) = Store[?] : &:r0_10, r0_9 -# 87| r87_21(suspend_always *) = CopyValue : r87_73 -# 87| r87_25(glval) = CopyValue : r87_21 -#-----| r0_15(glval) = Convert : r87_25 -# 87| r87_32(glval) = FunctionAddress[await_resume] : -# 87| v87_35(void) = Call[await_resume] : func:r87_32, this:r0_15 -# 87| mu87_38(unknown) = ^CallSideEffect : ~m? -#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? -#-----| v0_18(void) = CopyValue : v87_35 - -# 87| Block 3 -# 87| r87_15(suspend_always *) = CopyValue : r87_73 -# 87| r87_18(glval) = CopyValue : r87_15 -#-----| r0_11(glval) = Convert : r87_18 -# 87| r87_21(glval) = FunctionAddress[await_suspend] : -# 87| r87_25(glval>) = VariableAddress[#temp87:20] : -# 87| mu87_29(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_25 -# 87| r87_32(glval) = FunctionAddress[coroutine_handle] : -# 87| r87_35(glval>) = VariableAddress : -# 87| r87_38(glval>) = Convert : r87_35 -# 87| r87_41(coroutine_handle &) = CopyValue : r87_38 -# 87| v87_43(void) = Call[coroutine_handle] : func:r87_32, this:r87_25, 0:r87_41 -# 87| mu87_45(unknown) = ^CallSideEffect : ~m? -# 87| v87_47(void) = ^BufferReadSideEffect[0] : &:r87_41, ~m? -# 87| mu87_49(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_25 -# 87| r87_51(coroutine_handle) = Load[#temp87:20] : &:r87_25, ~m? -# 87| v87_53(void) = Call[await_suspend] : func:r87_21, this:r0_11, 0:r87_51 -# 87| mu87_55(unknown) = ^CallSideEffect : ~m? -#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? - -# 87| Block 3 -# 87| r87_15(suspend_always *) = CopyValue : r87_73 -# 87| r87_18(glval) = CopyValue : r87_15 -#-----| r0_11(glval) = Convert : r87_18 -# 87| r87_21(glval) = FunctionAddress[await_resume] : -# 87| v87_25(void) = Call[await_resume] : func:r87_21, this:r0_11 -# 87| mu87_29(unknown) = ^CallSideEffect : ~m? -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? - -# 87| Block 3 -# 87| r87_15(suspend_always *) = CopyValue : r87_73 -# 87| r87_18(glval) = CopyValue : r87_15 -#-----| r0_11(glval) = Convert : r87_18 -# 87| r87_21(glval) = FunctionAddress[await_suspend] : -# 87| r87_25(glval>) = VariableAddress[#temp87:20] : -# 87| mu87_29(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_25 -# 87| r87_32(glval) = FunctionAddress[coroutine_handle] : -# 87| r87_35(glval>) = VariableAddress : -# 87| r87_38(glval>) = Convert : r87_35 -# 87| r87_41(coroutine_handle &) = CopyValue : r87_38 -# 87| v87_43(void) = Call[coroutine_handle] : func:r87_32, this:r87_25, 0:r87_41 -# 87| mu87_45(unknown) = ^CallSideEffect : ~m? -# 87| v87_47(void) = ^BufferReadSideEffect[0] : &:r87_41, ~m? -# 87| mu87_49(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_25 -# 87| r87_51(coroutine_handle) = Load[#temp87:20] : &:r87_25, ~m? -# 87| v87_53(void) = Call[await_suspend] : func:r87_21, this:r0_11, 0:r87_51 -# 87| mu87_55(unknown) = ^CallSideEffect : ~m? -#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? - -#-----| Block 7 -#-----| r0_21(glval) = VariableAddress[#temp0:0] : -# 87| r87_57(glval) = VariableAddress[#temp87:20] : -# 87| r87_59(glval) = VariableAddress[(unnamed local variable)] : -# 87| r87_61(glval) = FunctionAddress[initial_suspend] : -# 87| r87_63(suspend_always) = Call[initial_suspend] : func:r87_61, this:r87_59 -# 87| mu87_65(unknown) = ^CallSideEffect : ~m? -# 87| v87_67(void) = ^IndirectReadSideEffect[-1] : &:r87_59, ~m? -# 87| mu87_69(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_59 -# 87| mu87_71(suspend_always) = Store[#temp87:20] : &:r87_57, r87_63 -# 87| r87_73(suspend_always *) = CopyValue : r87_57 -# 87| mu87_75(suspend_always *) = Store[#temp0:0] : &:r0_21, r87_73 -#-----| r0_23(suspend_always *) = Load[#temp0:0] : &:r0_21, ~m? -# 87| r87_77(glval) = CopyValue : r0_23 -# 87| r87_79(glval) = Convert : r87_77 -# 87| r87_81(glval) = FunctionAddress[await_ready] : -# 87| r87_83(bool) = Call[await_ready] : func:r87_81, this:r87_79 -# 87| mu87_85(unknown) = ^CallSideEffect : ~m? -# 87| v87_87(void) = ^IndirectReadSideEffect[-1] : &:r87_79, ~m? +#-----| r0_4(bool) = Constant[1] : +#-----| r0_5(glval) = VariableAddress : +#-----| mu0_6(bool) = Store[?] : &:r0_5, r0_4 +# 87| r87_31(suspend_always *) = CopyValue : r87_20 +# 87| r87_32(glval) = CopyValue : r87_31 +#-----| r0_7(glval) = Convert : r87_32 +# 87| r87_33(glval) = FunctionAddress[await_resume] : +# 87| v87_34(void) = Call[await_resume] : func:r87_33, this:r0_7 +# 87| mu87_35(unknown) = ^CallSideEffect : ~m? +#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? +#-----| v0_9(void) = CopyValue : v87_34 +#-----| r0_10(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_11(glval) = FunctionAddress[return_void] : +#-----| v0_12(void) = Call[return_void] : func:r0_11, this:r0_10 +#-----| mu0_13(unknown) = ^CallSideEffect : ~m? +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_10, ~m? +#-----| mu0_15(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_10 +# 88| v88_1(void) = NoOp : +#-----| v0_16(void) = NoOp : +#-----| Goto (back edge) -> Block 8 + +# 87| Block 4 +# 87| r87_36(suspend_always *) = CopyValue : r87_20 +# 87| r87_37(glval) = CopyValue : r87_36 +#-----| r0_17(glval) = Convert : r87_37 +# 87| r87_38(glval) = FunctionAddress[await_suspend] : +# 87| r87_39(glval>) = VariableAddress[#temp87:20] : +# 87| mu87_40(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_39 +# 87| r87_41(glval) = FunctionAddress[coroutine_handle] : +# 87| r87_42(glval>) = VariableAddress : +# 87| r87_43(glval>) = Convert : r87_42 +# 87| r87_44(coroutine_handle &) = CopyValue : r87_43 +# 87| v87_45(void) = Call[coroutine_handle] : func:r87_41, this:r87_39, 0:r87_44 +# 87| mu87_46(unknown) = ^CallSideEffect : ~m? +# 87| v87_47(void) = ^BufferReadSideEffect[0] : &:r87_44, ~m? +# 87| mu87_48(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_39 +# 87| r87_49(coroutine_handle) = Load[#temp87:20] : &:r87_39, ~m? +# 87| v87_50(void) = Call[await_suspend] : func:r87_38, this:r0_17, 0:r87_49 +# 87| mu87_51(unknown) = ^CallSideEffect : ~m? +#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, ~m? +#-----| Goto -> Block 3 -#-----| Block 7 -#-----| r0_21(glval) = VariableAddress[#temp0:0] : -# 87| r87_57(glval) = VariableAddress[#temp87:20] : -# 87| r87_59(glval) = VariableAddress[(unnamed local variable)] : -# 87| r87_61(glval) = FunctionAddress[final_suspend] : -# 87| r87_63(suspend_always) = Call[final_suspend] : func:r87_61, this:r87_59 -# 87| mu87_65(unknown) = ^CallSideEffect : ~m? -# 87| v87_67(void) = ^IndirectReadSideEffect[-1] : &:r87_59, ~m? -# 87| mu87_69(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_59 -# 87| mu87_71(suspend_always) = Store[#temp87:20] : &:r87_57, r87_63 -# 87| r87_73(suspend_always *) = CopyValue : r87_57 -# 87| mu87_75(suspend_always *) = Store[#temp0:0] : &:r0_21, r87_73 -#-----| r0_23(suspend_always *) = Load[#temp0:0] : &:r0_21, ~m? -# 87| r87_77(glval) = CopyValue : r0_23 -# 87| r87_79(glval) = Convert : r87_77 -# 87| r87_81(glval) = FunctionAddress[await_ready] : -# 87| r87_83(bool) = Call[await_ready] : func:r87_81, this:r87_79 -# 87| mu87_85(unknown) = ^CallSideEffect : ~m? -# 87| v87_87(void) = ^IndirectReadSideEffect[-1] : &:r87_79, ~m? - -#-----| Block 9 -#-----| v0_25(void) = CatchAny : -#-----| r0_26(glval) = VariableAddress : -#-----| r0_27(bool) = Load[?] : &:r0_26, ~m? -#-----| r0_28(bool) = LogicalNot : r0_27 -#-----| v0_29(void) = ConditionalBranch : r0_28 -#-----| False -> Block 11 -#-----| True -> Block 10 +#-----| Block 5 +#-----| v0_19(void) = CatchAny : +#-----| r0_20(glval) = VariableAddress : +#-----| r0_21(bool) = Load[?] : &:r0_20, ~m? +#-----| r0_22(bool) = LogicalNot : r0_21 +#-----| v0_23(void) = ConditionalBranch : r0_22 +#-----| False -> Block 7 +#-----| True -> Block 6 -#-----| Block 10 -#-----| v0_30(void) = ReThrow : +#-----| Block 6 +#-----| v0_24(void) = ReThrow : #-----| Exception -> Block 2 -# 87| Block 11 -# 87| r87_89(glval) = VariableAddress[(unnamed local variable)] : -# 87| r87_90(glval) = FunctionAddress[unhandled_exception] : -# 87| v87_91(void) = Call[unhandled_exception] : func:r87_90, this:r87_89 -# 87| mu87_92(unknown) = ^CallSideEffect : ~m? -# 87| v87_93(void) = ^IndirectReadSideEffect[-1] : &:r87_89, ~m? -# 87| mu87_94(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_89 -#-----| Goto -> Block 12 +# 87| Block 7 +# 87| r87_52(glval) = VariableAddress[(unnamed local variable)] : +# 87| r87_53(glval) = FunctionAddress[unhandled_exception] : +# 87| v87_54(void) = Call[unhandled_exception] : func:r87_53, this:r87_52 +# 87| mu87_55(unknown) = ^CallSideEffect : ~m? +# 87| v87_56(void) = ^IndirectReadSideEffect[-1] : &:r87_52, ~m? +# 87| mu87_57(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_52 +#-----| Goto -> Block 8 -#-----| Block 12 -#-----| v0_31(void) = NoOp : -# 87| r87_95(glval) = VariableAddress[(unnamed local variable)] : -# 87| r87_96(glval) = FunctionAddress[final_suspend] : -# 87| r87_97(suspend_always) = Call[final_suspend] : func:r87_96, this:r87_95 -# 87| mu87_98(unknown) = ^CallSideEffect : ~m? -# 87| v87_99(void) = ^IndirectReadSideEffect[-1] : &:r87_95, ~m? -# 87| mu87_100(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_95 -#-----| v0_32(void) = CopyValue : r87_97 -# 87| r87_101(glval) = VariableAddress[#return] : -# 87| v87_102(void) = ReturnValue : &:r87_101, ~m? +#-----| Block 8 +#-----| v0_25(void) = NoOp : +# 87| r87_58(glval) = VariableAddress[(unnamed local variable)] : +# 87| r87_59(glval) = FunctionAddress[final_suspend] : +# 87| r87_60(suspend_always) = Call[final_suspend] : func:r87_59, this:r87_58 +# 87| mu87_61(unknown) = ^CallSideEffect : ~m? +# 87| v87_62(void) = ^IndirectReadSideEffect[-1] : &:r87_58, ~m? +# 87| mu87_63(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_58 +#-----| r0_26(glval) = VariableAddress[#temp0:0] : +# 87| r87_64(glval) = VariableAddress[#temp87:20] : +# 87| r87_65(glval) = VariableAddress[(unnamed local variable)] : +# 87| r87_66(glval) = FunctionAddress[final_suspend] : +# 87| r87_67(suspend_always) = Call[final_suspend] : func:r87_66, this:r87_65 +# 87| mu87_68(unknown) = ^CallSideEffect : ~m? +# 87| v87_69(void) = ^IndirectReadSideEffect[-1] : &:r87_65, ~m? +# 87| mu87_70(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r87_65 +# 87| mu87_71(suspend_always) = Store[#temp87:20] : &:r87_64, r87_67 +# 87| r87_72(suspend_always *) = CopyValue : r87_64 +# 87| mu87_73(suspend_always *) = Store[#temp0:0] : &:r0_26, r87_72 +#-----| r0_27(suspend_always *) = Load[#temp0:0] : &:r0_26, ~m? +# 87| r87_74(glval) = CopyValue : r0_27 +# 87| r87_75(glval) = Convert : r87_74 +# 87| r87_76(glval) = FunctionAddress[await_ready] : +# 87| r87_77(bool) = Call[await_ready] : func:r87_76, this:r87_75 +# 87| mu87_78(unknown) = ^CallSideEffect : ~m? +# 87| v87_79(void) = ^IndirectReadSideEffect[-1] : &:r87_75, ~m? +#-----| v0_28(void) = ConditionalBranch : r87_77 +#-----| False -> Block 10 +#-----| True -> Block 9 + +# 87| Block 9 +# 87| r87_80(suspend_always *) = CopyValue : r87_72 +# 87| r87_81(glval) = CopyValue : r87_80 +#-----| r0_29(glval) = Convert : r87_81 +# 87| r87_82(glval) = FunctionAddress[await_resume] : +# 87| v87_83(void) = Call[await_resume] : func:r87_82, this:r0_29 +# 87| mu87_84(unknown) = ^CallSideEffect : ~m? +#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_29, ~m? +# 87| r87_85(glval) = VariableAddress[#return] : +# 87| v87_86(void) = ReturnValue : &:r87_85, ~m? #-----| Goto -> Block 1 +# 87| Block 10 +# 87| r87_87(suspend_always *) = CopyValue : r87_72 +# 87| r87_88(glval) = CopyValue : r87_87 +#-----| r0_31(glval) = Convert : r87_88 +# 87| r87_89(glval) = FunctionAddress[await_suspend] : +# 87| r87_90(glval>) = VariableAddress[#temp87:20] : +# 87| mu87_91(coroutine_handle) = Uninitialized[#temp87:20] : &:r87_90 +# 87| r87_92(glval) = FunctionAddress[coroutine_handle] : +# 87| r87_93(glval>) = VariableAddress : +# 87| r87_94(glval>) = Convert : r87_93 +# 87| r87_95(coroutine_handle &) = CopyValue : r87_94 +# 87| v87_96(void) = Call[coroutine_handle] : func:r87_92, this:r87_90, 0:r87_95 +# 87| mu87_97(unknown) = ^CallSideEffect : ~m? +# 87| v87_98(void) = ^BufferReadSideEffect[0] : &:r87_95, ~m? +# 87| mu87_99(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r87_90 +# 87| r87_100(coroutine_handle) = Load[#temp87:20] : &:r87_90, ~m? +# 87| v87_101(void) = Call[await_suspend] : func:r87_89, this:r0_31, 0:r87_100 +# 87| mu87_102(unknown) = ^CallSideEffect : ~m? +#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m? +#-----| Goto -> Block 9 + # 91| co_returnable_value co_return_int(int) # 91| Block 0 -# 91| v91_1(void) = EnterFunction : -# 91| mu91_2(unknown) = AliasedDefinition : -# 91| mu91_3(unknown) = InitializeNonLocal : -# 91| r91_4(glval) = VariableAddress[i] : -# 91| mu91_5(int) = InitializeParameter[i] : &:r91_4 -#-----| r0_1(glval) = VariableAddress[i] : -#-----| r0_2(glval) = VariableAddress[i] : -#-----| r0_3(int) = Load[i] : &:r0_2, ~m? -#-----| mu0_4(int) = Store[i] : &:r0_1, r0_3 -# 91| r91_6(glval) = VariableAddress[(unnamed local variable)] : -# 91| mu91_7(promise_type) = Uninitialized[(unnamed local variable)] : &:r91_6 -# 91| r91_8(glval) = VariableAddress[(unnamed local variable)] : -# 91| r91_9(glval) = FunctionAddress[initial_suspend] : -# 91| r91_10(suspend_always) = Call[initial_suspend] : func:r91_9, this:r91_8 -# 91| mu91_11(unknown) = ^CallSideEffect : ~m? -# 91| v91_12(void) = ^IndirectReadSideEffect[-1] : &:r91_8, ~m? -# 91| mu91_13(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_8 -#-----| v0_5(void) = CopyValue : r91_10 -#-----| r0_6(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_7(glval) = FunctionAddress[return_value] : -# 92| r92_1(glval) = VariableAddress[i] : -# 92| r92_2(int) = Load[i] : &:r92_1, ~m? -#-----| v0_8(void) = Call[return_value] : func:r0_7, this:r0_6, 0:r92_2 -#-----| mu0_9(unknown) = ^CallSideEffect : ~m? -#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_6, ~m? -#-----| mu0_11(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 -# 92| v92_3(void) = NoOp : -#-----| v0_12(void) = NoOp : -#-----| Goto (back edge) -> Block 12 +# 91| v91_1(void) = EnterFunction : +# 91| mu91_2(unknown) = AliasedDefinition : +# 91| mu91_3(unknown) = InitializeNonLocal : +# 91| r91_4(glval) = VariableAddress[i] : +# 91| mu91_5(int) = InitializeParameter[i] : &:r91_4 +#-----| r0_1(glval) = VariableAddress[i] : +#-----| r0_2(glval) = VariableAddress[i] : +#-----| r0_3(int) = Load[i] : &:r0_2, ~m? +#-----| mu0_4(int) = Store[i] : &:r0_1, r0_3 +# 91| r91_6(glval) = VariableAddress[(unnamed local variable)] : +# 91| mu91_7(promise_type) = Uninitialized[(unnamed local variable)] : &:r91_6 +# 91| r91_8(glval) = VariableAddress[(unnamed local variable)] : +# 91| r91_9(glval) = FunctionAddress[initial_suspend] : +# 91| r91_10(suspend_always) = Call[initial_suspend] : func:r91_9, this:r91_8 +# 91| mu91_11(unknown) = ^CallSideEffect : ~m? +# 91| v91_12(void) = ^IndirectReadSideEffect[-1] : &:r91_8, ~m? +# 91| mu91_13(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_8 +#-----| r0_5(glval) = VariableAddress[#temp0:0] : +# 91| r91_14(glval) = VariableAddress[#temp91:21] : +# 91| r91_15(glval) = VariableAddress[(unnamed local variable)] : +# 91| r91_16(glval) = FunctionAddress[initial_suspend] : +# 91| r91_17(suspend_always) = Call[initial_suspend] : func:r91_16, this:r91_15 +# 91| mu91_18(unknown) = ^CallSideEffect : ~m? +# 91| v91_19(void) = ^IndirectReadSideEffect[-1] : &:r91_15, ~m? +# 91| mu91_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_15 +# 91| mu91_21(suspend_always) = Store[#temp91:21] : &:r91_14, r91_17 +# 91| r91_22(suspend_always *) = CopyValue : r91_14 +# 91| mu91_23(suspend_always *) = Store[#temp0:0] : &:r0_5, r91_22 +#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, ~m? +# 91| r91_24(glval) = CopyValue : r0_6 +# 91| r91_25(glval) = Convert : r91_24 +# 91| r91_26(glval) = FunctionAddress[await_ready] : +# 91| r91_27(bool) = Call[await_ready] : func:r91_26, this:r91_25 +# 91| mu91_28(unknown) = ^CallSideEffect : ~m? +# 91| v91_29(void) = ^IndirectReadSideEffect[-1] : &:r91_25, ~m? +#-----| v0_7(void) = ConditionalBranch : r91_27 +#-----| False -> Block 4 +#-----| True -> Block 3 # 91| Block 1 -# 91| v91_14(void) = AliasedUse : ~m? -# 91| v91_15(void) = ExitFunction : +# 91| v91_30(void) = AliasedUse : ~m? +# 91| v91_31(void) = ExitFunction : # 91| Block 2 -# 91| v91_16(void) = Unwind : +# 91| v91_32(void) = Unwind : #-----| Goto -> Block 1 #-----| Block 3 -#-----| r0_13(bool) = Constant[1] : -#-----| r0_14(glval) = VariableAddress : -#-----| mu0_15(bool) = Store[?] : &:r0_14, r0_13 -# 91| r91_23(suspend_always *) = CopyValue : r91_75 -# 91| r91_27(glval) = CopyValue : r91_23 -#-----| r0_19(glval) = Convert : r91_27 -# 91| r91_34(glval) = FunctionAddress[await_resume] : -# 91| v91_37(void) = Call[await_resume] : func:r91_34, this:r0_19 -# 91| mu91_40(unknown) = ^CallSideEffect : ~m? -#-----| v0_21(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m? -#-----| v0_22(void) = CopyValue : v91_37 - -# 91| Block 3 -# 91| r91_17(suspend_always *) = CopyValue : r91_75 -# 91| r91_20(glval) = CopyValue : r91_17 -#-----| r0_15(glval) = Convert : r91_20 -# 91| r91_23(glval) = FunctionAddress[await_suspend] : -# 91| r91_27(glval>) = VariableAddress[#temp91:21] : -# 91| mu91_31(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_27 -# 91| r91_34(glval) = FunctionAddress[coroutine_handle] : -# 91| r91_37(glval>) = VariableAddress : -# 91| r91_40(glval>) = Convert : r91_37 -# 91| r91_43(coroutine_handle &) = CopyValue : r91_40 -# 91| v91_45(void) = Call[coroutine_handle] : func:r91_34, this:r91_27, 0:r91_43 -# 91| mu91_47(unknown) = ^CallSideEffect : ~m? -# 91| v91_49(void) = ^BufferReadSideEffect[0] : &:r91_43, ~m? -# 91| mu91_51(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_27 -# 91| r91_53(coroutine_handle) = Load[#temp91:21] : &:r91_27, ~m? -# 91| v91_55(void) = Call[await_suspend] : func:r91_23, this:r0_15, 0:r91_53 -# 91| mu91_57(unknown) = ^CallSideEffect : ~m? -#-----| v0_23(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -# 91| Block 3 -# 91| r91_17(suspend_always *) = CopyValue : r91_75 -# 91| r91_20(glval) = CopyValue : r91_17 -#-----| r0_15(glval) = Convert : r91_20 -# 91| r91_23(glval) = FunctionAddress[await_resume] : -# 91| v91_27(void) = Call[await_resume] : func:r91_23, this:r0_15 -# 91| mu91_31(unknown) = ^CallSideEffect : ~m? -#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -# 91| Block 3 -# 91| r91_17(suspend_always *) = CopyValue : r91_75 -# 91| r91_20(glval) = CopyValue : r91_17 -#-----| r0_15(glval) = Convert : r91_20 -# 91| r91_23(glval) = FunctionAddress[await_suspend] : -# 91| r91_27(glval>) = VariableAddress[#temp91:21] : -# 91| mu91_31(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_27 -# 91| r91_34(glval) = FunctionAddress[coroutine_handle] : -# 91| r91_37(glval>) = VariableAddress : -# 91| r91_40(glval>) = Convert : r91_37 -# 91| r91_43(coroutine_handle &) = CopyValue : r91_40 -# 91| v91_45(void) = Call[coroutine_handle] : func:r91_34, this:r91_27, 0:r91_43 -# 91| mu91_47(unknown) = ^CallSideEffect : ~m? -# 91| v91_49(void) = ^BufferReadSideEffect[0] : &:r91_43, ~m? -# 91| mu91_51(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_27 -# 91| r91_53(coroutine_handle) = Load[#temp91:21] : &:r91_27, ~m? -# 91| v91_55(void) = Call[await_suspend] : func:r91_23, this:r0_15, 0:r91_53 -# 91| mu91_57(unknown) = ^CallSideEffect : ~m? -#-----| v0_23(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -#-----| Block 7 -#-----| r0_25(glval) = VariableAddress[#temp0:0] : -# 91| r91_59(glval) = VariableAddress[#temp91:21] : -# 91| r91_61(glval) = VariableAddress[(unnamed local variable)] : -# 91| r91_63(glval) = FunctionAddress[initial_suspend] : -# 91| r91_65(suspend_always) = Call[initial_suspend] : func:r91_63, this:r91_61 -# 91| mu91_67(unknown) = ^CallSideEffect : ~m? -# 91| v91_69(void) = ^IndirectReadSideEffect[-1] : &:r91_61, ~m? -# 91| mu91_71(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_61 -# 91| mu91_73(suspend_always) = Store[#temp91:21] : &:r91_59, r91_65 -# 91| r91_75(suspend_always *) = CopyValue : r91_59 -# 91| mu91_77(suspend_always *) = Store[#temp0:0] : &:r0_25, r91_75 -#-----| r0_27(suspend_always *) = Load[#temp0:0] : &:r0_25, ~m? -# 91| r91_79(glval) = CopyValue : r0_27 -# 91| r91_81(glval) = Convert : r91_79 -# 91| r91_83(glval) = FunctionAddress[await_ready] : -# 91| r91_85(bool) = Call[await_ready] : func:r91_83, this:r91_81 -# 91| mu91_87(unknown) = ^CallSideEffect : ~m? -# 91| v91_89(void) = ^IndirectReadSideEffect[-1] : &:r91_81, ~m? +#-----| r0_8(bool) = Constant[1] : +#-----| r0_9(glval) = VariableAddress : +#-----| mu0_10(bool) = Store[?] : &:r0_9, r0_8 +# 91| r91_33(suspend_always *) = CopyValue : r91_22 +# 91| r91_34(glval) = CopyValue : r91_33 +#-----| r0_11(glval) = Convert : r91_34 +# 91| r91_35(glval) = FunctionAddress[await_resume] : +# 91| v91_36(void) = Call[await_resume] : func:r91_35, this:r0_11 +# 91| mu91_37(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? +#-----| v0_13(void) = CopyValue : v91_36 +#-----| r0_14(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_15(glval) = FunctionAddress[return_value] : +# 92| r92_1(glval) = VariableAddress[i] : +# 92| r92_2(int) = Load[i] : &:r92_1, ~m? +#-----| v0_16(void) = Call[return_value] : func:r0_15, this:r0_14, 0:r92_2 +#-----| mu0_17(unknown) = ^CallSideEffect : ~m? +#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_14, ~m? +#-----| mu0_19(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_14 +# 92| v92_3(void) = NoOp : +#-----| v0_20(void) = NoOp : +#-----| Goto (back edge) -> Block 8 + +# 91| Block 4 +# 91| r91_38(suspend_always *) = CopyValue : r91_22 +# 91| r91_39(glval) = CopyValue : r91_38 +#-----| r0_21(glval) = Convert : r91_39 +# 91| r91_40(glval) = FunctionAddress[await_suspend] : +# 91| r91_41(glval>) = VariableAddress[#temp91:21] : +# 91| mu91_42(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_41 +# 91| r91_43(glval) = FunctionAddress[coroutine_handle] : +# 91| r91_44(glval>) = VariableAddress : +# 91| r91_45(glval>) = Convert : r91_44 +# 91| r91_46(coroutine_handle &) = CopyValue : r91_45 +# 91| v91_47(void) = Call[coroutine_handle] : func:r91_43, this:r91_41, 0:r91_46 +# 91| mu91_48(unknown) = ^CallSideEffect : ~m? +# 91| v91_49(void) = ^BufferReadSideEffect[0] : &:r91_46, ~m? +# 91| mu91_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_41 +# 91| r91_51(coroutine_handle) = Load[#temp91:21] : &:r91_41, ~m? +# 91| v91_52(void) = Call[await_suspend] : func:r91_40, this:r0_21, 0:r91_51 +# 91| mu91_53(unknown) = ^CallSideEffect : ~m? +#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m? +#-----| Goto -> Block 3 -#-----| Block 7 -#-----| r0_25(glval) = VariableAddress[#temp0:0] : -# 91| r91_59(glval) = VariableAddress[#temp91:21] : -# 91| r91_61(glval) = VariableAddress[(unnamed local variable)] : -# 91| r91_63(glval) = FunctionAddress[final_suspend] : -# 91| r91_65(suspend_always) = Call[final_suspend] : func:r91_63, this:r91_61 -# 91| mu91_67(unknown) = ^CallSideEffect : ~m? -# 91| v91_69(void) = ^IndirectReadSideEffect[-1] : &:r91_61, ~m? -# 91| mu91_71(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_61 -# 91| mu91_73(suspend_always) = Store[#temp91:21] : &:r91_59, r91_65 -# 91| r91_75(suspend_always *) = CopyValue : r91_59 -# 91| mu91_77(suspend_always *) = Store[#temp0:0] : &:r0_25, r91_75 -#-----| r0_27(suspend_always *) = Load[#temp0:0] : &:r0_25, ~m? -# 91| r91_79(glval) = CopyValue : r0_27 -# 91| r91_81(glval) = Convert : r91_79 -# 91| r91_83(glval) = FunctionAddress[await_ready] : -# 91| r91_85(bool) = Call[await_ready] : func:r91_83, this:r91_81 -# 91| mu91_87(unknown) = ^CallSideEffect : ~m? -# 91| v91_89(void) = ^IndirectReadSideEffect[-1] : &:r91_81, ~m? - -#-----| Block 9 -#-----| v0_29(void) = CatchAny : -#-----| r0_30(glval) = VariableAddress : -#-----| r0_31(bool) = Load[?] : &:r0_30, ~m? -#-----| r0_32(bool) = LogicalNot : r0_31 -#-----| v0_33(void) = ConditionalBranch : r0_32 -#-----| False -> Block 11 -#-----| True -> Block 10 +#-----| Block 5 +#-----| v0_23(void) = CatchAny : +#-----| r0_24(glval) = VariableAddress : +#-----| r0_25(bool) = Load[?] : &:r0_24, ~m? +#-----| r0_26(bool) = LogicalNot : r0_25 +#-----| v0_27(void) = ConditionalBranch : r0_26 +#-----| False -> Block 7 +#-----| True -> Block 6 -#-----| Block 10 -#-----| v0_34(void) = ReThrow : +#-----| Block 6 +#-----| v0_28(void) = ReThrow : #-----| Exception -> Block 2 -# 91| Block 11 -# 91| r91_91(glval) = VariableAddress[(unnamed local variable)] : -# 91| r91_92(glval) = FunctionAddress[unhandled_exception] : -# 91| v91_93(void) = Call[unhandled_exception] : func:r91_92, this:r91_91 -# 91| mu91_94(unknown) = ^CallSideEffect : ~m? -# 91| v91_95(void) = ^IndirectReadSideEffect[-1] : &:r91_91, ~m? -# 91| mu91_96(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_91 -#-----| Goto -> Block 12 +# 91| Block 7 +# 91| r91_54(glval) = VariableAddress[(unnamed local variable)] : +# 91| r91_55(glval) = FunctionAddress[unhandled_exception] : +# 91| v91_56(void) = Call[unhandled_exception] : func:r91_55, this:r91_54 +# 91| mu91_57(unknown) = ^CallSideEffect : ~m? +# 91| v91_58(void) = ^IndirectReadSideEffect[-1] : &:r91_54, ~m? +# 91| mu91_59(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_54 +#-----| Goto -> Block 8 -#-----| Block 12 -#-----| v0_35(void) = NoOp : -# 91| r91_97(glval) = VariableAddress[(unnamed local variable)] : -# 91| r91_98(glval) = FunctionAddress[final_suspend] : -# 91| r91_99(suspend_always) = Call[final_suspend] : func:r91_98, this:r91_97 -# 91| mu91_100(unknown) = ^CallSideEffect : ~m? -# 91| v91_101(void) = ^IndirectReadSideEffect[-1] : &:r91_97, ~m? -# 91| mu91_102(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_97 -#-----| v0_36(void) = CopyValue : r91_99 -# 91| r91_103(glval) = VariableAddress[#return] : -# 91| v91_104(void) = ReturnValue : &:r91_103, ~m? +#-----| Block 8 +#-----| v0_29(void) = NoOp : +# 91| r91_60(glval) = VariableAddress[(unnamed local variable)] : +# 91| r91_61(glval) = FunctionAddress[final_suspend] : +# 91| r91_62(suspend_always) = Call[final_suspend] : func:r91_61, this:r91_60 +# 91| mu91_63(unknown) = ^CallSideEffect : ~m? +# 91| v91_64(void) = ^IndirectReadSideEffect[-1] : &:r91_60, ~m? +# 91| mu91_65(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_60 +#-----| r0_30(glval) = VariableAddress[#temp0:0] : +# 91| r91_66(glval) = VariableAddress[#temp91:21] : +# 91| r91_67(glval) = VariableAddress[(unnamed local variable)] : +# 91| r91_68(glval) = FunctionAddress[final_suspend] : +# 91| r91_69(suspend_always) = Call[final_suspend] : func:r91_68, this:r91_67 +# 91| mu91_70(unknown) = ^CallSideEffect : ~m? +# 91| v91_71(void) = ^IndirectReadSideEffect[-1] : &:r91_67, ~m? +# 91| mu91_72(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r91_67 +# 91| mu91_73(suspend_always) = Store[#temp91:21] : &:r91_66, r91_69 +# 91| r91_74(suspend_always *) = CopyValue : r91_66 +# 91| mu91_75(suspend_always *) = Store[#temp0:0] : &:r0_30, r91_74 +#-----| r0_31(suspend_always *) = Load[#temp0:0] : &:r0_30, ~m? +# 91| r91_76(glval) = CopyValue : r0_31 +# 91| r91_77(glval) = Convert : r91_76 +# 91| r91_78(glval) = FunctionAddress[await_ready] : +# 91| r91_79(bool) = Call[await_ready] : func:r91_78, this:r91_77 +# 91| mu91_80(unknown) = ^CallSideEffect : ~m? +# 91| v91_81(void) = ^IndirectReadSideEffect[-1] : &:r91_77, ~m? +#-----| v0_32(void) = ConditionalBranch : r91_79 +#-----| False -> Block 10 +#-----| True -> Block 9 + +# 91| Block 9 +# 91| r91_82(suspend_always *) = CopyValue : r91_74 +# 91| r91_83(glval) = CopyValue : r91_82 +#-----| r0_33(glval) = Convert : r91_83 +# 91| r91_84(glval) = FunctionAddress[await_resume] : +# 91| v91_85(void) = Call[await_resume] : func:r91_84, this:r0_33 +# 91| mu91_86(unknown) = ^CallSideEffect : ~m? +#-----| v0_34(void) = ^IndirectReadSideEffect[-1] : &:r0_33, ~m? +# 91| r91_87(glval) = VariableAddress[#return] : +# 91| v91_88(void) = ReturnValue : &:r91_87, ~m? #-----| Goto -> Block 1 +# 91| Block 10 +# 91| r91_89(suspend_always *) = CopyValue : r91_74 +# 91| r91_90(glval) = CopyValue : r91_89 +#-----| r0_35(glval) = Convert : r91_90 +# 91| r91_91(glval) = FunctionAddress[await_suspend] : +# 91| r91_92(glval>) = VariableAddress[#temp91:21] : +# 91| mu91_93(coroutine_handle) = Uninitialized[#temp91:21] : &:r91_92 +# 91| r91_94(glval) = FunctionAddress[coroutine_handle] : +# 91| r91_95(glval>) = VariableAddress : +# 91| r91_96(glval>) = Convert : r91_95 +# 91| r91_97(coroutine_handle &) = CopyValue : r91_96 +# 91| v91_98(void) = Call[coroutine_handle] : func:r91_94, this:r91_92, 0:r91_97 +# 91| mu91_99(unknown) = ^CallSideEffect : ~m? +# 91| v91_100(void) = ^BufferReadSideEffect[0] : &:r91_97, ~m? +# 91| mu91_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r91_92 +# 91| r91_102(coroutine_handle) = Load[#temp91:21] : &:r91_92, ~m? +# 91| v91_103(void) = Call[await_suspend] : func:r91_91, this:r0_35, 0:r91_102 +# 91| mu91_104(unknown) = ^CallSideEffect : ~m? +#-----| v0_36(void) = ^IndirectReadSideEffect[-1] : &:r0_35, ~m? +#-----| Goto -> Block 9 + # 95| co_returnable_void co_yield_value_void(int) # 95| Block 0 -# 95| v95_1(void) = EnterFunction : -# 95| mu95_2(unknown) = AliasedDefinition : -# 95| mu95_3(unknown) = InitializeNonLocal : -# 95| r95_4(glval) = VariableAddress[i] : -# 95| mu95_5(int) = InitializeParameter[i] : &:r95_4 -#-----| r0_1(glval) = VariableAddress[i] : -#-----| r0_2(glval) = VariableAddress[i] : -#-----| r0_3(int) = Load[i] : &:r0_2, ~m? -#-----| mu0_4(int) = Store[i] : &:r0_1, r0_3 -# 95| r95_6(glval) = VariableAddress[(unnamed local variable)] : -# 95| mu95_7(promise_type) = Uninitialized[(unnamed local variable)] : &:r95_6 -# 95| r95_8(glval) = VariableAddress[(unnamed local variable)] : -# 95| r95_9(glval) = FunctionAddress[initial_suspend] : -# 95| r95_10(suspend_always) = Call[initial_suspend] : func:r95_9, this:r95_8 -# 95| mu95_11(unknown) = ^CallSideEffect : ~m? -# 95| v95_12(void) = ^IndirectReadSideEffect[-1] : &:r95_8, ~m? -# 95| mu95_13(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_8 -#-----| v0_5(void) = CopyValue : r95_10 -# 96| r96_1(glval) = VariableAddress[(unnamed local variable)] : -# 96| r96_2(glval) = FunctionAddress[yield_value] : -# 96| r96_3(glval) = VariableAddress[i] : -# 96| r96_4(int) = Load[i] : &:r96_3, ~m? -# 96| r96_5(suspend_always) = Call[yield_value] : func:r96_2, this:r96_1, 0:r96_4 -# 96| mu96_6(unknown) = ^CallSideEffect : ~m? -# 96| v96_7(void) = ^IndirectReadSideEffect[-1] : &:r96_1, ~m? -# 96| mu96_8(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r96_1 -# 96| v96_9(void) = CopyValue : r96_5 -#-----| r0_6(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_7(glval) = FunctionAddress[return_void] : -#-----| v0_8(void) = Call[return_void] : func:r0_7, this:r0_6 -#-----| mu0_9(unknown) = ^CallSideEffect : ~m? -#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_6, ~m? -#-----| mu0_11(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 -# 97| v97_1(void) = NoOp : -#-----| v0_12(void) = NoOp : -#-----| Goto (back edge) -> Block 15 +# 95| v95_1(void) = EnterFunction : +# 95| mu95_2(unknown) = AliasedDefinition : +# 95| mu95_3(unknown) = InitializeNonLocal : +# 95| r95_4(glval) = VariableAddress[i] : +# 95| mu95_5(int) = InitializeParameter[i] : &:r95_4 +#-----| r0_1(glval) = VariableAddress[i] : +#-----| r0_2(glval) = VariableAddress[i] : +#-----| r0_3(int) = Load[i] : &:r0_2, ~m? +#-----| mu0_4(int) = Store[i] : &:r0_1, r0_3 +# 95| r95_6(glval) = VariableAddress[(unnamed local variable)] : +# 95| mu95_7(promise_type) = Uninitialized[(unnamed local variable)] : &:r95_6 +# 95| r95_8(glval) = VariableAddress[(unnamed local variable)] : +# 95| r95_9(glval) = FunctionAddress[initial_suspend] : +# 95| r95_10(suspend_always) = Call[initial_suspend] : func:r95_9, this:r95_8 +# 95| mu95_11(unknown) = ^CallSideEffect : ~m? +# 95| v95_12(void) = ^IndirectReadSideEffect[-1] : &:r95_8, ~m? +# 95| mu95_13(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_8 +#-----| r0_5(glval) = VariableAddress[#temp0:0] : +# 95| r95_14(glval) = VariableAddress[#temp95:20] : +# 95| r95_15(glval) = VariableAddress[(unnamed local variable)] : +# 95| r95_16(glval) = FunctionAddress[initial_suspend] : +# 95| r95_17(suspend_always) = Call[initial_suspend] : func:r95_16, this:r95_15 +# 95| mu95_18(unknown) = ^CallSideEffect : ~m? +# 95| v95_19(void) = ^IndirectReadSideEffect[-1] : &:r95_15, ~m? +# 95| mu95_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_15 +# 95| mu95_21(suspend_always) = Store[#temp95:20] : &:r95_14, r95_17 +# 95| r95_22(suspend_always *) = CopyValue : r95_14 +# 95| mu95_23(suspend_always *) = Store[#temp0:0] : &:r0_5, r95_22 +#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, ~m? +# 95| r95_24(glval) = CopyValue : r0_6 +# 95| r95_25(glval) = Convert : r95_24 +# 95| r95_26(glval) = FunctionAddress[await_ready] : +# 95| r95_27(bool) = Call[await_ready] : func:r95_26, this:r95_25 +# 95| mu95_28(unknown) = ^CallSideEffect : ~m? +# 95| v95_29(void) = ^IndirectReadSideEffect[-1] : &:r95_25, ~m? +#-----| v0_7(void) = ConditionalBranch : r95_27 +#-----| False -> Block 4 +#-----| True -> Block 3 # 95| Block 1 -# 95| v95_14(void) = AliasedUse : ~m? -# 95| v95_15(void) = ExitFunction : +# 95| v95_30(void) = AliasedUse : ~m? +# 95| v95_31(void) = ExitFunction : # 95| Block 2 -# 95| v95_16(void) = Unwind : +# 95| v95_32(void) = Unwind : #-----| Goto -> Block 1 #-----| Block 3 -#-----| r0_13(bool) = Constant[1] : -#-----| r0_14(glval) = VariableAddress : -#-----| mu0_15(bool) = Store[?] : &:r0_14, r0_13 -# 95| r95_23(suspend_always *) = CopyValue : r95_75 -# 95| r95_27(glval) = CopyValue : r95_23 -#-----| r0_21(glval) = Convert : r95_27 -# 95| r95_34(glval) = FunctionAddress[await_resume] : -# 95| v95_37(void) = Call[await_resume] : func:r95_34, this:r0_21 -# 95| mu95_40(unknown) = ^CallSideEffect : ~m? -#-----| v0_24(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m? -#-----| v0_25(void) = CopyValue : v95_37 - -# 95| Block 3 -# 95| r95_17(suspend_always *) = CopyValue : r95_75 -# 95| r95_20(glval) = CopyValue : r95_17 -#-----| r0_15(glval) = Convert : r95_20 -# 95| r95_23(glval) = FunctionAddress[await_suspend] : -# 95| r95_27(glval>) = VariableAddress[#temp95:20] : -# 95| mu95_31(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_27 -# 95| r95_34(glval) = FunctionAddress[coroutine_handle] : -# 95| r95_37(glval>) = VariableAddress : -# 95| r95_40(glval>) = Convert : r95_37 -# 95| r95_43(coroutine_handle &) = CopyValue : r95_40 -# 95| v95_45(void) = Call[coroutine_handle] : func:r95_34, this:r95_27, 0:r95_43 -# 95| mu95_47(unknown) = ^CallSideEffect : ~m? -# 95| v95_49(void) = ^BufferReadSideEffect[0] : &:r95_43, ~m? -# 95| mu95_51(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_27 -# 95| r95_53(coroutine_handle) = Load[#temp95:20] : &:r95_27, ~m? -# 95| v95_55(void) = Call[await_suspend] : func:r95_23, this:r0_15, 0:r95_53 -# 95| mu95_57(unknown) = ^CallSideEffect : ~m? -#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -# 96| Block 3 -# 96| r96_10(suspend_always *) = CopyValue : r96_41 -# 96| r96_12(glval) = CopyValue : r96_10 -#-----| r0_15(glval) = Convert : r96_12 -# 96| r96_14(glval) = FunctionAddress[await_resume] : -# 96| v96_16(void) = Call[await_resume] : func:r96_14, this:r0_15 -# 96| mu96_18(unknown) = ^CallSideEffect : ~m? -#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -# 96| Block 3 -# 96| r96_10(suspend_always *) = CopyValue : r96_41 -# 96| r96_12(glval) = CopyValue : r96_10 -#-----| r0_15(glval) = Convert : r96_12 -# 96| r96_14(glval) = FunctionAddress[await_suspend] : -# 96| r96_16(glval>) = VariableAddress[#temp96:3] : -# 96| mu96_18(coroutine_handle) = Uninitialized[#temp96:3] : &:r96_16 -# 96| r96_20(glval) = FunctionAddress[coroutine_handle] : -# 96| r96_21(glval>) = VariableAddress : -# 96| r96_22(glval>) = Convert : r96_21 -# 96| r96_23(coroutine_handle &) = CopyValue : r96_22 -# 96| v96_24(void) = Call[coroutine_handle] : func:r96_20, this:r96_16, 0:r96_23 -# 96| mu96_25(unknown) = ^CallSideEffect : ~m? -# 96| v96_26(void) = ^BufferReadSideEffect[0] : &:r96_23, ~m? -# 96| mu96_27(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r96_16 -# 96| r96_28(coroutine_handle) = Load[#temp96:3] : &:r96_16, ~m? -# 96| v96_29(void) = Call[await_suspend] : func:r96_14, this:r0_15, 0:r96_28 -# 96| mu96_30(unknown) = ^CallSideEffect : ~m? -#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -# 95| Block 3 -# 95| r95_17(suspend_always *) = CopyValue : r95_75 -# 95| r95_20(glval) = CopyValue : r95_17 -#-----| r0_15(glval) = Convert : r95_20 -# 95| r95_23(glval) = FunctionAddress[await_resume] : -# 95| v95_27(void) = Call[await_resume] : func:r95_23, this:r0_15 -# 95| mu95_31(unknown) = ^CallSideEffect : ~m? -#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -# 95| Block 3 -# 95| r95_17(suspend_always *) = CopyValue : r95_75 -# 95| r95_20(glval) = CopyValue : r95_17 -#-----| r0_15(glval) = Convert : r95_20 -# 95| r95_23(glval) = FunctionAddress[await_suspend] : -# 95| r95_27(glval>) = VariableAddress[#temp95:20] : -# 95| mu95_31(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_27 -# 95| r95_34(glval) = FunctionAddress[coroutine_handle] : -# 95| r95_37(glval>) = VariableAddress : -# 95| r95_40(glval>) = Convert : r95_37 -# 95| r95_43(coroutine_handle &) = CopyValue : r95_40 -# 95| v95_45(void) = Call[coroutine_handle] : func:r95_34, this:r95_27, 0:r95_43 -# 95| mu95_47(unknown) = ^CallSideEffect : ~m? -# 95| v95_49(void) = ^BufferReadSideEffect[0] : &:r95_43, ~m? -# 95| mu95_51(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_27 -# 95| r95_53(coroutine_handle) = Load[#temp95:20] : &:r95_27, ~m? -# 95| v95_55(void) = Call[await_suspend] : func:r95_23, this:r0_15, 0:r95_53 -# 95| mu95_57(unknown) = ^CallSideEffect : ~m? -#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -#-----| Block 9 -#-----| r0_29(glval) = VariableAddress[#temp0:0] : -# 95| r95_59(glval) = VariableAddress[#temp95:20] : -# 95| r95_61(glval) = VariableAddress[(unnamed local variable)] : -# 95| r95_63(glval) = FunctionAddress[initial_suspend] : -# 95| r95_65(suspend_always) = Call[initial_suspend] : func:r95_63, this:r95_61 -# 95| mu95_67(unknown) = ^CallSideEffect : ~m? -# 95| v95_69(void) = ^IndirectReadSideEffect[-1] : &:r95_61, ~m? -# 95| mu95_71(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_61 -# 95| mu95_73(suspend_always) = Store[#temp95:20] : &:r95_59, r95_65 -# 95| r95_75(suspend_always *) = CopyValue : r95_59 -# 95| mu95_77(suspend_always *) = Store[#temp0:0] : &:r0_29, r95_75 -#-----| r0_32(suspend_always *) = Load[#temp0:0] : &:r0_29, ~m? -# 95| r95_79(glval) = CopyValue : r0_32 -# 95| r95_81(glval) = Convert : r95_79 -# 95| r95_83(glval) = FunctionAddress[await_ready] : -# 95| r95_85(bool) = Call[await_ready] : func:r95_83, this:r95_81 -# 95| mu95_87(unknown) = ^CallSideEffect : ~m? -# 95| v95_89(void) = ^IndirectReadSideEffect[-1] : &:r95_81, ~m? - -#-----| Block 9 -#-----| r0_29(glval) = VariableAddress[#temp0:0] : -# 96| r96_31(glval) = VariableAddress[#temp96:13] : -# 96| r96_32(glval) = VariableAddress[(unnamed local variable)] : -# 96| r96_33(glval) = FunctionAddress[yield_value] : -# 96| r96_34(glval) = VariableAddress[i] : -# 96| r96_35(int) = Load[i] : &:r96_34, ~m? -# 96| r96_36(suspend_always) = Call[yield_value] : func:r96_33, this:r96_32, 0:r96_35 -# 96| mu96_37(unknown) = ^CallSideEffect : ~m? -# 96| v96_38(void) = ^IndirectReadSideEffect[-1] : &:r96_32, ~m? -# 96| mu96_39(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r96_32 -# 96| mu96_40(suspend_always) = Store[#temp96:13] : &:r96_31, r96_36 -# 96| r96_41(suspend_always *) = CopyValue : r96_31 -# 96| mu96_42(suspend_always *) = Store[#temp0:0] : &:r0_29, r96_41 -#-----| r0_34(suspend_always *) = Load[#temp0:0] : &:r0_29, ~m? -# 96| r96_43(glval) = CopyValue : r0_34 -# 96| r96_44(glval) = Convert : r96_43 -# 96| r96_45(glval) = FunctionAddress[await_ready] : -# 96| r96_46(bool) = Call[await_ready] : func:r96_45, this:r96_44 -# 96| mu96_47(unknown) = ^CallSideEffect : ~m? -# 96| v96_48(void) = ^IndirectReadSideEffect[-1] : &:r96_44, ~m? - -#-----| Block 9 -#-----| r0_29(glval) = VariableAddress[#temp0:0] : -# 95| r95_59(glval) = VariableAddress[#temp95:20] : -# 95| r95_61(glval) = VariableAddress[(unnamed local variable)] : -# 95| r95_63(glval) = FunctionAddress[final_suspend] : -# 95| r95_65(suspend_always) = Call[final_suspend] : func:r95_63, this:r95_61 -# 95| mu95_67(unknown) = ^CallSideEffect : ~m? -# 95| v95_69(void) = ^IndirectReadSideEffect[-1] : &:r95_61, ~m? -# 95| mu95_71(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_61 -# 95| mu95_73(suspend_always) = Store[#temp95:20] : &:r95_59, r95_65 -# 95| r95_75(suspend_always *) = CopyValue : r95_59 -# 95| mu95_77(suspend_always *) = Store[#temp0:0] : &:r0_29, r95_75 -#-----| r0_32(suspend_always *) = Load[#temp0:0] : &:r0_29, ~m? -# 95| r95_79(glval) = CopyValue : r0_32 -# 95| r95_81(glval) = Convert : r95_79 -# 95| r95_83(glval) = FunctionAddress[await_ready] : -# 95| r95_85(bool) = Call[await_ready] : func:r95_83, this:r95_81 -# 95| mu95_87(unknown) = ^CallSideEffect : ~m? -# 95| v95_89(void) = ^IndirectReadSideEffect[-1] : &:r95_81, ~m? - -#-----| Block 12 -#-----| v0_35(void) = CatchAny : -#-----| r0_36(glval) = VariableAddress : -#-----| r0_37(bool) = Load[?] : &:r0_36, ~m? -#-----| r0_38(bool) = LogicalNot : r0_37 -#-----| v0_39(void) = ConditionalBranch : r0_38 -#-----| False -> Block 14 -#-----| True -> Block 13 +#-----| r0_8(bool) = Constant[1] : +#-----| r0_9(glval) = VariableAddress : +#-----| mu0_10(bool) = Store[?] : &:r0_9, r0_8 +# 95| r95_33(suspend_always *) = CopyValue : r95_22 +# 95| r95_34(glval) = CopyValue : r95_33 +#-----| r0_11(glval) = Convert : r95_34 +# 95| r95_35(glval) = FunctionAddress[await_resume] : +# 95| v95_36(void) = Call[await_resume] : func:r95_35, this:r0_11 +# 95| mu95_37(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? +#-----| v0_13(void) = CopyValue : v95_36 +# 96| r96_1(glval) = VariableAddress[(unnamed local variable)] : +# 96| r96_2(glval) = FunctionAddress[yield_value] : +# 96| r96_3(glval) = VariableAddress[i] : +# 96| r96_4(int) = Load[i] : &:r96_3, ~m? +# 96| r96_5(suspend_always) = Call[yield_value] : func:r96_2, this:r96_1, 0:r96_4 +# 96| mu96_6(unknown) = ^CallSideEffect : ~m? +# 96| v96_7(void) = ^IndirectReadSideEffect[-1] : &:r96_1, ~m? +# 96| mu96_8(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r96_1 +#-----| r0_14(glval) = VariableAddress[#temp0:0] : +# 96| r96_9(glval) = VariableAddress[#temp96:13] : +# 96| r96_10(glval) = VariableAddress[(unnamed local variable)] : +# 96| r96_11(glval) = FunctionAddress[yield_value] : +# 96| r96_12(glval) = VariableAddress[i] : +# 96| r96_13(int) = Load[i] : &:r96_12, ~m? +# 96| r96_14(suspend_always) = Call[yield_value] : func:r96_11, this:r96_10, 0:r96_13 +# 96| mu96_15(unknown) = ^CallSideEffect : ~m? +# 96| v96_16(void) = ^IndirectReadSideEffect[-1] : &:r96_10, ~m? +# 96| mu96_17(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r96_10 +# 96| mu96_18(suspend_always) = Store[#temp96:13] : &:r96_9, r96_14 +# 96| r96_19(suspend_always *) = CopyValue : r96_9 +# 96| mu96_20(suspend_always *) = Store[#temp0:0] : &:r0_14, r96_19 +#-----| r0_15(suspend_always *) = Load[#temp0:0] : &:r0_14, ~m? +# 96| r96_21(glval) = CopyValue : r0_15 +# 96| r96_22(glval) = Convert : r96_21 +# 96| r96_23(glval) = FunctionAddress[await_ready] : +# 96| r96_24(bool) = Call[await_ready] : func:r96_23, this:r96_22 +# 96| mu96_25(unknown) = ^CallSideEffect : ~m? +# 96| v96_26(void) = ^IndirectReadSideEffect[-1] : &:r96_22, ~m? +# 96| v96_27(void) = ConditionalBranch : r96_24 +#-----| False -> Block 6 +#-----| True -> Block 5 + +# 95| Block 4 +# 95| r95_38(suspend_always *) = CopyValue : r95_22 +# 95| r95_39(glval) = CopyValue : r95_38 +#-----| r0_16(glval) = Convert : r95_39 +# 95| r95_40(glval) = FunctionAddress[await_suspend] : +# 95| r95_41(glval>) = VariableAddress[#temp95:20] : +# 95| mu95_42(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_41 +# 95| r95_43(glval) = FunctionAddress[coroutine_handle] : +# 95| r95_44(glval>) = VariableAddress : +# 95| r95_45(glval>) = Convert : r95_44 +# 95| r95_46(coroutine_handle &) = CopyValue : r95_45 +# 95| v95_47(void) = Call[coroutine_handle] : func:r95_43, this:r95_41, 0:r95_46 +# 95| mu95_48(unknown) = ^CallSideEffect : ~m? +# 95| v95_49(void) = ^BufferReadSideEffect[0] : &:r95_46, ~m? +# 95| mu95_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_41 +# 95| r95_51(coroutine_handle) = Load[#temp95:20] : &:r95_41, ~m? +# 95| v95_52(void) = Call[await_suspend] : func:r95_40, this:r0_16, 0:r95_51 +# 95| mu95_53(unknown) = ^CallSideEffect : ~m? +#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_16, ~m? +#-----| Goto -> Block 3 -#-----| Block 13 -#-----| v0_40(void) = ReThrow : +# 96| Block 5 +# 96| r96_28(suspend_always *) = CopyValue : r96_19 +# 96| r96_29(glval) = CopyValue : r96_28 +#-----| r0_18(glval) = Convert : r96_29 +# 96| r96_30(glval) = FunctionAddress[await_resume] : +# 96| v96_31(void) = Call[await_resume] : func:r96_30, this:r0_18 +# 96| mu96_32(unknown) = ^CallSideEffect : ~m? +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m? +#-----| r0_20(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_21(glval) = FunctionAddress[return_void] : +#-----| v0_22(void) = Call[return_void] : func:r0_21, this:r0_20 +#-----| mu0_23(unknown) = ^CallSideEffect : ~m? +#-----| v0_24(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m? +#-----| mu0_25(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_20 +# 97| v97_1(void) = NoOp : +#-----| v0_26(void) = NoOp : +#-----| Goto (back edge) -> Block 10 + +# 96| Block 6 +# 96| r96_33(suspend_always *) = CopyValue : r96_19 +# 96| r96_34(glval) = CopyValue : r96_33 +#-----| r0_27(glval) = Convert : r96_34 +# 96| r96_35(glval) = FunctionAddress[await_suspend] : +# 96| r96_36(glval>) = VariableAddress[#temp96:3] : +# 96| mu96_37(coroutine_handle) = Uninitialized[#temp96:3] : &:r96_36 +# 96| r96_38(glval) = FunctionAddress[coroutine_handle] : +# 96| r96_39(glval>) = VariableAddress : +# 96| r96_40(glval>) = Convert : r96_39 +# 96| r96_41(coroutine_handle &) = CopyValue : r96_40 +# 96| v96_42(void) = Call[coroutine_handle] : func:r96_38, this:r96_36, 0:r96_41 +# 96| mu96_43(unknown) = ^CallSideEffect : ~m? +# 96| v96_44(void) = ^BufferReadSideEffect[0] : &:r96_41, ~m? +# 96| mu96_45(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r96_36 +# 96| r96_46(coroutine_handle) = Load[#temp96:3] : &:r96_36, ~m? +# 96| v96_47(void) = Call[await_suspend] : func:r96_35, this:r0_27, 0:r96_46 +# 96| mu96_48(unknown) = ^CallSideEffect : ~m? +#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m? +#-----| Goto -> Block 5 + +#-----| Block 7 +#-----| v0_29(void) = CatchAny : +#-----| r0_30(glval) = VariableAddress : +#-----| r0_31(bool) = Load[?] : &:r0_30, ~m? +#-----| r0_32(bool) = LogicalNot : r0_31 +#-----| v0_33(void) = ConditionalBranch : r0_32 +#-----| False -> Block 9 +#-----| True -> Block 8 + +#-----| Block 8 +#-----| v0_34(void) = ReThrow : #-----| Exception -> Block 2 -# 95| Block 14 -# 95| r95_91(glval) = VariableAddress[(unnamed local variable)] : -# 95| r95_92(glval) = FunctionAddress[unhandled_exception] : -# 95| v95_93(void) = Call[unhandled_exception] : func:r95_92, this:r95_91 -# 95| mu95_94(unknown) = ^CallSideEffect : ~m? -# 95| v95_95(void) = ^IndirectReadSideEffect[-1] : &:r95_91, ~m? -# 95| mu95_96(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_91 -#-----| Goto -> Block 15 +# 95| Block 9 +# 95| r95_54(glval) = VariableAddress[(unnamed local variable)] : +# 95| r95_55(glval) = FunctionAddress[unhandled_exception] : +# 95| v95_56(void) = Call[unhandled_exception] : func:r95_55, this:r95_54 +# 95| mu95_57(unknown) = ^CallSideEffect : ~m? +# 95| v95_58(void) = ^IndirectReadSideEffect[-1] : &:r95_54, ~m? +# 95| mu95_59(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_54 +#-----| Goto -> Block 10 + +#-----| Block 10 +#-----| v0_35(void) = NoOp : +# 95| r95_60(glval) = VariableAddress[(unnamed local variable)] : +# 95| r95_61(glval) = FunctionAddress[final_suspend] : +# 95| r95_62(suspend_always) = Call[final_suspend] : func:r95_61, this:r95_60 +# 95| mu95_63(unknown) = ^CallSideEffect : ~m? +# 95| v95_64(void) = ^IndirectReadSideEffect[-1] : &:r95_60, ~m? +# 95| mu95_65(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_60 +#-----| r0_36(glval) = VariableAddress[#temp0:0] : +# 95| r95_66(glval) = VariableAddress[#temp95:20] : +# 95| r95_67(glval) = VariableAddress[(unnamed local variable)] : +# 95| r95_68(glval) = FunctionAddress[final_suspend] : +# 95| r95_69(suspend_always) = Call[final_suspend] : func:r95_68, this:r95_67 +# 95| mu95_70(unknown) = ^CallSideEffect : ~m? +# 95| v95_71(void) = ^IndirectReadSideEffect[-1] : &:r95_67, ~m? +# 95| mu95_72(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_67 +# 95| mu95_73(suspend_always) = Store[#temp95:20] : &:r95_66, r95_69 +# 95| r95_74(suspend_always *) = CopyValue : r95_66 +# 95| mu95_75(suspend_always *) = Store[#temp0:0] : &:r0_36, r95_74 +#-----| r0_37(suspend_always *) = Load[#temp0:0] : &:r0_36, ~m? +# 95| r95_76(glval) = CopyValue : r0_37 +# 95| r95_77(glval) = Convert : r95_76 +# 95| r95_78(glval) = FunctionAddress[await_ready] : +# 95| r95_79(bool) = Call[await_ready] : func:r95_78, this:r95_77 +# 95| mu95_80(unknown) = ^CallSideEffect : ~m? +# 95| v95_81(void) = ^IndirectReadSideEffect[-1] : &:r95_77, ~m? +#-----| v0_38(void) = ConditionalBranch : r95_79 +#-----| False -> Block 12 +#-----| True -> Block 11 -#-----| Block 15 -#-----| v0_41(void) = NoOp : -# 95| r95_97(glval) = VariableAddress[(unnamed local variable)] : -# 95| r95_98(glval) = FunctionAddress[final_suspend] : -# 95| r95_99(suspend_always) = Call[final_suspend] : func:r95_98, this:r95_97 -# 95| mu95_100(unknown) = ^CallSideEffect : ~m? -# 95| v95_101(void) = ^IndirectReadSideEffect[-1] : &:r95_97, ~m? -# 95| mu95_102(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r95_97 -#-----| v0_42(void) = CopyValue : r95_99 -# 95| r95_103(glval) = VariableAddress[#return] : -# 95| v95_104(void) = ReturnValue : &:r95_103, ~m? +# 95| Block 11 +# 95| r95_82(suspend_always *) = CopyValue : r95_74 +# 95| r95_83(glval) = CopyValue : r95_82 +#-----| r0_39(glval) = Convert : r95_83 +# 95| r95_84(glval) = FunctionAddress[await_resume] : +# 95| v95_85(void) = Call[await_resume] : func:r95_84, this:r0_39 +# 95| mu95_86(unknown) = ^CallSideEffect : ~m? +#-----| v0_40(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m? +# 95| r95_87(glval) = VariableAddress[#return] : +# 95| v95_88(void) = ReturnValue : &:r95_87, ~m? #-----| Goto -> Block 1 +# 95| Block 12 +# 95| r95_89(suspend_always *) = CopyValue : r95_74 +# 95| r95_90(glval) = CopyValue : r95_89 +#-----| r0_41(glval) = Convert : r95_90 +# 95| r95_91(glval) = FunctionAddress[await_suspend] : +# 95| r95_92(glval>) = VariableAddress[#temp95:20] : +# 95| mu95_93(coroutine_handle) = Uninitialized[#temp95:20] : &:r95_92 +# 95| r95_94(glval) = FunctionAddress[coroutine_handle] : +# 95| r95_95(glval>) = VariableAddress : +# 95| r95_96(glval>) = Convert : r95_95 +# 95| r95_97(coroutine_handle &) = CopyValue : r95_96 +# 95| v95_98(void) = Call[coroutine_handle] : func:r95_94, this:r95_92, 0:r95_97 +# 95| mu95_99(unknown) = ^CallSideEffect : ~m? +# 95| v95_100(void) = ^BufferReadSideEffect[0] : &:r95_97, ~m? +# 95| mu95_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r95_92 +# 95| r95_102(coroutine_handle) = Load[#temp95:20] : &:r95_92, ~m? +# 95| v95_103(void) = Call[await_suspend] : func:r95_91, this:r0_41, 0:r95_102 +# 95| mu95_104(unknown) = ^CallSideEffect : ~m? +#-----| v0_42(void) = ^IndirectReadSideEffect[-1] : &:r0_41, ~m? +#-----| Goto -> Block 11 + # 99| co_returnable_value co_yield_value_value(int) # 99| Block 0 -# 99| v99_1(void) = EnterFunction : -# 99| mu99_2(unknown) = AliasedDefinition : -# 99| mu99_3(unknown) = InitializeNonLocal : -# 99| r99_4(glval) = VariableAddress[i] : -# 99| mu99_5(int) = InitializeParameter[i] : &:r99_4 -#-----| r0_1(glval) = VariableAddress[i] : -#-----| r0_2(glval) = VariableAddress[i] : -#-----| r0_3(int) = Load[i] : &:r0_2, ~m? -#-----| mu0_4(int) = Store[i] : &:r0_1, r0_3 -# 99| r99_6(glval) = VariableAddress[(unnamed local variable)] : -# 99| mu99_7(promise_type) = Uninitialized[(unnamed local variable)] : &:r99_6 -# 99| r99_8(glval) = VariableAddress[(unnamed local variable)] : -# 99| r99_9(glval) = FunctionAddress[initial_suspend] : -# 99| r99_10(suspend_always) = Call[initial_suspend] : func:r99_9, this:r99_8 -# 99| mu99_11(unknown) = ^CallSideEffect : ~m? -# 99| v99_12(void) = ^IndirectReadSideEffect[-1] : &:r99_8, ~m? -# 99| mu99_13(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_8 -#-----| v0_5(void) = CopyValue : r99_10 -# 100| r100_1(glval) = VariableAddress[(unnamed local variable)] : -# 100| r100_2(glval) = FunctionAddress[yield_value] : -# 100| r100_3(glval) = VariableAddress[i] : -# 100| r100_4(int) = Load[i] : &:r100_3, ~m? -# 100| r100_5(suspend_always) = Call[yield_value] : func:r100_2, this:r100_1, 0:r100_4 -# 100| mu100_6(unknown) = ^CallSideEffect : ~m? -# 100| v100_7(void) = ^IndirectReadSideEffect[-1] : &:r100_1, ~m? -# 100| mu100_8(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r100_1 -# 100| v100_9(void) = CopyValue : r100_5 -#-----| Goto -> Block 15 +# 99| v99_1(void) = EnterFunction : +# 99| mu99_2(unknown) = AliasedDefinition : +# 99| mu99_3(unknown) = InitializeNonLocal : +# 99| r99_4(glval) = VariableAddress[i] : +# 99| mu99_5(int) = InitializeParameter[i] : &:r99_4 +#-----| r0_1(glval) = VariableAddress[i] : +#-----| r0_2(glval) = VariableAddress[i] : +#-----| r0_3(int) = Load[i] : &:r0_2, ~m? +#-----| mu0_4(int) = Store[i] : &:r0_1, r0_3 +# 99| r99_6(glval) = VariableAddress[(unnamed local variable)] : +# 99| mu99_7(promise_type) = Uninitialized[(unnamed local variable)] : &:r99_6 +# 99| r99_8(glval) = VariableAddress[(unnamed local variable)] : +# 99| r99_9(glval) = FunctionAddress[initial_suspend] : +# 99| r99_10(suspend_always) = Call[initial_suspend] : func:r99_9, this:r99_8 +# 99| mu99_11(unknown) = ^CallSideEffect : ~m? +# 99| v99_12(void) = ^IndirectReadSideEffect[-1] : &:r99_8, ~m? +# 99| mu99_13(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_8 +#-----| r0_5(glval) = VariableAddress[#temp0:0] : +# 99| r99_14(glval) = VariableAddress[#temp99:21] : +# 99| r99_15(glval) = VariableAddress[(unnamed local variable)] : +# 99| r99_16(glval) = FunctionAddress[initial_suspend] : +# 99| r99_17(suspend_always) = Call[initial_suspend] : func:r99_16, this:r99_15 +# 99| mu99_18(unknown) = ^CallSideEffect : ~m? +# 99| v99_19(void) = ^IndirectReadSideEffect[-1] : &:r99_15, ~m? +# 99| mu99_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_15 +# 99| mu99_21(suspend_always) = Store[#temp99:21] : &:r99_14, r99_17 +# 99| r99_22(suspend_always *) = CopyValue : r99_14 +# 99| mu99_23(suspend_always *) = Store[#temp0:0] : &:r0_5, r99_22 +#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, ~m? +# 99| r99_24(glval) = CopyValue : r0_6 +# 99| r99_25(glval) = Convert : r99_24 +# 99| r99_26(glval) = FunctionAddress[await_ready] : +# 99| r99_27(bool) = Call[await_ready] : func:r99_26, this:r99_25 +# 99| mu99_28(unknown) = ^CallSideEffect : ~m? +# 99| v99_29(void) = ^IndirectReadSideEffect[-1] : &:r99_25, ~m? +#-----| v0_7(void) = ConditionalBranch : r99_27 +#-----| False -> Block 4 +#-----| True -> Block 3 # 99| Block 1 -# 99| v99_14(void) = AliasedUse : ~m? -# 99| v99_15(void) = ExitFunction : +# 99| v99_30(void) = AliasedUse : ~m? +# 99| v99_31(void) = ExitFunction : # 99| Block 2 -# 99| v99_16(void) = Unwind : +# 99| v99_32(void) = Unwind : #-----| Goto -> Block 1 #-----| Block 3 -#-----| r0_6(bool) = Constant[1] : -#-----| r0_7(glval) = VariableAddress : -#-----| mu0_8(bool) = Store[?] : &:r0_7, r0_6 -# 99| r99_23(suspend_always *) = CopyValue : r99_75 -# 99| r99_27(glval) = CopyValue : r99_23 -#-----| r0_14(glval) = Convert : r99_27 -# 99| r99_34(glval) = FunctionAddress[await_resume] : -# 99| v99_37(void) = Call[await_resume] : func:r99_34, this:r0_14 -# 99| mu99_40(unknown) = ^CallSideEffect : ~m? -#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_14, ~m? -#-----| v0_18(void) = CopyValue : v99_37 - -# 99| Block 3 -# 99| r99_17(suspend_always *) = CopyValue : r99_75 -# 99| r99_20(glval) = CopyValue : r99_17 -#-----| r0_8(glval) = Convert : r99_20 -# 99| r99_23(glval) = FunctionAddress[await_suspend] : -# 99| r99_27(glval>) = VariableAddress[#temp99:21] : -# 99| mu99_31(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_27 -# 99| r99_34(glval) = FunctionAddress[coroutine_handle] : -# 99| r99_37(glval>) = VariableAddress : -# 99| r99_40(glval>) = Convert : r99_37 -# 99| r99_43(coroutine_handle &) = CopyValue : r99_40 -# 99| v99_45(void) = Call[coroutine_handle] : func:r99_34, this:r99_27, 0:r99_43 -# 99| mu99_47(unknown) = ^CallSideEffect : ~m? -# 99| v99_49(void) = ^BufferReadSideEffect[0] : &:r99_43, ~m? -# 99| mu99_51(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_27 -# 99| r99_53(coroutine_handle) = Load[#temp99:21] : &:r99_27, ~m? -# 99| v99_55(void) = Call[await_suspend] : func:r99_23, this:r0_8, 0:r99_53 -# 99| mu99_57(unknown) = ^CallSideEffect : ~m? -#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_8, ~m? - -# 100| Block 3 -# 100| r100_10(suspend_always *) = CopyValue : r100_41 -# 100| r100_12(glval) = CopyValue : r100_10 -#-----| r0_8(glval) = Convert : r100_12 -# 100| r100_14(glval) = FunctionAddress[await_resume] : -# 100| v100_16(void) = Call[await_resume] : func:r100_14, this:r0_8 -# 100| mu100_18(unknown) = ^CallSideEffect : ~m? -#-----| v0_15(void) = ^IndirectReadSideEffect[-1] : &:r0_8, ~m? - -# 100| Block 3 -# 100| r100_10(suspend_always *) = CopyValue : r100_41 -# 100| r100_12(glval) = CopyValue : r100_10 -#-----| r0_8(glval) = Convert : r100_12 -# 100| r100_14(glval) = FunctionAddress[await_suspend] : -# 100| r100_16(glval>) = VariableAddress[#temp100:3] : -# 100| mu100_18(coroutine_handle) = Uninitialized[#temp100:3] : &:r100_16 -# 100| r100_20(glval) = FunctionAddress[coroutine_handle] : -# 100| r100_21(glval>) = VariableAddress : -# 100| r100_22(glval>) = Convert : r100_21 -# 100| r100_23(coroutine_handle &) = CopyValue : r100_22 -# 100| v100_24(void) = Call[coroutine_handle] : func:r100_20, this:r100_16, 0:r100_23 -# 100| mu100_25(unknown) = ^CallSideEffect : ~m? -# 100| v100_26(void) = ^BufferReadSideEffect[0] : &:r100_23, ~m? -# 100| mu100_27(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r100_16 -# 100| r100_28(coroutine_handle) = Load[#temp100:3] : &:r100_16, ~m? -# 100| v100_29(void) = Call[await_suspend] : func:r100_14, this:r0_8, 0:r100_28 -# 100| mu100_30(unknown) = ^CallSideEffect : ~m? -#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_8, ~m? - -# 99| Block 3 -# 99| r99_17(suspend_always *) = CopyValue : r99_75 -# 99| r99_20(glval) = CopyValue : r99_17 -#-----| r0_8(glval) = Convert : r99_20 -# 99| r99_23(glval) = FunctionAddress[await_resume] : -# 99| v99_27(void) = Call[await_resume] : func:r99_23, this:r0_8 -# 99| mu99_31(unknown) = ^CallSideEffect : ~m? -#-----| v0_15(void) = ^IndirectReadSideEffect[-1] : &:r0_8, ~m? - -# 99| Block 3 -# 99| r99_17(suspend_always *) = CopyValue : r99_75 -# 99| r99_20(glval) = CopyValue : r99_17 -#-----| r0_8(glval) = Convert : r99_20 -# 99| r99_23(glval) = FunctionAddress[await_suspend] : -# 99| r99_27(glval>) = VariableAddress[#temp99:21] : -# 99| mu99_31(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_27 -# 99| r99_34(glval) = FunctionAddress[coroutine_handle] : -# 99| r99_37(glval>) = VariableAddress : -# 99| r99_40(glval>) = Convert : r99_37 -# 99| r99_43(coroutine_handle &) = CopyValue : r99_40 -# 99| v99_45(void) = Call[coroutine_handle] : func:r99_34, this:r99_27, 0:r99_43 -# 99| mu99_47(unknown) = ^CallSideEffect : ~m? -# 99| v99_49(void) = ^BufferReadSideEffect[0] : &:r99_43, ~m? -# 99| mu99_51(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_27 -# 99| r99_53(coroutine_handle) = Load[#temp99:21] : &:r99_27, ~m? -# 99| v99_55(void) = Call[await_suspend] : func:r99_23, this:r0_8, 0:r99_53 -# 99| mu99_57(unknown) = ^CallSideEffect : ~m? -#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_8, ~m? - -#-----| Block 9 -#-----| r0_22(glval) = VariableAddress[#temp0:0] : -# 99| r99_59(glval) = VariableAddress[#temp99:21] : -# 99| r99_61(glval) = VariableAddress[(unnamed local variable)] : -# 99| r99_63(glval) = FunctionAddress[initial_suspend] : -# 99| r99_65(suspend_always) = Call[initial_suspend] : func:r99_63, this:r99_61 -# 99| mu99_67(unknown) = ^CallSideEffect : ~m? -# 99| v99_69(void) = ^IndirectReadSideEffect[-1] : &:r99_61, ~m? -# 99| mu99_71(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_61 -# 99| mu99_73(suspend_always) = Store[#temp99:21] : &:r99_59, r99_65 -# 99| r99_75(suspend_always *) = CopyValue : r99_59 -# 99| mu99_77(suspend_always *) = Store[#temp0:0] : &:r0_22, r99_75 -#-----| r0_25(suspend_always *) = Load[#temp0:0] : &:r0_22, ~m? -# 99| r99_79(glval) = CopyValue : r0_25 -# 99| r99_81(glval) = Convert : r99_79 -# 99| r99_83(glval) = FunctionAddress[await_ready] : -# 99| r99_85(bool) = Call[await_ready] : func:r99_83, this:r99_81 -# 99| mu99_87(unknown) = ^CallSideEffect : ~m? -# 99| v99_89(void) = ^IndirectReadSideEffect[-1] : &:r99_81, ~m? - -#-----| Block 9 -#-----| r0_22(glval) = VariableAddress[#temp0:0] : -# 100| r100_31(glval) = VariableAddress[#temp100:13] : -# 100| r100_32(glval) = VariableAddress[(unnamed local variable)] : -# 100| r100_33(glval) = FunctionAddress[yield_value] : -# 100| r100_34(glval) = VariableAddress[i] : -# 100| r100_35(int) = Load[i] : &:r100_34, ~m? -# 100| r100_36(suspend_always) = Call[yield_value] : func:r100_33, this:r100_32, 0:r100_35 -# 100| mu100_37(unknown) = ^CallSideEffect : ~m? -# 100| v100_38(void) = ^IndirectReadSideEffect[-1] : &:r100_32, ~m? -# 100| mu100_39(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r100_32 -# 100| mu100_40(suspend_always) = Store[#temp100:13] : &:r100_31, r100_36 -# 100| r100_41(suspend_always *) = CopyValue : r100_31 -# 100| mu100_42(suspend_always *) = Store[#temp0:0] : &:r0_22, r100_41 -#-----| r0_27(suspend_always *) = Load[#temp0:0] : &:r0_22, ~m? -# 100| r100_43(glval) = CopyValue : r0_27 -# 100| r100_44(glval) = Convert : r100_43 -# 100| r100_45(glval) = FunctionAddress[await_ready] : -# 100| r100_46(bool) = Call[await_ready] : func:r100_45, this:r100_44 -# 100| mu100_47(unknown) = ^CallSideEffect : ~m? -# 100| v100_48(void) = ^IndirectReadSideEffect[-1] : &:r100_44, ~m? - -#-----| Block 9 -#-----| r0_22(glval) = VariableAddress[#temp0:0] : -# 99| r99_59(glval) = VariableAddress[#temp99:21] : -# 99| r99_61(glval) = VariableAddress[(unnamed local variable)] : -# 99| r99_63(glval) = FunctionAddress[final_suspend] : -# 99| r99_65(suspend_always) = Call[final_suspend] : func:r99_63, this:r99_61 -# 99| mu99_67(unknown) = ^CallSideEffect : ~m? -# 99| v99_69(void) = ^IndirectReadSideEffect[-1] : &:r99_61, ~m? -# 99| mu99_71(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_61 -# 99| mu99_73(suspend_always) = Store[#temp99:21] : &:r99_59, r99_65 -# 99| r99_75(suspend_always *) = CopyValue : r99_59 -# 99| mu99_77(suspend_always *) = Store[#temp0:0] : &:r0_22, r99_75 -#-----| r0_25(suspend_always *) = Load[#temp0:0] : &:r0_22, ~m? -# 99| r99_79(glval) = CopyValue : r0_25 -# 99| r99_81(glval) = Convert : r99_79 -# 99| r99_83(glval) = FunctionAddress[await_ready] : -# 99| r99_85(bool) = Call[await_ready] : func:r99_83, this:r99_81 -# 99| mu99_87(unknown) = ^CallSideEffect : ~m? -# 99| v99_89(void) = ^IndirectReadSideEffect[-1] : &:r99_81, ~m? - -#-----| Block 12 -#-----| v0_28(void) = CatchAny : -#-----| r0_29(glval) = VariableAddress : -#-----| r0_30(bool) = Load[?] : &:r0_29, ~m? -#-----| r0_31(bool) = LogicalNot : r0_30 -#-----| v0_32(void) = ConditionalBranch : r0_31 -#-----| False -> Block 14 -#-----| True -> Block 13 +#-----| r0_8(bool) = Constant[1] : +#-----| r0_9(glval) = VariableAddress : +#-----| mu0_10(bool) = Store[?] : &:r0_9, r0_8 +# 99| r99_33(suspend_always *) = CopyValue : r99_22 +# 99| r99_34(glval) = CopyValue : r99_33 +#-----| r0_11(glval) = Convert : r99_34 +# 99| r99_35(glval) = FunctionAddress[await_resume] : +# 99| v99_36(void) = Call[await_resume] : func:r99_35, this:r0_11 +# 99| mu99_37(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? +#-----| v0_13(void) = CopyValue : v99_36 +# 100| r100_1(glval) = VariableAddress[(unnamed local variable)] : +# 100| r100_2(glval) = FunctionAddress[yield_value] : +# 100| r100_3(glval) = VariableAddress[i] : +# 100| r100_4(int) = Load[i] : &:r100_3, ~m? +# 100| r100_5(suspend_always) = Call[yield_value] : func:r100_2, this:r100_1, 0:r100_4 +# 100| mu100_6(unknown) = ^CallSideEffect : ~m? +# 100| v100_7(void) = ^IndirectReadSideEffect[-1] : &:r100_1, ~m? +# 100| mu100_8(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r100_1 +#-----| r0_14(glval) = VariableAddress[#temp0:0] : +# 100| r100_9(glval) = VariableAddress[#temp100:13] : +# 100| r100_10(glval) = VariableAddress[(unnamed local variable)] : +# 100| r100_11(glval) = FunctionAddress[yield_value] : +# 100| r100_12(glval) = VariableAddress[i] : +# 100| r100_13(int) = Load[i] : &:r100_12, ~m? +# 100| r100_14(suspend_always) = Call[yield_value] : func:r100_11, this:r100_10, 0:r100_13 +# 100| mu100_15(unknown) = ^CallSideEffect : ~m? +# 100| v100_16(void) = ^IndirectReadSideEffect[-1] : &:r100_10, ~m? +# 100| mu100_17(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r100_10 +# 100| mu100_18(suspend_always) = Store[#temp100:13] : &:r100_9, r100_14 +# 100| r100_19(suspend_always *) = CopyValue : r100_9 +# 100| mu100_20(suspend_always *) = Store[#temp0:0] : &:r0_14, r100_19 +#-----| r0_15(suspend_always *) = Load[#temp0:0] : &:r0_14, ~m? +# 100| r100_21(glval) = CopyValue : r0_15 +# 100| r100_22(glval) = Convert : r100_21 +# 100| r100_23(glval) = FunctionAddress[await_ready] : +# 100| r100_24(bool) = Call[await_ready] : func:r100_23, this:r100_22 +# 100| mu100_25(unknown) = ^CallSideEffect : ~m? +# 100| v100_26(void) = ^IndirectReadSideEffect[-1] : &:r100_22, ~m? +# 100| v100_27(void) = ConditionalBranch : r100_24 +#-----| False -> Block 6 +#-----| True -> Block 5 + +# 99| Block 4 +# 99| r99_38(suspend_always *) = CopyValue : r99_22 +# 99| r99_39(glval) = CopyValue : r99_38 +#-----| r0_16(glval) = Convert : r99_39 +# 99| r99_40(glval) = FunctionAddress[await_suspend] : +# 99| r99_41(glval>) = VariableAddress[#temp99:21] : +# 99| mu99_42(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_41 +# 99| r99_43(glval) = FunctionAddress[coroutine_handle] : +# 99| r99_44(glval>) = VariableAddress : +# 99| r99_45(glval>) = Convert : r99_44 +# 99| r99_46(coroutine_handle &) = CopyValue : r99_45 +# 99| v99_47(void) = Call[coroutine_handle] : func:r99_43, this:r99_41, 0:r99_46 +# 99| mu99_48(unknown) = ^CallSideEffect : ~m? +# 99| v99_49(void) = ^BufferReadSideEffect[0] : &:r99_46, ~m? +# 99| mu99_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_41 +# 99| r99_51(coroutine_handle) = Load[#temp99:21] : &:r99_41, ~m? +# 99| v99_52(void) = Call[await_suspend] : func:r99_40, this:r0_16, 0:r99_51 +# 99| mu99_53(unknown) = ^CallSideEffect : ~m? +#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_16, ~m? +#-----| Goto -> Block 3 + +# 100| Block 5 +# 100| r100_28(suspend_always *) = CopyValue : r100_19 +# 100| r100_29(glval) = CopyValue : r100_28 +#-----| r0_18(glval) = Convert : r100_29 +# 100| r100_30(glval) = FunctionAddress[await_resume] : +# 100| v100_31(void) = Call[await_resume] : func:r100_30, this:r0_18 +# 100| mu100_32(unknown) = ^CallSideEffect : ~m? +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m? +#-----| Goto -> Block 10 + +# 100| Block 6 +# 100| r100_33(suspend_always *) = CopyValue : r100_19 +# 100| r100_34(glval) = CopyValue : r100_33 +#-----| r0_20(glval) = Convert : r100_34 +# 100| r100_35(glval) = FunctionAddress[await_suspend] : +# 100| r100_36(glval>) = VariableAddress[#temp100:3] : +# 100| mu100_37(coroutine_handle) = Uninitialized[#temp100:3] : &:r100_36 +# 100| r100_38(glval) = FunctionAddress[coroutine_handle] : +# 100| r100_39(glval>) = VariableAddress : +# 100| r100_40(glval>) = Convert : r100_39 +# 100| r100_41(coroutine_handle &) = CopyValue : r100_40 +# 100| v100_42(void) = Call[coroutine_handle] : func:r100_38, this:r100_36, 0:r100_41 +# 100| mu100_43(unknown) = ^CallSideEffect : ~m? +# 100| v100_44(void) = ^BufferReadSideEffect[0] : &:r100_41, ~m? +# 100| mu100_45(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r100_36 +# 100| r100_46(coroutine_handle) = Load[#temp100:3] : &:r100_36, ~m? +# 100| v100_47(void) = Call[await_suspend] : func:r100_35, this:r0_20, 0:r100_46 +# 100| mu100_48(unknown) = ^CallSideEffect : ~m? +#-----| v0_21(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m? +#-----| Goto -> Block 5 + +#-----| Block 7 +#-----| v0_22(void) = CatchAny : +#-----| r0_23(glval) = VariableAddress : +#-----| r0_24(bool) = Load[?] : &:r0_23, ~m? +#-----| r0_25(bool) = LogicalNot : r0_24 +#-----| v0_26(void) = ConditionalBranch : r0_25 +#-----| False -> Block 9 +#-----| True -> Block 8 -#-----| Block 13 -#-----| v0_33(void) = ReThrow : +#-----| Block 8 +#-----| v0_27(void) = ReThrow : #-----| Exception -> Block 2 -# 99| Block 14 -# 99| r99_91(glval) = VariableAddress[(unnamed local variable)] : -# 99| r99_92(glval) = FunctionAddress[unhandled_exception] : -# 99| v99_93(void) = Call[unhandled_exception] : func:r99_92, this:r99_91 -# 99| mu99_94(unknown) = ^CallSideEffect : ~m? -# 99| v99_95(void) = ^IndirectReadSideEffect[-1] : &:r99_91, ~m? -# 99| mu99_96(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_91 -#-----| Goto -> Block 15 +# 99| Block 9 +# 99| r99_54(glval) = VariableAddress[(unnamed local variable)] : +# 99| r99_55(glval) = FunctionAddress[unhandled_exception] : +# 99| v99_56(void) = Call[unhandled_exception] : func:r99_55, this:r99_54 +# 99| mu99_57(unknown) = ^CallSideEffect : ~m? +# 99| v99_58(void) = ^IndirectReadSideEffect[-1] : &:r99_54, ~m? +# 99| mu99_59(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_54 +#-----| Goto -> Block 10 + +#-----| Block 10 +#-----| v0_28(void) = NoOp : +# 99| r99_60(glval) = VariableAddress[(unnamed local variable)] : +# 99| r99_61(glval) = FunctionAddress[final_suspend] : +# 99| r99_62(suspend_always) = Call[final_suspend] : func:r99_61, this:r99_60 +# 99| mu99_63(unknown) = ^CallSideEffect : ~m? +# 99| v99_64(void) = ^IndirectReadSideEffect[-1] : &:r99_60, ~m? +# 99| mu99_65(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_60 +#-----| r0_29(glval) = VariableAddress[#temp0:0] : +# 99| r99_66(glval) = VariableAddress[#temp99:21] : +# 99| r99_67(glval) = VariableAddress[(unnamed local variable)] : +# 99| r99_68(glval) = FunctionAddress[final_suspend] : +# 99| r99_69(suspend_always) = Call[final_suspend] : func:r99_68, this:r99_67 +# 99| mu99_70(unknown) = ^CallSideEffect : ~m? +# 99| v99_71(void) = ^IndirectReadSideEffect[-1] : &:r99_67, ~m? +# 99| mu99_72(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_67 +# 99| mu99_73(suspend_always) = Store[#temp99:21] : &:r99_66, r99_69 +# 99| r99_74(suspend_always *) = CopyValue : r99_66 +# 99| mu99_75(suspend_always *) = Store[#temp0:0] : &:r0_29, r99_74 +#-----| r0_30(suspend_always *) = Load[#temp0:0] : &:r0_29, ~m? +# 99| r99_76(glval) = CopyValue : r0_30 +# 99| r99_77(glval) = Convert : r99_76 +# 99| r99_78(glval) = FunctionAddress[await_ready] : +# 99| r99_79(bool) = Call[await_ready] : func:r99_78, this:r99_77 +# 99| mu99_80(unknown) = ^CallSideEffect : ~m? +# 99| v99_81(void) = ^IndirectReadSideEffect[-1] : &:r99_77, ~m? +#-----| v0_31(void) = ConditionalBranch : r99_79 +#-----| False -> Block 12 +#-----| True -> Block 11 -#-----| Block 15 -#-----| v0_34(void) = NoOp : -# 99| r99_97(glval) = VariableAddress[(unnamed local variable)] : -# 99| r99_98(glval) = FunctionAddress[final_suspend] : -# 99| r99_99(suspend_always) = Call[final_suspend] : func:r99_98, this:r99_97 -# 99| mu99_100(unknown) = ^CallSideEffect : ~m? -# 99| v99_101(void) = ^IndirectReadSideEffect[-1] : &:r99_97, ~m? -# 99| mu99_102(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r99_97 -#-----| v0_35(void) = CopyValue : r99_99 -# 99| r99_103(glval) = VariableAddress[#return] : -# 99| v99_104(void) = ReturnValue : &:r99_103, ~m? +# 99| Block 11 +# 99| r99_82(suspend_always *) = CopyValue : r99_74 +# 99| r99_83(glval) = CopyValue : r99_82 +#-----| r0_32(glval) = Convert : r99_83 +# 99| r99_84(glval) = FunctionAddress[await_resume] : +# 99| v99_85(void) = Call[await_resume] : func:r99_84, this:r0_32 +# 99| mu99_86(unknown) = ^CallSideEffect : ~m? +#-----| v0_33(void) = ^IndirectReadSideEffect[-1] : &:r0_32, ~m? +# 99| r99_87(glval) = VariableAddress[#return] : +# 99| v99_88(void) = ReturnValue : &:r99_87, ~m? #-----| Goto -> Block 1 +# 99| Block 12 +# 99| r99_89(suspend_always *) = CopyValue : r99_74 +# 99| r99_90(glval) = CopyValue : r99_89 +#-----| r0_34(glval) = Convert : r99_90 +# 99| r99_91(glval) = FunctionAddress[await_suspend] : +# 99| r99_92(glval>) = VariableAddress[#temp99:21] : +# 99| mu99_93(coroutine_handle) = Uninitialized[#temp99:21] : &:r99_92 +# 99| r99_94(glval) = FunctionAddress[coroutine_handle] : +# 99| r99_95(glval>) = VariableAddress : +# 99| r99_96(glval>) = Convert : r99_95 +# 99| r99_97(coroutine_handle &) = CopyValue : r99_96 +# 99| v99_98(void) = Call[coroutine_handle] : func:r99_94, this:r99_92, 0:r99_97 +# 99| mu99_99(unknown) = ^CallSideEffect : ~m? +# 99| v99_100(void) = ^BufferReadSideEffect[0] : &:r99_97, ~m? +# 99| mu99_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r99_92 +# 99| r99_102(coroutine_handle) = Load[#temp99:21] : &:r99_92, ~m? +# 99| v99_103(void) = Call[await_suspend] : func:r99_91, this:r0_34, 0:r99_102 +# 99| mu99_104(unknown) = ^CallSideEffect : ~m? +#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, ~m? +#-----| Goto -> Block 11 + # 103| co_returnable_void co_yield_and_return_void(int) # 103| Block 0 -# 103| v103_1(void) = EnterFunction : -# 103| mu103_2(unknown) = AliasedDefinition : -# 103| mu103_3(unknown) = InitializeNonLocal : -# 103| r103_4(glval) = VariableAddress[i] : -# 103| mu103_5(int) = InitializeParameter[i] : &:r103_4 -#-----| r0_1(glval) = VariableAddress[i] : -#-----| r0_2(glval) = VariableAddress[i] : -#-----| r0_3(int) = Load[i] : &:r0_2, ~m? -#-----| mu0_4(int) = Store[i] : &:r0_1, r0_3 -# 103| r103_6(glval) = VariableAddress[(unnamed local variable)] : -# 103| mu103_7(promise_type) = Uninitialized[(unnamed local variable)] : &:r103_6 -# 103| r103_8(glval) = VariableAddress[(unnamed local variable)] : -# 103| r103_9(glval) = FunctionAddress[initial_suspend] : -# 103| r103_10(suspend_always) = Call[initial_suspend] : func:r103_9, this:r103_8 -# 103| mu103_11(unknown) = ^CallSideEffect : ~m? -# 103| v103_12(void) = ^IndirectReadSideEffect[-1] : &:r103_8, ~m? -# 103| mu103_13(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_8 -#-----| v0_5(void) = CopyValue : r103_10 -# 104| r104_1(glval) = VariableAddress[(unnamed local variable)] : -# 104| r104_2(glval) = FunctionAddress[yield_value] : -# 104| r104_3(glval) = VariableAddress[i] : -# 104| r104_4(int) = Load[i] : &:r104_3, ~m? -# 104| r104_5(suspend_always) = Call[yield_value] : func:r104_2, this:r104_1, 0:r104_4 -# 104| mu104_6(unknown) = ^CallSideEffect : ~m? -# 104| v104_7(void) = ^IndirectReadSideEffect[-1] : &:r104_1, ~m? -# 104| mu104_8(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r104_1 -# 104| v104_9(void) = CopyValue : r104_5 -#-----| r0_6(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_7(glval) = FunctionAddress[return_void] : -#-----| v0_8(void) = Call[return_void] : func:r0_7, this:r0_6 -#-----| mu0_9(unknown) = ^CallSideEffect : ~m? -#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_6, ~m? -#-----| mu0_11(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 -# 105| v105_1(void) = NoOp : -#-----| v0_12(void) = NoOp : -#-----| Goto (back edge) -> Block 15 +# 103| v103_1(void) = EnterFunction : +# 103| mu103_2(unknown) = AliasedDefinition : +# 103| mu103_3(unknown) = InitializeNonLocal : +# 103| r103_4(glval) = VariableAddress[i] : +# 103| mu103_5(int) = InitializeParameter[i] : &:r103_4 +#-----| r0_1(glval) = VariableAddress[i] : +#-----| r0_2(glval) = VariableAddress[i] : +#-----| r0_3(int) = Load[i] : &:r0_2, ~m? +#-----| mu0_4(int) = Store[i] : &:r0_1, r0_3 +# 103| r103_6(glval) = VariableAddress[(unnamed local variable)] : +# 103| mu103_7(promise_type) = Uninitialized[(unnamed local variable)] : &:r103_6 +# 103| r103_8(glval) = VariableAddress[(unnamed local variable)] : +# 103| r103_9(glval) = FunctionAddress[initial_suspend] : +# 103| r103_10(suspend_always) = Call[initial_suspend] : func:r103_9, this:r103_8 +# 103| mu103_11(unknown) = ^CallSideEffect : ~m? +# 103| v103_12(void) = ^IndirectReadSideEffect[-1] : &:r103_8, ~m? +# 103| mu103_13(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_8 +#-----| r0_5(glval) = VariableAddress[#temp0:0] : +# 103| r103_14(glval) = VariableAddress[#temp103:20] : +# 103| r103_15(glval) = VariableAddress[(unnamed local variable)] : +# 103| r103_16(glval) = FunctionAddress[initial_suspend] : +# 103| r103_17(suspend_always) = Call[initial_suspend] : func:r103_16, this:r103_15 +# 103| mu103_18(unknown) = ^CallSideEffect : ~m? +# 103| v103_19(void) = ^IndirectReadSideEffect[-1] : &:r103_15, ~m? +# 103| mu103_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_15 +# 103| mu103_21(suspend_always) = Store[#temp103:20] : &:r103_14, r103_17 +# 103| r103_22(suspend_always *) = CopyValue : r103_14 +# 103| mu103_23(suspend_always *) = Store[#temp0:0] : &:r0_5, r103_22 +#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, ~m? +# 103| r103_24(glval) = CopyValue : r0_6 +# 103| r103_25(glval) = Convert : r103_24 +# 103| r103_26(glval) = FunctionAddress[await_ready] : +# 103| r103_27(bool) = Call[await_ready] : func:r103_26, this:r103_25 +# 103| mu103_28(unknown) = ^CallSideEffect : ~m? +# 103| v103_29(void) = ^IndirectReadSideEffect[-1] : &:r103_25, ~m? +#-----| v0_7(void) = ConditionalBranch : r103_27 +#-----| False -> Block 4 +#-----| True -> Block 3 # 103| Block 1 -# 103| v103_14(void) = AliasedUse : ~m? -# 103| v103_15(void) = ExitFunction : +# 103| v103_30(void) = AliasedUse : ~m? +# 103| v103_31(void) = ExitFunction : # 103| Block 2 -# 103| v103_16(void) = Unwind : +# 103| v103_32(void) = Unwind : #-----| Goto -> Block 1 #-----| Block 3 -#-----| r0_13(bool) = Constant[1] : -#-----| r0_14(glval) = VariableAddress : -#-----| mu0_15(bool) = Store[?] : &:r0_14, r0_13 -# 103| r103_23(suspend_always *) = CopyValue : r103_75 -# 103| r103_27(glval) = CopyValue : r103_23 -#-----| r0_21(glval) = Convert : r103_27 -# 103| r103_34(glval) = FunctionAddress[await_resume] : -# 103| v103_37(void) = Call[await_resume] : func:r103_34, this:r0_21 -# 103| mu103_40(unknown) = ^CallSideEffect : ~m? -#-----| v0_24(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m? -#-----| v0_25(void) = CopyValue : v103_37 - -# 103| Block 3 -# 103| r103_17(suspend_always *) = CopyValue : r103_75 -# 103| r103_20(glval) = CopyValue : r103_17 -#-----| r0_15(glval) = Convert : r103_20 -# 103| r103_23(glval) = FunctionAddress[await_suspend] : -# 103| r103_27(glval>) = VariableAddress[#temp103:20] : -# 103| mu103_31(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_27 -# 103| r103_34(glval) = FunctionAddress[coroutine_handle] : -# 103| r103_37(glval>) = VariableAddress : -# 103| r103_40(glval>) = Convert : r103_37 -# 103| r103_43(coroutine_handle &) = CopyValue : r103_40 -# 103| v103_45(void) = Call[coroutine_handle] : func:r103_34, this:r103_27, 0:r103_43 -# 103| mu103_47(unknown) = ^CallSideEffect : ~m? -# 103| v103_49(void) = ^BufferReadSideEffect[0] : &:r103_43, ~m? -# 103| mu103_51(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_27 -# 103| r103_53(coroutine_handle) = Load[#temp103:20] : &:r103_27, ~m? -# 103| v103_55(void) = Call[await_suspend] : func:r103_23, this:r0_15, 0:r103_53 -# 103| mu103_57(unknown) = ^CallSideEffect : ~m? -#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -# 104| Block 3 -# 104| r104_10(suspend_always *) = CopyValue : r104_41 -# 104| r104_12(glval) = CopyValue : r104_10 -#-----| r0_15(glval) = Convert : r104_12 -# 104| r104_14(glval) = FunctionAddress[await_resume] : -# 104| v104_16(void) = Call[await_resume] : func:r104_14, this:r0_15 -# 104| mu104_18(unknown) = ^CallSideEffect : ~m? -#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -# 104| Block 3 -# 104| r104_10(suspend_always *) = CopyValue : r104_41 -# 104| r104_12(glval) = CopyValue : r104_10 -#-----| r0_15(glval) = Convert : r104_12 -# 104| r104_14(glval) = FunctionAddress[await_suspend] : -# 104| r104_16(glval>) = VariableAddress[#temp104:3] : -# 104| mu104_18(coroutine_handle) = Uninitialized[#temp104:3] : &:r104_16 -# 104| r104_20(glval) = FunctionAddress[coroutine_handle] : -# 104| r104_21(glval>) = VariableAddress : -# 104| r104_22(glval>) = Convert : r104_21 -# 104| r104_23(coroutine_handle &) = CopyValue : r104_22 -# 104| v104_24(void) = Call[coroutine_handle] : func:r104_20, this:r104_16, 0:r104_23 -# 104| mu104_25(unknown) = ^CallSideEffect : ~m? -# 104| v104_26(void) = ^BufferReadSideEffect[0] : &:r104_23, ~m? -# 104| mu104_27(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r104_16 -# 104| r104_28(coroutine_handle) = Load[#temp104:3] : &:r104_16, ~m? -# 104| v104_29(void) = Call[await_suspend] : func:r104_14, this:r0_15, 0:r104_28 -# 104| mu104_30(unknown) = ^CallSideEffect : ~m? -#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -# 103| Block 3 -# 103| r103_17(suspend_always *) = CopyValue : r103_75 -# 103| r103_20(glval) = CopyValue : r103_17 -#-----| r0_15(glval) = Convert : r103_20 -# 103| r103_23(glval) = FunctionAddress[await_resume] : -# 103| v103_27(void) = Call[await_resume] : func:r103_23, this:r0_15 -# 103| mu103_31(unknown) = ^CallSideEffect : ~m? -#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -# 103| Block 3 -# 103| r103_17(suspend_always *) = CopyValue : r103_75 -# 103| r103_20(glval) = CopyValue : r103_17 -#-----| r0_15(glval) = Convert : r103_20 -# 103| r103_23(glval) = FunctionAddress[await_suspend] : -# 103| r103_27(glval>) = VariableAddress[#temp103:20] : -# 103| mu103_31(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_27 -# 103| r103_34(glval) = FunctionAddress[coroutine_handle] : -# 103| r103_37(glval>) = VariableAddress : -# 103| r103_40(glval>) = Convert : r103_37 -# 103| r103_43(coroutine_handle &) = CopyValue : r103_40 -# 103| v103_45(void) = Call[coroutine_handle] : func:r103_34, this:r103_27, 0:r103_43 -# 103| mu103_47(unknown) = ^CallSideEffect : ~m? -# 103| v103_49(void) = ^BufferReadSideEffect[0] : &:r103_43, ~m? -# 103| mu103_51(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_27 -# 103| r103_53(coroutine_handle) = Load[#temp103:20] : &:r103_27, ~m? -# 103| v103_55(void) = Call[await_suspend] : func:r103_23, this:r0_15, 0:r103_53 -# 103| mu103_57(unknown) = ^CallSideEffect : ~m? -#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -#-----| Block 9 -#-----| r0_29(glval) = VariableAddress[#temp0:0] : -# 103| r103_59(glval) = VariableAddress[#temp103:20] : -# 103| r103_61(glval) = VariableAddress[(unnamed local variable)] : -# 103| r103_63(glval) = FunctionAddress[initial_suspend] : -# 103| r103_65(suspend_always) = Call[initial_suspend] : func:r103_63, this:r103_61 -# 103| mu103_67(unknown) = ^CallSideEffect : ~m? -# 103| v103_69(void) = ^IndirectReadSideEffect[-1] : &:r103_61, ~m? -# 103| mu103_71(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_61 -# 103| mu103_73(suspend_always) = Store[#temp103:20] : &:r103_59, r103_65 -# 103| r103_75(suspend_always *) = CopyValue : r103_59 -# 103| mu103_77(suspend_always *) = Store[#temp0:0] : &:r0_29, r103_75 -#-----| r0_32(suspend_always *) = Load[#temp0:0] : &:r0_29, ~m? -# 103| r103_79(glval) = CopyValue : r0_32 -# 103| r103_81(glval) = Convert : r103_79 -# 103| r103_83(glval) = FunctionAddress[await_ready] : -# 103| r103_85(bool) = Call[await_ready] : func:r103_83, this:r103_81 -# 103| mu103_87(unknown) = ^CallSideEffect : ~m? -# 103| v103_89(void) = ^IndirectReadSideEffect[-1] : &:r103_81, ~m? - -#-----| Block 9 -#-----| r0_29(glval) = VariableAddress[#temp0:0] : -# 104| r104_31(glval) = VariableAddress[#temp104:13] : -# 104| r104_32(glval) = VariableAddress[(unnamed local variable)] : -# 104| r104_33(glval) = FunctionAddress[yield_value] : -# 104| r104_34(glval) = VariableAddress[i] : -# 104| r104_35(int) = Load[i] : &:r104_34, ~m? -# 104| r104_36(suspend_always) = Call[yield_value] : func:r104_33, this:r104_32, 0:r104_35 -# 104| mu104_37(unknown) = ^CallSideEffect : ~m? -# 104| v104_38(void) = ^IndirectReadSideEffect[-1] : &:r104_32, ~m? -# 104| mu104_39(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r104_32 -# 104| mu104_40(suspend_always) = Store[#temp104:13] : &:r104_31, r104_36 -# 104| r104_41(suspend_always *) = CopyValue : r104_31 -# 104| mu104_42(suspend_always *) = Store[#temp0:0] : &:r0_29, r104_41 -#-----| r0_34(suspend_always *) = Load[#temp0:0] : &:r0_29, ~m? -# 104| r104_43(glval) = CopyValue : r0_34 -# 104| r104_44(glval) = Convert : r104_43 -# 104| r104_45(glval) = FunctionAddress[await_ready] : -# 104| r104_46(bool) = Call[await_ready] : func:r104_45, this:r104_44 -# 104| mu104_47(unknown) = ^CallSideEffect : ~m? -# 104| v104_48(void) = ^IndirectReadSideEffect[-1] : &:r104_44, ~m? - -#-----| Block 9 -#-----| r0_29(glval) = VariableAddress[#temp0:0] : -# 103| r103_59(glval) = VariableAddress[#temp103:20] : -# 103| r103_61(glval) = VariableAddress[(unnamed local variable)] : -# 103| r103_63(glval) = FunctionAddress[final_suspend] : -# 103| r103_65(suspend_always) = Call[final_suspend] : func:r103_63, this:r103_61 -# 103| mu103_67(unknown) = ^CallSideEffect : ~m? -# 103| v103_69(void) = ^IndirectReadSideEffect[-1] : &:r103_61, ~m? -# 103| mu103_71(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_61 -# 103| mu103_73(suspend_always) = Store[#temp103:20] : &:r103_59, r103_65 -# 103| r103_75(suspend_always *) = CopyValue : r103_59 -# 103| mu103_77(suspend_always *) = Store[#temp0:0] : &:r0_29, r103_75 -#-----| r0_32(suspend_always *) = Load[#temp0:0] : &:r0_29, ~m? -# 103| r103_79(glval) = CopyValue : r0_32 -# 103| r103_81(glval) = Convert : r103_79 -# 103| r103_83(glval) = FunctionAddress[await_ready] : -# 103| r103_85(bool) = Call[await_ready] : func:r103_83, this:r103_81 -# 103| mu103_87(unknown) = ^CallSideEffect : ~m? -# 103| v103_89(void) = ^IndirectReadSideEffect[-1] : &:r103_81, ~m? - -#-----| Block 12 -#-----| v0_35(void) = CatchAny : -#-----| r0_36(glval) = VariableAddress : -#-----| r0_37(bool) = Load[?] : &:r0_36, ~m? -#-----| r0_38(bool) = LogicalNot : r0_37 -#-----| v0_39(void) = ConditionalBranch : r0_38 -#-----| False -> Block 14 -#-----| True -> Block 13 +#-----| r0_8(bool) = Constant[1] : +#-----| r0_9(glval) = VariableAddress : +#-----| mu0_10(bool) = Store[?] : &:r0_9, r0_8 +# 103| r103_33(suspend_always *) = CopyValue : r103_22 +# 103| r103_34(glval) = CopyValue : r103_33 +#-----| r0_11(glval) = Convert : r103_34 +# 103| r103_35(glval) = FunctionAddress[await_resume] : +# 103| v103_36(void) = Call[await_resume] : func:r103_35, this:r0_11 +# 103| mu103_37(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? +#-----| v0_13(void) = CopyValue : v103_36 +# 104| r104_1(glval) = VariableAddress[(unnamed local variable)] : +# 104| r104_2(glval) = FunctionAddress[yield_value] : +# 104| r104_3(glval) = VariableAddress[i] : +# 104| r104_4(int) = Load[i] : &:r104_3, ~m? +# 104| r104_5(suspend_always) = Call[yield_value] : func:r104_2, this:r104_1, 0:r104_4 +# 104| mu104_6(unknown) = ^CallSideEffect : ~m? +# 104| v104_7(void) = ^IndirectReadSideEffect[-1] : &:r104_1, ~m? +# 104| mu104_8(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r104_1 +#-----| r0_14(glval) = VariableAddress[#temp0:0] : +# 104| r104_9(glval) = VariableAddress[#temp104:13] : +# 104| r104_10(glval) = VariableAddress[(unnamed local variable)] : +# 104| r104_11(glval) = FunctionAddress[yield_value] : +# 104| r104_12(glval) = VariableAddress[i] : +# 104| r104_13(int) = Load[i] : &:r104_12, ~m? +# 104| r104_14(suspend_always) = Call[yield_value] : func:r104_11, this:r104_10, 0:r104_13 +# 104| mu104_15(unknown) = ^CallSideEffect : ~m? +# 104| v104_16(void) = ^IndirectReadSideEffect[-1] : &:r104_10, ~m? +# 104| mu104_17(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r104_10 +# 104| mu104_18(suspend_always) = Store[#temp104:13] : &:r104_9, r104_14 +# 104| r104_19(suspend_always *) = CopyValue : r104_9 +# 104| mu104_20(suspend_always *) = Store[#temp0:0] : &:r0_14, r104_19 +#-----| r0_15(suspend_always *) = Load[#temp0:0] : &:r0_14, ~m? +# 104| r104_21(glval) = CopyValue : r0_15 +# 104| r104_22(glval) = Convert : r104_21 +# 104| r104_23(glval) = FunctionAddress[await_ready] : +# 104| r104_24(bool) = Call[await_ready] : func:r104_23, this:r104_22 +# 104| mu104_25(unknown) = ^CallSideEffect : ~m? +# 104| v104_26(void) = ^IndirectReadSideEffect[-1] : &:r104_22, ~m? +# 104| v104_27(void) = ConditionalBranch : r104_24 +#-----| False -> Block 6 +#-----| True -> Block 5 -#-----| Block 13 -#-----| v0_40(void) = ReThrow : +# 103| Block 4 +# 103| r103_38(suspend_always *) = CopyValue : r103_22 +# 103| r103_39(glval) = CopyValue : r103_38 +#-----| r0_16(glval) = Convert : r103_39 +# 103| r103_40(glval) = FunctionAddress[await_suspend] : +# 103| r103_41(glval>) = VariableAddress[#temp103:20] : +# 103| mu103_42(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_41 +# 103| r103_43(glval) = FunctionAddress[coroutine_handle] : +# 103| r103_44(glval>) = VariableAddress : +# 103| r103_45(glval>) = Convert : r103_44 +# 103| r103_46(coroutine_handle &) = CopyValue : r103_45 +# 103| v103_47(void) = Call[coroutine_handle] : func:r103_43, this:r103_41, 0:r103_46 +# 103| mu103_48(unknown) = ^CallSideEffect : ~m? +# 103| v103_49(void) = ^BufferReadSideEffect[0] : &:r103_46, ~m? +# 103| mu103_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_41 +# 103| r103_51(coroutine_handle) = Load[#temp103:20] : &:r103_41, ~m? +# 103| v103_52(void) = Call[await_suspend] : func:r103_40, this:r0_16, 0:r103_51 +# 103| mu103_53(unknown) = ^CallSideEffect : ~m? +#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_16, ~m? +#-----| Goto -> Block 3 + +# 104| Block 5 +# 104| r104_28(suspend_always *) = CopyValue : r104_19 +# 104| r104_29(glval) = CopyValue : r104_28 +#-----| r0_18(glval) = Convert : r104_29 +# 104| r104_30(glval) = FunctionAddress[await_resume] : +# 104| v104_31(void) = Call[await_resume] : func:r104_30, this:r0_18 +# 104| mu104_32(unknown) = ^CallSideEffect : ~m? +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m? +#-----| r0_20(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_21(glval) = FunctionAddress[return_void] : +#-----| v0_22(void) = Call[return_void] : func:r0_21, this:r0_20 +#-----| mu0_23(unknown) = ^CallSideEffect : ~m? +#-----| v0_24(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m? +#-----| mu0_25(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_20 +# 105| v105_1(void) = NoOp : +#-----| v0_26(void) = NoOp : +#-----| Goto (back edge) -> Block 10 + +# 104| Block 6 +# 104| r104_33(suspend_always *) = CopyValue : r104_19 +# 104| r104_34(glval) = CopyValue : r104_33 +#-----| r0_27(glval) = Convert : r104_34 +# 104| r104_35(glval) = FunctionAddress[await_suspend] : +# 104| r104_36(glval>) = VariableAddress[#temp104:3] : +# 104| mu104_37(coroutine_handle) = Uninitialized[#temp104:3] : &:r104_36 +# 104| r104_38(glval) = FunctionAddress[coroutine_handle] : +# 104| r104_39(glval>) = VariableAddress : +# 104| r104_40(glval>) = Convert : r104_39 +# 104| r104_41(coroutine_handle &) = CopyValue : r104_40 +# 104| v104_42(void) = Call[coroutine_handle] : func:r104_38, this:r104_36, 0:r104_41 +# 104| mu104_43(unknown) = ^CallSideEffect : ~m? +# 104| v104_44(void) = ^BufferReadSideEffect[0] : &:r104_41, ~m? +# 104| mu104_45(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r104_36 +# 104| r104_46(coroutine_handle) = Load[#temp104:3] : &:r104_36, ~m? +# 104| v104_47(void) = Call[await_suspend] : func:r104_35, this:r0_27, 0:r104_46 +# 104| mu104_48(unknown) = ^CallSideEffect : ~m? +#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m? +#-----| Goto -> Block 5 + +#-----| Block 7 +#-----| v0_29(void) = CatchAny : +#-----| r0_30(glval) = VariableAddress : +#-----| r0_31(bool) = Load[?] : &:r0_30, ~m? +#-----| r0_32(bool) = LogicalNot : r0_31 +#-----| v0_33(void) = ConditionalBranch : r0_32 +#-----| False -> Block 9 +#-----| True -> Block 8 + +#-----| Block 8 +#-----| v0_34(void) = ReThrow : #-----| Exception -> Block 2 -# 103| Block 14 -# 103| r103_91(glval) = VariableAddress[(unnamed local variable)] : -# 103| r103_92(glval) = FunctionAddress[unhandled_exception] : -# 103| v103_93(void) = Call[unhandled_exception] : func:r103_92, this:r103_91 -# 103| mu103_94(unknown) = ^CallSideEffect : ~m? -# 103| v103_95(void) = ^IndirectReadSideEffect[-1] : &:r103_91, ~m? -# 103| mu103_96(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_91 -#-----| Goto -> Block 15 +# 103| Block 9 +# 103| r103_54(glval) = VariableAddress[(unnamed local variable)] : +# 103| r103_55(glval) = FunctionAddress[unhandled_exception] : +# 103| v103_56(void) = Call[unhandled_exception] : func:r103_55, this:r103_54 +# 103| mu103_57(unknown) = ^CallSideEffect : ~m? +# 103| v103_58(void) = ^IndirectReadSideEffect[-1] : &:r103_54, ~m? +# 103| mu103_59(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_54 +#-----| Goto -> Block 10 + +#-----| Block 10 +#-----| v0_35(void) = NoOp : +# 103| r103_60(glval) = VariableAddress[(unnamed local variable)] : +# 103| r103_61(glval) = FunctionAddress[final_suspend] : +# 103| r103_62(suspend_always) = Call[final_suspend] : func:r103_61, this:r103_60 +# 103| mu103_63(unknown) = ^CallSideEffect : ~m? +# 103| v103_64(void) = ^IndirectReadSideEffect[-1] : &:r103_60, ~m? +# 103| mu103_65(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_60 +#-----| r0_36(glval) = VariableAddress[#temp0:0] : +# 103| r103_66(glval) = VariableAddress[#temp103:20] : +# 103| r103_67(glval) = VariableAddress[(unnamed local variable)] : +# 103| r103_68(glval) = FunctionAddress[final_suspend] : +# 103| r103_69(suspend_always) = Call[final_suspend] : func:r103_68, this:r103_67 +# 103| mu103_70(unknown) = ^CallSideEffect : ~m? +# 103| v103_71(void) = ^IndirectReadSideEffect[-1] : &:r103_67, ~m? +# 103| mu103_72(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_67 +# 103| mu103_73(suspend_always) = Store[#temp103:20] : &:r103_66, r103_69 +# 103| r103_74(suspend_always *) = CopyValue : r103_66 +# 103| mu103_75(suspend_always *) = Store[#temp0:0] : &:r0_36, r103_74 +#-----| r0_37(suspend_always *) = Load[#temp0:0] : &:r0_36, ~m? +# 103| r103_76(glval) = CopyValue : r0_37 +# 103| r103_77(glval) = Convert : r103_76 +# 103| r103_78(glval) = FunctionAddress[await_ready] : +# 103| r103_79(bool) = Call[await_ready] : func:r103_78, this:r103_77 +# 103| mu103_80(unknown) = ^CallSideEffect : ~m? +# 103| v103_81(void) = ^IndirectReadSideEffect[-1] : &:r103_77, ~m? +#-----| v0_38(void) = ConditionalBranch : r103_79 +#-----| False -> Block 12 +#-----| True -> Block 11 -#-----| Block 15 -#-----| v0_41(void) = NoOp : -# 103| r103_97(glval) = VariableAddress[(unnamed local variable)] : -# 103| r103_98(glval) = FunctionAddress[final_suspend] : -# 103| r103_99(suspend_always) = Call[final_suspend] : func:r103_98, this:r103_97 -# 103| mu103_100(unknown) = ^CallSideEffect : ~m? -# 103| v103_101(void) = ^IndirectReadSideEffect[-1] : &:r103_97, ~m? -# 103| mu103_102(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r103_97 -#-----| v0_42(void) = CopyValue : r103_99 -# 103| r103_103(glval) = VariableAddress[#return] : -# 103| v103_104(void) = ReturnValue : &:r103_103, ~m? +# 103| Block 11 +# 103| r103_82(suspend_always *) = CopyValue : r103_74 +# 103| r103_83(glval) = CopyValue : r103_82 +#-----| r0_39(glval) = Convert : r103_83 +# 103| r103_84(glval) = FunctionAddress[await_resume] : +# 103| v103_85(void) = Call[await_resume] : func:r103_84, this:r0_39 +# 103| mu103_86(unknown) = ^CallSideEffect : ~m? +#-----| v0_40(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m? +# 103| r103_87(glval) = VariableAddress[#return] : +# 103| v103_88(void) = ReturnValue : &:r103_87, ~m? #-----| Goto -> Block 1 +# 103| Block 12 +# 103| r103_89(suspend_always *) = CopyValue : r103_74 +# 103| r103_90(glval) = CopyValue : r103_89 +#-----| r0_41(glval) = Convert : r103_90 +# 103| r103_91(glval) = FunctionAddress[await_suspend] : +# 103| r103_92(glval>) = VariableAddress[#temp103:20] : +# 103| mu103_93(coroutine_handle) = Uninitialized[#temp103:20] : &:r103_92 +# 103| r103_94(glval) = FunctionAddress[coroutine_handle] : +# 103| r103_95(glval>) = VariableAddress : +# 103| r103_96(glval>) = Convert : r103_95 +# 103| r103_97(coroutine_handle &) = CopyValue : r103_96 +# 103| v103_98(void) = Call[coroutine_handle] : func:r103_94, this:r103_92, 0:r103_97 +# 103| mu103_99(unknown) = ^CallSideEffect : ~m? +# 103| v103_100(void) = ^BufferReadSideEffect[0] : &:r103_97, ~m? +# 103| mu103_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r103_92 +# 103| r103_102(coroutine_handle) = Load[#temp103:20] : &:r103_92, ~m? +# 103| v103_103(void) = Call[await_suspend] : func:r103_91, this:r0_41, 0:r103_102 +# 103| mu103_104(unknown) = ^CallSideEffect : ~m? +#-----| v0_42(void) = ^IndirectReadSideEffect[-1] : &:r0_41, ~m? +#-----| Goto -> Block 11 + # 108| co_returnable_value co_yield_and_return_value(int) # 108| Block 0 -# 108| v108_1(void) = EnterFunction : -# 108| mu108_2(unknown) = AliasedDefinition : -# 108| mu108_3(unknown) = InitializeNonLocal : -# 108| r108_4(glval) = VariableAddress[i] : -# 108| mu108_5(int) = InitializeParameter[i] : &:r108_4 -#-----| r0_1(glval) = VariableAddress[i] : -#-----| r0_2(glval) = VariableAddress[i] : -#-----| r0_3(int) = Load[i] : &:r0_2, ~m? -#-----| mu0_4(int) = Store[i] : &:r0_1, r0_3 -# 108| r108_6(glval) = VariableAddress[(unnamed local variable)] : -# 108| mu108_7(promise_type) = Uninitialized[(unnamed local variable)] : &:r108_6 -# 108| r108_8(glval) = VariableAddress[(unnamed local variable)] : -# 108| r108_9(glval) = FunctionAddress[initial_suspend] : -# 108| r108_10(suspend_always) = Call[initial_suspend] : func:r108_9, this:r108_8 -# 108| mu108_11(unknown) = ^CallSideEffect : ~m? -# 108| v108_12(void) = ^IndirectReadSideEffect[-1] : &:r108_8, ~m? -# 108| mu108_13(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_8 -#-----| v0_5(void) = CopyValue : r108_10 -# 109| r109_1(glval) = VariableAddress[(unnamed local variable)] : -# 109| r109_2(glval) = FunctionAddress[yield_value] : -# 109| r109_3(glval) = VariableAddress[i] : -# 109| r109_4(int) = Load[i] : &:r109_3, ~m? -# 109| r109_5(suspend_always) = Call[yield_value] : func:r109_2, this:r109_1, 0:r109_4 -# 109| mu109_6(unknown) = ^CallSideEffect : ~m? -# 109| v109_7(void) = ^IndirectReadSideEffect[-1] : &:r109_1, ~m? -# 109| mu109_8(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r109_1 -# 109| v109_9(void) = CopyValue : r109_5 -#-----| r0_6(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_7(glval) = FunctionAddress[return_value] : -# 110| r110_1(glval) = VariableAddress[i] : -# 110| r110_2(int) = Load[i] : &:r110_1, ~m? -# 110| r110_3(int) = Constant[1] : -# 110| r110_4(int) = Add : r110_2, r110_3 -#-----| v0_8(void) = Call[return_value] : func:r0_7, this:r0_6, 0:r110_4 -#-----| mu0_9(unknown) = ^CallSideEffect : ~m? -#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_6, ~m? -#-----| mu0_11(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 -# 110| v110_5(void) = NoOp : -#-----| v0_12(void) = NoOp : -#-----| Goto (back edge) -> Block 15 +# 108| v108_1(void) = EnterFunction : +# 108| mu108_2(unknown) = AliasedDefinition : +# 108| mu108_3(unknown) = InitializeNonLocal : +# 108| r108_4(glval) = VariableAddress[i] : +# 108| mu108_5(int) = InitializeParameter[i] : &:r108_4 +#-----| r0_1(glval) = VariableAddress[i] : +#-----| r0_2(glval) = VariableAddress[i] : +#-----| r0_3(int) = Load[i] : &:r0_2, ~m? +#-----| mu0_4(int) = Store[i] : &:r0_1, r0_3 +# 108| r108_6(glval) = VariableAddress[(unnamed local variable)] : +# 108| mu108_7(promise_type) = Uninitialized[(unnamed local variable)] : &:r108_6 +# 108| r108_8(glval) = VariableAddress[(unnamed local variable)] : +# 108| r108_9(glval) = FunctionAddress[initial_suspend] : +# 108| r108_10(suspend_always) = Call[initial_suspend] : func:r108_9, this:r108_8 +# 108| mu108_11(unknown) = ^CallSideEffect : ~m? +# 108| v108_12(void) = ^IndirectReadSideEffect[-1] : &:r108_8, ~m? +# 108| mu108_13(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_8 +#-----| r0_5(glval) = VariableAddress[#temp0:0] : +# 108| r108_14(glval) = VariableAddress[#temp108:21] : +# 108| r108_15(glval) = VariableAddress[(unnamed local variable)] : +# 108| r108_16(glval) = FunctionAddress[initial_suspend] : +# 108| r108_17(suspend_always) = Call[initial_suspend] : func:r108_16, this:r108_15 +# 108| mu108_18(unknown) = ^CallSideEffect : ~m? +# 108| v108_19(void) = ^IndirectReadSideEffect[-1] : &:r108_15, ~m? +# 108| mu108_20(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_15 +# 108| mu108_21(suspend_always) = Store[#temp108:21] : &:r108_14, r108_17 +# 108| r108_22(suspend_always *) = CopyValue : r108_14 +# 108| mu108_23(suspend_always *) = Store[#temp0:0] : &:r0_5, r108_22 +#-----| r0_6(suspend_always *) = Load[#temp0:0] : &:r0_5, ~m? +# 108| r108_24(glval) = CopyValue : r0_6 +# 108| r108_25(glval) = Convert : r108_24 +# 108| r108_26(glval) = FunctionAddress[await_ready] : +# 108| r108_27(bool) = Call[await_ready] : func:r108_26, this:r108_25 +# 108| mu108_28(unknown) = ^CallSideEffect : ~m? +# 108| v108_29(void) = ^IndirectReadSideEffect[-1] : &:r108_25, ~m? +#-----| v0_7(void) = ConditionalBranch : r108_27 +#-----| False -> Block 4 +#-----| True -> Block 3 # 108| Block 1 -# 108| v108_14(void) = AliasedUse : ~m? -# 108| v108_15(void) = ExitFunction : +# 108| v108_30(void) = AliasedUse : ~m? +# 108| v108_31(void) = ExitFunction : # 108| Block 2 -# 108| v108_16(void) = Unwind : +# 108| v108_32(void) = Unwind : #-----| Goto -> Block 1 #-----| Block 3 -#-----| r0_13(bool) = Constant[1] : -#-----| r0_14(glval) = VariableAddress : -#-----| mu0_15(bool) = Store[?] : &:r0_14, r0_13 -# 108| r108_23(suspend_always *) = CopyValue : r108_75 -# 108| r108_27(glval) = CopyValue : r108_23 -#-----| r0_21(glval) = Convert : r108_27 -# 108| r108_34(glval) = FunctionAddress[await_resume] : -# 108| v108_37(void) = Call[await_resume] : func:r108_34, this:r0_21 -# 108| mu108_40(unknown) = ^CallSideEffect : ~m? -#-----| v0_24(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m? -#-----| v0_25(void) = CopyValue : v108_37 - -# 108| Block 3 -# 108| r108_17(suspend_always *) = CopyValue : r108_75 -# 108| r108_20(glval) = CopyValue : r108_17 -#-----| r0_15(glval) = Convert : r108_20 -# 108| r108_23(glval) = FunctionAddress[await_suspend] : -# 108| r108_27(glval>) = VariableAddress[#temp108:21] : -# 108| mu108_31(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_27 -# 108| r108_34(glval) = FunctionAddress[coroutine_handle] : -# 108| r108_37(glval>) = VariableAddress : -# 108| r108_40(glval>) = Convert : r108_37 -# 108| r108_43(coroutine_handle &) = CopyValue : r108_40 -# 108| v108_45(void) = Call[coroutine_handle] : func:r108_34, this:r108_27, 0:r108_43 -# 108| mu108_47(unknown) = ^CallSideEffect : ~m? -# 108| v108_49(void) = ^BufferReadSideEffect[0] : &:r108_43, ~m? -# 108| mu108_51(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_27 -# 108| r108_53(coroutine_handle) = Load[#temp108:21] : &:r108_27, ~m? -# 108| v108_55(void) = Call[await_suspend] : func:r108_23, this:r0_15, 0:r108_53 -# 108| mu108_57(unknown) = ^CallSideEffect : ~m? -#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -# 109| Block 3 -# 109| r109_10(suspend_always *) = CopyValue : r109_41 -# 109| r109_12(glval) = CopyValue : r109_10 -#-----| r0_15(glval) = Convert : r109_12 -# 109| r109_14(glval) = FunctionAddress[await_resume] : -# 109| v109_16(void) = Call[await_resume] : func:r109_14, this:r0_15 -# 109| mu109_18(unknown) = ^CallSideEffect : ~m? -#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -# 109| Block 3 -# 109| r109_10(suspend_always *) = CopyValue : r109_41 -# 109| r109_12(glval) = CopyValue : r109_10 -#-----| r0_15(glval) = Convert : r109_12 -# 109| r109_14(glval) = FunctionAddress[await_suspend] : -# 109| r109_16(glval>) = VariableAddress[#temp109:3] : -# 109| mu109_18(coroutine_handle) = Uninitialized[#temp109:3] : &:r109_16 -# 109| r109_20(glval) = FunctionAddress[coroutine_handle] : -# 109| r109_21(glval>) = VariableAddress : -# 109| r109_22(glval>) = Convert : r109_21 -# 109| r109_23(coroutine_handle &) = CopyValue : r109_22 -# 109| v109_24(void) = Call[coroutine_handle] : func:r109_20, this:r109_16, 0:r109_23 -# 109| mu109_25(unknown) = ^CallSideEffect : ~m? -# 109| v109_26(void) = ^BufferReadSideEffect[0] : &:r109_23, ~m? -# 109| mu109_27(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r109_16 -# 109| r109_28(coroutine_handle) = Load[#temp109:3] : &:r109_16, ~m? -# 109| v109_29(void) = Call[await_suspend] : func:r109_14, this:r0_15, 0:r109_28 -# 109| mu109_30(unknown) = ^CallSideEffect : ~m? -#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -# 108| Block 3 -# 108| r108_17(suspend_always *) = CopyValue : r108_75 -# 108| r108_20(glval) = CopyValue : r108_17 -#-----| r0_15(glval) = Convert : r108_20 -# 108| r108_23(glval) = FunctionAddress[await_resume] : -# 108| v108_27(void) = Call[await_resume] : func:r108_23, this:r0_15 -# 108| mu108_31(unknown) = ^CallSideEffect : ~m? -#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -# 108| Block 3 -# 108| r108_17(suspend_always *) = CopyValue : r108_75 -# 108| r108_20(glval) = CopyValue : r108_17 -#-----| r0_15(glval) = Convert : r108_20 -# 108| r108_23(glval) = FunctionAddress[await_suspend] : -# 108| r108_27(glval>) = VariableAddress[#temp108:21] : -# 108| mu108_31(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_27 -# 108| r108_34(glval) = FunctionAddress[coroutine_handle] : -# 108| r108_37(glval>) = VariableAddress : -# 108| r108_40(glval>) = Convert : r108_37 -# 108| r108_43(coroutine_handle &) = CopyValue : r108_40 -# 108| v108_45(void) = Call[coroutine_handle] : func:r108_34, this:r108_27, 0:r108_43 -# 108| mu108_47(unknown) = ^CallSideEffect : ~m? -# 108| v108_49(void) = ^BufferReadSideEffect[0] : &:r108_43, ~m? -# 108| mu108_51(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_27 -# 108| r108_53(coroutine_handle) = Load[#temp108:21] : &:r108_27, ~m? -# 108| v108_55(void) = Call[await_suspend] : func:r108_23, this:r0_15, 0:r108_53 -# 108| mu108_57(unknown) = ^CallSideEffect : ~m? -#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? - -#-----| Block 9 -#-----| r0_29(glval) = VariableAddress[#temp0:0] : -# 108| r108_59(glval) = VariableAddress[#temp108:21] : -# 108| r108_61(glval) = VariableAddress[(unnamed local variable)] : -# 108| r108_63(glval) = FunctionAddress[initial_suspend] : -# 108| r108_65(suspend_always) = Call[initial_suspend] : func:r108_63, this:r108_61 -# 108| mu108_67(unknown) = ^CallSideEffect : ~m? -# 108| v108_69(void) = ^IndirectReadSideEffect[-1] : &:r108_61, ~m? -# 108| mu108_71(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_61 -# 108| mu108_73(suspend_always) = Store[#temp108:21] : &:r108_59, r108_65 -# 108| r108_75(suspend_always *) = CopyValue : r108_59 -# 108| mu108_77(suspend_always *) = Store[#temp0:0] : &:r0_29, r108_75 -#-----| r0_32(suspend_always *) = Load[#temp0:0] : &:r0_29, ~m? -# 108| r108_79(glval) = CopyValue : r0_32 -# 108| r108_81(glval) = Convert : r108_79 -# 108| r108_83(glval) = FunctionAddress[await_ready] : -# 108| r108_85(bool) = Call[await_ready] : func:r108_83, this:r108_81 -# 108| mu108_87(unknown) = ^CallSideEffect : ~m? -# 108| v108_89(void) = ^IndirectReadSideEffect[-1] : &:r108_81, ~m? - -#-----| Block 9 -#-----| r0_29(glval) = VariableAddress[#temp0:0] : -# 109| r109_31(glval) = VariableAddress[#temp109:13] : -# 109| r109_32(glval) = VariableAddress[(unnamed local variable)] : -# 109| r109_33(glval) = FunctionAddress[yield_value] : -# 109| r109_34(glval) = VariableAddress[i] : -# 109| r109_35(int) = Load[i] : &:r109_34, ~m? -# 109| r109_36(suspend_always) = Call[yield_value] : func:r109_33, this:r109_32, 0:r109_35 -# 109| mu109_37(unknown) = ^CallSideEffect : ~m? -# 109| v109_38(void) = ^IndirectReadSideEffect[-1] : &:r109_32, ~m? -# 109| mu109_39(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r109_32 -# 109| mu109_40(suspend_always) = Store[#temp109:13] : &:r109_31, r109_36 -# 109| r109_41(suspend_always *) = CopyValue : r109_31 -# 109| mu109_42(suspend_always *) = Store[#temp0:0] : &:r0_29, r109_41 -#-----| r0_34(suspend_always *) = Load[#temp0:0] : &:r0_29, ~m? -# 109| r109_43(glval) = CopyValue : r0_34 -# 109| r109_44(glval) = Convert : r109_43 -# 109| r109_45(glval) = FunctionAddress[await_ready] : -# 109| r109_46(bool) = Call[await_ready] : func:r109_45, this:r109_44 -# 109| mu109_47(unknown) = ^CallSideEffect : ~m? -# 109| v109_48(void) = ^IndirectReadSideEffect[-1] : &:r109_44, ~m? - -#-----| Block 9 -#-----| r0_29(glval) = VariableAddress[#temp0:0] : -# 108| r108_59(glval) = VariableAddress[#temp108:21] : -# 108| r108_61(glval) = VariableAddress[(unnamed local variable)] : -# 108| r108_63(glval) = FunctionAddress[final_suspend] : -# 108| r108_65(suspend_always) = Call[final_suspend] : func:r108_63, this:r108_61 -# 108| mu108_67(unknown) = ^CallSideEffect : ~m? -# 108| v108_69(void) = ^IndirectReadSideEffect[-1] : &:r108_61, ~m? -# 108| mu108_71(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_61 -# 108| mu108_73(suspend_always) = Store[#temp108:21] : &:r108_59, r108_65 -# 108| r108_75(suspend_always *) = CopyValue : r108_59 -# 108| mu108_77(suspend_always *) = Store[#temp0:0] : &:r0_29, r108_75 -#-----| r0_32(suspend_always *) = Load[#temp0:0] : &:r0_29, ~m? -# 108| r108_79(glval) = CopyValue : r0_32 -# 108| r108_81(glval) = Convert : r108_79 -# 108| r108_83(glval) = FunctionAddress[await_ready] : -# 108| r108_85(bool) = Call[await_ready] : func:r108_83, this:r108_81 -# 108| mu108_87(unknown) = ^CallSideEffect : ~m? -# 108| v108_89(void) = ^IndirectReadSideEffect[-1] : &:r108_81, ~m? - -#-----| Block 12 -#-----| v0_35(void) = CatchAny : -#-----| r0_36(glval) = VariableAddress : -#-----| r0_37(bool) = Load[?] : &:r0_36, ~m? -#-----| r0_38(bool) = LogicalNot : r0_37 -#-----| v0_39(void) = ConditionalBranch : r0_38 -#-----| False -> Block 14 -#-----| True -> Block 13 +#-----| r0_8(bool) = Constant[1] : +#-----| r0_9(glval) = VariableAddress : +#-----| mu0_10(bool) = Store[?] : &:r0_9, r0_8 +# 108| r108_33(suspend_always *) = CopyValue : r108_22 +# 108| r108_34(glval) = CopyValue : r108_33 +#-----| r0_11(glval) = Convert : r108_34 +# 108| r108_35(glval) = FunctionAddress[await_resume] : +# 108| v108_36(void) = Call[await_resume] : func:r108_35, this:r0_11 +# 108| mu108_37(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? +#-----| v0_13(void) = CopyValue : v108_36 +# 109| r109_1(glval) = VariableAddress[(unnamed local variable)] : +# 109| r109_2(glval) = FunctionAddress[yield_value] : +# 109| r109_3(glval) = VariableAddress[i] : +# 109| r109_4(int) = Load[i] : &:r109_3, ~m? +# 109| r109_5(suspend_always) = Call[yield_value] : func:r109_2, this:r109_1, 0:r109_4 +# 109| mu109_6(unknown) = ^CallSideEffect : ~m? +# 109| v109_7(void) = ^IndirectReadSideEffect[-1] : &:r109_1, ~m? +# 109| mu109_8(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r109_1 +#-----| r0_14(glval) = VariableAddress[#temp0:0] : +# 109| r109_9(glval) = VariableAddress[#temp109:13] : +# 109| r109_10(glval) = VariableAddress[(unnamed local variable)] : +# 109| r109_11(glval) = FunctionAddress[yield_value] : +# 109| r109_12(glval) = VariableAddress[i] : +# 109| r109_13(int) = Load[i] : &:r109_12, ~m? +# 109| r109_14(suspend_always) = Call[yield_value] : func:r109_11, this:r109_10, 0:r109_13 +# 109| mu109_15(unknown) = ^CallSideEffect : ~m? +# 109| v109_16(void) = ^IndirectReadSideEffect[-1] : &:r109_10, ~m? +# 109| mu109_17(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r109_10 +# 109| mu109_18(suspend_always) = Store[#temp109:13] : &:r109_9, r109_14 +# 109| r109_19(suspend_always *) = CopyValue : r109_9 +# 109| mu109_20(suspend_always *) = Store[#temp0:0] : &:r0_14, r109_19 +#-----| r0_15(suspend_always *) = Load[#temp0:0] : &:r0_14, ~m? +# 109| r109_21(glval) = CopyValue : r0_15 +# 109| r109_22(glval) = Convert : r109_21 +# 109| r109_23(glval) = FunctionAddress[await_ready] : +# 109| r109_24(bool) = Call[await_ready] : func:r109_23, this:r109_22 +# 109| mu109_25(unknown) = ^CallSideEffect : ~m? +# 109| v109_26(void) = ^IndirectReadSideEffect[-1] : &:r109_22, ~m? +# 109| v109_27(void) = ConditionalBranch : r109_24 +#-----| False -> Block 6 +#-----| True -> Block 5 -#-----| Block 13 -#-----| v0_40(void) = ReThrow : +# 108| Block 4 +# 108| r108_38(suspend_always *) = CopyValue : r108_22 +# 108| r108_39(glval) = CopyValue : r108_38 +#-----| r0_16(glval) = Convert : r108_39 +# 108| r108_40(glval) = FunctionAddress[await_suspend] : +# 108| r108_41(glval>) = VariableAddress[#temp108:21] : +# 108| mu108_42(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_41 +# 108| r108_43(glval) = FunctionAddress[coroutine_handle] : +# 108| r108_44(glval>) = VariableAddress : +# 108| r108_45(glval>) = Convert : r108_44 +# 108| r108_46(coroutine_handle &) = CopyValue : r108_45 +# 108| v108_47(void) = Call[coroutine_handle] : func:r108_43, this:r108_41, 0:r108_46 +# 108| mu108_48(unknown) = ^CallSideEffect : ~m? +# 108| v108_49(void) = ^BufferReadSideEffect[0] : &:r108_46, ~m? +# 108| mu108_50(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_41 +# 108| r108_51(coroutine_handle) = Load[#temp108:21] : &:r108_41, ~m? +# 108| v108_52(void) = Call[await_suspend] : func:r108_40, this:r0_16, 0:r108_51 +# 108| mu108_53(unknown) = ^CallSideEffect : ~m? +#-----| v0_17(void) = ^IndirectReadSideEffect[-1] : &:r0_16, ~m? +#-----| Goto -> Block 3 + +# 109| Block 5 +# 109| r109_28(suspend_always *) = CopyValue : r109_19 +# 109| r109_29(glval) = CopyValue : r109_28 +#-----| r0_18(glval) = Convert : r109_29 +# 109| r109_30(glval) = FunctionAddress[await_resume] : +# 109| v109_31(void) = Call[await_resume] : func:r109_30, this:r0_18 +# 109| mu109_32(unknown) = ^CallSideEffect : ~m? +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m? +#-----| r0_20(glval) = VariableAddress[(unnamed local variable)] : +#-----| r0_21(glval) = FunctionAddress[return_value] : +# 110| r110_1(glval) = VariableAddress[i] : +# 110| r110_2(int) = Load[i] : &:r110_1, ~m? +# 110| r110_3(int) = Constant[1] : +# 110| r110_4(int) = Add : r110_2, r110_3 +#-----| v0_22(void) = Call[return_value] : func:r0_21, this:r0_20, 0:r110_4 +#-----| mu0_23(unknown) = ^CallSideEffect : ~m? +#-----| v0_24(void) = ^IndirectReadSideEffect[-1] : &:r0_20, ~m? +#-----| mu0_25(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r0_20 +# 110| v110_5(void) = NoOp : +#-----| v0_26(void) = NoOp : +#-----| Goto (back edge) -> Block 10 + +# 109| Block 6 +# 109| r109_33(suspend_always *) = CopyValue : r109_19 +# 109| r109_34(glval) = CopyValue : r109_33 +#-----| r0_27(glval) = Convert : r109_34 +# 109| r109_35(glval) = FunctionAddress[await_suspend] : +# 109| r109_36(glval>) = VariableAddress[#temp109:3] : +# 109| mu109_37(coroutine_handle) = Uninitialized[#temp109:3] : &:r109_36 +# 109| r109_38(glval) = FunctionAddress[coroutine_handle] : +# 109| r109_39(glval>) = VariableAddress : +# 109| r109_40(glval>) = Convert : r109_39 +# 109| r109_41(coroutine_handle &) = CopyValue : r109_40 +# 109| v109_42(void) = Call[coroutine_handle] : func:r109_38, this:r109_36, 0:r109_41 +# 109| mu109_43(unknown) = ^CallSideEffect : ~m? +# 109| v109_44(void) = ^BufferReadSideEffect[0] : &:r109_41, ~m? +# 109| mu109_45(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r109_36 +# 109| r109_46(coroutine_handle) = Load[#temp109:3] : &:r109_36, ~m? +# 109| v109_47(void) = Call[await_suspend] : func:r109_35, this:r0_27, 0:r109_46 +# 109| mu109_48(unknown) = ^CallSideEffect : ~m? +#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m? +#-----| Goto -> Block 5 + +#-----| Block 7 +#-----| v0_29(void) = CatchAny : +#-----| r0_30(glval) = VariableAddress : +#-----| r0_31(bool) = Load[?] : &:r0_30, ~m? +#-----| r0_32(bool) = LogicalNot : r0_31 +#-----| v0_33(void) = ConditionalBranch : r0_32 +#-----| False -> Block 9 +#-----| True -> Block 8 + +#-----| Block 8 +#-----| v0_34(void) = ReThrow : #-----| Exception -> Block 2 -# 108| Block 14 -# 108| r108_91(glval) = VariableAddress[(unnamed local variable)] : -# 108| r108_92(glval) = FunctionAddress[unhandled_exception] : -# 108| v108_93(void) = Call[unhandled_exception] : func:r108_92, this:r108_91 -# 108| mu108_94(unknown) = ^CallSideEffect : ~m? -# 108| v108_95(void) = ^IndirectReadSideEffect[-1] : &:r108_91, ~m? -# 108| mu108_96(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_91 -#-----| Goto -> Block 15 +# 108| Block 9 +# 108| r108_54(glval) = VariableAddress[(unnamed local variable)] : +# 108| r108_55(glval) = FunctionAddress[unhandled_exception] : +# 108| v108_56(void) = Call[unhandled_exception] : func:r108_55, this:r108_54 +# 108| mu108_57(unknown) = ^CallSideEffect : ~m? +# 108| v108_58(void) = ^IndirectReadSideEffect[-1] : &:r108_54, ~m? +# 108| mu108_59(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_54 +#-----| Goto -> Block 10 -#-----| Block 15 -#-----| v0_41(void) = NoOp : -# 108| r108_97(glval) = VariableAddress[(unnamed local variable)] : -# 108| r108_98(glval) = FunctionAddress[final_suspend] : -# 108| r108_99(suspend_always) = Call[final_suspend] : func:r108_98, this:r108_97 -# 108| mu108_100(unknown) = ^CallSideEffect : ~m? -# 108| v108_101(void) = ^IndirectReadSideEffect[-1] : &:r108_97, ~m? -# 108| mu108_102(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_97 -#-----| v0_42(void) = CopyValue : r108_99 -# 108| r108_103(glval) = VariableAddress[#return] : -# 108| v108_104(void) = ReturnValue : &:r108_103, ~m? +#-----| Block 10 +#-----| v0_35(void) = NoOp : +# 108| r108_60(glval) = VariableAddress[(unnamed local variable)] : +# 108| r108_61(glval) = FunctionAddress[final_suspend] : +# 108| r108_62(suspend_always) = Call[final_suspend] : func:r108_61, this:r108_60 +# 108| mu108_63(unknown) = ^CallSideEffect : ~m? +# 108| v108_64(void) = ^IndirectReadSideEffect[-1] : &:r108_60, ~m? +# 108| mu108_65(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_60 +#-----| r0_36(glval) = VariableAddress[#temp0:0] : +# 108| r108_66(glval) = VariableAddress[#temp108:21] : +# 108| r108_67(glval) = VariableAddress[(unnamed local variable)] : +# 108| r108_68(glval) = FunctionAddress[final_suspend] : +# 108| r108_69(suspend_always) = Call[final_suspend] : func:r108_68, this:r108_67 +# 108| mu108_70(unknown) = ^CallSideEffect : ~m? +# 108| v108_71(void) = ^IndirectReadSideEffect[-1] : &:r108_67, ~m? +# 108| mu108_72(promise_type) = ^IndirectMayWriteSideEffect[-1] : &:r108_67 +# 108| mu108_73(suspend_always) = Store[#temp108:21] : &:r108_66, r108_69 +# 108| r108_74(suspend_always *) = CopyValue : r108_66 +# 108| mu108_75(suspend_always *) = Store[#temp0:0] : &:r0_36, r108_74 +#-----| r0_37(suspend_always *) = Load[#temp0:0] : &:r0_36, ~m? +# 108| r108_76(glval) = CopyValue : r0_37 +# 108| r108_77(glval) = Convert : r108_76 +# 108| r108_78(glval) = FunctionAddress[await_ready] : +# 108| r108_79(bool) = Call[await_ready] : func:r108_78, this:r108_77 +# 108| mu108_80(unknown) = ^CallSideEffect : ~m? +# 108| v108_81(void) = ^IndirectReadSideEffect[-1] : &:r108_77, ~m? +#-----| v0_38(void) = ConditionalBranch : r108_79 +#-----| False -> Block 12 +#-----| True -> Block 11 + +# 108| Block 11 +# 108| r108_82(suspend_always *) = CopyValue : r108_74 +# 108| r108_83(glval) = CopyValue : r108_82 +#-----| r0_39(glval) = Convert : r108_83 +# 108| r108_84(glval) = FunctionAddress[await_resume] : +# 108| v108_85(void) = Call[await_resume] : func:r108_84, this:r0_39 +# 108| mu108_86(unknown) = ^CallSideEffect : ~m? +#-----| v0_40(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m? +# 108| r108_87(glval) = VariableAddress[#return] : +# 108| v108_88(void) = ReturnValue : &:r108_87, ~m? #-----| Goto -> Block 1 +# 108| Block 12 +# 108| r108_89(suspend_always *) = CopyValue : r108_74 +# 108| r108_90(glval) = CopyValue : r108_89 +#-----| r0_41(glval) = Convert : r108_90 +# 108| r108_91(glval) = FunctionAddress[await_suspend] : +# 108| r108_92(glval>) = VariableAddress[#temp108:21] : +# 108| mu108_93(coroutine_handle) = Uninitialized[#temp108:21] : &:r108_92 +# 108| r108_94(glval) = FunctionAddress[coroutine_handle] : +# 108| r108_95(glval>) = VariableAddress : +# 108| r108_96(glval>) = Convert : r108_95 +# 108| r108_97(coroutine_handle &) = CopyValue : r108_96 +# 108| v108_98(void) = Call[coroutine_handle] : func:r108_94, this:r108_92, 0:r108_97 +# 108| mu108_99(unknown) = ^CallSideEffect : ~m? +# 108| v108_100(void) = ^BufferReadSideEffect[0] : &:r108_97, ~m? +# 108| mu108_101(coroutine_handle) = ^IndirectMayWriteSideEffect[-1] : &:r108_92 +# 108| r108_102(coroutine_handle) = Load[#temp108:21] : &:r108_92, ~m? +# 108| v108_103(void) = Call[await_suspend] : func:r108_91, this:r0_41, 0:r108_102 +# 108| mu108_104(unknown) = ^CallSideEffect : ~m? +#-----| v0_42(void) = ^IndirectReadSideEffect[-1] : &:r0_41, ~m? +#-----| Goto -> Block 11 + destructors_for_temps.cpp: # 9| void ClassWithConstructor::ClassWithConstructor(ClassWithConstructor&&) # 9| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected index b93c7d2649f8..8f472b49f273 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected @@ -28,4 +28,26 @@ nonUniqueEnclosingIRFunction fieldAddressOnNonPointer thisArgumentIsNonPointer nonUniqueIRVariable +| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | +| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | +| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | +| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | +| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | +| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | +| coroutines.cpp:96:3:96:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | +| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | +| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | +| coroutines.cpp:100:3:100:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | +| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | +| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | +| coroutines.cpp:104:3:104:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | +| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | +| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | +| coroutines.cpp:109:3:109:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected index b93c7d2649f8..8f472b49f273 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected @@ -28,4 +28,26 @@ nonUniqueEnclosingIRFunction fieldAddressOnNonPointer thisArgumentIsNonPointer nonUniqueIRVariable +| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | +| coroutines.cpp:87:20:87:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | +| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | +| coroutines.cpp:91:21:91:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | +| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | +| coroutines.cpp:95:20:95:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | +| coroutines.cpp:96:3:96:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | +| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | +| coroutines.cpp:99:21:99:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | +| coroutines.cpp:100:3:100:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | +| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | +| coroutines.cpp:103:20:103:20 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | +| coroutines.cpp:104:3:104:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | +| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | +| coroutines.cpp:108:21:108:21 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | +| coroutines.cpp:109:3:109:3 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:87:20:87:33 | co_returnable_void co_return_void() | co_returnable_void co_return_void() | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:91:21:91:33 | co_returnable_value co_return_int(int) | co_returnable_value co_return_int(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:95:20:95:38 | co_returnable_void co_yield_value_void(int) | co_returnable_void co_yield_value_void(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:99:21:99:40 | co_returnable_value co_yield_value_value(int) | co_returnable_value co_yield_value_value(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:103:20:103:43 | co_returnable_void co_yield_and_return_void(int) | co_returnable_void co_yield_and_return_void(int) | +| file://:0:0:0:0 | VariableAddress: (unnamed local variable) | Variable address instruction 'VariableAddress: (unnamed local variable)' has no associated variable, in function '$@'. | coroutines.cpp:108:21:108:45 | co_returnable_value co_yield_and_return_value(int) | co_returnable_value co_yield_and_return_value(int) | missingCppType